Revision 14ab1634 target-alpha/translate.c
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