Lines Matching full:hreg
137 - A mapping from IRTemp to HReg. This tells the insn selector
146 32-bit virtual HReg, which holds the high half
162 HReg* vregmap;
163 HReg* vregmapHI;
175 static HReg lookupIRTemp ( ISelEnv* env, IRTemp tmp )
182 static void lookupIRTemp64 ( HReg* vrHI, HReg* vrLO, ISelEnv* env, IRTemp tmp )
200 static HReg newVRegI ( ISelEnv* env )
202 HReg reg = mkHReg(env->vreg_ctr, HRcInt32, True/*virtual reg*/);
207 static HReg newVRegF ( ISelEnv* env )
209 HReg reg = mkHReg(env->vreg_ctr, HRcFlt64, True/*virtual reg*/);
214 static HReg newVRegV ( ISelEnv* env )
216 HReg reg = mkHReg(env->vreg_ctr, HRcVec128, True/*virtual reg*/);
241 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e );
242 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e );
247 static void iselInt64Expr_wrk ( HReg* rHi, HReg* rLo,
249 static void iselInt64Expr ( HReg* rHi, HReg* rLo,
255 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e );
256 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e );
258 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e );
259 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e );
261 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e );
262 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e );
271 static X86Instr* mk_iMOVsd_RR ( HReg src, HReg dst )
281 static X86Instr* mk_vMOVsd_RR ( HReg src, HReg dst )
335 HReg rHi, rLo;
392 HReg argregs[3];
393 HReg tmpregs[3];
580 HReg tmp, roff;
644 HReg rrm = iselIntExpr_R(env, mode);
645 HReg rrm2 = newVRegI(env);
670 static HReg do_sse_Not128 ( ISelEnv* env, HReg src )
672 HReg dst = newVRegV(env);
692 static void roundToF64 ( ISelEnv* env, HReg reg )
720 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e )
722 HReg r = iselIntExpr_R_wrk(env, e);
733 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
749 HReg dst = newVRegI(env);
778 HReg junk = newVRegF(env);
779 HReg dst = newVRegI(env);
780 HReg srcL = iselDblExpr(env, e->Iex.Triop.arg2);
781 HReg srcR = iselDblExpr(env, e->Iex.Triop.arg3);
807 HReg dst = newVRegI(env);
808 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg2);
834 HReg dst = newVRegI(env);
835 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
871 HReg dst = newVRegI(env);
874 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1);
911 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2);
921 HReg src1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
922 HReg dst = newVRegI(env);
923 HReg src2 = iselIntExpr_R(env, e->Iex.Binop.arg2);
931 HReg hi8 = newVRegI(env);
932 HReg lo8 = newVRegI(env);
933 HReg hi8s = iselIntExpr_R(env, e->Iex.Binop.arg1);
934 HReg lo8s = iselIntExpr_R(env, e->Iex.Binop.arg2);
944 HReg hi16 = newVRegI(env);
945 HReg lo16 = newVRegI(env);
946 HReg hi16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
947 HReg lo16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
958 HReg a16 = newVRegI(env);
959 HReg b16 = newVRegI(env);
960 HReg a16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
961 HReg b16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
980 HReg
981 HReg fR = iselDblExpr(env, e->Iex.Binop.arg2);
982 HReg dst = newVRegI(env);
993 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
994 HReg dst = newVRegI(env);
1046 HReg dst = newVRegI(env);
1047 HReg src = iselIntExpr_R(env, expr32);
1062 HReg dst = newVRegI(env);
1076 HReg dst = newVRegI(env);
1090 HReg dst = newVRegI(env);
1100 HReg dst;
1114 HReg dst;
1129 HReg dst = newVRegI(env);
1130 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1140 HReg dst = newVRegI(env);
1141 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1151 HReg dst = newVRegI(env);
1152 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1158 HReg rHi, rLo;
1163 HReg rHi, rLo;
1169 HReg dst = newVRegI(env);
1170 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1178 HReg dst = newVRegI(env);
1187 HReg dst = newVRegI(env);
1196 HReg dst = newVRegI(env);
1197 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1205 HReg tmp = newVRegI(env);
1206 HReg dst = newVRegI(env);
1207 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1217 HReg dst = newVRegI(env);
1218 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1229 HReg dst = newVRegI(env);
1230 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1238 HReg dst = newVRegI(env);
1239 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1253 HReg rf = iselFltExpr(env, e->Iex.Unop.arg);
1254 HReg dst = newVRegI(env);
1286 HReg dst = newVRegI(env);
1295 HReg dst = newVRegI(env);
1311 HReg dst = newVRegI(env);
1325 HReg dst = newVRegI(env);
1344 HReg r = newVRegI(env);
1354 HReg rX = iselIntExpr_R(env, e->Iex.Mux0X.exprX);
1356 HReg dst = newVRegI(env);
1437 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1->Iex.Binop.arg1);
1438 HReg r2 = iselIntExpr_R(env, e->Iex.Binop.arg1
1453 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1454 HReg r2 = iselIntExpr_R(env, e->Iex.Binop.arg2->Iex.Binop.arg1 );
1464 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1471 HReg r1 = iselIntExpr_R(env, e);
1534 HReg r = iselIntExpr_R ( env, e );
1581 HReg r = iselIntExpr_R ( env, e );
1625 HReg r = iselIntExpr_R ( env, e );
1653 HReg r32 = lookupIRTemp(env, e->Iex.RdTmp.tmp);
1661 HReg r;
1714 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
1716 HReg tmp = newVRegI(env);
1729 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
1731 HReg tmp = newVRegI(env);
1751 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1765 HReg hi1, lo1, hi2, lo2;
1766 HReg tmp = newVRegI(env);
1780 HReg hi, lo;
1781 HReg tmp = newVRegI(env);
1797 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1805 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1807 HReg r = newVRegI(env);
1825 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1827 HReg r = newVRegI(env);
1848 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1866 HReg hi1, hi2, lo1, lo2;
1867 HReg tHi = newVRegI(env);
1868 HReg tLo = newVRegI(env);
1897 static void iselInt64Expr ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e )
1910 static void iselInt64Expr_wrk ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e )
1922 HReg tLo = newVRegI(env);
1923 HReg tHi = newVRegI(env);
1947 HReg tLo, tHi;
1965 HReg tLo = newVRegI(env);
1966 HReg tHi = newVRegI(env);
1980 HReg tLo = newVRegI(env);
1981 HReg tHi = newVRegI(env);
1992 HReg e0Lo, e0Hi;
1993 HReg tLo = newVRegI(env);
1994 HReg tHi = newVRegI(env);
2012 HReg e0Lo, e0Hi;
2013 HReg tLo = newVRegI(env);
2014 HReg tHi = newVRegI(env);
2033 HReg e0Lo, e0Hi, eXLo, eXHi;
2034 HReg tLo = newVRegI(env);
2035 HReg tHi = newVRegI(env);
2060 HReg tLo = newVRegI(env);
2061 HReg tHi = newVRegI(env);
2064 HReg rRight = iselIntExpr_R(env, e->Iex.Binop.arg2);
2080 HReg sHi, sLo;
2081 HReg tLo = newVRegI(env);
2082 HReg tHi = newVRegI(env);
2100 HReg xLo, xHi, yLo, yHi;
2101 HReg tLo = newVRegI(env);
2102 HReg tHi = newVRegI(env);
2124 HReg tLo = newVRegI(env);
2125 HReg tHi = newVRegI(env);
2126 HReg xLo, xHi;
2139 HReg xLo, xHi, yLo, yHi;
2140 HReg tLo = newVRegI(env);
2141 HReg tHi = newVRegI(env);
2185 HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2227 HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2254 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2255 HReg tLo = newVRegI(env);
2256 HReg tHi = newVRegI(env);
2399 HReg xLo, xHi, yLo, yHi;
2400 HReg tLo = newVRegI(env);
2401 HReg tHi = newVRegI(env);
2439 HReg xLo, xHi;
2440 HReg tLo = newVRegI(env);
2441 HReg tHi = newVRegI(env);
2468 HReg tLo = newVRegI(env);
2469 HReg tHi = newVRegI(env);
2470 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2481 HReg tLo = newVRegI(env);
2482 HReg tHi = newVRegI(env);
2483 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2493 HReg tLo = newVRegI(env);
2494 HReg tHi = newVRegI(env);
2495 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2509 HReg tLo = newVRegI(env);
2510 HReg tHi = newVRegI(env);
2511 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
2529 HReg tLo = newVRegI(env);
2530 HReg tHi = newVRegI(env);
2543 HReg tLo = newVRegI(env);
2544 HReg tHi = newVRegI(env);
2545 HReg sHi, sLo;
2558 HReg yLo, yHi;
2559 HReg tLo = newVRegI(env);
2560 HReg tHi = newVRegI(env);
2589 HReg xHi,xLo,yHi,yLo;
2590 HReg xBoth = newVRegI(env);
2591 HReg merged = newVRegI(env);
2592 HReg tmp2 = newVRegI(env);
2617 HReg srcLo, srcHi;
2618 HReg tmp1 = newVRegI(env);
2619 HReg tmp2 = newVRegI(env);
2642 HReg rf = iselDblExpr(env, e->Iex.Unop.arg);
2643 HReg tLo = newVRegI(env);
2644 HReg tHi = newVRegI(env);
2679 HReg xLo, xHi;
2680 HReg tLo = newVRegI(env);
2681 HReg tHi = newVRegI(env);
2702 HReg tLo = newVRegI(env);
2703 HReg tHi = newVRegI(env);
2727 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e )
2729 HReg r = iselFltExpr_wrk( env, e );
2739 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e )
2750 HReg res = newVRegF(env);
2762 HReg dst = newVRegF(env);
2763 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
2773 HReg res = newVRegF(env);
2782 HReg dst = newVRegF(env);
2794 HReg rf = iselFltExpr(env, e->Iex.Binop.arg2);
2795 HReg dst = newVRegF(env);
2844 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e )
2846 HReg r = iselDblExpr_wrk( env, e );
2856 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e )
2868 HReg freg = newVRegF(env);
2893 HReg res = newVRegF(env);
2903 HReg res = newVRegF(env);
2913 HReg res = newVRegF(env);
2934 HReg res = newVRegF(env);
2935 HReg srcL = iselDblExpr(env, e->Iex.Triop.arg2);
2936 HReg srcR = iselDblExpr(env, e->Iex.Triop.arg3);
2948 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2949 HReg dst = newVRegF(env);
2967 HReg dst = newVRegF(env);
2968 HReg rHi,rLo;
2998 HReg res = newVRegF(env);
2999 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
3018 HReg res = newVRegF(env);
3019 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3030 HReg dst = newVRegF(env);
3031 HReg ri = iselIntExpr_R(env, e->Iex.Unop.arg);
3043 HReg dst = newVRegF(env);
3044 HReg rHi, rLo;
3058 HReg res = iselFltExpr(env, e->Iex.Unop.arg);
3071 HReg rX = iselDblExpr(env, e->Iex.Mux0X.exprX);
3072 HReg r0 = iselDblExpr(env, e->Iex.Mux0X.expr0);
3073 HReg dst = newVRegF(env);
3090 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e )
3092 HReg r = iselVecExpr_wrk( env, e );
3103 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e )
3133 HReg dst = newVRegV(env);
3144 HReg dst = newVRegV(env);
3151 HReg dst = newVRegV(env);
3167 HReg dst = newVRegV(env);
3176 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3196 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3197 HReg tmp = newVRegV(env);
3198 HReg dst = newVRegV(env);
3219 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3220 HReg dst = newVRegV(env);
3221 HReg r32 = newVRegI(env);
3239 HReg arg;
3240 HReg vec0 = newVRegV(env);
3241 HReg vec1 = newVRegV(env);
3242 HReg dst = newVRegV(env);
3267 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3268 HReg dst = newVRegV(env);
3278 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3279 HReg dst = newVRegV(env);
3296 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3297 HReg dst = newVRegV(env);
3314 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3315 HReg dst = newVRegV(env);
3323 HReg dst = newVRegV(env);
3333 HReg rHi, rLo;
3334 HReg dst = newVRegV(env);
3353 HReg dst = newVRegV(env);
3354 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3355 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3366 HReg dst = newVRegV(env);
3367 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3368 HReg srcIhi, srcIlo;
3382 HReg r3, r2, r1, r0;
3387 HReg dst = newVRegV(env);
3416 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3417 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3418 HReg dst = newVRegV(env);
3436 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3437 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3438 HReg dst = newVRegV(env);
3456 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3457 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3458 HReg dst = newVRegV(env);
3475 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3476 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3477 HReg dst = newVRegV(env);
3544 HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
3545 HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
3546 HReg dst = newVRegV(env);
3568 HReg greg = iselVecExpr(env, e->Iex.Binop.arg1);
3571 HReg ereg = newVRegV(env);
3572 HReg dst = newVRegV(env);
3592 HReg rX = iselVecExpr(env, e->Iex.Mux0X.exprX);
3593 HReg r0 = iselVecExpr(env, e->Iex.Mux0X.expr0);
3594 HReg dst = newVRegV(env);
3644 HReg r = iselIntExpr_R(env, stmt->Ist.Store.data);
3651 HReg r = iselDblExpr(env, stmt->Ist.Store.data);
3657 HReg r = iselFltExpr(env, stmt->Ist.Store.data);
3662 HReg vHi, vLo, rA;
3673 HReg r = iselVecExpr(env, stmt->Ist.Store.data);
3696 HReg r = iselIntExpr_R(env, stmt->Ist.Put.data);
3705 HReg vHi, vLo;
3714 HReg vec = iselVecExpr(env, stmt->Ist.Put.data);
3720 HReg f32 = iselFltExpr(env, stmt->Ist.Put.data);
3727 HReg f64 = iselDblExpr(env, stmt->Ist.Put.data);
3745 HReg val = iselDblExpr(env, stmt->Ist.PutI.data);
3750 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3755 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3760 HReg rHi, rLo;
3785 HReg dst = lookupIRTemp(env, tmp);
3790 HReg src = am->Xam.IR.reg;
3800 HReg dst = lookupIRTemp(env, tmp);
3805 HReg rHi, rLo, dstHi, dstLo;
3814 HReg dst = lookupIRTemp(env, tmp);
3819 HReg dst = lookupIRTemp(env, tmp);
3820 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data);
3825 HReg dst = lookupIRTemp(env, tmp);
3826 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data);
3831 HReg dst = lookupIRTemp(env, tmp);
3832 HReg src = iselVecExpr(env, stmt->Ist.WrTmp.data);
3860 HReg dstHi, dstLo;
3871 HReg dst = lookupIRTemp(env, d->tmp);
3898 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
3899 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
3900 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
3925 HReg rDataHi = iselIntExpr_R(env, cas->dataHi);
3926 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
3927 HReg rExpdHi = iselIntExpr_R(env, cas->expdHi);
3928 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
3929 HReg rOldHi = lookupIRTemp(env, cas->oldHi);
3930 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
4011 HReg hreg, hregHI;
4033 /* Make up an IRTemp -> virtual HReg mapping. This doesn't
4036 env->vregmap = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4037 env->vregmapHI = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4046 hregHI = hreg = INVALID_HREG;
4051 case Ity_I32: hreg = mkHReg(j++, HRcInt32, True); break;
4052 case Ity_I64: hreg = mkHReg(j++, HRcInt32, True);
4055 case Ity_F64: hreg = mkHReg(j++, HRcFlt64, True); break;
4056 case Ity_V128: hreg = mkHReg(j++, HRcVec128, True); break;
4060 env->vregmap[i] = hreg;