writeOperand(I.getPointerOperand());
if (I.isVolatile()) Out << ')';
Out << " = ";
- writeOperand(I.getOperand(0));
+ Value *Operand = I.getOperand(0);
+ Constant *BitMask = 0;
+ if (const IntegerType* ITy = dyn_cast<IntegerType>(Operand->getType()))
+ if (!ITy->isPowerOf2ByteWidth())
+ // We have a bit width that doesn't match an even power-of-2 byte
+ // size. Consequently we must & the value with the type's bit mask
+ BitMask = ConstantInt::get(ITy, ITy->getBitMask());
+ if (BitMask)
+ Out << "((";
+ writeOperand(Operand);
+ if (BitMask) {
+ Out << ") & ";
+ printConstant(BitMask);
+ Out << ")";
+ }
}
void CWriter::visitGetElementPtrInst(GetElementPtrInst &I) {