Home | History | Annotate | Download | only in priv

Lines Matching refs:hreg

53    - A mapping from IRTemp to HReg.  This tells the insn selector
62 64-bit virtual HReg, which holds the high half
98 HReg* vregmap;
99 HReg* vregmapHI;
115 static HReg lookupIRTemp ( ISelEnv* env, IRTemp tmp )
122 static void lookupIRTempPair ( HReg* vrHI, HReg* vrLO,
141 static HReg newVRegI ( ISelEnv* env )
143 HReg reg = mkHReg(True/*virtual reg*/, HRcInt64, 0, env->vreg_ctr);
148 static HReg newVRegD ( ISelEnv* env )
150 HReg reg = mkHReg(True/*virtual reg*/, HRcFlt64, 0, env->vreg_ctr);
155 static HReg newVRegV ( ISelEnv* env )
157 HReg reg = mkHReg(True/*virtual reg*/, HRcVec128, 0, env->vreg_ctr);
195 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e );
196 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e );
198 static void iselInt128Expr_wrk ( /*OUT*/HReg* rHi, HReg* rLo,
200 static void iselInt128Expr ( /*OUT*/HReg* rHi, HReg* rLo,
203 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e );
204 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e );
206 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e );
207 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e );
209 static HReg iselF16Expr_wrk ( ISelEnv* env, IRExpr* e );
210 static HReg iselF16Expr ( ISelEnv* env, IRExpr* e );
212 static HReg iselV128Expr_wrk ( ISelEnv* env, IRExpr* e );
213 static HReg iselV128Expr ( ISelEnv* env, IRExpr* e );
215 static void iselV256Expr_wrk ( /*OUT*/HReg* rHi, HReg* rLo,
217 static void iselV256Expr ( /*OUT*/HReg* rHi, HReg* rLo,
262 static HReg mk_baseblock_128bit_access_addr ( ISelEnv* env, UInt off )
265 HReg r = newVRegI(env);
271 static HReg get_baseblock_register ( void )
278 static HReg widen_z_32_to_64 ( ISelEnv* env, HReg src )
280 HReg dst = newVRegI(env);
288 static HReg widen_s_16_to_64 ( ISelEnv* env, HReg src )
290 HReg dst = newVRegI(env);
299 static HReg widen_z_16_to_64 ( ISelEnv* env, HReg src )
301 HReg dst = newVRegI(env);
309 static HReg widen_s_32_to_64 ( ISelEnv* env, HReg src )
311 HReg dst = newVRegI(env);
320 static HReg widen_s_8_to_64 ( ISelEnv* env, HReg src )
322 HReg dst = newVRegI(env);
329 static HReg widen_z_8_to_64 ( ISelEnv* env, HReg src )
331 HReg dst = newVRegI(env);
413 HReg irrm = iselIntExpr_R(env, mode);
414 HReg tL = newVRegI(env);
415 HReg tR = newVRegI(env);
416 HReg t3 = newVRegI(env);
481 HReg argregs[ARM64_N_ARGREGS];
482 HReg tmpregs[ARM64_N_ARGREGS];
572 HReg r_vecRetAddr = INVALID_HREG;
878 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
893 HReg reg = iselIntExpr_R(env, e->Iex.Binop.arg1);
901 HReg reg1 = iselIntExpr_R(env, e->Iex.Binop.arg1);
902 HReg reg2 = iselIntExpr_R(env, e->Iex.Binop.arg2);
908 HReg reg = iselIntExpr_R(env, e);
958 HReg r = iselIntExpr_R ( env, e );
1230 HReg r = iselIntExpr_R ( env, e );
1281 HReg r = iselIntExpr_R ( env, e );
1307 HReg rTmp = lookupIRTemp(env, e->Iex.RdTmp.tmp);
1330 HReg rTmp = iselIntExpr_R(env, e->Iex.Unop.arg);
1341 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1351 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1361 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1371 HReg r1 = iselIntExpr_R(env, e->Iex.Unop.arg);
1386 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1409 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1426 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1427 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1428 HReg argL2 = widen_z_16_to_64(env, argL);
1429 HReg argR2 = widen_z_16_to_64(env, argR);
1440 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1441 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1442 HReg argL2 = widen_z_8_to_64(env, argL);
1443 HReg argR2 = widen_z_8_to_64(env, argR);
1458 static HReg iselIntExpr_R ( ISelEnv* env, IRExpr* e )
1460 HReg r = iselIntExpr_R_wrk(env, e);
1471 static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
1485 HReg dst = newVRegI(env);
1526 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1527 HReg dst = newVRegI(env);
1542 HReg dst = newVRegI(env);
1543 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1558 HReg dst = newVRegI(env);
1559 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1574 HReg dst = newVRegI(env);
1575 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1583 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1585 HReg dst = zx ? widen_z_32_to_64(env, argL)
1595 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1596 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1597 HReg dst = newVRegI(env);
1605 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1606 HReg extL = (isS ? widen_s_32_to_64 : widen_z_32_to_64)(env, argL);
1607 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1608 HReg extR = (isS ? widen_s_32_to_64 : widen_z_32_to_64)(env, argR);
1609 HReg dst = newVRegI(env);
1617 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1618 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1619 HReg dst = newVRegI(env);
1626 HReg hi32s = iselIntExpr_R(env, e->Iex.Binop.arg1);
1627 HReg lo32s = iselIntExpr_R(env, e->Iex.Binop.arg2);
1628 HReg lo32 = widen_z_32_to_64(env, lo32s);
1629 HReg hi32 = newVRegI(env);
1639 HReg dL = (isD ? iselDblExpr : iselFltExpr)(env, e->Iex.Binop.arg1);
1640 HReg dR = (isD ? iselDblExpr : iselFltExpr)(env, e->Iex.Binop.arg2);
1641 HReg dst = newVRegI(env);
1642 HReg imm = newVRegI(env);
1706 HReg src = (srcIsD ? iselDblExpr : iselFltExpr)
1708 HReg dst = newVRegI(env);
1730 HReg regL = iselIntExpr_R(env, e->Iex.Binop.arg1);
1731 HReg regR = iselIntExpr_R(env, e->Iex.Binop.arg2);
1732 HReg res = newVRegI(env);
1752 HReg src = iselIntExpr_R(env, arg);
1753 HReg dst = widen_z_16_to_64(env, src);
1761 HReg dst = newVRegI(env);
1768 HReg src = iselIntExpr_R(env, arg);
1769 HReg dst = widen_z_32_to_64(env, src);
1778 HReg dst = newVRegI(env);
1785 HReg src = iselIntExpr_R(env, arg);
1786 HReg dst = widen_z_8_to_64(env, src);
1790 HReg rHi, rLo;
1796 HReg src = iselIntExpr_R(env, arg);
1797 HReg dst = widen_s_8_to_64(env, src);
1802 HReg src = iselIntExpr_R(env, arg);
1803 HReg dst = widen_s_16_to_64(env, src);
1808 HReg src = iselIntExpr_R(env, arg);
1809 HReg dst = widen_s_32_to_64(env, src);
1814 HReg dst = newVRegI(env);
1815 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1820 HReg dst = newVRegI(env);
1821 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1830 HReg dst = newVRegI(env);
1831 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1840 HReg dst = newVRegI(env);
1841 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
1852 HReg dst = newVRegI(env);
1853 HReg pre = iselIntExpr_R(env, e->Iex.Unop.arg);
1854 HReg src = widen_z_32_to_64(env, pre);
1863 HReg dst = newVRegI(env);
1864 HReg src = iselV128Expr(env, e->Iex.Unop.arg);
1870 HReg dst = newVRegI(env);
1871 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
1876 HReg dst = newVRegI(env);
1877 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
1886 HReg zero = newVRegI(env);
1887 HReg one = newVRegI(env);
1888 HReg dst = newVRegI(env);
1912 HReg src = iselV128Expr(env, e->Iex.Unop.arg);
1913 HReg tmp = newVRegV(env);
1914 HReg dst = newVRegI(env);
1951 HReg dst = newVRegI(env);
1954 HReg src = lookupIRTemp(env, e->Iex.Unop.arg->Iex.RdTmp.tmp);
1959 HReg zero = newVRegI(env);
1960 HReg one = newVRegI(env);
1985 HReg dst = newVRegI(env);
1993 HReg dst = newVRegI(env);
2001 HReg dst = newVRegI(env);
2009 HReg dst = newVRegI(env);
2020 HReg dst = newVRegI(env);
2050 HReg dst = newVRegI(env);
2067 HReg r1 = iselIntExpr_R(env, e->Iex.ITE.iftrue);
2068 HReg r0 = iselIntExpr_R(env, e->Iex.ITE.iffalse);
2069 HReg dst = newVRegI(env);
2097 static void iselInt128Expr ( HReg* rHi, HReg* rLo,
2111 static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo,
2124 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
2125 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
2126 HReg dstLo = newVRegI(env);
2127 HReg dstHi = newVRegI(env);
2155 static HReg iselV128Expr ( ISelEnv* env, IRExpr* e )
2157 HReg r = iselV128Expr_wrk( env, e );
2164 static HReg iselV128Expr_wrk ( ISelEnv* env, IRExpr* e )
2178 HReg res = newVRegV(env);
2216 HReg res = newVRegV(env);
2217 HReg rN = iselIntExpr_R(env, e->Iex.Load.addr);
2226 HReg addr = mk_baseblock_128bit_access_addr(env, offs);
2227 HReg res = newVRegV(env);
2247 HReg src = iselV128Expr(env, e->Iex.Unop.arg);
2248 HReg imm = newVRegV(env);
2249 HReg res = newVRegV(env);
2275 HReg res = newVRegV(env);
2276 HReg arg = iselV128Expr(env, e->Iex.Unop.arg);
2329 HReg arg = iselV128Expr(env, e->Iex.Unop.arg);
2330 HReg zero = newVRegV(env);
2331 HReg res = newVRegV(env);
2349 HReg vHi, vLo;
2354 HReg res = newVRegV(env);
2355 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
2360 HReg res = newVRegV(env);
2361 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
2369 HReg res = newVRegV(env);
2370 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
2378 HReg res = newVRegV(env);
2379 HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
2396 HReg arg = iselV128Expr(env, e->Iex.Binop.arg2);
2397 HReg res = newVRegV(env);
2406 HReg res = newVRegV(env);
2407 HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
2408 HReg argR = iselIntExpr_R(env, e->Iex.Binop.arg2);
2467 HReg res = newVRegV(env);
2468 HReg argL = iselV128Expr(env, e->Iex.Binop.arg1);
2469 HReg argR = iselV128Expr(env, e->Iex.Binop.arg2);
2619 HReg res = newVRegV(env);
2620 HReg argL = iselV128Expr(env, e->Iex.Binop.arg1);
2621 HReg argR = iselV128Expr(env, e->Iex.Binop.arg2);
2726 HReg src = iselV128Expr(env, argL);
2727 HReg dst = newVRegV(env);
2829 HReg src = iselV128Expr(env, argL);
2830 HReg dst = newVRegV(env);
2831 HReg fpsr = newVRegI(env);
2851 HReg scratch = newVRegV(env);
2887 HReg src = iselV128Expr(env, argL);
2888 HReg srcZ = newVRegV(env);
2892 HReg dst = newVRegV(env);
2917 HReg iSrcL = iselIntExpr_R(env, e->Iex.Binop.arg1);
2918 HReg iSrcR = iselIntExpr_R(env, e->Iex.Binop.arg2);
2919 HReg vSrcL = newVRegV(env);
2920 HReg vSrcR = newVRegV(env);
2921 HReg dst = newVRegV(env);
2962 HReg argL = iselV128Expr(env, triop->arg2);
2963 HReg argR = iselV128Expr(env, triop->arg3);
2964 HReg dst = newVRegV(env);
2982 HReg srcHi = iselV128Expr(env, argHi);
2983 HReg srcLo = iselV128Expr(env, argLo);
2984 HReg dst = newVRegV(env);
3009 static HReg iselDblExpr ( ISelEnv* env, IRExpr* e )
3011 HReg r = iselDblExpr_wrk( env, e );
3021 static HReg iselDblExpr_wrk ( ISelEnv* env, IRExpr* e )
3034 HReg src = newVRegI(env);
3035 HReg dst = newVRegD(env);
3041 HReg src = newVRegI(env);
3042 HReg dst = newVRegD(env);
3054 HReg addr = iselIntExpr_R(env, e->Iex.Load.addr);
3055 HReg res = newVRegD(env);
3063 HReg rD = newVRegD(env);
3064 HReg rN = get_baseblock_register();
3073 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3074 HReg dst = newVRegD(env);
3079 HReg src = iselDblExpr(env, e->Iex.Unop.arg);
3080 HReg dst = newVRegD(env);
3085 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
3086 HReg dst = newVRegD(env);
3091 HReg src = iselF16Expr(env, e->Iex.Unop.arg);
3092 HReg dst = newVRegD(env);
3101 HReg src = iselIntExpr_R(env, e->Iex.Unop.arg);
3102 HReg dst = newVRegD(env);
3118 HReg src = iselDblExpr(env, e->Iex.Binop.arg2);
3119 HReg dst = newVRegD(env);
3135 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3137 HReg dstS = newVRegD(env);
3157 HReg argL = iselDblExpr(env, triop->arg2);
3158 HReg argR = iselDblExpr(env, triop->arg3);
3159 HReg dst = newVRegD(env);
3169 HReg r1 = iselDblExpr(env, e->Iex.ITE.iftrue);
3170 HReg r0 = iselDblExpr(env, e->Iex.ITE.iffalse);
3171 HReg dst = newVRegD(env);
3192 static HReg iselFltExpr ( ISelEnv* env, IRExpr* e )
3194 HReg r = iselFltExpr_wrk( env, e );
3204 static HReg iselFltExpr_wrk ( ISelEnv* env, IRExpr* e )
3221 HReg src = newVRegI(env);
3222 HReg dst = newVRegD(env);
3228 HReg src = newVRegI(env);
3229 HReg dst = newVRegD(env);
3241 HReg addr = iselIntExpr_R(env, e->Iex.Load.addr);
3242 HReg res = newVRegD(env);
3250 HReg rD = newVRegD(env);
3251 HReg rN = get_baseblock_register();
3260 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
3261 HReg dst = newVRegD(env);
3266 HReg src = iselFltExpr(env, e->Iex.Unop.arg);
3267 HReg dst = newVRegD(env);
3272 HReg src = iselF16Expr(env, e->Iex.Unop.arg);
3273 HReg dst = newVRegD(env);
3287 HReg src = iselFltExpr(env, e->Iex.Binop.arg2);
3288 HReg dst = newVRegD(env);
3301 HReg srcD = iselDblExpr(env, e->Iex.Binop.arg2);
3303 HReg dstS = newVRegD(env);
3319 HReg srcI = iselIntExpr_R(env, e->Iex.Binop.arg2);
3321 HReg dstS = newVRegD(env);
3341 HReg argL = iselFltExpr(env, triop->arg2);
3342 HReg argR = iselFltExpr(env, triop->arg3);
3343 HReg dst = newVRegD(env);
3353 HReg r1 = iselFltExpr(env, e->Iex.ITE.iftrue);
3354 HReg r0 = iselFltExpr(env, e->Iex.ITE.iffalse);
3355 HReg dst = newVRegD(env);
3376 static HReg iselF16Expr ( ISelEnv* env, IRExpr* e )
3378 HReg r = iselF16Expr_wrk( env, e );
3388 static HReg iselF16Expr_wrk ( ISelEnv* env, IRExpr* e )
3397 HReg rD = newVRegD(env);
3398 HReg rN = get_baseblock_register();
3407 HReg srcS = iselFltExpr(env, e->Iex.Binop.arg2);
3409 HReg dstH = newVRegD(env);
3414 HReg srcD = iselDblExpr(env, e->Iex.Binop.arg2);
3416 HReg dstH = newVRegD(env);
3434 static void iselV256Expr ( /*OUT*/HReg* rHi, HReg* rLo,
3445 static void iselV256Expr_wrk ( /*OUT*/HReg* rHi, /*OUT*/HReg* rLo,
3482 HReg argL = iselV128Expr(env, e->Iex.Binop.arg1);
3483 HReg argR = iselV128Expr(env, e->Iex.Binop.arg2);
3484 HReg fpsr = newVRegI(env);
3485 HReg resHi = newVRegV(env);
3486 HReg resLo = newVRegV(env);
3563 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data);
3569 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data);
3575 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data);
3581 HReg rD = iselIntExpr_R(env, stmt->Ist.Store.data);
3587 HReg qD = iselV128Expr(env, stmt->Ist.Store.data);
3588 HReg addr = iselIntExpr_R(env, stmt->Ist.Store.addr);
3593 HReg dD = iselDblExpr(env, stmt->Ist.Store.data);
3594 HReg addr = iselIntExpr_R(env, stmt->Ist.Store.addr);
3599 HReg sD = iselFltExpr(env, stmt->Ist.Store.data);
3600 HReg addr = iselIntExpr_R(env, stmt->Ist.Store.addr);
3613 HReg rD = iselIntExpr_R(env, stmt->Ist.Put.data);
3619 HReg rD = iselIntExpr_R(env, stmt->Ist.Put.data);
3625 HReg rD = iselIntExpr_R(env, stmt->Ist.Put.data);
3631 HReg rD = iselIntExpr_R(env, stmt->Ist.Put.data);
3637 HReg qD = iselV128Expr(env, stmt->Ist.Put.data);
3638 HReg addr = mk_baseblock_128bit_access_addr(env, offs);
3643 HReg dD = iselDblExpr(env, stmt->Ist.Put.data);
3644 HReg bbp = get_baseblock_register();
3649 HReg sD = iselFltExpr(env, stmt->Ist.Put.data);
3650 HReg bbp = get_baseblock_register();
3655 HReg hD = iselF16Expr(env, stmt->Ist.Put.data);
3656 HReg bbp = get_baseblock_register();
3672 HReg dst = lookupIRTemp(env, tmp);
3673 HReg rD = iselIntExpr_R(env, stmt->Ist.WrTmp.data);
3688 HReg zero = newVRegI(env);
3689 HReg one = newVRegI(env);
3690 HReg dst = lookupIRTemp(env, tmp);
3698 HReg src = iselDblExpr(env, stmt->Ist.WrTmp.data);
3699 HReg dst = lookupIRTemp(env, tmp);
3704 HReg src = iselFltExpr(env, stmt->Ist.WrTmp.data);
3705 HReg dst = lookupIRTemp(env, tmp);
3710 HReg src = iselV128Expr(env, stmt->Ist.WrTmp.data);
3711 HReg dst = lookupIRTemp(env, tmp);
3716 HReg srcHi, srcLo, dstHi, dstLo;
3770 HReg dst = lookupIRTemp(env, d->tmp);
3783 HReg dst = lookupIRTemp(env, d->tmp);
3784 HReg tmp = newVRegI(env); // the address of the returned value
3809 HReg r_dst = lookupIRTemp(env, res);
3810 HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
3830 HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata);
3831 HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
3850 HReg r_res = lookupIRTemp(env, res);
3878 HReg rAddr = iselIntExpr_R(env, cas->addr);
3879 HReg rExpd = iselIntExpr_R(env, cas->expdLo);
3880 HReg rData = iselIntExpr_R(env, cas->dataLo);
3897 HReg rResult = hregARM64_X1();
3907 HReg rOld = lookupIRTemp(env, cas->oldLo);
3969 HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst));
3986 HReg r = iselIntExpr_R(env, IRExpr_Const(stmt->Ist.Exit.dst));
4043 HReg r = iselIntExpr_R(env, next);
4054 HReg r = iselIntExpr_R(env, next);
4080 HReg r = iselIntExpr_R(env, next);
4115 HReg hreg, hregHI;
4139 /* Make up an IRTemp -> virtual HReg mapping. This doesn't
4142 env->vregmap = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg));
4143 env->vregmapHI = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg));
4155 hregHI = hreg = INVALID_HREG;
4159 hreg = mkHReg(True, HRcInt64, 0, j++);
4162 hreg = mkHReg(True, HRcInt64, 0, j++);
4168 hreg = mkHReg(True, HRcFlt64, 0, j++);
4171 hreg = mkHReg(True, HRcVec128, 0, j++);
4174 hreg = mkHReg(True, HRcVec128, 0, j++);
4181 env->vregmap[i] = hreg;