From 9afca5db29ca9846baaed2ee3db949fa3304b0a0 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Tue, 26 Aug 2014 18:30:48 +0000 Subject: [PATCH] Add support for four IROps that Memcheck generates on arm64, that the front end doesn't generate. git-svn-id: svn://svn.valgrind.org/vex/trunk@2935 --- VEX/priv/host_arm64_isel.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c index 0da86c5077..764fd73044 100644 --- a/VEX/priv/host_arm64_isel.c +++ b/VEX/priv/host_arm64_isel.c @@ -2285,6 +2285,33 @@ static HReg iselV128Expr_wrk ( ISelEnv* env, IRExpr* e ) addInstr(env, ARM64Instr_VQfromX(res, arg)); return res; } + case Iop_Widen8Sto16x8: { + HReg res = newVRegV(env); + HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg); + addInstr(env, ARM64Instr_VQfromX(res, arg)); + addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP18x16, res, res, res)); + addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR16x8, + res, res, 8)); + return res; + } + case Iop_Widen16Sto32x4: { + HReg res = newVRegV(env); + HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg); + addInstr(env, ARM64Instr_VQfromX(res, arg)); + addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP116x8, res, res, res)); + addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR32x4, + res, res, 16)); + return res; + } + case Iop_Widen32Sto64x2: { + HReg res = newVRegV(env); + HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg); + addInstr(env, ARM64Instr_VQfromX(res, arg)); + addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP132x4, res, res, res)); + addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR64x2, + res, res, 32)); + return res; + } /* ... */ default: break; @@ -3168,7 +3195,11 @@ static void iselV256Expr_wrk ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo, if (e->tag == Iex_Binop) { switch (e->Iex.Binop.op) { - + case Iop_V128HLtoV256: { + *rHi = iselV128Expr(env, e->Iex.Binop.arg1); + *rLo = iselV128Expr(env, e->Iex.Binop.arg2); + return; + } case Iop_QandSQsh64x2: case Iop_QandSQsh32x4: case Iop_QandSQsh16x8: -- 2.47.2