Lines Matching full: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 )
877 HReg dst = newVRegI(env);
913 HReg dst = newVRegI(env);
914 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg2);
940 HReg dst = newVRegI(env);
941 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
960 HReg dst = newVRegI(env);
963 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1012 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1158 HReg dst = newVRegI(env);
1159 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1160 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1175 HReg src1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1176 HReg src1L = newVRegI(env);
1177 HReg src2 = iselIntExpr_R(env, e->Iex.Binop.arg2);
1178 HReg src2L = newVRegI(env);
1179 HReg dst = newVRegI(env);
1195 HReg rax = hregAMD64_RAX();
1196 HReg rdx = hregAMD64_RDX();
1197 HReg dst = newVRegI(env);
1202 HReg left64 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1216 HReg hi32 = newVRegI(env);
1217 HReg lo32 = newVRegI(env);
1218 HReg hi32s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1219 HReg lo32s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1230 HReg hi16 = newVRegI(env);
1231 HReg lo16 = newVRegI(env);
1232 HReg hi16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1233 HReg lo16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1245 HReg hi8 = newVRegI(env);
1246 HReg lo8 = newVRegI(env);
1247 HReg hi8s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1248 HReg lo8s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1265 HReg a32 = newVRegI(env);
1266 HReg b32 = newVRegI(env);
1267 HReg a32s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1268 HReg b32s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1292 HReg fL = iselDblExpr(env, e->Iex.Binop.arg1);
1293 HReg fR = iselDblExpr(env, e->Iex.Binop.arg2);
1294 HReg dst = newVRegI(env);
1305 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
1306 HReg dst = newVRegI(env);
1315 //.. HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
1316 //.. HReg dst = newVRegI(env);
1358 //.. HReg junk = newVRegF(env);
1359 //.. HReg dst = newVRegI(env);
1360 //.. HReg srcL = iselDblExpr(env, e->Iex.Binop.arg1);
1361 //.. HReg srcR = iselDblExpr(env, e->Iex.Binop.arg2);
1387 HReg dst = newVRegI(env);
1388 HReg src = iselIntExpr_R(env, expr64);
1402 HReg dst = newVRegI(env);
1415 HReg dst = newVRegI(env);
1425 HReg dst = newVRegI(env);
1426 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1432 HReg rHi, rLo;
1437 HReg rHi, rLo;
1446 HReg dst = newVRegI(env);
1447 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1461 HReg dst = newVRegI(env);
1462 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1475 HReg dst = newVRegI(env);
1476 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1482 //.. HReg rHi, rLo;
1487 //.. HReg rHi, rLo;
1494 HReg dst = newVRegI(env);
1495 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1510 HReg dst = newVRegI(env);
1520 HReg dst = newVRegI(env);
1529 HReg dst = newVRegI(env);
1530 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1538 HReg tmp = newVRegI(env);
1539 HReg dst = newVRegI(env);
1540 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1550 HReg dst = newVRegI(env);
1551 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1561 HReg src = newVRegI(env);
1562 HReg dst = newVRegI(env);
1563 HReg pre = iselIntExpr_R(env, e->Iex.Unop.arg);
1578 HReg dst = newVRegI(env);
1579 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1587 HReg dst = newVRegI(env);
1588 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1599 HReg dst = newVRegI(env);
1600 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1616 HReg dst = newVRegI(env);
1617 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
1631 HReg dst = newVRegI(env);
1632 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
1670 HReg dst = newVRegI(env);
1671 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
1684 HReg dst = newVRegI(env);
1694 HReg dst = newVRegI(env);
1710 HReg dst = newVRegI(env);
1724 HReg dst = newVRegI(env);
1749 HReg r = newVRegI(env);
1754 HReg r = newVRegI(env);
1763 HReg r8;
1764 HReg rX = iselIntExpr_R(env, e->Iex.Mux0X.exprX);
1766 HReg dst = newVRegI(env);
1783 HReg arg1 = iselDblExpr(env, e->Iex.Triop.arg2);
1784 HReg arg2 = iselDblExpr(env, e->Iex.Triop.arg3);
1785 HReg dst = newVRegI(env);
1878 HReg r1 = iselIntExpr_R(env, expr1);
1879 HReg r2 = iselIntExpr_R(env, expr2);
1894 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1895 HReg r2 = iselIntExpr_R(env, e->Iex.Binop.arg2->Iex.Binop.arg1 );
1906 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1916 HReg r1 = iselIntExpr_R(env, e);
1987 HReg r = iselIntExpr_R ( env, e );
2043 HReg r = iselIntExpr_R ( env, e );
2088 HReg r = iselIntExpr_R ( env, e );
2116 HReg r64 = lookupIRTemp(env, e->Iex.RdTmp.tmp);
2117 HReg dst = newVRegI(env);
2125 HReg r;
2145 HReg reg = iselIntExpr_R(env, e->Iex.Unop.arg);
2155 HReg r = iselIntExpr_R(env, e->Iex.Unop.arg);
2165 HReg r = iselIntExpr_R(env, e->Iex.Unop.arg);
2175 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
2176 HReg tmp = newVRegI(env);
2191 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
2193 HReg tmp = newVRegI(env);
2203 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
2217 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2219 HReg r = newVRegI(env);
2236 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2238 HReg r = newVRegI(env);
2255 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2257 HReg r = newVRegI(env);
2278 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
2306 static void iselInt128Expr ( HReg* rHi, HReg* rLo,
2320 static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo,
2332 //.. HReg tLo = newVRegI(env);
2333 //.. HReg
2350 //.. HReg tLo, tHi;
2368 //.. HReg tLo = newVRegI(env);
2369 //.. HReg tHi = newVRegI(env);
2383 //.. HReg tLo = newVRegI(env);
2384 //.. HReg tHi = newVRegI(env);
2394 //.. HReg e0Lo, e0Hi, eXLo, eXHi, r8;
2395 //.. HReg tLo = newVRegI(env);
2396 //.. HReg tHi = newVRegI(env);
2421 HReg tLo = newVRegI(env);
2422 HReg tHi = newVRegI(env);
2425 HReg rRight = iselIntExpr_R(env, e->Iex.Binop.arg2);
2441 HReg sHi, sLo;
2442 HReg tLo = newVRegI(env);
2443 HReg tHi = newVRegI(env);
2467 //.. HReg xLo, xHi, yLo, yHi;
2468 //.. HReg tLo = newVRegI(env);
2469 //.. HReg tHi = newVRegI(env);
2487 //.. HReg xLo, xHi, yLo, yHi;
2488 //.. HReg tLo = newVRegI(env);
2489 //.. HReg tHi = newVRegI(env);
2533 //.. HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2576 //.. HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2604 //.. HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2605 //.. HReg tLo = newVRegI(env);
2606 //.. HReg tHi = newVRegI(env);
2660 //.. HReg tLo = newVRegI(env);
2661 //.. HReg tHi = newVRegI(env);
2662 //.. HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2673 //.. HReg tLo = newVRegI(env);
2674 //.. HReg tHi = newVRegI(env);
2675 //.. HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2685 //.. HReg tLo = newVRegI(env);
2686 //.. HReg tHi = newVRegI(env);
2699 //.. HReg tLo = newVRegI(env);
2700 //.. HReg tHi = newVRegI(env);
2701 //.. HReg sHi, sLo;
2720 //.. HReg tLo = newVRegI(env);
2721 //.. HReg tHi = newVRegI(env);
2745 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e )
2747 HReg r = iselFltExpr_wrk( env, e );
2757 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e )
2768 HReg res = newVRegV(env);
2780 HReg dst = newVRegV(env);
2781 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
2791 HReg res = newVRegV(env);
2800 HReg dst = newVRegV(env);
2801 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2810 HReg arg = iselFltExpr(env, e->Iex.Binop.arg2);
2811 HReg dst = newVRegV(env);
2865 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e )
2867 HReg r = iselDblExpr_wrk( env, e );
2877 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e )
2889 HReg res = newVRegV(env);
2890 HReg tmp = newVRegI(env);
2916 HReg res = newVRegV(env);
2926 HReg res = newVRegV(env);
2936 HReg res = newVRegV(env);
2951 HReg dst = newVRegV(env);
2952 HReg argL = iselDblExpr(env, e->Iex.Triop.arg2);
2953 HReg argR = iselDblExpr(env, e->Iex.Triop.arg3);
2964 HReg arg = iselDblExpr(env, e->Iex.Binop.arg2);
2965 HReg dst = newVRegV(env);
2995 HReg arg1 = iselDblExpr(env, e->Iex.Triop.arg2);
2996 HReg arg2 = iselDblExpr(env, e->Iex.Triop.arg3);
2997 HReg dst = newVRegV(env);
3046 HReg dst = newVRegV(env);
3047 HReg src = iselIntExpr_R(env, e->Iex.Binop.arg2);
3055 HReg dst = newVRegV(env);
3056 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
3068 HReg r1 = newVRegI(env);
3069 HReg dst = newVRegV(env);
3070 HReg tmp = newVRegV(env);
3071 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3100 HReg arg = iselDblExpr(env, e->Iex.Binop.arg2);
3101 HReg dst = newVRegV(env);
3122 //.. HReg dst = newVRegF(env);
3123 //.. HReg ri = iselIntExpr_R(env, e->Iex.Unop.arg);
3136 HReg dst = newVRegV(env);
3145 HReg f32;
3146 HReg f64 = newVRegV(env);
3160 HReg r8, rX, r0, dst;
3182 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e )
3184 HReg r = iselVecExpr_wrk( env, e );
3195 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e )
3209 HReg dst = newVRegV(env);
3221 HReg dst = newVRegV(env);
3228 HReg dst = newVRegV(env);
3258 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3278 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3279 HReg tmp = generate_zeroes_V128(env);
3280 HReg dst = newVRegV(env);
3293 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3294 HReg tmp = newVRegV(env);
3295 HReg zero = generate_zeroes_V128(env);
3296 HReg dst;
3308 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3309 HReg dst = newVRegV(env);
3319 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3320 HReg dst = newVRegV(env);
3336 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3337 HReg dst = newVRegV(env);
3354 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3355 HReg dst = newVRegV(env);
3362 HReg dst = newVRegV(env);
3371 HReg dst = newVRegV(env);
3389 HReg dst = newVRegV(env);
3390 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3391 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3400 HReg dst = newVRegV(env);
3401 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3402 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3412 HReg dst = newVRegV(env);
3433 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3434 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3435 HReg dst = newVRegV(env);
3453 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3454 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3455 HReg dst = newVRegV(env);
3472 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3473 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3474 HReg dst = newVRegV(env);
3491 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3492 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3493 HReg dst = newVRegV(env);
3559 HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
3560 HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
3561 HReg dst = newVRegV(env);
3581 HReg greg = iselVecExpr(env, e->Iex.Binop.arg1);
3584 HReg ereg = newVRegV(env);
3585 HReg dst = newVRegV(env);
3619 HReg dst = newVRegV(env);
3620 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3621 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3622 HReg argp = newVRegI(env);
3670 HReg dst = newVRegV(env);
3671 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3672 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
3673 HReg argp = newVRegI(env);
3716 HReg r8 = iselIntExpr_R(env, e->Iex.Mux0X.cond);
3717 HReg rX = iselVecExpr(env, e->Iex.Mux0X.exprX);
3718 HReg r0 = iselVecExpr(env, e->Iex.Mux0X.expr0);
3719 HReg dst = newVRegV(env);
3765 HReg r = iselIntExpr_R(env, stmt->Ist.Store.data);
3773 HReg r = iselDblExpr(env, stmt->Ist.Store.data);
3779 HReg r = iselFltExpr(env, stmt->Ist.Store.data);
3785 HReg r = iselVecExpr(env, stmt->Ist.Store.data);
3809 HReg r = iselIntExpr_R(env, stmt->Ist.Put.data);
3818 HReg vec = iselVecExpr(env, stmt->Ist.Put.data);
3825 HReg f32 = iselFltExpr(env, stmt->Ist.Put.data);
3832 HReg f64 = iselDblExpr(env, stmt->Ist.Put.data);
3850 HReg val = iselDblExpr(env, stmt->Ist.PutI.data);
3855 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3882 HReg dst = lookupIRTemp(env, tmp);
3887 HReg src = am->Aam.IR.reg;
3898 HReg dst = lookupIRTemp(env, tmp);
3903 HReg rHi, rLo, dstHi, dstLo;
3912 HReg dst = lookupIRTemp(env, tmp);
3917 HReg dst = lookupIRTemp(env, tmp);
3918 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data);
3923 HReg dst = lookupIRTemp(env, tmp);
3924 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data);
3929 HReg dst = lookupIRTemp(env, tmp);
3930 HReg src = iselVecExpr(env, stmt->Ist.WrTmp.data);
3961 HReg dst = lookupIRTemp(env, d->tmp);
3988 HReg rData = iselIntExpr_R(env, cas->dataLo);
3989 HReg rExpd = iselIntExpr_R(env, cas->expdLo);
3990 HReg rOld = lookupIRTemp(env, cas->oldLo);
4016 HReg rDataHi = iselIntExpr_R(env, cas->dataHi);
4017 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
4018 HReg rExpdHi = iselIntExpr_R(env, cas->expdHi);
4019 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
4020 HReg rOldHi = lookupIRTemp(env, cas->oldHi);
4021 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
4119 HReg hreg, hregHI;
4140 /* Make up an IRTemp -> virtual HReg mapping. This doesn't
4143 env->vregmap = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4144 env->vregmapHI = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4153 hregHI = hreg = INVALID_HREG;
4159 case Ity_I64: hreg = mkHReg(j++, HRcInt64, True); break;
4160 case Ity_I128: hreg = mkHReg(j++, HRcInt64, True);
4164 case Ity_V128: hreg = mkHReg(j++, HRcVec128, True); break;
4168 env->vregmap[i] = hreg;