mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 05:22:04 +00:00
Implement 'e' and 'f' modifiers for Neon inline asm. <rdar://problem/10551006>
These modifiers simply select either the low or high D subregister of a Neon Q register. I've also removed the unimplemented 'p' modifier, which turns out to be a bit different than the comment here suggests and as far as I can tell was only intended for internal use in Apple's version of gcc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146417 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -493,11 +493,21 @@ bool ARMAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
|
||||
return false;
|
||||
}
|
||||
|
||||
// These modifiers are not yet supported.
|
||||
case 'p': // The high single-precision register of a VFP double-precision
|
||||
// register.
|
||||
case 'e': // The low doubleword register of a NEON quad register.
|
||||
case 'f': // The high doubleword register of a NEON quad register.
|
||||
case 'f': { // The high doubleword register of a NEON quad register.
|
||||
if (!MI->getOperand(OpNum).isReg())
|
||||
return true;
|
||||
unsigned Reg = MI->getOperand(OpNum).getReg();
|
||||
if (!ARM::QPRRegClass.contains(Reg))
|
||||
return true;
|
||||
const TargetRegisterInfo *TRI = MF->getTarget().getRegisterInfo();
|
||||
unsigned SubReg = TRI->getSubReg(Reg, ExtraCode[0] == 'e' ?
|
||||
ARM::dsub_0 : ARM::dsub_1);
|
||||
O << ARMInstPrinter::getRegisterName(SubReg);
|
||||
return false;
|
||||
}
|
||||
|
||||
// These modifiers are not yet supported.
|
||||
case 'h': // A range of VFP/NEON registers suitable for VLD1/VST1.
|
||||
case 'H': // The highest-numbered register of a pair.
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user