Revision 14ab1634
b/target-alpha/helper.h | ||
---|---|---|
17 | 17 |
DEF_HELPER_1(ctlz, i64, i64) |
18 | 18 |
DEF_HELPER_1(cttz, i64, i64) |
19 | 19 |
|
20 |
DEF_HELPER_2(mskbl, i64, i64, i64) |
|
21 |
DEF_HELPER_2(mskwl, i64, i64, i64) |
|
22 |
DEF_HELPER_2(mskll, i64, i64, i64) |
|
23 | 20 |
DEF_HELPER_2(zap, i64, i64, i64) |
24 | 21 |
DEF_HELPER_2(zapnot, i64, i64, i64) |
25 |
DEF_HELPER_2(mskql, i64, i64, i64) |
|
26 | 22 |
DEF_HELPER_2(mskwh, i64, i64, i64) |
27 | 23 |
DEF_HELPER_2(inswh, i64, i64, i64) |
28 | 24 |
DEF_HELPER_2(msklh, i64, i64, i64) |
b/target-alpha/op_helper.c | ||
---|---|---|
175 | 175 |
return op & ~mask; |
176 | 176 |
} |
177 | 177 |
|
178 |
uint64_t helper_mskbl(uint64_t val, uint64_t mask) |
|
179 |
{ |
|
180 |
return byte_zap(val, 0x01 << (mask & 7)); |
|
181 |
} |
|
182 |
|
|
183 |
uint64_t helper_mskwl(uint64_t val, uint64_t mask) |
|
184 |
{ |
|
185 |
return byte_zap(val, 0x03 << (mask & 7)); |
|
186 |
} |
|
187 |
|
|
188 |
uint64_t helper_mskll(uint64_t val, uint64_t mask) |
|
189 |
{ |
|
190 |
return byte_zap(val, 0x0F << (mask & 7)); |
|
191 |
} |
|
192 |
|
|
193 | 178 |
uint64_t helper_zap(uint64_t val, uint64_t mask) |
194 | 179 |
{ |
195 | 180 |
return byte_zap(val, mask); |
... | ... | |
200 | 185 |
return byte_zap(val, ~mask); |
201 | 186 |
} |
202 | 187 |
|
203 |
uint64_t helper_mskql(uint64_t val, uint64_t mask) |
|
204 |
{ |
|
205 |
return byte_zap(val, 0xFF << (mask & 7)); |
|
206 |
} |
|
207 |
|
|
208 | 188 |
uint64_t helper_mskwh(uint64_t val, uint64_t mask) |
209 | 189 |
{ |
210 | 190 |
return byte_zap(val, (0x03 << (mask & 7)) >> 8); |
b/target-alpha/translate.c | ||
---|---|---|
655 | 655 |
} |
656 | 656 |
} |
657 | 657 |
|
658 |
/* MSKBL, MSKWL, MSKLL, MSKQL */ |
|
659 |
static inline void gen_msk_l(int ra, int rb, int rc, int islit, |
|
660 |
uint8_t lit, uint8_t byte_mask) |
|
661 |
{ |
|
662 |
if (unlikely(rc == 31)) |
|
663 |
return; |
|
664 |
else if (unlikely(ra == 31)) |
|
665 |
tcg_gen_movi_i64(cpu_ir[rc], 0); |
|
666 |
else if (islit) { |
|
667 |
gen_zapnoti (cpu_ir[rc], cpu_ir[ra], ~(byte_mask << (lit & 7))); |
|
668 |
} else { |
|
669 |
TCGv shift = tcg_temp_new(); |
|
670 |
TCGv mask = tcg_temp_new(); |
|
671 |
|
|
672 |
tcg_gen_andi_i64(shift, cpu_ir[rb], 7); |
|
673 |
tcg_gen_shli_i64(shift, shift, 3); |
|
674 |
tcg_gen_movi_i64(mask, zapnot_mask (byte_mask)); |
|
675 |
tcg_gen_shl_i64(mask, mask, shift); |
|
676 |
|
|
677 |
tcg_gen_andc_i64(cpu_ir[rc], cpu_ir[ra], mask); |
|
678 |
|
|
679 |
tcg_temp_free(mask); |
|
680 |
tcg_temp_free(shift); |
|
681 |
} |
|
682 |
} |
|
683 |
|
|
658 | 684 |
/* Code to call arith3 helpers */ |
659 | 685 |
#define ARITH3(name) \ |
660 | 686 |
static inline void glue(gen_, name)(int ra, int rb, int rc, int islit,\ |
... | ... | |
686 | 712 |
ARITH3(sublv) |
687 | 713 |
ARITH3(addqv) |
688 | 714 |
ARITH3(subqv) |
689 |
ARITH3(mskbl) |
|
690 |
ARITH3(mskwl) |
|
691 |
ARITH3(mskll) |
|
692 |
ARITH3(mskql) |
|
693 | 715 |
ARITH3(mskwh) |
694 | 716 |
ARITH3(inswh) |
695 | 717 |
ARITH3(msklh) |
... | ... | |
1314 | 1336 |
switch (fn7) { |
1315 | 1337 |
case 0x02: |
1316 | 1338 |
/* MSKBL */ |
1317 |
gen_mskbl(ra, rb, rc, islit, lit);
|
|
1339 |
gen_msk_l(ra, rb, rc, islit, lit, 0x01);
|
|
1318 | 1340 |
break; |
1319 | 1341 |
case 0x06: |
1320 | 1342 |
/* EXTBL */ |
... | ... | |
1326 | 1348 |
break; |
1327 | 1349 |
case 0x12: |
1328 | 1350 |
/* MSKWL */ |
1329 |
gen_mskwl(ra, rb, rc, islit, lit);
|
|
1351 |
gen_msk_l(ra, rb, rc, islit, lit, 0x03);
|
|
1330 | 1352 |
break; |
1331 | 1353 |
case 0x16: |
1332 | 1354 |
/* EXTWL */ |
... | ... | |
1338 | 1360 |
break; |
1339 | 1361 |
case 0x22: |
1340 | 1362 |
/* MSKLL */ |
1341 |
gen_mskll(ra, rb, rc, islit, lit);
|
|
1363 |
gen_msk_l(ra, rb, rc, islit, lit, 0x0f);
|
|
1342 | 1364 |
break; |
1343 | 1365 |
case 0x26: |
1344 | 1366 |
/* EXTLL */ |
... | ... | |
1358 | 1380 |
break; |
1359 | 1381 |
case 0x32: |
1360 | 1382 |
/* MSKQL */ |
1361 |
gen_mskql(ra, rb, rc, islit, lit);
|
|
1383 |
gen_msk_l(ra, rb, rc, islit, lit, 0xff);
|
|
1362 | 1384 |
break; |
1363 | 1385 |
case 0x34: |
1364 | 1386 |
/* SRL */ |
Also available in: Unified diff