Home | History | Annotate | Download | only in exp-ptrcheck

Lines Matching defs:pce

3641    Shadow IRTemps are therefore allocated on demand.  pce.tmpMap is a
3659 both the table in pce->sb and to our auxiliary mapping. Note that
3660 newTemp may cause pce->tmpMap to resize, hence previous results
3661 from VG_(indexXA)(pce->tmpMap) are invalidated. */
3662 static IRTemp newTemp ( PCEnv* pce, IRType ty, TempKind kind )
3666 IRTemp tmp = newIRTemp(pce->sb->tyenv, ty);
3669 newIx = VG_(addToXA)( pce->qmpMap, &ent );
3676 static IRTemp findShadowTmp ( PCEnv* pce, IRTemp orig )
3681 ent = (TempMapEnt*)VG_(indexXA)( pce->qmpMap, (Word)orig );
3684 IRTemp shadow = newTemp( pce, pce->gWordTy, Shad );
3685 /* newTemp may cause pce->tmpMap to resize, hence previous results
3687 ent = (TempMapEnt*)VG_(indexXA)( pce->qmpMap, (Word)orig );
3705 static IRTemp newShadowTmp ( PCEnv* pce, IRTemp orig )
3710 ent = (TempMapEnt*)VG_(indexXA)( pce->qmpMap, (Word)orig );
3713 IRTemp shadow = newTemp( pce, pce->gWordTy, Shad );
3714 /* newTemp may cause pce->tmpMap to resize, hence previous results
3716 ent = (TempMapEnt*)VG_(indexXA)( pce->qmpMap, (Word)orig );
3741 //zz static Bool isOriginalAtom ( PCEnv* pce, IRAtom* a1 )
3745 //zz if (a1->tag == Iex_RdTmp && a1->Iex.RdTmp.tmp < pce->n_originalTmps)
3752 //zz static Bool isShadowAtom ( PCEnv* pce, IRAtom* a1 )
3756 //zz if (a1->tag == Iex_RdTmp && a1->Iex.RdTmp.tmp >= pce->n_originalTmps)
3778 static inline void stmt ( HChar cat, PCEnv* pce, IRStmt* st ) {
3779 if (pce->trace) {
3784 addStmtToIRSB(pce->sb, st);
3789 void assign ( HChar cat, PCEnv* pce, IRTemp tmp, IRExpr* expr ) {
3790 stmt(cat, pce, IRStmt_WrTmp(tmp,expr));
3811 static IRAtom* assignNew ( HChar cat, PCEnv* pce, IRType ty, IRExpr* e ) {
3813 IRType tyE = typeOfIRExpr(pce->sb->tyenv, e);
3815 t = newTemp(pce, ty, Shad);
3816 assign(cat, pce, t, e);
3889 static IRTemp gen_dirty_W_W ( PCEnv* pce, void* h_fn, HChar* h_nm,
3895 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
3896 res = newTemp(pce, pce->gWordTy, Shad);
3900 stmt( 'I', pce, IRStmt_Dirty(di) );
3906 static IRTemp gen_dirty_W_WW ( PCEnv* pce, void* h_fn, HChar* h_nm,
3913 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce
3914 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
3915 res = newTemp(pce, pce->gWordTy, Shad);
3919 stmt( 'I', pce, IRStmt_Dirty(di) );
3925 static IRTemp gen_dirty_W_WWW ( PCEnv* pce, void* h_fn, HChar* h_nm,
3933 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
3934 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
3935 tl_assert(typeOfIRExpr(pce->sb->tyenv, a3) == pce->gWordTy);
3936 res = newTemp(pce, pce->gWordTy, Shad);
3940 stmt( 'I', pce, IRStmt_Dirty(di) );
3946 static IRTemp gen_dirty_W_WWWW ( PCEnv* pce, void* h_fn, HChar* h_nm,
3956 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
3957 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
3958 tl_assert(typeOfIRExpr(pce->sb->tyenv, a3) == pce->gWordTy);
3959 tl_assert(typeOfIRExpr(pce->sb->tyenv, a4) == pce->gWordTy);
3960 res = newTemp(pce, pce->gWordTy, Shad);
3964 stmt( 'I', pce, IRStmt_Dirty(di) );
3971 static void gen_dirty_v_WW ( PCEnv* pce, IRExpr* guard,
3978 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
3979 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
3985 stmt( 'I', pce, IRStmt_Dirty(di) );
3990 static void gen_dirty_v_WWW ( PCEnv* pce, void* h_fn, HChar* h_nm,
3997 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
3998 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
3999 tl_assert(typeOfIRExpr(pce->sb->tyenv, a3) == pce->gWordTy);
4003 stmt( 'I', pce, IRStmt_Dirty(di) );
4008 static void gen_dirty_v_WWWW ( PCEnv* pce, void* h_fn, HChar* h_nm,
4017 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
4018 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
4019 tl_assert(typeOfIRExpr(pce->sb->tyenv, a3) == pce->gWordTy);
4020 tl_assert(typeOfIRExpr(pce->sb->tyenv, a4) == pce->gWordTy);
4024 stmt( 'I', pce, IRStmt_Dirty(di) );
4029 static void gen_dirty_v_6W ( PCEnv* pce, void* h_fn, HChar* h_nm,
4040 tl_assert(typeOfIRExpr(pce->sb->tyenv, a1) == pce->gWordTy);
4041 tl_assert(typeOfIRExpr(pce->sb->tyenv, a2) == pce->gWordTy);
4042 tl_assert(typeOfIRExpr(pce->sb->tyenv, a3) == pce->gWordTy);
4043 tl_assert(typeOfIRExpr(pce->sb->tyenv, a4) == pce->gWordTy);
4044 tl_assert(typeOfIRExpr(pce->sb->tyenv, a5) == pce->gWordTy);
4045 tl_assert(typeOfIRExpr(pce->sb->tyenv, a6) == pce->gWordTy);
4049 stmt( 'I', pce, IRStmt_Dirty(di) );
4052 static IRAtom* uwiden_to_host_word ( PCEnv* pce, IRAtom* a )
4054 IRType a_ty = typeOfIRExpr(pce->sb->tyenv, a);
4056 if (pce->hWordTy == Ity_I32) {
4059 return assignNew( 'I', pce, Ity_I32, unop(Iop_8Uto32, a) );
4061 return assignNew( 'I', pce, Ity_I32, unop(Iop_16Uto32, a) );
4067 tl_assert(pce->hWordTy == Ity_I64);
4070 return assignNew( 'I', pce, Ity_I64, unop(Iop_8Uto64, a) );
4072 return assignNew( 'I', pce, Ity_I64, unop(Iop_16Uto64, a) );
4074 return assignNew( 'I', pce, Ity_I64, unop(Iop_32Uto64, a) );
4085 static IRTemp gen_call_nonptr_or_unknown_w ( PCEnv* pce, IRExpr* e )
4087 return gen_dirty_W_W( pce, &nonptr_or_unknown,
4094 static IRAtom* schemeEw_Atom ( PCEnv* pce, IRExpr* e )
4096 if (pce->gWordTy == Ity_I32) {
4100 t = gen_call_nonptr_or_unknown_w(pce, e);
4104 && typeOfIRExpr(pce->sb->tyenv, e) == Ity_I32) {
4105 return mkexpr( findShadowTmp(pce, e->Iex.RdTmp.tmp) );
4113 t = gen_call_nonptr_or_unknown_w(pce, e);
4117 && typeOfIRExpr(pce->sb->tyenv, e) == Ity_I64) {
4118 return mkexpr( findShadowTmp(pce, e->Iex.RdTmp.tmp) );
4128 void instrument_arithop ( PCEnv* pce,
4143 if (pce->gWordTy == Ity_I32) {
4145 tl_assert(pce->hWordTy == Ity_I32);
4154 a1v = schemeEw_Atom( pce, a1 );
4155 a2v = schemeEw_Atom( pce, a2 );
4156 res = gen_dirty_W_WWW( pce, fn, nm, a1v, a2v, mkexpr(dst) );
4157 assign( 'I', pce, dstv, mkexpr(res) );
4165 a1v = schemeEw_Atom( pce, a1 );
4166 a2v = schemeEw_Atom( pce, a2 );
4168 pce, fn, nm, a1v, a2v, mkexpr(dst),
4169 assignNew( 'I', pce, Ity_I32,
4171 assign( 'I', pce, dstv, mkexpr(res) );
4177 a1v = schemeEw_Atom( pce, a1 );
4178 res = gen_dirty_W_WW( pce, fn, nm, a1v, mkexpr(dst) );
4179 assign( 'I', pce, dstv, mkexpr(res) );
4185 a1v = schemeEw_Atom( pce, a1 );
4186 a2v = schemeEw_Atom( pce, a2 );
4187 res = gen_dirty_W_WW( pce, fn, nm, a1v, a2v );
4188 assign( 'I', pce, dstv, mkexpr(res) );
4197 assign( 'I', pce, dstv,
4199 gen_call_nonptr_or_unknown_w( pce,
4237 assign( 'I', pce, dstv, mkU32( (UWord)NONPTR ));
4248 tl_assert(pce->gWordTy == Ity_I64);
4257 a1v = schemeEw_Atom( pce, a1 );
4258 a2v = schemeEw_Atom( pce, a2 );
4259 res = gen_dirty_W_WWW( pce, fn, nm, a1v, a2v, mkexpr(dst) );
4260 assign( 'I', pce, dstv, mkexpr(res) );
4268 a1v = schemeEw_Atom( pce, a1 );
4269 a2v = schemeEw_Atom( pce, a2 );
4271 pce, fn, nm, a1v, a2v, mkexpr(dst),
4272 assignNew( 'I', pce, Ity_I64,
4274 assign( 'I', pce, dstv, mkexpr(res) );
4280 a1v = schemeEw_Atom( pce, a1 );
4281 res = gen_dirty_W_WW( pce, fn, nm, a1v, mkexpr(dst) );
4282 assign( 'I', pce, dstv, mkexpr(res) );
4288 a1v = schemeEw_Atom( pce, a1 );
4289 a2v = schemeEw_Atom( pce, a2 );
4290 res = gen_dirty_W_WW( pce, fn, nm, a1v, a2v );
4291 assign( 'I', pce, dstv, mkexpr(res) );
4302 assign( 'I', pce, dstv,
4304 gen_call_nonptr_or_unknown_w( pce,
4363 assign( 'I', pce, dstv, mkU64( (UWord)NONPTR ));
4375 void gen_call_nonptr_or_unknown_range ( PCEnv* pce,
4379 gen_dirty_v_WW( pce, guard,
4388 static void gen_nonptr_or_unknown_for_III( PCEnv* pce, IntRegInfo* iii )
4393 IRAtom* a1 = assignNew( 'I', pce, pce->gWordTy,
4394 IRExpr_Get( iii->offsets[i], pce->gWordTy ));
4395 IRTemp a2 = gen_call_nonptr_or_unknown_w( pce, a1 );
4396 stmt( 'I', pce, IRStmt_Put( iii->offsets[i]
4397 + pce->guest_state_sizeB,
4407 static Bool schemeS_store ( PCEnv* pce,
4429 IRType d_ty = typeOfIRExpr(pce->sb->tyenv, data);
4430 IRExpr* addrv = schemeEw_Atom( pce, addr );
4432 tl_assert(typeOfIRTemp(pce->sb->tyenv, resSC) == Ity_I1);
4436 if (pce->gWordTy == Ity_I32 && d_ty != Ity_I32)
4438 if (pce->gWordTy == Ity_I64 && d_ty != Ity_I32 && d_ty != Ity_I64)
4441 if (pce->gWordTy == Ity_I32) {
4446 IRExpr* datav = schemeEw_Atom( pce, data );
4449 gen_dirty_v_WWWW( pce,
4455 = gen_dirty_W_WWWW( pce,
4463 assign( 'I', pce, resSC, unop(Iop_32to1, mkexpr(resSC32)) );
4469 gen_dirty_v_WWW( pce,
4472 uwiden_to_host_word( pce, data ));
4475 gen_dirty_v_WWW( pce,
4478 uwiden_to_host_word( pce, data ));
4482 IRAtom* d64 = assignNew( 'I', pce, Ity_I64,
4484 IRAtom* dLo32 = assignNew( 'I', pce, Ity_I32,
4486 IRAtom* dHi32 = assignNew( 'I', pce, Ity_I32,
4488 gen_dirty_v_WWWW( pce,
4497 IRAtom* i32 = assignNew( 'I', pce, Ity_I32,
4500 gen_dirty_v_WWW( pce,
4508 IRAtom* dLo32 = assignNew( 'I', pce, Ity_I32,
4510 IRAtom* dHi32 = assignNew( 'I', pce, Ity_I32,
4512 gen_dirty_v_WWWW( pce,
4523 IRAtom* dHi64 = assignNew( 'I', pce, Ity_I64,
4525 IRAtom* dLo64 = assignNew( 'I', pce, Ity_I64,
4527 IRAtom* w3 = assignNew( 'I', pce, Ity_I32,
4529 IRAtom* w2 = assignNew( 'I', pce, Ity_I32,
4531 IRAtom* w1 = assignNew( 'I', pce, Ity_I32,
4533 IRAtom* w0 = assignNew( 'I', pce, Ity_I32,
4535 gen_dirty_v_6W( pce,
4549 IRExpr* datav = schemeEw_Atom( pce, data );
4552 gen_dirty_v_WWWW( pce,
4557 = gen_dirty_W_WWWW( pce,
4561 assign( 'I', pce, resSC, unop(Iop_64to1, mkexpr(resSC64)) );
4569 gen_dirty_v_WWW( pce,
4572 uwiden_to_host_word( pce, data ));
4576 = gen_dirty_W_WWW( pce,
4580 uwiden_to_host_word( pce, data ));
4581 assign( 'I', pce, resSC, unop(Iop_64to1, mkexpr(resSC64)) );
4585 gen_dirty_v_WWW( pce,
4588 uwiden_to_host_word( pce, data ));
4591 gen_dirty_v_WWW( pce,
4594 uwiden_to_host_word( pce, data ));
4598 IRAtom* dHi64 = assignNew( 'I', pce, Ity_I64,
4600 IRAtom* dLo64 = assignNew( 'I', pce, Ity_I64,
4602 gen_dirty_v_WWWW( pce,
4610 IRAtom* dI = assignNew( 'I', pce, Ity_I64,
4613 gen_dirty_v_WWW( pce,
4622 IRAtom* i32 = assignNew( 'I', pce, Ity_I32,
4625 IRAtom* i64 = assignNew( 'I', pce, Ity_I64,
4628 gen_dirty_v_WWW( pce,
4647 static void schemeS_load ( PCEnv* pce, IRExpr* addr, IRType e_ty, IRTemp dstv )
4652 if (e_ty == pce->gWordTy) {
4657 if (pce->gWordTy == Ity_I32) {
4678 addrv = schemeEw_Atom( pce, addr );
4680 assign( 'I', pce, dstv,
4681 mkexpr( gen_dirty_W_WW( pce, h_fn, h_nm,
4684 gen_dirty_v_WW( pce, NULL, h_fn, h_nm, addr, addrv );
4707 addrv = schemeEw_Atom( pce, addr );
4709 assign( 'I', pce, dstv,
4710 mkexpr( gen_dirty_W_WW( pce, h_fn, h_nm,
4713 gen_dirty_v_WW( pce, NULL, h_fn, h_nm, addr, addrv );
4719 /* Generate into 'pce', instrumentation for 'st'. Also copy 'st'
4720 itself into 'pce' (the caller does not do so). This is somewhat
4730 static void schemeS ( PCEnv* pce, IRStmt* st )
4746 IRType elTy = typeOfIRExpr(pce->sb->tyenv, cas->expdLo);
4752 if ( (pce->gWordTy == Ity_I32 && elTy == Ity_I32)
4753 || (pce->gWordTy == Ity_I64 && elTy == Ity_I64) ) {
4767 IRExpr* addrV = schemeEw_Atom(pce, addr);
4769 IRTemp oldV = newShadowTmp(pce, old);
4771 IRExpr* nyuV = schemeEw_Atom(pce, nyu);
4773 assign( 'I', pce, oldV,
4774 mkexpr( gen_dirty_W_WW( pce, r_fn, r_nm, addr, addrV )));
4775 stmt( 'C', pce, st );
4776 success = newTemp(pce, Ity_I1, NonShad);
4777 assign('I', pce, success, binop(cmpEQ, mkexpr(old), expd));
4778 gen_dirty_v_WW( pce, mkexpr(success), w_fn, w_nm, addr, nyuV );
4783 if (pce->gWordTy == Ity_I32
4793 IRExpr* addrV = schemeEw_Atom(pce, addr);
4800 gen_dirty_v_WW( pce, NULL, h_fn, h_nm, addr, addrV );
4801 stmt( 'C', pce, st );
4802 success = newTemp(pce, Ity_I1, NonShad);
4803 assign('I', pce, success,
4805 gen_call_nonptr_or_unknown_range( pce, mkexpr(success),
4811 if (pce->gWordTy == Ity_I64
4822 IRExpr* addrV = schemeEw_Atom(pce, addr);
4832 gen_dirty_v_WW( pce, NULL, h_fn, h_nm, addr, addrV );
4833 stmt( 'C', pce, st );
4834 success = newTemp(pce, Ity_I1, NonShad);
4835 assign('I', pce, success,
4837 gen_call_nonptr_or_unknown_range( pce, mkexpr(success),
4853 if ( (pce->gWordTy == Ity_I32 && elTy == Ity_I32)
4854 || (pce->gWordTy == Ity_I64 && elTy == Ity_I64) ) {
4878 IRExpr* addrV = schemeEw_Atom(pce, addr);
4880 IRTemp oldLoV = newShadowTmp(pce, oldLo);
4882 IRTemp oldHiV = newShadowTmp(pce, oldHi);
4884 IRExpr* nyuLoV = schemeEw_Atom(pce, nyuLo);
4886 IRExpr* nyuHiV = schemeEw_Atom(pce, nyuHi);
4890 tl_assert(pce->gWordTy == elTy);
4891 addrpp = newTemp(pce, elTy, NonShad);
4892 assign('I', pce, addrpp, binop(opADD, addr, step));
4893 assign('I', pce, oldHiV,
4894 mkexpr( gen_dirty_W_WW( pce, r_fn, r_nm,
4897 assign('I', pce, oldLoV,
4898 mkexpr( gen_dirty_W_WW( pce, r_fn, r_nm,
4901 stmt( 'C', pce, st );
4902 diffHi = newTemp(pce, elTy, NonShad);
4903 assign('I', pce, diffHi,
4905 diffLo = newTemp(pce, elTy, NonShad);
4906 assign('I', pce, diffLo,
4908 diff = newTemp(pce, elTy, NonShad);
4909 assign('I', pce, diff,
4911 success = newTemp(pce, Ity_I1, NonShad);
4912 assign('I', pce, success,
4914 gen_dirty_v_WW( pce, mkexpr(success),
4916 gen_dirty_v_WW( pce, mkexpr(success),
4921 if (pce->gWordTy == Ity_I64 && elTy == Ity_I32) {
4929 IRExpr* addrV = schemeEw_Atom(pce, addr);
4934 gen_dirty_v_WW( pce, NULL, &check_load8, "check_load8",
4936 stmt( 'C', pce, st );
4937 diffHi = newTemp(pce, Ity_I32, NonShad);
4938 assign('I', pce, diffHi,
4940 diffLo = newTemp(pce, Ity_I32, NonShad);
4941 assign('I', pce, diffLo,
4943 diff = newTemp(pce, Ity_I32, NonShad);
4944 assign('I', pce, diff,
4946 success = newTemp(pce, Ity_I1, NonShad);
4947 assign('I', pce, success,
4949 gen_call_nonptr_or_unknown_range( pce, mkexpr(success),
4962 IRType dataTy = typeOfIRTemp(pce->sb->tyenv, dst);
4963 Bool isWord = dataTy == pce->gWordTy;
4964 IRTemp dstv = isWord ? newShadowTmp( pce, dst )
4966 schemeS_load( pce, st->Ist.LLSC.addr, dataTy, dstv );
4968 stmt( 'C', pce, st );
4971 schemeS_store( pce,
4984 stmt( 'C', pce, st );
4990 && typeOfIRTemp(pce->sb->tyenv, di->tmp) == pce->gWordTy) {
4992 IRTemp dstv = newShadowTmp( pce, di->tmp );
4993 if (pce->gWordTy == Ity_I32) {
4994 assign( 'I', pce, dstv, mkU32( (UWord)NONPTR ));
4996 assign( 'I', pce, dstv, mkU64( (UWord)NONPTR ));
5015 = assignNew( 'I', pce, pce->gWordTy,
5016 IRExpr_Get( iii.offsets[i], pce->gWordTy ));
5017 IRTemp a2 = gen_call_nonptr_or_unknown_w( pce, a1 );
5018 stmt( 'I', pce, IRStmt_Put( iii.offsets[i]
5019 + pce->guest_state_sizeB,
5029 gen_nonptr_or_unknown_for_III( pce, &iii );
5036 gen_call_nonptr_or_unknown_range( pce, NULL, di->mAddr,
5050 stmt( 'C', pce, st );
5055 stmt( 'C', pce, st );
5060 tl_assert(descr->elemTy == pce->gWordTy);
5062 'I', pce,
5064 mkIRRegArray(descr->base + pce->guest_state_sizeB,
5068 schemeEw_Atom( pce, st->Ist.PutI.data)
5087 stmt( 'C', pce, st );
5088 ty = typeOfIRExpr(pce->sb->tyenv, st->Ist.Put.data);
5093 tl_assert(ty == pce->gWordTy);
5094 stmt( 'I', pce,
5096 + pce->guest_state_sizeB,
5097 schemeEw_Atom( pce, st->Ist.Put.data)) );
5106 gen_nonptr_or_unknown_for_III( pce, &iii );
5112 Bool ok = schemeS_store( pce,
5128 IRType e_ty = typeOfIRExpr( pce->sb->tyenv, e );
5129 Bool isWord = e_ty == pce->gWordTy;
5131 IRTemp dstv = isWord ? newShadowTmp( pce, dst )
5137 stmt( 'C', pce, st );
5139 assign( 'I', pce, dstv, schemeEw_Atom( pce, e ) );
5144 stmt( 'C', pce, st );
5146 assign( 'I', pce, dstv,
5148 pce, mkexpr(dst))));
5155 stmt( 'C', pce, st );
5157 assign( 'I', pce, dstv,
5160 schemeEw_Atom( pce, e->Iex.Mux0X.expr0 ),
5161 schemeEw_Atom( pce, e->Iex.Mux0X.exprX ) ));
5166 stmt( 'C', pce, st );
5168 assign( 'I', pce, dstv, schemeEw_Atom( pce, e ));
5173 schemeS_load( pce, e->Iex.Load.addr, e_ty, dstv );
5175 stmt( 'C', pce, st );
5181 stmt( 'C', pce, st );
5188 'I', pce, dstv,
5190 mkIRRegArray(descr->base + pce->guest_state_sizeB,
5201 stmt( 'C', pce, st );
5208 assign( 'I', pce, dstv,
5210 + pce->guest_state_sizeB,
5213 if (pce->hWordTy == Ity_I32) {
5214 assign( 'I', pce, dstv, mkU32( (UWord)NONPTR ));
5216 assign( 'I', pce, dstv, mkU64( (UWord)NONPTR ));
5227 stmt( 'C', pce, st );
5230 instrument_arithop( pce, dst, dstv, e->Iex.Unop.op,
5237 stmt( 'C', pce, st );
5241 instrument_arithop( pce, dst, dstv, e->Iex.Binop.op,
5248 stmt( 'C', pce, st );
5253 instrument_arithop( pce, dst, dstv, e->Iex.Triop.op,
5260 stmt( 'C', pce, st );
5266 instrument_arithop( pce, dst, dstv, e->Iex.Qop.op,
5290 PCEnv* pce = (PCEnv*)opaque;
5291 return newTemp( pce, ty, NonShad );
5303 PCEnv pce;
5325 VG_(memset)(&pce, 0, sizeof(pce));
5326 pce.sb = deepCopyIRSBExceptStmts(sbIn);
5327 pce.trace = verboze;
5328 pce.hWordTy = hWordTy;
5329 pce.gWordTy = gWordTy;
5330 pce.guest_state_sizeB = layout->total_sizeB;
5332 pce.qmpMap = VG_(newXA)( VG_(malloc), "pc.h_instrument.1", VG_(free),
5338 VG_(addToXA)( pce.qmpMap, &ent );
5340 tl_assert( VG_(sizeXA)( pce.qmpMap ) == sbIn->tyenv->types_used );
5347 (void*)&pce );
5359 stmt( 'C', &pce, sbIn->stmts[i] );
5389 IRTemp tmp_s = findShadowTmp(&pce, tmp_o);
5391 assign( 'V', &pce, tmp_s, definedOfType( ty_s ) );
5410 sg_instrument_IRStmt( sgenv, pce.sb, sbIn->stmts[i],
5413 schemeS( &pce, sbIn->stmts[i] );
5417 sg_instrument_final_jump( sgenv, pce.sb, sbIn->next, sbIn->jumpkind,
5425 tl_assert( VG_(sizeXA)( pce.qmpMap ) == pce.sb->tyenv->types_used );
5426 VG_(deleteXA)( pce.qmpMap );
5428 return pce.sb;