Lines Matching defs:hreg
103 - A mapping from IRTemp to HReg. This tells the insn selector
112 64-bit virtual HReg, which holds the high half
130 HReg* vregmap;
131 HReg* vregmapHI;
143 static HReg lookupIRTemp ( ISelEnv* env, IRTemp tmp )
150 static void lookupIRTemp128 ( HReg* vrHI, HReg* vrLO,
169 static HReg newVRegI ( ISelEnv* env )
171 HReg reg = mkHReg(env->vreg_ctr, HRcInt64, True/*virtual reg*/);
176 //.. static HReg newVRegF ( ISelEnv* env )
178 //.. HReg reg = mkHReg(env->vreg_ctr, HRcFlt64, True/*virtual reg*/);
183 static HReg newVRegV ( ISelEnv* env )
185 HReg reg = mkHReg(env->vreg_ctr, HRcVec128, True/*virtual reg*/);
210 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e );
211 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e );
216 static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo,
218 static void iselInt128Expr ( HReg* rHi, HReg* rLo,
224 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e );
225 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e );
227 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e );
228 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e );
230 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e );
231 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e );
288 static AMD64Instr* mk_iMOVsd_RR ( HReg src, HReg dst )
297 static AMD64Instr* mk_vMOVsd_RR ( HReg src, HReg dst )
331 HReg tmp = newVRegI(env);
367 //.. HReg rHi, rLo;
383 HReg dst,
402 HReg src = lookupIRTemp(env, e->Iex.RdTmp.tmp);
419 HReg src = lookupIRTemp(env, e->Iex.Unop.arg->Iex.RdTmp.tmp);
439 HReg argregs[6];
440 HReg tmpregs[6];
630 HReg tmp, roff;
717 HReg reg = newVRegI(env);
739 HReg rrm = iselIntExpr_R(env, mode);
740 HReg rrm2 = newVRegI(env);
763 static HReg generate_zeroes_V128 ( ISelEnv* env )
765 HReg dst = newVRegV(env);
772 static HReg generate_ones_V128 ( ISelEnv* env )
774 HReg dst = newVRegV(env);
783 static HReg do_sse_NotV128 ( ISelEnv* env, HReg src )
785 HReg dst = generate_ones_V128(env);
813 //.. static void roundToF64 ( ISelEnv* env, HReg reg )
841 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e )
843 HReg r = iselIntExpr_R_wrk(env, e);
854 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
880 HReg dst = newVRegI(env);
916 HReg dst = newVRegI(env);
917 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg2);
943 HReg dst = newVRegI(env);
944 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
963 HReg dst = newVRegI(env);
966 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1015 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1165 HReg dst = newVRegI(env);
1166 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1167 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1180 HReg src1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1181 HReg dst = newVRegI(env);
1182 HReg src2 = iselIntExpr_R(env, e->Iex.Binop.arg2);
1194 HReg rax = hregAMD64_RAX();
1195 HReg rdx = hregAMD64_RDX();
1196 HReg dst = newVRegI(env);
1201 HReg left64 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1215 HReg hi32 = newVRegI(env);
1216 HReg lo32 = newVRegI(env);
1217 HReg hi32s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1218 HReg lo32s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1229 HReg hi16 = newVRegI(env);
1230 HReg lo16 = newVRegI(env);
1231 HReg hi16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1232 HReg lo16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1244 HReg hi8 = newVRegI(env);
1245 HReg lo8 = newVRegI(env);
1246 HReg hi8s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1247 HReg lo8s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1264 HReg a32 = newVRegI(env);
1265 HReg b32 = newVRegI(env);
1266 HReg a32s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1267 HReg b32s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1291 HReg fL = iselDblExpr(env, e->Iex.Binop.arg1);
1292 HReg fR = iselDblExpr(env, e->Iex.Binop.arg2);
1293 HReg dst = newVRegI(env);
1304 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
1305 HReg dst = newVRegI(env);
1314 //.. HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
1315 //.. HReg dst = newVRegI(env);
1357 //.. HReg junk = newVRegF(env);
1358 //.. HReg dst = newVRegI(env);
1359 //.. HReg srcL = iselDblExpr(env, e->Iex.Binop.arg1);
1360 //.. HReg srcR = iselDblExpr(env, e->Iex.Binop.arg2);
1386 HReg dst = newVRegI(env);
1387 HReg src = iselIntExpr_R(env, expr64);
1401 HReg dst = newVRegI(env);
1414 HReg dst = newVRegI(env);
1440 HReg dst = newVRegI(env);
1441 HReg reg = iselIntExpr_R(env, argL);
1454 HReg dst = newVRegI(env);
1455 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1461 HReg rHi, rLo;
1466 HReg rHi, rLo;
1475 HReg dst = newVRegI(env);
1476 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1490 HReg dst = newVRegI(env);
1491 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1504 HReg dst = newVRegI(env);
1505 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1511 //.. HReg rHi, rLo;
1516 //.. HReg rHi, rLo;
1523 HReg dst = newVRegI(env);
1524 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1539 HReg dst = newVRegI(env);
1549 HReg dst = newVRegI(env);
1558 HReg dst = newVRegI(env);
1559 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1567 HReg tmp = newVRegI(env);
1568 HReg dst = newVRegI(env);
1569 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1579 HReg dst = newVRegI(env);
1580 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1590 HReg src = newVRegI(env);
1591 HReg dst = newVRegI(env);
1592 HReg pre = iselIntExpr_R(env, e->Iex.Unop.arg);
1607 HReg dst = newVRegI(env);
1608 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1616 HReg dst = newVRegI(env);
1617 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1628 HReg dst = newVRegI(env);
1629 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1645 HReg dst = newVRegI(env);
1646 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
1660 HReg dst = newVRegI(env);
1661 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
1699 HReg dst = newVRegI(env);
1700 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
1713 HReg dst = newVRegI(env);
1723 HReg dst = newVRegI(env);
1739 HReg dst = newVRegI(env);
1753 HReg dst = newVRegI(env);
1778 HReg r = newVRegI(env);
1783 HReg r = newVRegI(env);
1792 HReg r8;
1793 HReg rX = iselIntExpr_R(env, e->Iex.Mux0X.exprX);
1795 HReg dst = newVRegI(env);
1812 HReg arg1 = iselDblExpr(env, e->Iex.Triop.arg2);
1813 HReg arg2 = iselDblExpr(env, e->Iex.Triop.arg3);
1814 HReg dst = newVRegI(env);
1907 HReg r1 = iselIntExpr_R(env, expr1);
1908 HReg r2 = iselIntExpr_R(env, expr2);
1923 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1924 HReg r2 = iselIntExpr_R(env, e->Iex.Binop.arg2->Iex.Binop.arg1 );
1935 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1945 HReg r1 = iselIntExpr_R(env, e);
2016 HReg r = iselIntExpr_R ( env, e );
2072 HReg r = iselIntExpr_R ( env, e );
2117 HReg r = iselIntExpr_R ( env, e );
2145 HReg r64 = lookupIRTemp(env, e->Iex.RdTmp.tmp);
2146 HReg dst = newVRegI(env);
2154 HReg r;
2174 HReg reg = iselIntExpr_R(env, e->Iex.Unop.arg);
2184 HReg r = iselIntExpr_R(env, e->Iex.Unop.arg);
2194 HReg r = iselIntExpr_R(env, e->Iex.Unop.arg);
2204 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
2218 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
2220 HReg tmp = newVRegI(env);
2230 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
2244 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2246 HReg r = newVRegI(env);
2263 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2265 HReg r = newVRegI(env);
2284 HReg tmp = newVRegI(env);
2306 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2330 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2358 static void iselInt128Expr ( HReg* rHi, HReg* rLo,
2372 static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo,
2384 //.. HReg tLo = newVRegI(env);
2385 //.. HReg tHi = newVRegI(env);
2402 //.. HReg tLo, tHi;
2420 //.. HReg tLo = newVRegI(env);
2421 //.. HReg tHi = newVRegI(env);
2435 //.. HReg tLo = newVRegI(env);
2436 //.. HReg tHi = newVRegI(env);
2446 //.. HReg e0Lo, e0Hi, eXLo, eXHi, r8;
2447 //.. HReg tLo = newVRegI(env);
2448 //.. HReg tHi = newVRegI(env);
2473 HReg tLo = newVRegI(env);
2474 HReg tHi = newVRegI(env);
2477 HReg rRight = iselIntExpr_R(env, e->Iex.Binop.arg2);
2493 HReg sHi, sLo;
2494 HReg tLo = newVRegI(env);
2495 HReg tHi = newVRegI(env);
2519 //.. HReg xLo, xHi, yLo, yHi;
2520 //.. HReg tLo = newVRegI(env);
2521 //.. HReg tHi = newVRegI(env);
2539 //.. HReg xLo, xHi, yLo, yHi;
2540 //.. HReg tLo = newVRegI(env);
2541 //.. HReg tHi = newVRegI(env);
2585 //.. HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2628 //.. HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2656 //.. HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2657 //.. HReg tLo = newVRegI(env);
2658 //.. HReg tHi = newVRegI(env);
2712 //.. HReg tLo = newVRegI(env);
2713 //.. HReg tHi = newVRegI(env);
2714 //.. HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2725 //.. HReg tLo = newVRegI(env);
2726 //.. HReg tHi = newVRegI(env);
2727 //.. HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2737 //.. HReg tLo = newVRegI(env);
2738 //.. HReg tHi = newVRegI(env);
2751 //.. HReg tLo = newVRegI(env);
2752 //.. HReg tHi = newVRegI(env);
2753 //.. HReg sHi, sLo;
2772 //.. HReg tLo = newVRegI(env);
2773 //.. HReg tHi = newVRegI(env);
2797 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e )
2799 HReg r = iselFltExpr_wrk( env, e );
2809 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e )
2820 HReg res = newVRegV(env);
2832 HReg dst = newVRegV(env);
2833 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
2843 HReg res = newVRegV(env);
2852 HReg dst = newVRegV(env);
2853 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2862 HReg arg = iselFltExpr(env, e->Iex.Binop.arg2);
2863 HReg dst = newVRegV(env);
2917 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e )
2919 HReg r = iselDblExpr_wrk( env, e );
2929 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e )
2941 HReg res = newVRegV(env);
2942 HReg tmp = newVRegI(env);
2968 HReg res = newVRegV(env);
2978 HReg res = newVRegV(env);
2988 HReg res = newVRegV(env);
3003 HReg dst = newVRegV(env);
3004 HReg argL = iselDblExpr(env, e->Iex.Triop.arg2);
3005 HReg argR = iselDblExpr(env, e->Iex.Triop.arg3);
3016 HReg arg = iselDblExpr(env, e->Iex.Binop.arg2);
3017 HReg dst = newVRegV(env);
3047 HReg arg1 = iselDblExpr(env, e->Iex.Triop.arg2);
3048 HReg arg2 = iselDblExpr(env, e->Iex.Triop.arg3);
3049 HReg dst = newVRegV(env);
3098 HReg dst = newVRegV(env);
3099 HReg src = iselIntExpr_R(env, e->Iex.Binop.arg2);
3107 HReg dst = newVRegV(env);
3108 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
3120 HReg r1 = newVRegI(env);
3121 HReg dst = newVRegV(env);
3122 HReg tmp = newVRegV(env);
3123 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3152 HReg arg = iselDblExpr(env, e->Iex.Binop.arg2);
3153 HReg dst = newVRegV(env);
3174 //.. HReg dst = newVRegF(env);
3175 //.. HReg ri = iselIntExpr_R(env, e->Iex.Unop.arg);
3188 HReg dst = newVRegV(env);
3197 HReg f32;
3198 HReg f64 = newVRegV(env);
3212 HReg r8, rX, r0, dst;
3234 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e )
3236 HReg r = iselVecExpr_wrk( env, e );
3247 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e )
3261 HReg dst = newVRegV(env);
3273 HReg dst = newVRegV(env);
3280 HReg dst = newVRegV(env);
3310 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3330 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3331 HReg tmp = generate_zeroes_V128(env);
3332 HReg dst = newVRegV(env);
3345 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3346 HReg tmp = newVRegV(env);
3347 HReg zero = generate_zeroes_V128(env);
3348 HReg dst;
3360 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3361 HReg dst = newVRegV(env);
3371 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3372 HReg dst = newVRegV(env);
3388 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3389 HReg dst = newVRegV(env);
3406 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3407 HReg dst = newVRegV(env);
3414 HReg dst = newVRegV(env);
3423 HReg dst = newVRegV(env);
3441 HReg dst = newVRegV(env);
3442 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3443 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3452 HReg dst = newVRegV(env);
3453 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3454 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3464 HReg dst = newVRegV(env);
3485 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3486 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3487 HReg dst = newVRegV(env);
3505 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3506 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3507 HReg dst = newVRegV(env);
3524 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3525 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3526 HReg dst = newVRegV(env);
3543 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3544 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3545 HReg dst = newVRegV(env);
3611 HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
3612 HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
3613 HReg dst = newVRegV(env);
3633 HReg greg = iselVecExpr(env, e->Iex.Binop.arg1);
3636 HReg ereg = newVRegV(env);
3637 HReg dst = newVRegV(env);
3682 HReg dst = newVRegV(env);
3683 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3684 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3685 HReg argp = newVRegI(env);
3733 HReg dst = newVRegV(env);
3734 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3735 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
3736 HReg argp = newVRegI(env);
3779 HReg r8 = iselIntExpr_R(env, e->Iex.Mux0X.cond);
3780 HReg rX = iselVecExpr(env, e->Iex.Mux0X.exprX);
3781 HReg r0 = iselVecExpr(env, e->Iex.Mux0X.expr0);
3782 HReg dst = newVRegV(env);
3828 HReg r = iselIntExpr_R(env, stmt->Ist.Store.data);
3836 HReg r = iselDblExpr(env, stmt->Ist.Store.data);
3842 HReg r = iselFltExpr(env, stmt->Ist.Store.data);
3848 HReg r = iselVecExpr(env, stmt->Ist.Store.data);
3872 HReg r = iselIntExpr_R(env, stmt->Ist.Put.data);
3881 HReg vec = iselVecExpr(env, stmt->Ist.Put.data);
3888 HReg f32 = iselFltExpr(env, stmt->Ist.Put.data);
3895 HReg f64 = iselDblExpr(env, stmt->Ist.Put.data);
3913 HReg val = iselDblExpr(env, stmt->Ist.PutI.data);
3918 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3945 HReg dst = lookupIRTemp(env, tmp);
3950 HReg src = am->Aam.IR.reg;
3961 HReg dst = lookupIRTemp(env, tmp);
3966 HReg rHi, rLo, dstHi, dstLo;
3975 HReg dst = lookupIRTemp(env, tmp);
3980 HReg dst = lookupIRTemp(env, tmp);
3981 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data);
3986 HReg dst = lookupIRTemp(env, tmp);
3987 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data);
3992 HReg dst = lookupIRTemp(env, tmp);
3993 HReg src = iselVecExpr(env, stmt->Ist.WrTmp.data);
4024 HReg dst = lookupIRTemp(env, d->tmp);
4051 HReg rData = iselIntExpr_R(env, cas->dataLo);
4052 HReg rExpd = iselIntExpr_R(env, cas->expdLo);
4053 HReg rOld = lookupIRTemp(env, cas->oldLo);
4079 HReg rDataHi = iselIntExpr_R(env, cas->dataHi);
4080 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
4081 HReg rExpdHi = iselIntExpr_R(env, cas->expdHi);
4082 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
4083 HReg rOldHi = lookupIRTemp(env, cas->oldHi);
4084 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
4182 HReg hreg, hregHI;
4203 /* Make up an IRTemp -> virtual HReg mapping. This doesn't
4206 env->vregmap = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4207 env->vregmapHI = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4216 hregHI = hreg = INVALID_HREG;
4222 case Ity_I64: hreg = mkHReg(j++, HRcInt64, True); break;
4223 case Ity_I128: hreg = mkHReg(j++, HRcInt64, True);
4227 case Ity_V128: hreg = mkHReg(j++, HRcVec128, True); break;
4231 env->vregmap[i] = hreg;