mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
[XCore] Don't create invalid MKMSK instructions inside loadImmediate().
Summary: Previously loadImmediate() would produce MKMSK instructions with invalid immediate values such as mkmsk r0, 9. Fix this by checking the mask size is valid. Reviewers: robertlytton Reviewed By: robertlytton CC: llvm-commits Differential Revision: http://reviews.llvm.org/D3289 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206163 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -428,13 +428,21 @@ static inline bool isImmU16(unsigned val) {
|
||||
return val < (1 << 16);
|
||||
}
|
||||
|
||||
static bool isImmMskBitp(unsigned val) {
|
||||
if (!isMask_32(val)) {
|
||||
return false;
|
||||
}
|
||||
int N = Log2_32(val) + 1;
|
||||
return (N >= 1 && N <= 8) || N == 16 || N == 24 || N == 32;
|
||||
}
|
||||
|
||||
MachineBasicBlock::iterator XCoreInstrInfo::loadImmediate(
|
||||
MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
unsigned Reg, uint64_t Value) const {
|
||||
DebugLoc dl;
|
||||
if (MI != MBB.end()) dl = MI->getDebugLoc();
|
||||
if (isMask_32(Value)) {
|
||||
if (isImmMskBitp(Value)) {
|
||||
int N = Log2_32(Value) + 1;
|
||||
return BuildMI(MBB, MI, dl, get(XCore::MKMSK_rus), Reg).addImm(N);
|
||||
}
|
||||
|
Reference in New Issue
Block a user