target-tilegx: Implement v1multu instruction

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Message-Id: <1442874414-3578-1-git-send-email-gang.chen.5i5j@gmail.com>
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
Chen Gang 2015-09-22 06:26:54 +08:00 committed by Richard Henderson
parent c6876d7e1c
commit 38c949ffe7
3 changed files with 18 additions and 0 deletions

View File

@ -5,6 +5,7 @@ DEF_HELPER_FLAGS_1(pcnt, TCG_CALL_NO_RWG_SE, i64, i64)
DEF_HELPER_FLAGS_1(revbits, TCG_CALL_NO_RWG_SE, i64, i64) DEF_HELPER_FLAGS_1(revbits, TCG_CALL_NO_RWG_SE, i64, i64)
DEF_HELPER_FLAGS_3(shufflebytes, TCG_CALL_NO_RWG_SE, i64, i64, i64, i64) DEF_HELPER_FLAGS_3(shufflebytes, TCG_CALL_NO_RWG_SE, i64, i64, i64, i64)
DEF_HELPER_FLAGS_2(v1multu, TCG_CALL_NO_RWG_SE, i64, i64, i64)
DEF_HELPER_FLAGS_2(v1shl, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(v1shl, TCG_CALL_NO_RWG_SE, i64, i64, i64)
DEF_HELPER_FLAGS_2(v1shru, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(v1shru, TCG_CALL_NO_RWG_SE, i64, i64, i64)
DEF_HELPER_FLAGS_2(v1shrs, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(v1shrs, TCG_CALL_NO_RWG_SE, i64, i64, i64)

View File

@ -28,6 +28,19 @@
#define V2(X) (((X) & 0xffff) * 0x0001000100010001ull) #define V2(X) (((X) & 0xffff) * 0x0001000100010001ull)
uint64_t helper_v1multu(uint64_t a, uint64_t b)
{
uint64_t r = 0;
int i;
for (i = 0; i < 64; i += 8) {
unsigned ae = extract64(a, i, 8);
unsigned be = extract64(b, i, 8);
r = deposit64(r, i, 8, ae * be);
}
return r;
}
uint64_t helper_v1shl(uint64_t a, uint64_t b) uint64_t helper_v1shl(uint64_t a, uint64_t b)
{ {
uint64_t m; uint64_t m;

View File

@ -1155,7 +1155,11 @@ static TileExcp gen_rrr_opcode(DisasContext *dc, unsigned opext,
case OE_RRR(V1MINU, 0, X1): case OE_RRR(V1MINU, 0, X1):
case OE_RRR(V1MNZ, 0, X0): case OE_RRR(V1MNZ, 0, X0):
case OE_RRR(V1MNZ, 0, X1): case OE_RRR(V1MNZ, 0, X1):
return TILEGX_EXCP_OPCODE_UNIMPLEMENTED;
case OE_RRR(V1MULTU, 0, X0): case OE_RRR(V1MULTU, 0, X0):
gen_helper_v1multu(tdest, tsrca, tsrcb);
mnemonic = "v1multu";
break;
case OE_RRR(V1MULUS, 0, X0): case OE_RRR(V1MULUS, 0, X0):
case OE_RRR(V1MULU, 0, X0): case OE_RRR(V1MULU, 0, X0):
case OE_RRR(V1MZ, 0, X0): case OE_RRR(V1MZ, 0, X0):