Lines Matching defs:hreg
138 - A mapping from IRTemp to HReg. This tells the insn selector
147 32-bit virtual HReg, which holds the high half
163 HReg* vregmap;
164 HReg* vregmapHI;
176 static HReg lookupIRTemp ( ISelEnv* env, IRTemp tmp )
183 static void lookupIRTemp64 ( HReg* vrHI, HReg* vrLO, ISelEnv* env, IRTemp tmp )
201 static HReg newVRegI ( ISelEnv* env )
203 HReg reg = mkHReg(env->vreg_ctr, HRcInt32, True/*virtual reg*/);
208 static HReg newVRegF ( ISelEnv* env )
210 HReg reg = mkHReg(env->vreg_ctr, HRcFlt64, True/*virtual reg*/);
215 static HReg newVRegV ( ISelEnv* env )
217 HReg reg = mkHReg(env->vreg_ctr, HRcVec128, True/*virtual reg*/);
242 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e );
243 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e );
248 static void iselInt64Expr_wrk ( HReg* rHi, HReg* rLo,
250 static void iselInt64Expr ( HReg* rHi, HReg* rLo,
256 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e );
257 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e );
259 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e );
260 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e );
262 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e );
263 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e );
272 static X86Instr* mk_iMOVsd_RR ( HReg src, HReg dst )
282 static X86Instr* mk_vMOVsd_RR ( HReg src, HReg dst )
336 HReg rHi, rLo;
393 HReg argregs[3];
394 HReg tmpregs[3];
581 HReg tmp, roff;
645 HReg rrm = iselIntExpr_R(env, mode);
646 HReg rrm2 = newVRegI(env);
671 static HReg do_sse_Not128 ( ISelEnv* env, HReg src )
673 HReg dst = newVRegV(env);
693 static void roundToF64 ( ISelEnv* env, HReg reg )
721 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e )
723 HReg r = iselIntExpr_R_wrk(env, e);
734 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
750 HReg dst = newVRegI(env);
779 HReg junk = newVRegF(env);
780 HReg dst = newVRegI(env);
781 HReg srcL = iselDblExpr(env, e->Iex.Triop.arg2);
782 HReg srcR = iselDblExpr(env, e->Iex.Triop.arg3);
808 HReg dst = newVRegI(env);
809 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg2);
835 HReg dst = newVRegI(env);
836 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
872 HReg dst = newVRegI(env);
875 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1);
912 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2);
922 HReg src1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
923 HReg dst = newVRegI(env);
924 HReg src2 = iselIntExpr_R(env, e->Iex.Binop.arg2);
932 HReg hi8 = newVRegI(env);
933 HReg lo8 = newVRegI(env);
934 HReg hi8s = iselIntExpr_R(env, e->Iex.Binop.arg1);
935 HReg lo8s = iselIntExpr_R(env, e->Iex.Binop.arg2);
945 HReg hi16 = newVRegI(env);
946 HReg lo16 = newVRegI(env);
947 HReg hi16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
948 HReg lo16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
959 HReg a16 = newVRegI(env);
960 HReg b16 = newVRegI(env);
961 HReg a16s = iselIntExpr_R(env, e->Iex.Binop.arg1);
962 HReg b16s = iselIntExpr_R(env, e->Iex.Binop.arg2);
981 HReg fL = iselDblExpr(env, e->Iex.Binop.arg1);
982 HReg fR = iselDblExpr(env, e->Iex.Binop.arg2);
983 HReg dst = newVRegI(env);
994 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
995 HReg dst = newVRegI(env);
1047 HReg dst = newVRegI(env);
1048 HReg src = iselIntExpr_R(env, expr32);
1063 HReg dst = newVRegI(env);
1077 HReg dst = newVRegI(env);
1091 HReg dst = newVRegI(env);
1101 HReg dst;
1115 HReg dst;
1130 HReg dst = newVRegI(env);
1131 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1141 HReg dst = newVRegI(env);
1142 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1152 HReg dst = newVRegI(env);
1153 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1159 HReg rHi, rLo;
1164 HReg rHi, rLo;
1170 HReg dst = newVRegI(env);
1171 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1179 HReg dst = newVRegI(env);
1188 HReg dst = newVRegI(env);
1197 HReg dst = newVRegI(env);
1198 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1206 HReg tmp = newVRegI(env);
1207 HReg dst = newVRegI(env);
1208 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1218 HReg dst = newVRegI(env);
1219 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1230 HReg dst = newVRegI(env);
1231 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1239 HReg dst = newVRegI(env);
1240 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
1254 HReg rf = iselFltExpr(env, e->Iex.Unop.arg);
1255 HReg dst = newVRegI(env);
1287 HReg dst = newVRegI(env);
1296 HReg dst = newVRegI(env);
1312 HReg dst = newVRegI(env);
1326 HReg dst = newVRegI(env);
1345 HReg r = newVRegI(env);
1355 HReg rX = iselIntExpr_R(env, e->Iex.Mux0X.exprX);
1357 HReg dst = newVRegI(env);
1438 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1->Iex.Binop.arg1);
1439 HReg
1454 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1455 HReg r2 = iselIntExpr_R(env, e->Iex.Binop.arg2->Iex.Binop.arg1 );
1465 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1472 HReg r1 = iselIntExpr_R(env, e);
1535 HReg r = iselIntExpr_R ( env, e );
1582 HReg r = iselIntExpr_R ( env, e );
1626 HReg r = iselIntExpr_R ( env, e );
1654 HReg r32 = lookupIRTemp(env, e->Iex.RdTmp.tmp);
1662 HReg r;
1715 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
1717 HReg tmp = newVRegI(env);
1730 HReg r0 = iselIntExpr_R(env, mi.bindee[0]);
1732 HReg tmp = newVRegI(env);
1752 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1766 HReg hi1, lo1, hi2, lo2;
1767 HReg tmp = newVRegI(env);
1781 HReg hi, lo;
1782 HReg tmp = newVRegI(env);
1798 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1806 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1808 HReg r = newVRegI(env);
1826 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1828 HReg r = newVRegI(env);
1868 HReg r1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
1886 HReg hi1, hi2, lo1, lo2;
1887 HReg tHi = newVRegI(env);
1888 HReg tLo = newVRegI(env);
1917 static void iselInt64Expr ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e )
1930 static void iselInt64Expr_wrk ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e )
1942 HReg tLo = newVRegI(env);
1943 HReg tHi = newVRegI(env);
1967 HReg tLo, tHi;
1985 HReg tLo = newVRegI(env);
1986 HReg tHi = newVRegI(env);
2000 HReg tLo = newVRegI(env);
2001 HReg tHi = newVRegI(env);
2012 HReg e0Lo, e0Hi;
2013 HReg tLo = newVRegI(env);
2014 HReg tHi = newVRegI(env);
2032 HReg e0Lo, e0Hi;
2033 HReg tLo = newVRegI(env);
2034 HReg tHi = newVRegI(env);
2053 HReg e0Lo, e0Hi, eXLo, eXHi;
2054 HReg tLo = newVRegI(env);
2055 HReg tHi = newVRegI(env);
2080 HReg tLo = newVRegI(env);
2081 HReg tHi = newVRegI(env);
2084 HReg rRight = iselIntExpr_R(env, e->Iex.Binop.arg2);
2100 HReg sHi, sLo;
2101 HReg tLo = newVRegI(env);
2102 HReg tHi = newVRegI(env);
2120 HReg xLo, xHi, yLo, yHi;
2121 HReg tLo = newVRegI(env);
2122 HReg tHi = newVRegI(env);
2144 HReg tLo = newVRegI(env);
2145 HReg tHi = newVRegI(env);
2146 HReg xLo, xHi;
2159 HReg xLo, xHi, yLo, yHi;
2160 HReg tLo = newVRegI(env);
2161 HReg tHi = newVRegI(env);
2205 HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2247 HReg rAmt, sHi, sLo, tHi, tLo, tTemp;
2274 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2275 HReg tLo = newVRegI(env);
2276 HReg tHi = newVRegI(env);
2423 HReg xLo, xHi, yLo, yHi;
2424 HReg tLo = newVRegI(env);
2425 HReg tHi = newVRegI(env);
2463 HReg xLo, xHi;
2464 HReg tLo = newVRegI(env);
2465 HReg tHi = newVRegI(env);
2492 HReg tLo = newVRegI(env);
2493 HReg tHi = newVRegI(env);
2494 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2505 HReg tLo = newVRegI(env);
2506 HReg tHi = newVRegI(env);
2507 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2517 HReg tLo = newVRegI(env);
2518 HReg tHi = newVRegI(env);
2519 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
2533 HReg tLo = newVRegI(env);
2534 HReg tHi = newVRegI(env);
2535 HReg vec = iselVecExpr(env, e->Iex.Unop.arg);
2553 HReg tLo = newVRegI(env);
2554 HReg tHi = newVRegI(env);
2567 HReg tLo = newVRegI(env);
2568 HReg tHi = newVRegI(env);
2569 HReg sHi, sLo;
2582 HReg yLo, yHi;
2583 HReg tLo = newVRegI(env);
2584 HReg tHi = newVRegI(env);
2613 HReg xHi,xLo,yHi,yLo;
2614 HReg xBoth = newVRegI(env);
2615 HReg merged = newVRegI(env);
2616 HReg tmp2 = newVRegI(env);
2641 HReg srcLo, srcHi;
2642 HReg tmp1 = newVRegI(env);
2643 HReg tmp2 = newVRegI(env);
2666 HReg rf = iselDblExpr(env, e->Iex.Unop.arg);
2667 HReg tLo = newVRegI(env);
2668 HReg tHi = newVRegI(env);
2703 HReg xLo, xHi;
2704 HReg tLo = newVRegI(env);
2705 HReg tHi = newVRegI(env);
2726 HReg tLo = newVRegI(env);
2727 HReg tHi = newVRegI(env);
2751 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e )
2753 HReg r = iselFltExpr_wrk( env, e );
2763 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e )
2774 HReg res = newVRegF(env);
2786 HReg dst = newVRegF(env);
2787 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
2797 HReg res = newVRegF(env);
2806 HReg dst = newVRegF(env);
2818 HReg rf = iselFltExpr(env, e->Iex.Binop.arg2);
2819 HReg dst = newVRegF(env);
2868 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e )
2870 HReg r = iselDblExpr_wrk( env, e );
2880 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e )
2892 HReg freg = newVRegF(env);
2917 HReg res = newVRegF(env);
2927 HReg res = newVRegF(env);
2937 HReg res = newVRegF(env);
2958 HReg res = newVRegF(env);
2959 HReg srcL = iselDblExpr(env, e->Iex.Triop.arg2);
2960 HReg srcR = iselDblExpr(env, e->Iex.Triop.arg3);
2972 HReg rf = iselDblExpr(env, e->Iex.Binop.arg2);
2973 HReg dst = newVRegF(env);
2991 HReg dst = newVRegF(env);
2992 HReg rHi,rLo;
3022 HReg res = newVRegF(env);
3023 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
3042 HReg res = newVRegF(env);
3043 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3054 HReg dst = newVRegF(env);
3055 HReg ri = iselIntExpr_R(env, e->Iex.Unop.arg);
3067 HReg dst = newVRegF(env);
3068 HReg rHi, rLo;
3082 HReg res = iselFltExpr(env, e->Iex.Unop.arg);
3095 HReg rX = iselDblExpr(env, e->Iex.Mux0X.exprX);
3096 HReg r0 = iselDblExpr(env, e->Iex.Mux0X.expr0);
3097 HReg dst = newVRegF(env);
3114 static HReg iselVecExpr ( ISelEnv* env, IRExpr* e )
3116 HReg r = iselVecExpr_wrk( env, e );
3127 static HReg iselVecExpr_wrk ( ISelEnv* env, IRExpr* e )
3158 HReg dst = newVRegV(env);
3169 HReg dst = newVRegV(env);
3176 HReg dst = newVRegV(env);
3192 HReg dst = newVRegV(env);
3201 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3221 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3222 HReg tmp = newVRegV(env);
3223 HReg dst = newVRegV(env);
3244 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3245 HReg dst = newVRegV(env);
3246 HReg r32 = newVRegI(env);
3264 HReg arg;
3265 HReg vec0 = newVRegV(env);
3266 HReg vec1 = newVRegV(env);
3267 HReg dst = newVRegV(env);
3292 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3293 HReg dst = newVRegV(env);
3303 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3304 HReg dst = newVRegV(env);
3321 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3322 HReg dst = newVRegV(env);
3339 HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
3340 HReg dst = newVRegV(env);
3348 HReg dst = newVRegV(env);
3358 HReg rHi, rLo;
3359 HReg dst = newVRegV(env);
3378 HReg dst = newVRegV(env);
3379 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3380 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3391 HReg dst = newVRegV(env);
3392 HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
3393 HReg srcIhi, srcIlo;
3407 HReg r3, r2, r1, r0;
3412 HReg dst = newVRegV(env);
3441 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3442 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3443 HReg dst = newVRegV(env);
3461 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3462 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3463 HReg dst = newVRegV(env);
3481 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3482 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3483 HReg dst = newVRegV(env);
3500 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3501 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3502 HReg dst = newVRegV(env);
3569 HReg arg1 = iselVecExpr(env, e->Iex.Binop.arg1);
3570 HReg arg2 = iselVecExpr(env, e->Iex.Binop.arg2);
3571 HReg dst = newVRegV(env);
3593 HReg greg = iselVecExpr(env, e->Iex.Binop.arg1);
3596 HReg ereg = newVRegV(env);
3597 HReg dst = newVRegV(env);
3620 HReg dst = newVRegV(env);
3621 HReg argL = iselVecExpr(env, e->Iex.Binop.arg1);
3622 HReg argR = iselVecExpr(env, e->Iex.Binop.arg2);
3623 HReg argp = newVRegI(env);
3670 HReg rX = iselVecExpr(env, e->Iex.Mux0X.exprX);
3671 HReg r0 = iselVecExpr(env, e->Iex.Mux0X.expr0);
3672 HReg dst = newVRegV(env);
3722 HReg r = iselIntExpr_R(env, stmt->Ist.Store.data);
3729 HReg r = iselDblExpr(env, stmt->Ist.Store.data);
3735 HReg r = iselFltExpr(env, stmt->Ist.Store.data);
3740 HReg vHi, vLo, rA;
3751 HReg r = iselVecExpr(env, stmt->Ist.Store.data);
3774 HReg r = iselIntExpr_R(env, stmt->Ist.Put.data);
3783 HReg vHi, vLo;
3792 HReg vec = iselVecExpr(env, stmt->Ist.Put.data);
3798 HReg f32 = iselFltExpr(env, stmt->Ist.Put.data);
3805 HReg f64 = iselDblExpr(env, stmt->Ist.Put.data);
3823 HReg val = iselDblExpr(env, stmt->Ist.PutI.data);
3828 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3833 HReg r = iselIntExpr_R(env, stmt->Ist.PutI.data);
3838 HReg rHi, rLo;
3863 HReg dst = lookupIRTemp(env, tmp);
3868 HReg src = am->Xam.IR.reg;
3878 HReg dst = lookupIRTemp(env, tmp);
3883 HReg rHi, rLo, dstHi, dstLo;
3892 HReg dst = lookupIRTemp(env, tmp);
3897 HReg dst = lookupIRTemp(env, tmp);
3898 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data);
3903 HReg dst = lookupIRTemp(env, tmp);
3904 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data);
3909 HReg dst = lookupIRTemp(env, tmp);
3910 HReg src = iselVecExpr(env, stmt->Ist.WrTmp.data);
3938 HReg dstHi, dstLo;
3949 HReg dst = lookupIRTemp(env, d->tmp);
3976 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
3977 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
3978 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
4003 HReg rDataHi = iselIntExpr_R(env, cas->dataHi);
4004 HReg rDataLo = iselIntExpr_R(env, cas->dataLo);
4005 HReg rExpdHi = iselIntExpr_R(env, cas->expdHi);
4006 HReg rExpdLo = iselIntExpr_R(env, cas->expdLo);
4007 HReg rOldHi = lookupIRTemp(env, cas->oldHi);
4008 HReg rOldLo = lookupIRTemp(env, cas->oldLo);
4089 HReg hreg, hregHI;
4111 /* Make up an IRTemp -> virtual HReg mapping. This doesn't
4114 env->vregmap = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4115 env->vregmapHI = LibVEX_Alloc(env->n_vregmap * sizeof(HReg));
4124 hregHI = hreg = INVALID_HREG;
4129 case Ity_I32: hreg = mkHReg(j++, HRcInt32, True); break;
4130 case Ity_I64: hreg = mkHReg(j++, HRcInt32, True);
4133 case Ity_F64: hreg = mkHReg(j++, HRcFlt64, True); break;
4134 case Ity_V128: hreg = mkHReg(j++, HRcVec128, True); break;
4138 env->vregmap[i] = hreg;