• Home
  • Raw
  • Download

Lines Matching full:env

129 static HReg lookupIRTemp ( ISelEnv* env, IRTemp tmp )  in lookupIRTemp()  argument
132 vassert(tmp < env->n_vregmap); in lookupIRTemp()
133 return env->vregmap[tmp]; in lookupIRTemp()
136 static void lookupIRTemp64 ( HReg* vrHI, HReg* vrLO, ISelEnv* env, IRTemp tmp ) in lookupIRTemp64() argument
139 vassert(tmp < env->n_vregmap); in lookupIRTemp64()
140 vassert(! hregIsInvalid(env->vregmapHI[tmp])); in lookupIRTemp64()
141 *vrLO = env->vregmap[tmp]; in lookupIRTemp64()
142 *vrHI = env->vregmapHI[tmp]; in lookupIRTemp64()
145 static void addInstr ( ISelEnv* env, ARMInstr* instr ) in addInstr() argument
147 addHInstr(env->code, instr); in addInstr()
154 static HReg newVRegI ( ISelEnv* env ) in newVRegI() argument
156 HReg reg = mkHReg(True/*virtual reg*/, HRcInt32, 0/*enc*/, env->vreg_ctr); in newVRegI()
157 env->vreg_ctr++; in newVRegI()
161 static HReg newVRegD ( ISelEnv* env ) in newVRegD() argument
163 HReg reg = mkHReg(True/*virtual reg*/, HRcFlt64, 0/*enc*/, env->vreg_ctr); in newVRegD()
164 env->vreg_ctr++; in newVRegD()
168 static HReg newVRegF ( ISelEnv* env ) in newVRegF() argument
170 HReg reg = mkHReg(True/*virtual reg*/, HRcFlt32, 0/*enc*/, env->vreg_ctr); in newVRegF()
171 env->vreg_ctr++; in newVRegF()
175 static HReg newVRegV ( ISelEnv* env ) in newVRegV() argument
177 HReg reg = mkHReg(True/*virtual reg*/, HRcVec128, 0/*enc*/, env->vreg_ctr); in newVRegV()
178 env->vreg_ctr++; in newVRegV()
209 static ARMAMode1* iselIntExpr_AMode1_wrk ( ISelEnv* env, IRExpr* e );
210 static ARMAMode1* iselIntExpr_AMode1 ( ISelEnv* env, IRExpr* e );
212 static ARMAMode2* iselIntExpr_AMode2_wrk ( ISelEnv* env, IRExpr* e );
213 static ARMAMode2* iselIntExpr_AMode2 ( ISelEnv* env, IRExpr* e );
215 static ARMAModeV* iselIntExpr_AModeV_wrk ( ISelEnv* env, IRExpr* e );
216 static ARMAModeV* iselIntExpr_AModeV ( ISelEnv* env, IRExpr* e );
218 static ARMAModeN* iselIntExpr_AModeN_wrk ( ISelEnv* env, IRExpr* e );
219 static ARMAModeN* iselIntExpr_AModeN ( ISelEnv* env, IRExpr* e );
222 ( /*OUT*/Bool* didInv, Bool mayInv, ISelEnv* env, IRExpr* e );
224 ( /*OUT*/Bool* didInv, Bool mayInv, ISelEnv* env, IRExpr* e );
226 static ARMRI5* iselIntExpr_RI5_wrk ( ISelEnv* env, IRExpr* e );
227 static ARMRI5* iselIntExpr_RI5 ( ISelEnv* env, IRExpr* e );
229 static ARMCondCode iselCondCode_wrk ( ISelEnv* env, IRExpr* e );
230 static ARMCondCode iselCondCode ( ISelEnv* env, IRExpr* e );
232 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e );
233 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e );
236 ISelEnv* env, const IRExpr* e );
238 ISelEnv* env, const IRExpr* e );
240 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e );
241 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e );
243 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e );
244 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e );
246 static HReg iselNeon64Expr_wrk ( ISelEnv* env, const IRExpr* e );
247 static HReg iselNeon64Expr ( ISelEnv* env, const IRExpr* e );
249 static HReg iselNeonExpr_wrk ( ISelEnv* env, const IRExpr* e );
250 static HReg iselNeonExpr ( ISelEnv* env, const IRExpr* e );
290 static void set_VFP_rounding_default ( ISelEnv* env ) in set_VFP_rounding_default() argument
295 HReg rTmp = newVRegI(env); in set_VFP_rounding_default()
296 addInstr(env, ARMInstr_Imm32(rTmp, DEFAULT_FPSCR)); in set_VFP_rounding_default()
297 addInstr(env, ARMInstr_FPSCR(True/*toFPSCR*/, rTmp)); in set_VFP_rounding_default()
306 void set_VFP_rounding_mode ( ISelEnv* env, IRExpr* mode ) in set_VFP_rounding_mode() argument
322 HReg irrm = iselIntExpr_R(env, mode); in set_VFP_rounding_mode()
323 HReg tL = newVRegI(env); in set_VFP_rounding_mode()
324 HReg tR = newVRegI(env); in set_VFP_rounding_mode()
325 HReg t3 = newVRegI(env); in set_VFP_rounding_mode()
334 addInstr(env, ARMInstr_Shift(ARMsh_SHL, tL, irrm, ARMRI5_I5(1))); in set_VFP_rounding_mode()
335 addInstr(env, ARMInstr_Shift(ARMsh_SHR, tR, irrm, ARMRI5_I5(1))); in set_VFP_rounding_mode()
336 addInstr(env, ARMInstr_Alu(ARMalu_AND, tL, tL, ARMRI84_I84(2,0))); in set_VFP_rounding_mode()
337 addInstr(env, ARMInstr_Alu(ARMalu_AND, tR, tR, ARMRI84_I84(1,0))); in set_VFP_rounding_mode()
338 addInstr(env, ARMInstr_Alu(ARMalu_OR, t3, tL, ARMRI84_R(tR))); in set_VFP_rounding_mode()
339 addInstr(env, ARMInstr_Shift(ARMsh_SHL, t3, t3, ARMRI5_I5(22))); in set_VFP_rounding_mode()
340 addInstr(env, ARMInstr_FPSCR(True/*toFPSCR*/, t3)); in set_VFP_rounding_mode()
374 ISelEnv* env, in doHelperCallWithArgsOnStack() argument
392 IRType argTy = typeOfIRExpr(env->type_env, arg); in doHelperCallWithArgsOnStack()
446 argVRegs[i] = iselIntExpr_R(env, args[i+1]); in doHelperCallWithArgsOnStack()
461 cc = iselCondCode( env, guard ); in doHelperCallWithArgsOnStack()
470 addInstr(env, ARMInstr_Alu(ARMalu_SUB, r0, sp, ARMRI84_I84(128, 0))); in doHelperCallWithArgsOnStack()
472 addInstr(env, mk_iMOVds_RR(hregARM_R1(), argVRegs[0])); in doHelperCallWithArgsOnStack()
473 addInstr(env, mk_iMOVds_RR(hregARM_R2(), argVRegs[1])); in doHelperCallWithArgsOnStack()
474 addInstr(env, mk_iMOVds_RR(hregARM_R3(), argVRegs[2])); in doHelperCallWithArgsOnStack()
476 addInstr(env, ARMInstr_Alu(ARMalu_SUB, sp, sp, c256)); in doHelperCallWithArgsOnStack()
479 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*store*/, argVRegs[i], in doHelperCallWithArgsOnStack()
490 addInstr(env, ARMInstr_Call( cc, target, 4, *retloc )); in doHelperCallWithArgsOnStack()
510 ISelEnv* env, in doHelperCall() argument
606 env, guard, cee, retTy, args ); in doHelperCall()
669 aTy = typeOfIRExpr(env->type_env, arg); in doHelperCall()
675 addInstr(env, mk_iMOVds_RR( argregs[nextArgReg], in doHelperCall()
676 iselIntExpr_R(env, arg) )); in doHelperCall()
687 addInstr(env, ARMInstr_Imm32( argregs[nextArgReg], 0xAA )); in doHelperCall()
693 iselInt64Expr(&raHi, &raLo, env, arg); in doHelperCall()
694 addInstr(env, mk_iMOVds_RR( argregs[nextArgReg], raLo )); in doHelperCall()
696 addInstr(env, mk_iMOVds_RR( argregs[nextArgReg], raHi )); in doHelperCall()
701 addInstr(env, mk_iMOVds_RR( argregs[nextArgReg], in doHelperCall()
726 aTy = typeOfIRExpr(env->type_env, arg); in doHelperCall()
732 tmpregs[nextArgReg] = iselIntExpr_R(env, args[i]); in doHelperCall()
742 iselInt64Expr(&raHi, &raLo, env, args[i]); in doHelperCall()
772 cc = iselCondCode( env, guard ); in doHelperCall()
779 addInstr(env, ARMInstr_Imm32( argregs[i], 0xAA )); in doHelperCall()
784 addInstr( env, mk_iMOVds_RR( argregs[i], tmpregs[i] ) ); in doHelperCall()
847 addInstr(env, ARMInstr_Call( cc, target, nextArgReg, *retloc )); in doHelperCall()
901 static ARMAMode1* iselIntExpr_AMode1 ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AMode1() argument
903 ARMAMode1* am = iselIntExpr_AMode1_wrk(env, e); in iselIntExpr_AMode1()
908 static ARMAMode1* iselIntExpr_AMode1_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AMode1_wrk() argument
910 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_AMode1_wrk()
925 reg = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_AMode1_wrk()
933 HReg reg = iselIntExpr_R(env, e); in iselIntExpr_AMode1_wrk()
967 static ARMAMode2* iselIntExpr_AMode2 ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AMode2() argument
969 ARMAMode2* am = iselIntExpr_AMode2_wrk(env, e); in iselIntExpr_AMode2()
974 static ARMAMode2* iselIntExpr_AMode2_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AMode2_wrk() argument
976 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_AMode2_wrk()
991 reg = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_AMode2_wrk()
999 HReg reg = iselIntExpr_R(env, e); in iselIntExpr_AMode2_wrk()
1021 static ARMAModeV* iselIntExpr_AModeV ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AModeV() argument
1023 ARMAModeV* am = iselIntExpr_AModeV_wrk(env, e); in iselIntExpr_AModeV()
1028 static ARMAModeV* iselIntExpr_AModeV_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AModeV_wrk() argument
1030 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_AModeV_wrk()
1043 reg = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_AModeV_wrk()
1051 HReg reg = iselIntExpr_R(env, e); in iselIntExpr_AModeV_wrk()
1059 static ARMAModeN* iselIntExpr_AModeN ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AModeN() argument
1061 return iselIntExpr_AModeN_wrk(env, e); in iselIntExpr_AModeN()
1064 static ARMAModeN* iselIntExpr_AModeN_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_AModeN_wrk() argument
1066 HReg reg = iselIntExpr_R(env, e); in iselIntExpr_AModeN_wrk()
1081 ISelEnv* env, IRExpr* e ) in iselIntExpr_RI84() argument
1086 ri = iselIntExpr_RI84_wrk(didInv, mayInv, env, e); in iselIntExpr_RI84()
1102 ISelEnv* env, IRExpr* e ) in iselIntExpr_RI84_wrk() argument
1104 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_RI84_wrk()
1131 HReg r = iselIntExpr_R ( env, e ); in iselIntExpr_RI84_wrk()
1141 static ARMRI5* iselIntExpr_RI5 ( ISelEnv* env, IRExpr* e ) in iselIntExpr_RI5() argument
1143 ARMRI5* ri = iselIntExpr_RI5_wrk(env, e); in iselIntExpr_RI5()
1158 static ARMRI5* iselIntExpr_RI5_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_RI5_wrk() argument
1160 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_RI5_wrk()
1180 HReg r = iselIntExpr_R ( env, e ); in iselIntExpr_RI5_wrk()
1192 static ARMCondCode iselCondCode ( ISelEnv* env, IRExpr* e ) in iselCondCode() argument
1194 ARMCondCode cc = iselCondCode_wrk(env,e); in iselCondCode()
1199 static ARMCondCode iselCondCode_wrk ( ISelEnv* env, IRExpr* e ) in iselCondCode_wrk() argument
1202 vassert(typeOfIRExpr(env->type_env,e) == Ity_I1); in iselCondCode_wrk()
1206 HReg rTmp = lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselCondCode_wrk()
1209 addInstr(env, ARMInstr_CmpOrTst(False/*test*/, rTmp, one)); in iselCondCode_wrk()
1216 return 1 ^ iselCondCode(env, e->Iex.Unop.arg); in iselCondCode_wrk()
1223 HReg rTmp = iselIntExpr_R(env, e->Iex.Unop.arg); in iselCondCode_wrk()
1225 addInstr(env, ARMInstr_CmpOrTst(False/*test*/, rTmp, one)); in iselCondCode_wrk()
1233 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg); in iselCondCode_wrk()
1235 addInstr(env, ARMInstr_CmpOrTst(False/*!isCmp*/, r1, xFF)); in iselCondCode_wrk()
1243 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg); in iselCondCode_wrk()
1245 addInstr(env, ARMInstr_CmpOrTst(True/*isCmp*/, r1, zero)); in iselCondCode_wrk()
1254 HReg tmp = newVRegI(env); in iselCondCode_wrk()
1256 iselInt64Expr(&tHi, &tLo, env, e->Iex.Unop.arg); in iselCondCode_wrk()
1257 addInstr(env, ARMInstr_Alu(ARMalu_OR, tmp, tHi, ARMRI84_R(tLo))); in iselCondCode_wrk()
1258 addInstr(env, ARMInstr_CmpOrTst(True/*isCmp*/, tmp, zero)); in iselCondCode_wrk()
1270 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselCondCode_wrk()
1272 env, e->Iex.Binop.arg2); in iselCondCode_wrk()
1273 addInstr(env, ARMInstr_CmpOrTst(True/*isCmp*/, argL, argR)); in iselCondCode_wrk()
1292 r = newVRegI(env); in iselCondCode_wrk()
1293 addInstr(env, ARMInstr_Imm32(r, 0)); in iselCondCode_wrk()
1294 addInstr(env, ARMInstr_CmpOrTst(True/*isCmp*/, r, ARMRI84_R(r))); in iselCondCode_wrk()
1316 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e ) in iselIntExpr_R() argument
1318 HReg r = iselIntExpr_R_wrk(env, e); in iselIntExpr_R()
1329 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e ) in iselIntExpr_R_wrk() argument
1331 IRType ty = typeOfIRExpr(env->type_env,e); in iselIntExpr_R_wrk()
1338 return lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselIntExpr_R_wrk()
1343 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1349 ARMAMode1* amode = iselIntExpr_AMode1 ( env, e->Iex.Load.addr ); in iselIntExpr_R_wrk()
1350 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, True/*isLoad*/, dst, amode)); in iselIntExpr_R_wrk()
1354 ARMAMode2* amode = iselIntExpr_AMode2 ( env, e->Iex.Load.addr ); in iselIntExpr_R_wrk()
1355 addInstr(env, ARMInstr_LdSt16(ARMcc_AL, in iselIntExpr_R_wrk()
1361 ARMAMode1* amode = iselIntExpr_AMode1 ( env, e->Iex.Load.addr ); in iselIntExpr_R_wrk()
1362 addInstr(env, ARMInstr_LdSt8U(ARMcc_AL, True/*isLoad*/, dst, amode)); in iselIntExpr_R_wrk()
1375 //zz HReg junk = newVRegF(env); in iselIntExpr_R_wrk()
1376 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1377 //zz HReg srcL = iselDblExpr(env, triop->arg2); in iselIntExpr_R_wrk()
1378 //zz HReg srcR = iselDblExpr(env, triop->arg3); in iselIntExpr_R_wrk()
1381 //zz addInstr(env, X86Instr_FpBinary( in iselIntExpr_R_wrk()
1388 //zz addInstr(env, X86Instr_FpStSW_AX()); in iselIntExpr_R_wrk()
1389 //zz addInstr(env, mk_iMOVsd_RR(hregX86_EAX(), dst)); in iselIntExpr_R_wrk()
1390 //zz addInstr(env, X86Instr_Alu32R(Xalu_AND, X86RMI_Imm(0x4700), dst)); in iselIntExpr_R_wrk()
1407 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1408 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1410 env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1411 addInstr(env, ARMInstr_Alu(didInv ? ARMalu_BIC : ARMalu_AND, in iselIntExpr_R_wrk()
1420 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1421 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1423 env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1424 addInstr(env, ARMInstr_Alu(aop, dst, argL, argR)); in iselIntExpr_R_wrk()
1436 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1437 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1438 ARMRI5* argR = iselIntExpr_RI5(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1439 addInstr(env, ARMInstr_Shift(sop, dst, argL, argR)); in iselIntExpr_R_wrk()
1448 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1449 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1450 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1451 addInstr(env, mk_iMOVds_RR(hregARM_R2(), argL)); in iselIntExpr_R_wrk()
1452 addInstr(env, mk_iMOVds_RR(hregARM_R3(), argR)); in iselIntExpr_R_wrk()
1453 addInstr(env, ARMInstr_Mul(ARMmul_PLAIN)); in iselIntExpr_R_wrk()
1454 addInstr(env, mk_iMOVds_RR(dst, hregARM_R0())); in iselIntExpr_R_wrk()
1461 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1462 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1463 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1464 addInstr(env, ARMInstr_CmpOrTst(True/*isCmp*/, argL, in iselIntExpr_R_wrk()
1466 addInstr(env, mk_iMOVds_RR(dst, argL)); in iselIntExpr_R_wrk()
1467 addInstr(env, ARMInstr_CMov(ARMcc_LO, dst, ARMRI84_R(argR))); in iselIntExpr_R_wrk()
1472 HReg dL = iselDblExpr(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1473 HReg dR = iselDblExpr(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1474 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1477 addInstr(env, ARMInstr_VCmpD(dL, dR)); in iselIntExpr_R_wrk()
1479 addInstr(env, ARMInstr_Imm32(dst, 0)); in iselIntExpr_R_wrk()
1480 addInstr(env, ARMInstr_CMov(ARMcc_EQ, dst, ARMRI84_I84(0x40,0))); //EQ in iselIntExpr_R_wrk()
1481 addInstr(env, ARMInstr_CMov(ARMcc_MI, dst, ARMRI84_I84(0x01,0))); //LT in iselIntExpr_R_wrk()
1482 addInstr(env, ARMInstr_CMov(ARMcc_GT, dst, ARMRI84_I84(0x00,0))); //GT in iselIntExpr_R_wrk()
1483 addInstr(env, ARMInstr_CMov(ARMcc_VS, dst, ARMRI84_I84(0x45,0))); //UN in iselIntExpr_R_wrk()
1495 HReg valD = iselDblExpr(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1496 set_VFP_rounding_mode(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1498 HReg valF = newVRegF(env); in iselIntExpr_R_wrk()
1499 addInstr(env, ARMInstr_VCvtID(False/*!iToD*/, syned, in iselIntExpr_R_wrk()
1501 set_VFP_rounding_default(env); in iselIntExpr_R_wrk()
1503 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1504 addInstr(env, ARMInstr_VXferS(False/*!toS*/, valF, dst)); in iselIntExpr_R_wrk()
1511 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselIntExpr_R_wrk()
1512 HReg res = newVRegI(env); in iselIntExpr_R_wrk()
1513 HReg arg = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1516 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselIntExpr_R_wrk()
1527 addInstr(env, ARMInstr_NUnaryS(ARMneon_GETELEMS, in iselIntExpr_R_wrk()
1537 && !(env->hwcaps & VEX_HWCAPS_ARM_NEON)) { in iselIntExpr_R_wrk()
1545 iselInt64Expr(&rHi, &rLo, env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1553 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselIntExpr_R_wrk()
1554 HReg res = newVRegI(env); in iselIntExpr_R_wrk()
1555 HReg arg = iselNeonExpr(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1558 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselIntExpr_R_wrk()
1569 addInstr(env, ARMInstr_NUnaryS(ARMneon_GETELEMS, in iselIntExpr_R_wrk()
1635 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselIntExpr_R_wrk()
1636 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselIntExpr_R_wrk()
1637 HReg res = newVRegI(env); in iselIntExpr_R_wrk()
1638 addInstr(env, mk_iMOVds_RR(hregARM_R0(), regL)); in iselIntExpr_R_wrk()
1639 addInstr(env, mk_iMOVds_RR(hregARM_R1(), regR)); in iselIntExpr_R_wrk()
1640 addInstr(env, ARMInstr_Call( ARMcc_AL, (Addr)fn, in iselIntExpr_R_wrk()
1642 addInstr(env, mk_iMOVds_RR(res, hregARM_R0())); in iselIntExpr_R_wrk()
1659 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1660 //zz HReg src = iselIntExpr_R(env, expr32); in iselIntExpr_R_wrk()
1661 //zz addInstr(env, mk_iMOVsd_RR(src,dst) ); in iselIntExpr_R_wrk()
1662 //zz addInstr(env, X86Instr_Alu32R(Xalu_AND, in iselIntExpr_R_wrk()
1675 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1676 //zz X86AMode* amode = iselIntExpr_AMode ( env, mi.bindee[0] ); in iselIntExpr_R_wrk()
1677 //zz addInstr(env, X86Instr_LoadEX(1,False,amode,dst)); in iselIntExpr_R_wrk()
1689 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1690 //zz X86AMode* amode = iselIntExpr_AMode ( env, mi.bindee[0] ); in iselIntExpr_R_wrk()
1691 //zz addInstr(env, X86Instr_LoadEX(1,True,amode,dst)); in iselIntExpr_R_wrk()
1703 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1704 //zz X86AMode* amode = iselIntExpr_AMode ( env, mi.bindee[0] ); in iselIntExpr_R_wrk()
1705 //zz addInstr(env, X86Instr_LoadEX(2,False,amode,dst)); in iselIntExpr_R_wrk()
1716 //zz dst = newVRegI(env); in iselIntExpr_R_wrk()
1719 //zz addInstr(env, X86Instr_LoadEX(1,False,amode,dst)); in iselIntExpr_R_wrk()
1730 //zz dst = newVRegI(env); in iselIntExpr_R_wrk()
1733 //zz addInstr(env, X86Instr_LoadEX(2,False,amode,dst)); in iselIntExpr_R_wrk()
1740 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1741 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1742 addInstr(env, ARMInstr_Alu(ARMalu_AND, in iselIntExpr_R_wrk()
1749 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1750 //zz HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1752 //zz addInstr(env, mk_iMOVsd_RR(src,dst) ); in iselIntExpr_R_wrk()
1753 //zz addInstr(env, X86Instr_Alu32R(Xalu_AND, in iselIntExpr_R_wrk()
1760 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1761 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1763 addInstr(env, ARMInstr_Shift(ARMsh_SHL, dst, src, amt)); in iselIntExpr_R_wrk()
1764 addInstr(env, ARMInstr_Shift(ARMsh_SHR, dst, dst, amt)); in iselIntExpr_R_wrk()
1769 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1770 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1772 addInstr(env, ARMInstr_Shift(ARMsh_SHL, dst, src, amt)); in iselIntExpr_R_wrk()
1773 addInstr(env, ARMInstr_Shift(ARMsh_SAR, dst, dst, amt)); in iselIntExpr_R_wrk()
1779 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1780 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1781 addInstr(env, ARMInstr_Unary(ARMun_NOT, dst, src)); in iselIntExpr_R_wrk()
1786 iselInt64Expr(&rHi,&rLo, env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1791 iselInt64Expr(&rHi,&rLo, env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1796 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselIntExpr_R_wrk()
1797 HReg tHi = newVRegI(env); in iselIntExpr_R_wrk()
1798 HReg tLo = newVRegI(env); in iselIntExpr_R_wrk()
1799 HReg tmp = iselNeon64Expr(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1800 addInstr(env, ARMInstr_VXferD(False, tmp, tHi, tLo)); in iselIntExpr_R_wrk()
1804 iselInt64Expr(&rHi,&rLo, env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1815 HReg dst = lookupIRTemp(env, e->Iex.Unop.arg->Iex.RdTmp.tmp); in iselIntExpr_R_wrk()
1820 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1821 ARMCondCode cond = iselCondCode(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1822 addInstr(env, ARMInstr_Mov(dst, ARMRI84_I84(0,0))); in iselIntExpr_R_wrk()
1823 addInstr(env, ARMInstr_CMov(cond, dst, ARMRI84_I84(1,0))); in iselIntExpr_R_wrk()
1828 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1829 ARMCondCode cond = iselCondCode(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1834 addInstr(env, ARMInstr_Mov(dst, ARMRI84_I84(0,0))); in iselIntExpr_R_wrk()
1835 addInstr(env, ARMInstr_CMov(cond, dst, ARMRI84_I84(1,0))); in iselIntExpr_R_wrk()
1836 addInstr(env, ARMInstr_Shift(ARMsh_SHL, dst, dst, amt)); in iselIntExpr_R_wrk()
1837 addInstr(env, ARMInstr_Shift(ARMsh_SAR, dst, dst, amt)); in iselIntExpr_R_wrk()
1846 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1847 //zz X86CondCode cond = iselCondCode(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1848 //zz addInstr(env, X86Instr_Set32(cond,dst)); in iselIntExpr_R_wrk()
1849 //zz addInstr(env, X86Instr_Sh32(Xsh_SHL, 31, dst)); in iselIntExpr_R_wrk()
1850 //zz addInstr(env, X86Instr_Sh32(Xsh_SAR, 31, dst)); in iselIntExpr_R_wrk()
1855 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1856 //zz HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1857 //zz addInstr(env, X86Instr_Bsfr32(True,src,dst)); in iselIntExpr_R_wrk()
1862 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1863 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1864 addInstr(env, ARMInstr_Unary(ARMun_CLZ, dst, src)); in iselIntExpr_R_wrk()
1869 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1870 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1871 addInstr(env, ARMInstr_Unary(ARMun_NEG, dst, src)); in iselIntExpr_R_wrk()
1872 addInstr(env, ARMInstr_Alu(ARMalu_OR, dst, dst, ARMRI84_R(src))); in iselIntExpr_R_wrk()
1873 addInstr(env, ARMInstr_Shift(ARMsh_SAR, dst, dst, ARMRI5_I5(31))); in iselIntExpr_R_wrk()
1878 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1879 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1880 addInstr(env, ARMInstr_Unary(ARMun_NEG, dst, src)); in iselIntExpr_R_wrk()
1881 addInstr(env, ARMInstr_Alu(ARMalu_OR, dst, dst, ARMRI84_R(src))); in iselIntExpr_R_wrk()
1886 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1887 //zz HReg vec = iselVecExpr(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1889 //zz sub_from_esp(env, 16); in iselIntExpr_R_wrk()
1890 //zz addInstr(env, X86Instr_SseLdSt(False/*store*/, vec, esp0)); in iselIntExpr_R_wrk()
1891 //zz addInstr(env, X86Instr_Alu32R( Xalu_MOV, X86RMI_Mem(esp0), dst )); in iselIntExpr_R_wrk()
1892 //zz add_to_esp(env, 16); in iselIntExpr_R_wrk()
1897 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1898 HReg src = iselFltExpr(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1899 addInstr(env, ARMInstr_VXferS(False/*!toS*/, src, dst)); in iselIntExpr_R_wrk()
1908 return iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1926 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg); in iselIntExpr_R_wrk()
1927 HReg res = newVRegI(env); in iselIntExpr_R_wrk()
1928 addInstr(env, mk_iMOVds_RR(hregARM_R0(), arg)); in iselIntExpr_R_wrk()
1929 addInstr(env, ARMInstr_Call( ARMcc_AL, (Addr)fn, in iselIntExpr_R_wrk()
1931 addInstr(env, mk_iMOVds_RR(res, hregARM_R0())); in iselIntExpr_R_wrk()
1943 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1944 addInstr(env, ARMInstr_LdSt32( in iselIntExpr_R_wrk()
1951 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1952 //zz addInstr(env, X86Instr_LoadEX( in iselIntExpr_R_wrk()
1965 //zz env, e->Iex.GetI.descr, in iselIntExpr_R_wrk()
1967 //zz HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1969 //zz addInstr(env, X86Instr_LoadEX( 1, False, am, dst )); in iselIntExpr_R_wrk()
1973 //zz addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Mem(am), dst)); in iselIntExpr_R_wrk()
1981 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
1993 Bool ok = doHelperCall( &addToSp, &rloc, env, NULL/*guard*/, in iselIntExpr_R_wrk()
2001 addInstr(env, mk_iMOVds_RR(dst, hregARM_R0())); in iselIntExpr_R_wrk()
2011 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
2018 addInstr(env, ARMInstr_Imm32(dst, u)); in iselIntExpr_R_wrk()
2027 HReg r1 = iselIntExpr_R(env, e->Iex.ITE.iftrue); in iselIntExpr_R_wrk()
2028 ARMRI84* r0 = iselIntExpr_RI84(NULL, False, env, e->Iex.ITE.iffalse); in iselIntExpr_R_wrk()
2029 HReg dst = newVRegI(env); in iselIntExpr_R_wrk()
2030 addInstr(env, mk_iMOVds_RR(dst, r1)); in iselIntExpr_R_wrk()
2031 cc = iselCondCode(env, e->Iex.ITE.cond); in iselIntExpr_R_wrk()
2032 addInstr(env, ARMInstr_CMov(cc ^ 1, dst, r0)); in iselIntExpr_R_wrk()
2056 static void iselInt64Expr ( HReg* rHi, HReg* rLo, ISelEnv* env, in iselInt64Expr() argument
2059 iselInt64Expr_wrk(rHi, rLo, env, e); in iselInt64Expr()
2070 static void iselInt64Expr_wrk ( HReg* rHi, HReg* rLo, ISelEnv* env, in iselInt64Expr_wrk() argument
2074 vassert(typeOfIRExpr(env->type_env,e) == Ity_I64); in iselInt64Expr_wrk()
2081 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2082 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2084 addInstr(env, ARMInstr_Imm32(tHi, wHi)); in iselInt64Expr_wrk()
2085 addInstr(env, ARMInstr_Imm32(tLo, wLo)); in iselInt64Expr_wrk()
2093 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselInt64Expr_wrk()
2094 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2095 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2096 HReg tmp = iselNeon64Expr(env, e); in iselInt64Expr_wrk()
2097 addInstr(env, ARMInstr_VXferD(False, tmp, tHi, tLo)); in iselInt64Expr_wrk()
2101 lookupIRTemp64( rHi, rLo, env, e->Iex.RdTmp.tmp); in iselInt64Expr_wrk()
2110 rA = iselIntExpr_R(env, e->Iex.Load.addr); in iselInt64Expr_wrk()
2111 tHi = newVRegI(env); in iselInt64Expr_wrk()
2112 tLo = newVRegI(env); in iselInt64Expr_wrk()
2113 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, True/*isLoad*/, in iselInt64Expr_wrk()
2115 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, True/*isLoad*/, in iselInt64Expr_wrk()
2126 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2127 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2128 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, True/*isLoad*/, tHi, am4)); in iselInt64Expr_wrk()
2129 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, True/*isLoad*/, tLo, am0)); in iselInt64Expr_wrk()
2142 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselInt64Expr_wrk()
2143 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselInt64Expr_wrk()
2144 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2145 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2148 addInstr(env, mk_iMOVds_RR(hregARM_R2(), argL)); in iselInt64Expr_wrk()
2149 addInstr(env, mk_iMOVds_RR(hregARM_R3(), argR)); in iselInt64Expr_wrk()
2150 addInstr(env, ARMInstr_Mul(mop)); in iselInt64Expr_wrk()
2151 addInstr(env, mk_iMOVds_RR(tHi, hregARM_R1())); in iselInt64Expr_wrk()
2152 addInstr(env, mk_iMOVds_RR(tLo, hregARM_R0())); in iselInt64Expr_wrk()
2160 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2161 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2162 iselInt64Expr(&xHi, &xLo, env, e->Iex.Binop.arg1); in iselInt64Expr_wrk()
2163 iselInt64Expr(&yHi, &yLo, env, e->Iex.Binop.arg2); in iselInt64Expr_wrk()
2164 addInstr(env, ARMInstr_Alu(ARMalu_OR, tHi, xHi, ARMRI84_R(yHi))); in iselInt64Expr_wrk()
2165 addInstr(env, ARMInstr_Alu(ARMalu_OR, tLo, xLo, ARMRI84_R(yLo))); in iselInt64Expr_wrk()
2173 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2174 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2175 iselInt64Expr(&xHi, &xLo, env, e->Iex.Binop.arg1); in iselInt64Expr_wrk()
2176 iselInt64Expr(&yHi, &yLo, env, e->Iex.Binop.arg2); in iselInt64Expr_wrk()
2177 addInstr(env, ARMInstr_Alu(ARMalu_ADDS, tLo, xLo, ARMRI84_R(yLo))); in iselInt64Expr_wrk()
2178 addInstr(env, ARMInstr_Alu(ARMalu_ADC, tHi, xHi, ARMRI84_R(yHi))); in iselInt64Expr_wrk()
2186 *rHi = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselInt64Expr_wrk()
2187 *rLo = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselInt64Expr_wrk()
2202 HReg dstHi = newVRegI(env); in iselInt64Expr_wrk()
2203 HReg dstLo = newVRegI(env); in iselInt64Expr_wrk()
2204 HReg src = iselDblExpr(env, e->Iex.Unop.arg); in iselInt64Expr_wrk()
2205 addInstr(env, ARMInstr_VXferD(False/*!toD*/, src, dstHi, dstLo)); in iselInt64Expr_wrk()
2214 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2215 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2216 HReg zero = newVRegI(env); in iselInt64Expr_wrk()
2218 iselInt64Expr(&yHi, &yLo, env, e->Iex.Unop.arg); in iselInt64Expr_wrk()
2220 addInstr(env, ARMInstr_Imm32(zero, 0)); in iselInt64Expr_wrk()
2222 addInstr(env, ARMInstr_Alu(ARMalu_SUBS, in iselInt64Expr_wrk()
2225 addInstr(env, ARMInstr_Alu(ARMalu_SBC, in iselInt64Expr_wrk()
2230 addInstr(env, ARMInstr_Alu(ARMalu_OR, tHi, tHi, ARMRI84_R(yHi))); in iselInt64Expr_wrk()
2231 addInstr(env, ARMInstr_Alu(ARMalu_OR, tLo, tLo, ARMRI84_R(yLo))); in iselInt64Expr_wrk()
2240 HReg tmp1 = newVRegI(env); in iselInt64Expr_wrk()
2241 HReg tmp2 = newVRegI(env); in iselInt64Expr_wrk()
2243 iselInt64Expr(&srcHi, &srcLo, env, e->Iex.Unop.arg); in iselInt64Expr_wrk()
2245 addInstr(env, ARMInstr_Alu(ARMalu_OR, in iselInt64Expr_wrk()
2248 addInstr(env, ARMInstr_Unary(ARMun_NEG, tmp2, tmp1)); in iselInt64Expr_wrk()
2249 addInstr(env, ARMInstr_Alu(ARMalu_OR, in iselInt64Expr_wrk()
2251 addInstr(env, ARMInstr_Shift(ARMsh_SAR, in iselInt64Expr_wrk()
2259 HReg dst = newVRegI(env); in iselInt64Expr_wrk()
2260 ARMCondCode cond = iselCondCode(env, e->Iex.Unop.arg); in iselInt64Expr_wrk()
2265 addInstr(env, ARMInstr_Mov(dst, ARMRI84_I84(0,0))); in iselInt64Expr_wrk()
2266 addInstr(env, ARMInstr_CMov(cond, dst, ARMRI84_I84(1,0))); in iselInt64Expr_wrk()
2267 addInstr(env, ARMInstr_Shift(ARMsh_SHL, dst, dst, amt)); in iselInt64Expr_wrk()
2268 addInstr(env, ARMInstr_Shift(ARMsh_SAR, dst, dst, amt)); in iselInt64Expr_wrk()
2284 tyC = typeOfIRExpr(env->type_env,e->Iex.ITE.cond); in iselInt64Expr_wrk()
2286 iselInt64Expr(&r1hi, &r1lo, env, e->Iex.ITE.iftrue); in iselInt64Expr_wrk()
2287 iselInt64Expr(&r0hi, &r0lo, env, e->Iex.ITE.iffalse); in iselInt64Expr_wrk()
2288 dstHi = newVRegI(env); in iselInt64Expr_wrk()
2289 dstLo = newVRegI(env); in iselInt64Expr_wrk()
2290 addInstr(env, mk_iMOVds_RR(dstHi, r1hi)); in iselInt64Expr_wrk()
2291 addInstr(env, mk_iMOVds_RR(dstLo, r1lo)); in iselInt64Expr_wrk()
2292 cc = iselCondCode(env, e->Iex.ITE.cond); in iselInt64Expr_wrk()
2293 addInstr(env, ARMInstr_CMov(cc ^ 1, dstHi, ARMRI84_R(r0hi))); in iselInt64Expr_wrk()
2294 addInstr(env, ARMInstr_CMov(cc ^ 1, dstLo, ARMRI84_R(r0lo))); in iselInt64Expr_wrk()
2303 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselInt64Expr_wrk()
2304 HReg tHi = newVRegI(env); in iselInt64Expr_wrk()
2305 HReg tLo = newVRegI(env); in iselInt64Expr_wrk()
2306 HReg tmp = iselNeon64Expr(env, e); in iselInt64Expr_wrk()
2307 addInstr(env, ARMInstr_VXferD(False, tmp, tHi, tLo)); in iselInt64Expr_wrk()
2322 static HReg iselNeon64Expr ( ISelEnv* env, const IRExpr* e ) in iselNeon64Expr() argument
2325 vassert(env->hwcaps & VEX_HWCAPS_ARM_NEON); in iselNeon64Expr()
2326 r = iselNeon64Expr_wrk( env, e ); in iselNeon64Expr()
2333 static HReg iselNeon64Expr_wrk ( ISelEnv* env, const IRExpr* e ) in iselNeon64Expr_wrk() argument
2335 IRType ty = typeOfIRExpr(env->type_env, e); in iselNeon64Expr_wrk()
2341 return lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselNeon64Expr_wrk()
2346 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2347 iselInt64Expr(&rHi, &rLo, env, e); in iselNeon64Expr_wrk()
2348 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
2354 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2355 ARMAModeN* am = iselIntExpr_AModeN(env, e->Iex.Load.addr); in iselNeon64Expr_wrk()
2357 addInstr(env, ARMInstr_NLdStD(True, res, am)); in iselNeon64Expr_wrk()
2363 HReg addr = newVRegI(env); in iselNeon64Expr_wrk()
2364 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2366 addInstr(env, ARMInstr_Add32(addr, hregARM_R8(), e->Iex.Get.offset)); in iselNeon64Expr_wrk()
2367 addInstr(env, ARMInstr_NLdStD(True, res, mkARMAModeN_R(addr))); in iselNeon64Expr_wrk()
2379 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2380 iselInt64Expr(&rHi, &rLo, env, e); in iselNeon64Expr_wrk()
2381 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
2386 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2387 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2388 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2389 addInstr(env, ARMInstr_NBinary(ARMneon_VAND, in iselNeon64Expr_wrk()
2394 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2395 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2396 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2397 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeon64Expr_wrk()
2402 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2403 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2404 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2405 addInstr(env, ARMInstr_NBinary(ARMneon_VXOR, in iselNeon64Expr_wrk()
2412 HReg rHi = iselIntExpr_R(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2413 HReg rLo = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2414 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2415 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
2423 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2424 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2425 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2434 addInstr(env, ARMInstr_NBinary(ARMneon_VADD, in iselNeon64Expr_wrk()
2439 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2440 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2441 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2443 addInstr(env, ARMInstr_NBinary(ARMneon_VADDFP, in iselNeon64Expr_wrk()
2448 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2449 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2450 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2452 addInstr(env, ARMInstr_NBinary(ARMneon_VRECPS, in iselNeon64Expr_wrk()
2457 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2458 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2459 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2461 addInstr(env, ARMInstr_NBinary(ARMneon_VRSQRTS, in iselNeon64Expr_wrk()
2473 HReg rD = newVRegD(env); in iselNeon64Expr_wrk()
2474 HReg rM = newVRegD(env); in iselNeon64Expr_wrk()
2475 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2476 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2488 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, False)); in iselNeon64Expr_wrk()
2489 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, False)); in iselNeon64Expr_wrk()
2490 addInstr(env, ARMInstr_NDual(ARMneon_TRN, rD, rM, size, False)); in iselNeon64Expr_wrk()
2499 HReg rD = newVRegD(env); in iselNeon64Expr_wrk()
2500 HReg rM = newVRegD(env); in iselNeon64Expr_wrk()
2501 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2502 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2512 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, False)); in iselNeon64Expr_wrk()
2513 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, False)); in iselNeon64Expr_wrk()
2514 addInstr(env, ARMInstr_NDual(ARMneon_ZIP, rD, rM, size, False)); in iselNeon64Expr_wrk()
2523 HReg rD = newVRegD(env); in iselNeon64Expr_wrk()
2524 HReg rM = newVRegD(env); in iselNeon64Expr_wrk()
2525 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2526 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2536 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, False)); in iselNeon64Expr_wrk()
2537 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, False)); in iselNeon64Expr_wrk()
2538 addInstr(env, ARMInstr_NDual(ARMneon_UZP, rD, rM, size, False)); in iselNeon64Expr_wrk()
2546 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2547 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2548 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2557 addInstr(env, ARMInstr_NBinary(ARMneon_VQADDU, in iselNeon64Expr_wrk()
2565 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2566 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2567 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2576 addInstr(env, ARMInstr_NBinary(ARMneon_VQADDS, in iselNeon64Expr_wrk()
2584 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2585 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2586 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2595 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeon64Expr_wrk()
2600 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2601 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2602 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2604 addInstr(env, ARMInstr_NBinary(ARMneon_VSUBFP, in iselNeon64Expr_wrk()
2612 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2613 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2614 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2623 addInstr(env, ARMInstr_NBinary(ARMneon_VQSUBU, in iselNeon64Expr_wrk()
2631 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2632 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2633 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2642 addInstr(env, ARMInstr_NBinary(ARMneon_VQSUBS, in iselNeon64Expr_wrk()
2649 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2650 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2651 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2659 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXU, in iselNeon64Expr_wrk()
2666 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2667 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2668 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2676 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXS, in iselNeon64Expr_wrk()
2683 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2684 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2685 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2693 addInstr(env, ARMInstr_NBinary(ARMneon_VMINU, in iselNeon64Expr_wrk()
2700 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2701 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2702 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2710 addInstr(env, ARMInstr_NBinary(ARMneon_VMINS, in iselNeon64Expr_wrk()
2717 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2718 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2719 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2720 HReg argR2 = newVRegD(env); in iselNeon64Expr_wrk()
2721 HReg zero = newVRegD(env); in iselNeon64Expr_wrk()
2730 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0,0))); in iselNeon64Expr_wrk()
2731 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeon64Expr_wrk()
2733 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeon64Expr_wrk()
2741 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2742 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2743 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2752 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeon64Expr_wrk()
2759 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2760 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2761 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2762 HReg argR2 = newVRegD(env); in iselNeon64Expr_wrk()
2763 HReg zero = newVRegD(env); in iselNeon64Expr_wrk()
2771 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0,0))); in iselNeon64Expr_wrk()
2772 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeon64Expr_wrk()
2774 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
2781 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2782 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2783 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2791 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
2799 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2800 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2801 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2810 addInstr(env, ARMInstr_NShift(ARMneon_VQSHL, in iselNeon64Expr_wrk()
2818 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2819 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2820 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2829 addInstr(env, ARMInstr_NShift(ARMneon_VQSAL, in iselNeon64Expr_wrk()
2837 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2838 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2841 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeon64Expr_wrk()
2853 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNUU, in iselNeon64Expr_wrk()
2861 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2862 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2865 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeon64Expr_wrk()
2877 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNUS, in iselNeon64Expr_wrk()
2885 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2886 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2889 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeon64Expr_wrk()
2901 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNSS, in iselNeon64Expr_wrk()
2909 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2910 HReg tmp = newVRegD(env); in iselNeon64Expr_wrk()
2911 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2912 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2913 HReg argR2 = newVRegI(env); in iselNeon64Expr_wrk()
2922 addInstr(env, ARMInstr_Unary(ARMun_NEG, argR2, argR)); in iselNeon64Expr_wrk()
2923 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, tmp, argR2, 0, False)); in iselNeon64Expr_wrk()
2924 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
2932 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2933 HReg tmp = newVRegD(env); in iselNeon64Expr_wrk()
2934 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2942 addInstr(env, ARMInstr_NShl64(res, argL, nshift)); in iselNeon64Expr_wrk()
2947 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2956 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, in iselNeon64Expr_wrk()
2958 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
2966 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2967 HReg tmp = newVRegD(env); in iselNeon64Expr_wrk()
2968 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2969 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2970 HReg argR2 = newVRegI(env); in iselNeon64Expr_wrk()
2979 addInstr(env, ARMInstr_Unary(ARMun_NEG, argR2, argR)); in iselNeon64Expr_wrk()
2980 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, tmp, argR2, 0, False)); in iselNeon64Expr_wrk()
2981 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeon64Expr_wrk()
2988 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
2989 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
2990 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
2998 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTU, in iselNeon64Expr_wrk()
3005 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3006 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3007 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3015 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTS, in iselNeon64Expr_wrk()
3022 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3023 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3024 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3032 addInstr(env, ARMInstr_NBinary(ARMneon_VCEQ, in iselNeon64Expr_wrk()
3039 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3040 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3041 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3049 addInstr(env, ARMInstr_NBinary(ARMneon_VMUL, in iselNeon64Expr_wrk()
3054 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3055 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3056 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3058 addInstr(env, ARMInstr_NBinary(ARMneon_VMULFP, in iselNeon64Expr_wrk()
3064 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3065 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3066 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3073 addInstr(env, ARMInstr_NBinary(ARMneon_VQDMULH, in iselNeon64Expr_wrk()
3080 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3081 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3082 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3089 addInstr(env, ARMInstr_NBinary(ARMneon_VQRDMULH, in iselNeon64Expr_wrk()
3097 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3098 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3099 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3107 addInstr(env, ARMInstr_NBinary(ARMneon_VPADD, in iselNeon64Expr_wrk()
3112 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3113 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3114 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3116 addInstr(env, ARMInstr_NBinary(ARMneon_VPADDFP, in iselNeon64Expr_wrk()
3123 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3124 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3125 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3133 addInstr(env, ARMInstr_NBinary(ARMneon_VPMINU, in iselNeon64Expr_wrk()
3140 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3141 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3142 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3150 addInstr(env, ARMInstr_NBinary(ARMneon_VPMINS, in iselNeon64Expr_wrk()
3157 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3158 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3159 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3167 addInstr(env, ARMInstr_NBinary(ARMneon_VPMAXU, in iselNeon64Expr_wrk()
3174 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3175 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3176 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3184 addInstr(env, ARMInstr_NBinary(ARMneon_VPMAXS, in iselNeon64Expr_wrk()
3189 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3190 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3191 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3192 addInstr(env, ARMInstr_NBinary(ARMneon_VTBL, in iselNeon64Expr_wrk()
3197 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3198 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3199 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3201 addInstr(env, ARMInstr_NBinary(ARMneon_VMULP, in iselNeon64Expr_wrk()
3206 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3207 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3208 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3209 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXF, in iselNeon64Expr_wrk()
3214 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3215 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3216 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3217 addInstr(env, ARMInstr_NBinary(ARMneon_VMINF, in iselNeon64Expr_wrk()
3222 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3223 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3224 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3225 addInstr(env, ARMInstr_NBinary(ARMneon_VPMAXF, in iselNeon64Expr_wrk()
3230 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3231 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3232 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3233 addInstr(env, ARMInstr_NBinary(ARMneon_VPMINF, in iselNeon64Expr_wrk()
3238 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3239 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3240 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3241 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTF, in iselNeon64Expr_wrk()
3246 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3247 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3248 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3249 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEF, in iselNeon64Expr_wrk()
3254 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3255 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3256 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeon64Expr_wrk()
3257 addInstr(env, ARMInstr_NBinary(ARMneon_VCEQF, in iselNeon64Expr_wrk()
3265 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3266 HReg arg = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3270 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeon64Expr_wrk()
3284 addInstr(env, ARMInstr_NUnary(op, res, arg, imm6, False)); in iselNeon64Expr_wrk()
3292 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3293 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3298 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeon64Expr_wrk()
3313 addInstr(env, ARMInstr_NUnary(ARMneon_VDUP, in iselNeon64Expr_wrk()
3329 HReg rLo = iselIntExpr_R(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3330 HReg rHi = newVRegI(env); in iselNeon64Expr_wrk()
3331 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3332 addInstr(env, ARMInstr_Imm32(rHi, 0)); in iselNeon64Expr_wrk()
3333 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
3339 HReg rLo = iselIntExpr_R(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3340 HReg rHi = newVRegI(env); in iselNeon64Expr_wrk()
3341 addInstr(env, mk_iMOVds_RR(rHi, rLo)); in iselNeon64Expr_wrk()
3342 addInstr(env, ARMInstr_Shift(ARMsh_SAR, rHi, rHi, ARMRI5_I5(31))); in iselNeon64Expr_wrk()
3343 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3344 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
3356 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3357 iselInt64Expr(&rHi, &rLo, env, e); in iselNeon64Expr_wrk()
3358 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
3391 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3392 HReg arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3393 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 0, False)); in iselNeon64Expr_wrk()
3396 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3397 HReg arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3398 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 1, False)); in iselNeon64Expr_wrk()
3401 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3402 HReg arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3403 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 2, False)); in iselNeon64Expr_wrk()
3406 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3407 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3408 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3409 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeon64Expr_wrk()
3413 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3414 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3415 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3416 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeon64Expr_wrk()
3420 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3421 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3422 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3423 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeon64Expr_wrk()
3427 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3428 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3429 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3430 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeon64Expr_wrk()
3434 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3435 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3436 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3437 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeon64Expr_wrk()
3441 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3442 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3443 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3444 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeon64Expr_wrk()
3448 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3449 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3450 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, res, arg, 4, False)); in iselNeon64Expr_wrk()
3472 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeon64Expr_wrk()
3476 res = newVRegD(env); in iselNeon64Expr_wrk()
3477 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3478 addInstr(env, ARMInstr_NUnaryS( in iselNeon64Expr_wrk()
3491 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeon64Expr_wrk()
3495 res = newVRegD(env); in iselNeon64Expr_wrk()
3496 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3497 addInstr(env, ARMInstr_NUnaryS( in iselNeon64Expr_wrk()
3510 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeon64Expr_wrk()
3514 res = newVRegD(env); in iselNeon64Expr_wrk()
3515 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3516 addInstr(env, ARMInstr_NUnaryS( in iselNeon64Expr_wrk()
3526 arg = iselIntExpr_R(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3527 res = newVRegD(env); in iselNeon64Expr_wrk()
3534 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, res, arg, size, False)); in iselNeon64Expr_wrk()
3540 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3541 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3549 addInstr(env, ARMInstr_NUnary(ARMneon_ABS, res, arg, size, False)); in iselNeon64Expr_wrk()
3555 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3556 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3564 addInstr(env, ARMInstr_NUnary(ARMneon_REV64, in iselNeon64Expr_wrk()
3570 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3571 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3578 addInstr(env, ARMInstr_NUnary(ARMneon_REV32, in iselNeon64Expr_wrk()
3583 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3584 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3586 addInstr(env, ARMInstr_NUnary(ARMneon_REV16, in iselNeon64Expr_wrk()
3591 HReg x_lsh = newVRegD(env); in iselNeon64Expr_wrk()
3592 HReg x_rsh = newVRegD(env); in iselNeon64Expr_wrk()
3593 HReg lsh_amt = newVRegD(env); in iselNeon64Expr_wrk()
3594 HReg rsh_amt = newVRegD(env); in iselNeon64Expr_wrk()
3595 HReg zero = newVRegD(env); in iselNeon64Expr_wrk()
3596 HReg tmp = newVRegD(env); in iselNeon64Expr_wrk()
3597 HReg tmp2 = newVRegD(env); in iselNeon64Expr_wrk()
3598 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3599 HReg x = newVRegD(env); in iselNeon64Expr_wrk()
3600 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3601 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, tmp2, arg, 2, False)); in iselNeon64Expr_wrk()
3602 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, x, tmp2, 4, False)); in iselNeon64Expr_wrk()
3603 addInstr(env, ARMInstr_NeonImm(lsh_amt, ARMNImm_TI(0, 32))); in iselNeon64Expr_wrk()
3604 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0, 0))); in iselNeon64Expr_wrk()
3605 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeon64Expr_wrk()
3607 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
3609 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeon64Expr_wrk()
3611 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeon64Expr_wrk()
3613 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeon64Expr_wrk()
3620 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3621 HReg tmp = newVRegD(env); in iselNeon64Expr_wrk()
3622 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3630 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, tmp, arg, size, False)); in iselNeon64Expr_wrk()
3631 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, res, tmp, 4, False)); in iselNeon64Expr_wrk()
3637 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3638 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3646 addInstr(env, ARMInstr_NUnary(ARMneon_COPYN, in iselNeon64Expr_wrk()
3653 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3654 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3662 addInstr(env, ARMInstr_NUnary(ARMneon_COPYQNSS, in iselNeon64Expr_wrk()
3669 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3670 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3678 addInstr(env, ARMInstr_NUnary(ARMneon_COPYQNUS, in iselNeon64Expr_wrk()
3685 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3686 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3694 addInstr(env, ARMInstr_NUnary(ARMneon_COPYQNUU, in iselNeon64Expr_wrk()
3701 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3702 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3710 addInstr(env, ARMInstr_NUnary(ARMneon_PADDLS, in iselNeon64Expr_wrk()
3717 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3718 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3726 addInstr(env, ARMInstr_NUnary(ARMneon_PADDLU, in iselNeon64Expr_wrk()
3731 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3732 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3734 addInstr(env, ARMInstr_NUnary(ARMneon_CNT, in iselNeon64Expr_wrk()
3741 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3742 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3750 addInstr(env, ARMInstr_NUnary(ARMneon_CLZ, in iselNeon64Expr_wrk()
3757 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3758 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3766 addInstr(env, ARMInstr_NUnary(ARMneon_CLS, in iselNeon64Expr_wrk()
3771 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3772 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3773 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTFtoS, in iselNeon64Expr_wrk()
3778 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3779 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3780 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTFtoU, in iselNeon64Expr_wrk()
3785 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3786 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3787 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTStoF, in iselNeon64Expr_wrk()
3792 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3793 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3794 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTUtoF, in iselNeon64Expr_wrk()
3799 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3800 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3801 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTF32toF16, in iselNeon64Expr_wrk()
3806 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3807 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3808 addInstr(env, ARMInstr_NUnary(ARMneon_VRECIPF, in iselNeon64Expr_wrk()
3813 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3814 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeon64Expr_wrk()
3815 addInstr(env, ARMInstr_NUnary(ARMneon_VRECIP, in iselNeon64Expr_wrk()
3827 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3828 HReg argL = iselNeon64Expr(env, mi.bindee[0]); in iselNeon64Expr_wrk()
3829 HReg argR = iselNeon64Expr(env, mi.bindee[1]); in iselNeon64Expr_wrk()
3830 addInstr(env, ARMInstr_NBinary(ARMneon_VABDFP, in iselNeon64Expr_wrk()
3834 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3835 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3836 addInstr(env, ARMInstr_NUnary(ARMneon_VABSFP, in iselNeon64Expr_wrk()
3842 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3843 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3844 addInstr(env, ARMInstr_NUnary(ARMneon_VRSQRTEFP, in iselNeon64Expr_wrk()
3849 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3850 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3851 addInstr(env, ARMInstr_NUnary(ARMneon_VRSQRTE, in iselNeon64Expr_wrk()
3856 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3857 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3858 addInstr(env, ARMInstr_NUnary(ARMneon_VNEGF, in iselNeon64Expr_wrk()
3864 HReg src = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeon64Expr_wrk()
3865 HReg resLo = newVRegD(env); in iselNeon64Expr_wrk()
3866 HReg resHi = newVRegD(env); in iselNeon64Expr_wrk()
3867 addInstr(env, ARMInstr_VXferQ(False/*!toQ*/, src, resHi, resLo)); in iselNeon64Expr_wrk()
3880 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3881 HReg argL = iselNeon64Expr(env, triop->arg2); in iselNeon64Expr_wrk()
3882 HReg argR = iselNeon64Expr(env, triop->arg1); in iselNeon64Expr_wrk()
3885 typeOfIRExpr(env->type_env, triop->arg3) != Ity_I8) { in iselNeon64Expr_wrk()
3894 addInstr(env, ARMInstr_NBinary(ARMneon_VEXT, in iselNeon64Expr_wrk()
3901 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3902 HReg dreg = iselNeon64Expr(env, triop->arg1); in iselNeon64Expr_wrk()
3903 HReg arg = iselIntExpr_R(env, triop->arg3); in iselNeon64Expr_wrk()
3906 typeOfIRExpr(env->type_env, triop->arg2) != Ity_I8) { in iselNeon64Expr_wrk()
3917 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, res, dreg, 4, False)); in iselNeon64Expr_wrk()
3918 addInstr(env, ARMInstr_NUnaryS(ARMneon_SETELEM, in iselNeon64Expr_wrk()
3932 HReg res = newVRegD(env); in iselNeon64Expr_wrk()
3933 iselInt64Expr(&rHi, &rLo, env, e); in iselNeon64Expr_wrk()
3934 addInstr(env, ARMInstr_VXferD(True/*toD*/, res, rHi, rLo)); in iselNeon64Expr_wrk()
3943 static HReg iselNeonExpr ( ISelEnv* env, const IRExpr* e ) in iselNeonExpr() argument
3946 vassert(env->hwcaps & VEX_HWCAPS_ARM_NEON); in iselNeonExpr()
3947 r = iselNeonExpr_wrk( env, e ); in iselNeonExpr()
3954 static HReg iselNeonExpr_wrk ( ISelEnv* env, const IRExpr* e ) in iselNeonExpr_wrk() argument
3956 IRType ty = typeOfIRExpr(env->type_env, e); in iselNeonExpr_wrk()
3962 return lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselNeonExpr_wrk()
3971 HReg res = newVRegV(env); in iselNeonExpr_wrk()
3972 addInstr(env, ARMInstr_NeonImm(res, ARMNImm_TI(6, 0))); in iselNeonExpr_wrk()
3976 HReg res = newVRegV(env); in iselNeonExpr_wrk()
3977 addInstr(env, ARMInstr_NeonImm(res, ARMNImm_TI(6, 255))); in iselNeonExpr_wrk()
3985 HReg res = newVRegV(env); in iselNeonExpr_wrk()
3986 ARMAModeN* am = iselIntExpr_AModeN(env, e->Iex.Load.addr); in iselNeonExpr_wrk()
3988 addInstr(env, ARMInstr_NLdStQ(True, res, am)); in iselNeonExpr_wrk()
3993 HReg addr = newVRegI(env); in iselNeonExpr_wrk()
3994 HReg res = newVRegV(env); in iselNeonExpr_wrk()
3996 addInstr(env, ARMInstr_Add32(addr, hregARM_R8(), e->Iex.Get.offset)); in iselNeonExpr_wrk()
3997 addInstr(env, ARMInstr_NLdStQ(True, res, mkARMAModeN_R(addr))); in iselNeonExpr_wrk()
4032 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4033 HReg arg = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4034 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 0, True)); in iselNeonExpr_wrk()
4037 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4038 HReg arg = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4039 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 1, True)); in iselNeonExpr_wrk()
4042 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4043 HReg arg = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4044 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, res, arg, 2, True)); in iselNeonExpr_wrk()
4047 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4048 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4049 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4050 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeonExpr_wrk()
4054 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4055 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4056 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4057 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeonExpr_wrk()
4061 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4062 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4063 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4064 addInstr(env, ARMInstr_NBinary(ARMneon_VCGES, in iselNeonExpr_wrk()
4068 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4069 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4070 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4071 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeonExpr_wrk()
4075 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4076 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4077 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4078 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeonExpr_wrk()
4082 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4083 HReg argL = iselNeonExpr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4084 HReg argR = iselNeonExpr(env, mi.bindee[1]); in iselNeonExpr_wrk()
4085 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEU, in iselNeonExpr_wrk()
4089 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4090 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4091 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, res, arg, 4, True)); in iselNeonExpr_wrk()
4113 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeonExpr_wrk()
4117 res = newVRegV(env); in iselNeonExpr_wrk()
4118 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4119 addInstr(env, ARMInstr_NUnaryS( in iselNeonExpr_wrk()
4132 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeonExpr_wrk()
4136 res = newVRegV(env); in iselNeonExpr_wrk()
4137 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4138 addInstr(env, ARMInstr_NUnaryS( in iselNeonExpr_wrk()
4151 typeOfIRExpr(env->type_env, mi.bindee[1]) == Ity_I8) { in iselNeonExpr_wrk()
4155 res = newVRegV(env); in iselNeonExpr_wrk()
4156 arg = iselNeon64Expr(env, mi.bindee[0]); in iselNeonExpr_wrk()
4157 addInstr(env, ARMInstr_NUnaryS( in iselNeonExpr_wrk()
4167 arg = iselIntExpr_R(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4168 res = newVRegV(env); in iselNeonExpr_wrk()
4175 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, res, arg, size, True)); in iselNeonExpr_wrk()
4181 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4182 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4190 addInstr(env, ARMInstr_NUnary(ARMneon_ABS, res, arg, size, True)); in iselNeonExpr_wrk()
4196 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4197 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4205 addInstr(env, ARMInstr_NUnary(ARMneon_REV64, in iselNeonExpr_wrk()
4211 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4212 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4219 addInstr(env, ARMInstr_NUnary(ARMneon_REV32, in iselNeonExpr_wrk()
4224 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4225 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4227 addInstr(env, ARMInstr_NUnary(ARMneon_REV16, in iselNeonExpr_wrk()
4232 HReg x_lsh = newVRegV(env); in iselNeonExpr_wrk()
4233 HReg x_rsh = newVRegV(env); in iselNeonExpr_wrk()
4234 HReg lsh_amt = newVRegV(env); in iselNeonExpr_wrk()
4235 HReg rsh_amt = newVRegV(env); in iselNeonExpr_wrk()
4236 HReg zero = newVRegV(env); in iselNeonExpr_wrk()
4237 HReg tmp = newVRegV(env); in iselNeonExpr_wrk()
4238 HReg tmp2 = newVRegV(env); in iselNeonExpr_wrk()
4239 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4240 HReg x = newVRegV(env); in iselNeonExpr_wrk()
4241 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4242 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, tmp2, arg, 2, True)); in iselNeonExpr_wrk()
4243 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, x, tmp2, 4, True)); in iselNeonExpr_wrk()
4244 addInstr(env, ARMInstr_NeonImm(lsh_amt, ARMNImm_TI(0, 32))); in iselNeonExpr_wrk()
4245 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0, 0))); in iselNeonExpr_wrk()
4246 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeonExpr_wrk()
4248 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
4250 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
4252 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeonExpr_wrk()
4254 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeonExpr_wrk()
4261 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4262 HReg tmp = newVRegV(env); in iselNeonExpr_wrk()
4263 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4271 addInstr(env, ARMInstr_NUnary(ARMneon_EQZ, tmp, arg, size, True)); in iselNeonExpr_wrk()
4272 addInstr(env, ARMInstr_NUnary(ARMneon_NOT, res, tmp, 4, True)); in iselNeonExpr_wrk()
4278 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4279 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4287 addInstr(env, ARMInstr_NUnary(ARMneon_COPYLU, in iselNeonExpr_wrk()
4294 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4295 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4303 addInstr(env, ARMInstr_NUnary(ARMneon_COPYLS, in iselNeonExpr_wrk()
4310 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4311 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4319 addInstr(env, ARMInstr_NUnary(ARMneon_PADDLS, in iselNeonExpr_wrk()
4326 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4327 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4335 addInstr(env, ARMInstr_NUnary(ARMneon_PADDLU, in iselNeonExpr_wrk()
4340 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4341 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4343 addInstr(env, ARMInstr_NUnary(ARMneon_CNT, res, arg, size, True)); in iselNeonExpr_wrk()
4349 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4350 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4358 addInstr(env, ARMInstr_NUnary(ARMneon_CLZ, res, arg, size, True)); in iselNeonExpr_wrk()
4364 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4365 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4373 addInstr(env, ARMInstr_NUnary(ARMneon_CLS, res, arg, size, True)); in iselNeonExpr_wrk()
4377 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4378 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4379 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTFtoS, in iselNeonExpr_wrk()
4384 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4385 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4386 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTFtoU, in iselNeonExpr_wrk()
4391 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4392 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4393 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTStoF, in iselNeonExpr_wrk()
4398 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4399 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4400 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTUtoF, in iselNeonExpr_wrk()
4405 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4406 HReg arg = iselNeon64Expr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4407 addInstr(env, ARMInstr_NUnary(ARMneon_VCVTF16toF32, in iselNeonExpr_wrk()
4412 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4413 HReg argL = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4414 addInstr(env, ARMInstr_NUnary(ARMneon_VRECIPF, in iselNeonExpr_wrk()
4419 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4420 HReg argL = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4421 addInstr(env, ARMInstr_NUnary(ARMneon_VRECIP, in iselNeonExpr_wrk()
4426 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4427 HReg argL = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4428 addInstr(env, ARMInstr_NUnary(ARMneon_VABSFP, in iselNeonExpr_wrk()
4433 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4434 HReg argL = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4435 addInstr(env, ARMInstr_NUnary(ARMneon_VRSQRTEFP, in iselNeonExpr_wrk()
4440 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4441 HReg argL = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4442 addInstr(env, ARMInstr_NUnary(ARMneon_VRSQRTE, in iselNeonExpr_wrk()
4447 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4448 HReg arg = iselNeonExpr(env, e->Iex.Unop.arg); in iselNeonExpr_wrk()
4449 addInstr(env, ARMInstr_NUnary(ARMneon_VNEGF, in iselNeonExpr_wrk()
4465 typeOfIRExpr(env->type_env, e->Iex.Binop.arg1) == Ity_I64 && in iselNeonExpr_wrk()
4466 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) == Ity_I64 && in iselNeonExpr_wrk()
4472 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4473 addInstr(env, ARMInstr_NeonImm(res, imm)); in iselNeonExpr_wrk()
4478 HReg tmp1 = newVRegV(env); in iselNeonExpr_wrk()
4479 HReg tmp2 = newVRegV(env); in iselNeonExpr_wrk()
4480 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4482 addInstr(env, ARMInstr_NeonImm(tmp1, ARMNImm_TI(9,0x0f))); in iselNeonExpr_wrk()
4483 addInstr(env, ARMInstr_NeonImm(tmp2, imm)); in iselNeonExpr_wrk()
4484 addInstr(env, ARMInstr_NBinary(ARMneon_VAND, in iselNeonExpr_wrk()
4491 HReg tmp1 = newVRegV(env); in iselNeonExpr_wrk()
4492 HReg tmp2 = newVRegV(env); in iselNeonExpr_wrk()
4493 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4495 addInstr(env, ARMInstr_NeonImm(tmp1, ARMNImm_TI(9,0xf0))); in iselNeonExpr_wrk()
4496 addInstr(env, ARMInstr_NeonImm(tmp2, imm)); in iselNeonExpr_wrk()
4497 addInstr(env, ARMInstr_NBinary(ARMneon_VAND, in iselNeonExpr_wrk()
4505 HReg dHi = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4506 HReg dLo = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4507 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4508 addInstr(env, ARMInstr_VXferQ(True/*toQ*/, res, dHi, dLo)); in iselNeonExpr_wrk()
4512 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4513 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4514 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4515 addInstr(env, ARMInstr_NBinary(ARMneon_VAND, in iselNeonExpr_wrk()
4520 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4521 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4522 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4523 addInstr(env, ARMInstr_NBinary(ARMneon_VORR, in iselNeonExpr_wrk()
4528 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4529 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4530 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4531 addInstr(env, ARMInstr_NBinary(ARMneon_VXOR, in iselNeonExpr_wrk()
4564 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4565 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4566 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4577 addInstr(env, ARMInstr_NBinary(ARMneon_VADD, in iselNeonExpr_wrk()
4582 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4583 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4584 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4586 addInstr(env, ARMInstr_NBinary(ARMneon_VRECPS, in iselNeonExpr_wrk()
4591 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4592 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4593 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4595 addInstr(env, ARMInstr_NBinary(ARMneon_VRSQRTS, in iselNeonExpr_wrk()
4607 HReg rD = newVRegV(env); in iselNeonExpr_wrk()
4608 HReg rM = newVRegV(env); in iselNeonExpr_wrk()
4609 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4610 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4622 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, True)); in iselNeonExpr_wrk()
4623 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, True)); in iselNeonExpr_wrk()
4624 addInstr(env, ARMInstr_NDual(ARMneon_TRN, rD, rM, size, True)); in iselNeonExpr_wrk()
4635 HReg rD = newVRegV(env); in iselNeonExpr_wrk()
4636 HReg rM = newVRegV(env); in iselNeonExpr_wrk()
4637 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4638 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4650 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, True)); in iselNeonExpr_wrk()
4651 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, True)); in iselNeonExpr_wrk()
4652 addInstr(env, ARMInstr_NDual(ARMneon_ZIP, rD, rM, size, True)); in iselNeonExpr_wrk()
4663 HReg rD = newVRegV(env); in iselNeonExpr_wrk()
4664 HReg rM = newVRegV(env); in iselNeonExpr_wrk()
4665 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4666 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4678 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rM, argL, 4, True)); in iselNeonExpr_wrk()
4679 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, rD, argR, 4, True)); in iselNeonExpr_wrk()
4680 addInstr(env, ARMInstr_NDual(ARMneon_UZP, rD, rM, size, True)); in iselNeonExpr_wrk()
4688 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4689 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4690 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4701 addInstr(env, ARMInstr_NBinary(ARMneon_VQADDU, in iselNeonExpr_wrk()
4709 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4710 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4711 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4722 addInstr(env, ARMInstr_NBinary(ARMneon_VQADDS, in iselNeonExpr_wrk()
4730 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4731 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4732 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4743 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeonExpr_wrk()
4751 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4752 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4753 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4764 addInstr(env, ARMInstr_NBinary(ARMneon_VQSUBU, in iselNeonExpr_wrk()
4772 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4773 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4774 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4785 addInstr(env, ARMInstr_NBinary(ARMneon_VQSUBS, in iselNeonExpr_wrk()
4792 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4793 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4794 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4802 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXU, in iselNeonExpr_wrk()
4809 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4810 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4811 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4819 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXS, in iselNeonExpr_wrk()
4826 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4827 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4828 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4836 addInstr(env, ARMInstr_NBinary(ARMneon_VMINU, in iselNeonExpr_wrk()
4843 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4844 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4845 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4853 addInstr(env, ARMInstr_NBinary(ARMneon_VMINS, in iselNeonExpr_wrk()
4861 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4862 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4863 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4864 HReg argR2 = newVRegV(env); in iselNeonExpr_wrk()
4865 HReg zero = newVRegV(env); in iselNeonExpr_wrk()
4874 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0,0))); in iselNeonExpr_wrk()
4875 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeonExpr_wrk()
4877 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeonExpr_wrk()
4885 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4886 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4887 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4896 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeonExpr_wrk()
4904 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4905 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4906 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4907 HReg argR2 = newVRegV(env); in iselNeonExpr_wrk()
4908 HReg zero = newVRegV(env); in iselNeonExpr_wrk()
4917 addInstr(env, ARMInstr_NeonImm(zero, ARMNImm_TI(0,0))); in iselNeonExpr_wrk()
4918 addInstr(env, ARMInstr_NBinary(ARMneon_VSUB, in iselNeonExpr_wrk()
4920 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
4928 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4929 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4930 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4939 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
4947 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4948 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4949 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4958 addInstr(env, ARMInstr_NShift(ARMneon_VQSHL, in iselNeonExpr_wrk()
4966 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4967 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4968 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
4977 addInstr(env, ARMInstr_NShift(ARMneon_VQSAL, in iselNeonExpr_wrk()
4985 HReg res = newVRegV(env); in iselNeonExpr_wrk()
4986 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
4989 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeonExpr_wrk()
5001 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNUU, in iselNeonExpr_wrk()
5009 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5010 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5013 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeonExpr_wrk()
5025 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNUS, in iselNeonExpr_wrk()
5033 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5034 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5037 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeonExpr_wrk()
5049 addInstr(env, ARMInstr_NUnary(ARMneon_VQSHLNSS, in iselNeonExpr_wrk()
5057 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5058 HReg tmp = newVRegV(env); in iselNeonExpr_wrk()
5059 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5060 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5061 HReg argR2 = newVRegI(env); in iselNeonExpr_wrk()
5070 addInstr(env, ARMInstr_Unary(ARMun_NEG, argR2, argR)); in iselNeonExpr_wrk()
5071 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, in iselNeonExpr_wrk()
5073 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
5081 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5082 HReg tmp = newVRegV(env); in iselNeonExpr_wrk()
5083 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5084 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5093 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, tmp, argR, 0, True)); in iselNeonExpr_wrk()
5094 addInstr(env, ARMInstr_NShift(ARMneon_VSHL, in iselNeonExpr_wrk()
5102 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5103 HReg tmp = newVRegV(env); in iselNeonExpr_wrk()
5104 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5105 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5106 HReg argR2 = newVRegI(env); in iselNeonExpr_wrk()
5115 addInstr(env, ARMInstr_Unary(ARMun_NEG, argR2, argR)); in iselNeonExpr_wrk()
5116 addInstr(env, ARMInstr_NUnary(ARMneon_DUP, tmp, argR2, 0, True)); in iselNeonExpr_wrk()
5117 addInstr(env, ARMInstr_NShift(ARMneon_VSAL, in iselNeonExpr_wrk()
5124 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5125 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5126 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5134 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTU, in iselNeonExpr_wrk()
5141 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5142 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5143 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5151 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTS, in iselNeonExpr_wrk()
5158 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5159 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5160 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5168 addInstr(env, ARMInstr_NBinary(ARMneon_VCEQ, in iselNeonExpr_wrk()
5175 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5176 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5177 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5185 addInstr(env, ARMInstr_NBinary(ARMneon_VMUL, in iselNeonExpr_wrk()
5192 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5193 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5194 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5202 addInstr(env, ARMInstr_NBinary(ARMneon_VMULLU, in iselNeonExpr_wrk()
5210 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5211 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5212 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5220 addInstr(env, ARMInstr_NBinary(ARMneon_VMULLS, in iselNeonExpr_wrk()
5227 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5228 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5229 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5236 addInstr(env, ARMInstr_NBinary(ARMneon_VQDMULH, in iselNeonExpr_wrk()
5243 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5244 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5245 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5252 addInstr(env, ARMInstr_NBinary(ARMneon_VQRDMULH, in iselNeonExpr_wrk()
5259 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5260 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5261 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5268 addInstr(env, ARMInstr_NBinary(ARMneon_VQDMULL, in iselNeonExpr_wrk()
5273 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5274 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5275 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5277 addInstr(env, ARMInstr_NBinary(ARMneon_VMULP, in iselNeonExpr_wrk()
5282 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5283 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5284 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5285 addInstr(env, ARMInstr_NBinary(ARMneon_VMAXF, in iselNeonExpr_wrk()
5290 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5291 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5292 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5293 addInstr(env, ARMInstr_NBinary(ARMneon_VMINF, in iselNeonExpr_wrk()
5298 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5299 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5300 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5301 addInstr(env, ARMInstr_NBinary(ARMneon_VPMAXF, in iselNeonExpr_wrk()
5306 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5307 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5308 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5309 addInstr(env, ARMInstr_NBinary(ARMneon_VPMINF, in iselNeonExpr_wrk()
5314 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5315 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5316 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5317 addInstr(env, ARMInstr_NBinary(ARMneon_VCGTF, in iselNeonExpr_wrk()
5322 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5323 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5324 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5325 addInstr(env, ARMInstr_NBinary(ARMneon_VCGEF, in iselNeonExpr_wrk()
5330 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5331 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5332 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5333 addInstr(env, ARMInstr_NBinary(ARMneon_VCEQF, in iselNeonExpr_wrk()
5339 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5340 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5341 HReg argR = iselNeon64Expr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5343 addInstr(env, ARMInstr_NBinary(ARMneon_VMULLP, in iselNeonExpr_wrk()
5351 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5352 HReg arg = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5356 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeonExpr_wrk()
5370 addInstr(env, ARMInstr_NUnary(op, res, arg, imm6, True)); in iselNeonExpr_wrk()
5378 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5379 HReg argL = iselNeon64Expr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5383 typeOfIRExpr(env->type_env, e->Iex.Binop.arg2) != Ity_I8) { in iselNeonExpr_wrk()
5398 addInstr(env, ARMInstr_NUnary(ARMneon_VDUP, in iselNeonExpr_wrk()
5406 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5407 HReg argL = iselNeonExpr(env, e->Iex.Binop.arg1); in iselNeonExpr_wrk()
5408 HReg argR = iselNeonExpr(env, e->Iex.Binop.arg2); in iselNeonExpr_wrk()
5416 addInstr(env, ARMInstr_NBinary(ARMneon_VPADD, in iselNeonExpr_wrk()
5431 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5432 HReg argL = iselNeonExpr(env, triop->arg2); in iselNeonExpr_wrk()
5433 HReg argR = iselNeonExpr(env, triop->arg1); in iselNeonExpr_wrk()
5436 typeOfIRExpr(env->type_env, triop->arg3) != Ity_I8) { in iselNeonExpr_wrk()
5445 addInstr(env, ARMInstr_NBinary(ARMneon_VEXT, in iselNeonExpr_wrk()
5452 HReg res = newVRegV(env); in iselNeonExpr_wrk()
5453 HReg argL = iselNeonExpr(env, triop->arg2); in iselNeonExpr_wrk()
5454 HReg argR = iselNeonExpr(env, triop->arg3); in iselNeonExpr_wrk()
5463 addInstr(env, ARMInstr_NBinary(op, res, argL, argR, size, True)); in iselNeonExpr_wrk()
5473 HReg r1 = iselNeonExpr(env, e->Iex.ITE.iftrue); in iselNeonExpr_wrk()
5474 HReg r0 = iselNeonExpr(env, e->Iex.ITE.iffalse); in iselNeonExpr_wrk()
5475 HReg dst = newVRegV(env); in iselNeonExpr_wrk()
5476 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, dst, r1, 4, True)); in iselNeonExpr_wrk()
5477 cc = iselCondCode(env, e->Iex.ITE.cond); in iselNeonExpr_wrk()
5478 addInstr(env, ARMInstr_NCMovQ(cc ^ 1, dst, r0)); in iselNeonExpr_wrk()
5496 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e ) in iselDblExpr() argument
5498 HReg r = iselDblExpr_wrk( env, e ); in iselDblExpr()
5508 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e ) in iselDblExpr_wrk() argument
5510 IRType ty = typeOfIRExpr(env->type_env,e); in iselDblExpr_wrk()
5515 return lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselDblExpr_wrk()
5522 HReg z32 = newVRegI(env); in iselDblExpr_wrk()
5523 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5524 addInstr(env, ARMInstr_Imm32(z32, 0)); in iselDblExpr_wrk()
5525 addInstr(env, ARMInstr_VXferD(True/*toD*/, dst, z32, z32)); in iselDblExpr_wrk()
5532 HReg res = newVRegD(env); in iselDblExpr_wrk()
5534 am = iselIntExpr_AModeV(env, e->Iex.Load.addr); in iselDblExpr_wrk()
5535 addInstr(env, ARMInstr_VLdStD(True/*isLoad*/, res, am)); in iselDblExpr_wrk()
5543 HReg res = newVRegD(env); in iselDblExpr_wrk()
5544 addInstr(env, ARMInstr_VLdStD(True/*isLoad*/, res, am)); in iselDblExpr_wrk()
5551 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselDblExpr_wrk()
5552 return iselNeon64Expr(env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5555 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5556 iselInt64Expr(&srcHi, &srcLo, env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5557 addInstr(env, ARMInstr_VXferD(True/*toD*/, dst, srcHi, srcLo)); in iselDblExpr_wrk()
5562 HReg src = iselDblExpr(env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5563 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5564 addInstr(env, ARMInstr_VUnaryD(ARMvfpu_NEG, dst, src)); in iselDblExpr_wrk()
5568 HReg src = iselDblExpr(env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5569 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5570 addInstr(env, ARMInstr_VUnaryD(ARMvfpu_ABS, dst, src)); in iselDblExpr_wrk()
5574 HReg src = iselFltExpr(env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5575 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5576 addInstr(env, ARMInstr_VCvtSD(True/*sToD*/, dst, src)); in iselDblExpr_wrk()
5581 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselDblExpr_wrk()
5582 HReg f32 = newVRegF(env); in iselDblExpr_wrk()
5583 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5586 addInstr(env, ARMInstr_VXferS(True/*toS*/, f32, src)); in iselDblExpr_wrk()
5588 addInstr(env, ARMInstr_VCvtID(True/*iToD*/, syned, in iselDblExpr_wrk()
5601 HReg src = iselDblExpr(env, e->Iex.Binop.arg2); in iselDblExpr_wrk()
5602 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5603 addInstr(env, ARMInstr_VUnaryD(ARMvfpu_SQRT, dst, src)); in iselDblExpr_wrk()
5610 if (VEX_ARM_ARCHLEVEL(env->hwcaps) >= 8) { in iselDblExpr_wrk()
5611 HReg src = iselDblExpr(env, e->Iex.Binop.arg2); in iselDblExpr_wrk()
5612 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5613 set_VFP_rounding_mode(env, e->Iex.Binop.arg1); in iselDblExpr_wrk()
5614 addInstr(env, ARMInstr_VRIntR(True/*isF64*/, dst, src)); in iselDblExpr_wrk()
5615 set_VFP_rounding_default(env); in iselDblExpr_wrk()
5624 if (VEX_ARM_ARCHLEVEL(env->hwcaps) >= 8) { in iselDblExpr_wrk()
5625 HReg srcL = iselDblExpr(env, e->Iex.Binop.arg1); in iselDblExpr_wrk()
5626 HReg srcR = iselDblExpr(env, e->Iex.Binop.arg2); in iselDblExpr_wrk()
5627 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5629 addInstr(env, ARMInstr_VMinMaxNum( in iselDblExpr_wrk()
5650 HReg argL = iselDblExpr(env, triop->arg2); in iselDblExpr_wrk()
5651 HReg argR = iselDblExpr(env, triop->arg3); in iselDblExpr_wrk()
5652 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5660 addInstr(env, ARMInstr_VAluD(op, dst, argL, argR)); in iselDblExpr_wrk()
5670 && typeOfIRExpr(env->type_env,e->Iex.ITE.cond) == Ity_I1) { in iselDblExpr_wrk()
5671 HReg r1 = iselDblExpr(env, e->Iex.ITE.iftrue); in iselDblExpr_wrk()
5672 HReg r0 = iselDblExpr(env, e->Iex.ITE.iffalse); in iselDblExpr_wrk()
5673 HReg dst = newVRegD(env); in iselDblExpr_wrk()
5674 addInstr(env, ARMInstr_VUnaryD(ARMvfpu_COPY, dst, r1)); in iselDblExpr_wrk()
5675 ARMCondCode cc = iselCondCode(env, e->Iex.ITE.cond); in iselDblExpr_wrk()
5676 addInstr(env, ARMInstr_VCMovD(cc ^ 1, dst, r0)); in iselDblExpr_wrk()
5695 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e ) in iselFltExpr() argument
5697 HReg r = iselFltExpr_wrk( env, e ); in iselFltExpr()
5707 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e ) in iselFltExpr_wrk() argument
5709 IRType ty = typeOfIRExpr(env->type_env,e); in iselFltExpr_wrk()
5714 return lookupIRTemp(env, e->Iex.RdTmp.tmp); in iselFltExpr_wrk()
5719 HReg res = newVRegF(env); in iselFltExpr_wrk()
5721 am = iselIntExpr_AModeV(env, e->Iex.Load.addr); in iselFltExpr_wrk()
5722 addInstr(env, ARMInstr_VLdStS(True/*isLoad*/, res, am)); in iselFltExpr_wrk()
5730 HReg res = newVRegF(env); in iselFltExpr_wrk()
5731 addInstr(env, ARMInstr_VLdStS(True/*isLoad*/, res, am)); in iselFltExpr_wrk()
5738 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5739 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg); in iselFltExpr_wrk()
5740 addInstr(env, ARMInstr_VXferS(True/*toS*/, dst, src)); in iselFltExpr_wrk()
5744 HReg src = iselFltExpr(env, e->Iex.Unop.arg); in iselFltExpr_wrk()
5745 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5746 addInstr(env, ARMInstr_VUnaryS(ARMvfpu_NEG, dst, src)); in iselFltExpr_wrk()
5750 HReg src = iselFltExpr(env, e->Iex.Unop.arg); in iselFltExpr_wrk()
5751 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5752 addInstr(env, ARMInstr_VUnaryS(ARMvfpu_ABS, dst, src)); in iselFltExpr_wrk()
5764 HReg src = iselFltExpr(env, e->Iex.Binop.arg2); in iselFltExpr_wrk()
5765 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5766 addInstr(env, ARMInstr_VUnaryS(ARMvfpu_SQRT, dst, src)); in iselFltExpr_wrk()
5770 HReg valD = iselDblExpr(env, e->Iex.Binop.arg2); in iselFltExpr_wrk()
5771 set_VFP_rounding_mode(env, e->Iex.Binop.arg1); in iselFltExpr_wrk()
5772 HReg valS = newVRegF(env); in iselFltExpr_wrk()
5774 addInstr(env, ARMInstr_VCvtSD(False/*!sToD*/, valS, valD)); in iselFltExpr_wrk()
5775 set_VFP_rounding_default(env); in iselFltExpr_wrk()
5782 if (VEX_ARM_ARCHLEVEL(env->hwcaps) >= 8) { in iselFltExpr_wrk()
5783 HReg src = iselFltExpr(env, e->Iex.Binop.arg2); in iselFltExpr_wrk()
5784 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5785 set_VFP_rounding_mode(env, e->Iex.Binop.arg1); in iselFltExpr_wrk()
5786 addInstr(env, ARMInstr_VRIntR(False/*!isF64*/, dst, src)); in iselFltExpr_wrk()
5787 set_VFP_rounding_default(env); in iselFltExpr_wrk()
5796 if (VEX_ARM_ARCHLEVEL(env->hwcaps) >= 8) { in iselFltExpr_wrk()
5797 HReg srcL = iselFltExpr(env, e->Iex.Binop.arg1); in iselFltExpr_wrk()
5798 HReg srcR = iselFltExpr(env, e->Iex.Binop.arg2); in iselFltExpr_wrk()
5799 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5801 addInstr(env, ARMInstr_VMinMaxNum( in iselFltExpr_wrk()
5822 HReg argL = iselFltExpr(env, triop->arg2); in iselFltExpr_wrk()
5823 HReg argR = iselFltExpr(env, triop->arg3); in iselFltExpr_wrk()
5824 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5832 addInstr(env, ARMInstr_VAluS(op, dst, argL, argR)); in iselFltExpr_wrk()
5842 && typeOfIRExpr(env->type_env,e->Iex.ITE.cond) == Ity_I1) { in iselFltExpr_wrk()
5844 HReg r1 = iselFltExpr(env, e->Iex.ITE.iftrue); in iselFltExpr_wrk()
5845 HReg r0 = iselFltExpr(env, e->Iex.ITE.iffalse); in iselFltExpr_wrk()
5846 HReg dst = newVRegF(env); in iselFltExpr_wrk()
5847 addInstr(env, ARMInstr_VUnaryS(ARMvfpu_COPY, dst, r1)); in iselFltExpr_wrk()
5848 cc = iselCondCode(env, e->Iex.ITE.cond); in iselFltExpr_wrk()
5849 addInstr(env, ARMInstr_VCMovS(cc ^ 1, dst, r0)); in iselFltExpr_wrk()
5863 static void iselStmt ( ISelEnv* env, IRStmt* stmt ) in iselStmt() argument
5875 IRType tya = typeOfIRExpr(env->type_env, stmt->Ist.Store.addr); in iselStmt()
5876 IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.Store.data); in iselStmt()
5883 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data); in iselStmt()
5884 ARMAMode1* am = iselIntExpr_AMode1(env, stmt->Ist.Store.addr); in iselStmt()
5885 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!isLoad*/, rD, am)); in iselStmt()
5889 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data); in iselStmt()
5890 ARMAMode2* am = iselIntExpr_AMode2(env, stmt->Ist.Store.addr); in iselStmt()
5891 addInstr(env, ARMInstr_LdSt16(ARMcc_AL, in iselStmt()
5897 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data); in iselStmt()
5898 ARMAMode1* am = iselIntExpr_AMode1(env, stmt->Ist.Store.addr); in iselStmt()
5899 addInstr(env, ARMInstr_LdSt8U(ARMcc_AL, False/*!isLoad*/, rD, am)); in iselStmt()
5903 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselStmt()
5904 HReg dD = iselNeon64Expr(env, stmt->Ist.Store.data); in iselStmt()
5905 ARMAModeN* am = iselIntExpr_AModeN(env, stmt->Ist.Store.addr); in iselStmt()
5906 addInstr(env, ARMInstr_NLdStD(False, dD, am)); in iselStmt()
5909 iselInt64Expr(&rDhi, &rDlo, env, stmt->Ist.Store.data); in iselStmt()
5910 rA = iselIntExpr_R(env, stmt->Ist.Store.addr); in iselStmt()
5911 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!load*/, rDhi, in iselStmt()
5913 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!load*/, rDlo, in iselStmt()
5919 HReg dD = iselDblExpr(env, stmt->Ist.Store.data); in iselStmt()
5920 ARMAModeV* am = iselIntExpr_AModeV(env, stmt->Ist.Store.addr); in iselStmt()
5921 addInstr(env, ARMInstr_VLdStD(False/*!isLoad*/, dD, am)); in iselStmt()
5925 HReg fD = iselFltExpr(env, stmt->Ist.Store.data); in iselStmt()
5926 ARMAModeV* am = iselIntExpr_AModeV(env, stmt->Ist.Store.addr); in iselStmt()
5927 addInstr(env, ARMInstr_VLdStS(False/*!isLoad*/, fD, am)); in iselStmt()
5931 HReg qD = iselNeonExpr(env, stmt->Ist.Store.data); in iselStmt()
5932 ARMAModeN* am = iselIntExpr_AModeN(env, stmt->Ist.Store.addr); in iselStmt()
5933 addInstr(env, ARMInstr_NLdStQ(False, qD, am)); in iselStmt()
5944 IRType tya = typeOfIRExpr(env->type_env, sg->addr); in iselStmt()
5945 IRType tyd = typeOfIRExpr(env->type_env, sg->data); in iselStmt()
5954 HReg rD = iselIntExpr_R(env, sg->data); in iselStmt()
5955 ARMAMode1* am = iselIntExpr_AMode1(env, sg->addr); in iselStmt()
5956 ARMCondCode cc = iselCondCode(env, sg->guard); in iselStmt()
5957 addInstr(env, (tyd == Ity_I32 ? ARMInstr_LdSt32 : ARMInstr_LdSt8U) in iselStmt()
5962 HReg rD = iselIntExpr_R(env, sg->data); in iselStmt()
5963 ARMAMode2* am = iselIntExpr_AMode2(env, sg->addr); in iselStmt()
5964 ARMCondCode cc = iselCondCode(env, sg->guard); in iselStmt()
5965 addInstr(env, ARMInstr_LdSt16(cc, in iselStmt()
5980 IRType tya = typeOfIRExpr(env->type_env, lg->addr); in iselStmt()
5989 HReg rAlt = iselIntExpr_R(env, lg->alt); in iselStmt()
5990 ARMAMode1* am = iselIntExpr_AMode1(env, lg->addr); in iselStmt()
5991 HReg rD = lookupIRTemp(env, lg->dst); in iselStmt()
5992 addInstr(env, mk_iMOVds_RR(rD, rAlt)); in iselStmt()
5993 ARMCondCode cc = iselCondCode(env, lg->guard); in iselStmt()
5994 addInstr(env, (lg->cvt == ILGop_Ident32 ? ARMInstr_LdSt32 in iselStmt()
6002 HReg rAlt = iselIntExpr_R(env, lg->alt); in iselStmt()
6003 ARMAMode2* am = iselIntExpr_AMode2(env, lg->addr); in iselStmt()
6004 HReg rD = lookupIRTemp(env, lg->dst); in iselStmt()
6005 addInstr(env, mk_iMOVds_RR(rD, rAlt)); in iselStmt()
6006 ARMCondCode cc = iselCondCode(env, lg->guard); in iselStmt()
6008 addInstr(env, ARMInstr_Ld8S(cc, rD, am)); in iselStmt()
6012 addInstr(env, ARMInstr_LdSt16(cc, True/*isLoad*/, sx, rD, am)); in iselStmt()
6025 IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.Put.data); in iselStmt()
6028 HReg rD = iselIntExpr_R(env, stmt->Ist.Put.data); in iselStmt()
6030 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!isLoad*/, rD, am)); in iselStmt()
6034 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselStmt()
6035 HReg addr = newVRegI(env); in iselStmt()
6036 HReg qD = iselNeon64Expr(env, stmt->Ist.Put.data); in iselStmt()
6037 addInstr(env, ARMInstr_Add32(addr, hregARM_R8(), in iselStmt()
6039 addInstr(env, ARMInstr_NLdStD(False, qD, mkARMAModeN_R(addr))); in iselStmt()
6046 iselInt64Expr(&rDhi, &rDlo, env, stmt->Ist.Put.data); in iselStmt()
6047 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!isLoad*/, in iselStmt()
6049 addInstr(env, ARMInstr_LdSt32(ARMcc_AL, False/*!isLoad*/, in iselStmt()
6058 HReg rD = iselDblExpr(env, stmt->Ist.Put.data); in iselStmt()
6059 addInstr(env, ARMInstr_VLdStD(False/*!isLoad*/, rD, am)); in iselStmt()
6066 HReg rD = iselFltExpr(env, stmt->Ist.Put.data); in iselStmt()
6067 addInstr(env, ARMInstr_VLdStS(False/*!isLoad*/, rD, am)); in iselStmt()
6071 HReg addr = newVRegI(env); in iselStmt()
6072 HReg qD = iselNeonExpr(env, stmt->Ist.Put.data); in iselStmt()
6073 addInstr(env, ARMInstr_Add32(addr, hregARM_R8(), in iselStmt()
6075 addInstr(env, ARMInstr_NLdStQ(False, qD, mkARMAModeN_R(addr))); in iselStmt()
6085 IRType ty = typeOfIRTemp(env->type_env, tmp); in iselStmt()
6089 env, stmt->Ist.WrTmp.data); in iselStmt()
6090 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6091 addInstr(env, ARMInstr_Mov(dst,ri84)); in iselStmt()
6102 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6103 ARMCondCode cond = iselCondCode(env, stmt->Ist.WrTmp.data); in iselStmt()
6104 addInstr(env, ARMInstr_Mov(dst, ARMRI84_I84(0,0))); in iselStmt()
6105 addInstr(env, ARMInstr_CMov(cond, dst, ARMRI84_I84(1,0))); in iselStmt()
6109 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselStmt()
6110 HReg src = iselNeon64Expr(env, stmt->Ist.WrTmp.data); in iselStmt()
6111 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6112 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, dst, src, 4, False)); in iselStmt()
6115 iselInt64Expr(&rHi,&rLo, env, stmt->Ist.WrTmp.data); in iselStmt()
6116 lookupIRTemp64( &dstHi, &dstLo, env, tmp); in iselStmt()
6117 addInstr(env, mk_iMOVds_RR(dstHi, rHi) ); in iselStmt()
6118 addInstr(env, mk_iMOVds_RR(dstLo, rLo) ); in iselStmt()
6123 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data); in iselStmt()
6124 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6125 addInstr(env, ARMInstr_VUnaryD(ARMvfpu_COPY, dst, src)); in iselStmt()
6129 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data); in iselStmt()
6130 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6131 addInstr(env, ARMInstr_VUnaryS(ARMvfpu_COPY, dst, src)); in iselStmt()
6135 HReg src = iselNeonExpr(env, stmt->Ist.WrTmp.data); in iselStmt()
6136 HReg dst = lookupIRTemp(env, tmp); in iselStmt()
6137 addInstr(env, ARMInstr_NUnary(ARMneon_COPY, dst, src, 4, True)); in iselStmt()
6151 retty = typeOfIRTemp(env->type_env, d->tmp); in iselStmt()
6170 Bool ok = doHelperCall( &addToSp, &rloc, env, in iselStmt()
6187 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselStmt()
6188 HReg tmp = lookupIRTemp(env, d->tmp); in iselStmt()
6189 addInstr(env, ARMInstr_VXferD(True, tmp, hregARM_R1(), in iselStmt()
6195 lookupIRTemp64( &dstHi, &dstLo, env, d->tmp); in iselStmt()
6196 addInstr(env, mk_iMOVds_RR(dstHi, hregARM_R1()) ); in iselStmt()
6197 addInstr(env, mk_iMOVds_RR(dstLo, hregARM_R0()) ); in iselStmt()
6206 HReg dst = lookupIRTemp(env, d->tmp); in iselStmt()
6207 addInstr(env, mk_iMOVds_RR(dst, hregARM_R0()) ); in iselStmt()
6223 HReg dst = lookupIRTemp(env, d->tmp); in iselStmt()
6224 HReg tmp = newVRegI(env); in iselStmt()
6226 addInstr(env, ARMInstr_Alu(ARMalu_ADD, in iselStmt()
6232 addInstr(env, ARMInstr_NLdStQ(True/*load*/, dst, am)); in iselStmt()
6237 addInstr(env, ARMInstr_Alu(ARMalu_ADD, sp, sp, spAdj)); in iselStmt()
6252 IRType ty = typeOfIRTemp(env->type_env, res); in iselStmt()
6255 HReg r_dst = lookupIRTemp(env, res); in iselStmt()
6256 HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr); in iselStmt()
6263 addInstr(env, mk_iMOVds_RR(hregARM_R4(), raddr)); in iselStmt()
6264 addInstr(env, ARMInstr_LdrEX(szB)); in iselStmt()
6265 addInstr(env, mk_iMOVds_RR(r_dst, hregARM_R2())); in iselStmt()
6269 HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr); in iselStmt()
6270 addInstr(env, mk_iMOVds_RR(hregARM_R4(), raddr)); in iselStmt()
6271 addInstr(env, ARMInstr_LdrEX(8)); in iselStmt()
6276 if (env->hwcaps & VEX_HWCAPS_ARM_NEON) { in iselStmt()
6277 HReg dst = lookupIRTemp(env, res); in iselStmt()
6278 addInstr(env, ARMInstr_VXferD(True, dst, hregARM_R3(), in iselStmt()
6282 lookupIRTemp64(&r_dst_hi, &r_dst_lo, env, res); in iselStmt()
6283 addInstr(env, mk_iMOVds_RR(r_dst_lo, hregARM_R2())); in iselStmt()
6284 addInstr(env, mk_iMOVds_RR(r_dst_hi, hregARM_R3())); in iselStmt()
6292 IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.LLSC.storedata); in iselStmt()
6295 HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata); in iselStmt()
6296 HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr); in iselStmt()
6303 addInstr(env, mk_iMOVds_RR(hregARM_R2(), rD)); in iselStmt()
6304 addInstr(env, mk_iMOVds_RR(hregARM_R4(), rA)); in iselStmt()
6305 addInstr(env, ARMInstr_StrEX(szB)); in iselStmt()
6314 iselInt64Expr(&rDhi, &rDlo, env, stmt->Ist.LLSC.storedata); in iselStmt()
6315 HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr); in iselStmt()
6316 addInstr(env, mk_iMOVds_RR(hregARM_R2(), rDlo)); in iselStmt()
6317 addInstr(env, mk_iMOVds_RR(hregARM_R3(), rDhi)); in iselStmt()
6318 addInstr(env, mk_iMOVds_RR(hregARM_R4(), rA)); in iselStmt()
6319 addInstr(env, ARMInstr_StrEX(8)); in iselStmt()
6325 IRType ty = typeOfIRTemp(env->type_env, res); in iselStmt()
6326 HReg r_res = lookupIRTemp(env, res); in iselStmt()
6329 addInstr(env, ARMInstr_Alu(ARMalu_XOR, r_res, hregARM_R0(), one)); in iselStmt()
6331 addInstr(env, ARMInstr_Alu(ARMalu_AND, r_res, r_res, one)); in iselStmt()
6341 addInstr(env, ARMInstr_MFence()); in iselStmt()
6344 addInstr(env, ARMInstr_CLREX()); in iselStmt()
6365 ARMCondCode cc = iselCondCode(env, stmt->Ist.Exit.guard); in iselStmt()
6373 if (env->chainingAllowed) { in iselStmt()
6378 = stmt->Ist.Exit.dst->Ico.U32 > env->max_ga; in iselStmt()
6380 addInstr(env, ARMInstr_XDirect(stmt->Ist.Exit.dst->Ico.U32, in iselStmt()
6386 HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst)); in iselStmt()
6387 addInstr(env, ARMInstr_XAssisted(r, amR15T, cc, Ijk_Boring)); in iselStmt()
6402 HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst)); in iselStmt()
6403 addInstr(env, ARMInstr_XAssisted(r, amR15T, cc, in iselStmt()
6427 static void iselNext ( ISelEnv* env, in iselNext() argument
6445 if (env->chainingAllowed) { in iselNext()
6450 = cdst->Ico.U32 > env->max_ga; in iselNext()
6452 addInstr(env, ARMInstr_XDirect(cdst->Ico.U32, in iselNext()
6459 HReg r = iselIntExpr_R(env, next); in iselNext()
6460 addInstr(env, ARMInstr_XAssisted(r, amR15T, ARMcc_AL, in iselNext()
6470 HReg r = iselIntExpr_R(env, next); in iselNext()
6472 if (env->chainingAllowed) { in iselNext()
6473 addInstr(env, ARMInstr_XIndir(r, amR15T, ARMcc_AL)); in iselNext()
6475 addInstr(env, ARMInstr_XAssisted(r, amR15T, ARMcc_AL, in iselNext()
6494 HReg r = iselIntExpr_R(env, next); in iselNext()
6496 addInstr(env, ARMInstr_XAssisted(r, amR15T, ARMcc_AL, jk)); in iselNext()
6530 ISelEnv* env; in iselSB_ARM() local
6547 env = LibVEX_Alloc_inline(sizeof(ISelEnv)); in iselSB_ARM()
6548 env->vreg_ctr = 0; in iselSB_ARM()
6551 env->code = newHInstrArray(); in iselSB_ARM()
6553 /* Copy BB's type env. */ in iselSB_ARM()
6554 env->type_env = bb->tyenv; in iselSB_ARM()
6558 env->n_vregmap = bb->tyenv->types_used; in iselSB_ARM()
6559 env->vregmap = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg)); in iselSB_ARM()
6560 env->vregmapHI = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg)); in iselSB_ARM()
6563 env->chainingAllowed = chainingAllowed; in iselSB_ARM()
6564 env->hwcaps = hwcaps_host; in iselSB_ARM()
6565 env->max_ga = max_ga; in iselSB_ARM()
6570 for (i = 0; i < env->n_vregmap; i++) { in iselSB_ARM()
6591 env->vregmap[i] = hreg; in iselSB_ARM()
6592 env->vregmapHI[i] = hregHI; in iselSB_ARM()
6594 env->vreg_ctr = j; in iselSB_ARM()
6599 addInstr(env, ARMInstr_EvCheck(amCounter, amFailAddr)); in iselSB_ARM()
6606 addInstr(env, ARMInstr_ProfInc()); in iselSB_ARM()
6611 iselStmt(env, bb->stmts[i]); in iselSB_ARM()
6613 iselNext(env, bb->next, bb->jumpkind, bb->offsIP); in iselSB_ARM()
6616 env->code->n_vregs = env->vreg_ctr; in iselSB_ARM()
6617 return env->code; in iselSB_ARM()