static IRAtom* mkPCastTo( MCEnv* mce, IRType dst_ty, IRAtom* vbits )
{
+ IRType ty;
+ IRAtom* tmp1;
/* Note, dst_ty is a shadow type, not an original type. */
/* First of all, collapse vbits down to a single bit. */
tl_assert(isShadowAtom(mce,vbits));
- IRType ty = typeOfIRExpr(mce->bb->tyenv, vbits);
- IRAtom* tmp1 = NULL;
+ ty = typeOfIRExpr(mce->bb->tyenv, vbits);
+ tmp1 = NULL;
switch (ty) {
case Ity_I1:
tmp1 = vbits;
*/
static void complainIfUndefined ( MCEnv* mce, IRAtom* atom )
{
+ IRAtom* vatom;
+ IRType ty;
+ Int sz;
+ IRDirty* di;
+ IRAtom* cond;
+
/* Since the original expression is atomic, there's no duplicated
work generated by making multiple V-expressions for it. So we
don't really care about the possibility that someone else may
also create a V-interpretion for it. */
tl_assert(isOriginalAtom(mce, atom));
- IRAtom* vatom = expr2vbits( mce, atom );
+ vatom = expr2vbits( mce, atom );
tl_assert(isShadowAtom(mce, vatom));
tl_assert(sameKindedAtoms(atom, vatom));
- IRType ty = typeOfIRExpr(mce->bb->tyenv, vatom);
+ ty = typeOfIRExpr(mce->bb->tyenv, vatom);
/* sz is only used for constructing the error message */
- Int sz = ty==Ity_I1 ? 0 : sizeofIRType(ty);
+ sz = ty==Ity_I1 ? 0 : sizeofIRType(ty);
- IRAtom* cond = mkPCastTo( mce, Ity_I1, vatom );
+ cond = mkPCastTo( mce, Ity_I1, vatom );
/* cond will be 0 if all defined, and 1 if any not defined. */
- IRDirty* di;
switch (sz) {
case 0:
di = unsafeIRDirty_0_N( 0/*regparms*/,
void do_shadow_PUT ( MCEnv* mce, Int offset,
IRAtom* atom, IRAtom* vatom )
{
+ IRType ty;
if (atom) {
tl_assert(!vatom);
tl_assert(isOriginalAtom(mce, atom));
tl_assert(isShadowAtom(mce, vatom));
}
- IRType ty = typeOfIRExpr(mce->bb->tyenv, vatom);
+ ty = typeOfIRExpr(mce->bb->tyenv, vatom);
tl_assert(ty != Ity_I1);
if (isAlwaysDefd(mce, offset, sizeofIRType(ty))) {
/* later: no ... */
void do_shadow_PUTI ( MCEnv* mce,
IRArray* descr, IRAtom* ix, Int bias, IRAtom* atom )
{
+ IRAtom* vatom;
+ IRType ty, tyS;
+ Int arrSize;;
+
tl_assert(isOriginalAtom(mce,atom));
- IRAtom* vatom = expr2vbits( mce, atom );
+ vatom = expr2vbits( mce, atom );
tl_assert(sameKindedAtoms(atom, vatom));
- IRType ty = descr->elemTy;
- IRType tyS = shadowType(ty);
- Int arrSize = descr->nElems * sizeofIRType(ty);
+ ty = descr->elemTy;
+ tyS = shadowType(ty);
+ arrSize = descr->nElems * sizeofIRType(ty);
tl_assert(ty != Ity_I1);
tl_assert(isOriginalAtom(mce,ix));
complainIfUndefined(mce,ix);
IRAtom* expensiveAdd32 ( MCEnv* mce, IRAtom* qaa, IRAtom* qbb,
IRAtom* aa, IRAtom* bb )
{
+ IRAtom *a_min, *b_min, *a_max, *b_max;
+ IRType ty;
+ IROp opAND, opOR, opXOR, opNOT, opADD;
+
tl_assert(isShadowAtom(mce,qaa));
tl_assert(isShadowAtom(mce,qbb));
tl_assert(isOriginalAtom(mce,aa));
tl_assert(sameKindedAtoms(qaa,aa));
tl_assert(sameKindedAtoms(qbb,bb));
- IRType ty = Ity_I32;
- IROp opAND = Iop_And32;
- IROp opOR = Iop_Or32;
- IROp opXOR = Iop_Xor32;
- IROp opNOT = Iop_Not32;
- IROp opADD = Iop_Add32;
-
- IRAtom *a_min, *b_min, *a_max, *b_max;
+ ty = Ity_I32;
+ opAND = Iop_And32;
+ opOR = Iop_Or32;
+ opXOR = Iop_Xor32;
+ opNOT = Iop_Not32;
+ opADD = Iop_Add32;
// a_min = aa & ~qaa
a_min = assignNew(mce,ty,
if (bias == 0) {
addrAct = addr;
} else {
+ IROp mkAdd;
+ IRAtom* eBias;
IRType tyAddr = mce->hWordTy;
tl_assert( tyAddr == Ity_I32 || tyAddr == Ity_I64 );
- IROp mkAdd = tyAddr==Ity_I32 ? Iop_Add32 : Iop_Add64;
- IRAtom* eBias = tyAddr==Ity_I32 ? mkU32(bias) : mkU64(bias);
+ mkAdd = tyAddr==Ity_I32 ? Iop_Add32 : Iop_Add64;
+ eBias = tyAddr==Ity_I32 ? mkU32(bias) : mkU64(bias);
addrAct = assignNew(mce, tyAddr, binop(mkAdd, addr, eBias) );
}
static
IRExpr* zwidenToHostWord ( MCEnv* mce, IRAtom* vatom )
{
+ IRType ty, tyH;
+
/* vatom is vbits-value and as such can only have a shadow type. */
tl_assert(isShadowAtom(mce,vatom));
- IRType ty = typeOfIRExpr(mce->bb->tyenv, vatom);
- IRType tyH = mce->hWordTy;
+ ty = typeOfIRExpr(mce->bb->tyenv, vatom);
+ tyH = mce->hWordTy;
if (tyH == Ity_I32) {
switch (ty) {
if (bias == 0) {
addrAct = addr;
} else {
+ IROp mkAdd;
+ IRAtom* eBias;
IRType tyAddr = mce->hWordTy;
tl_assert( tyAddr == Ity_I32 || tyAddr == Ity_I64 );
- IROp mkAdd = tyAddr==Ity_I32 ? Iop_Add32 : Iop_Add64;
- IRAtom* eBias = tyAddr==Ity_I32 ? mkU32(bias) : mkU64(bias);
+ mkAdd = tyAddr==Ity_I32 ? Iop_Add32 : Iop_Add64;
+ eBias = tyAddr==Ity_I32 ? mkU32(bias) : mkU64(bias);
addrAct = assignNew(mce, tyAddr, binop(mkAdd, addr, eBias) );
}
void do_shadow_Dirty ( MCEnv* mce, IRDirty* d )
{
Int i, offset, toDo;
- IRAtom* src;
+ IRAtom *src, *here, *curr;
IRType tyAddr, tySrc, tyDst;
IRTemp dst;
complainIfUndefined(mce, d->guard);
/* Now round up all inputs and PCast over them. */
- IRAtom* here;
- IRAtom* curr = definedOfType(Ity_I32);
+ curr = definedOfType(Ity_I32);
/* Inputs: unmasked args */
for (i = 0; d->args[i]; i++) {