mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Make sure that when we store a value it is masked to its correct bit
width. This helps CBE work with non-standard integer bit widths. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34885 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e0929364e8
commit
bdc75089ab
@ -2815,7 +2815,21 @@ void CWriter::visitStoreInst(StoreInst &I) {
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user