mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
ARM assembly parsing and encoding for VMRS/FMSTAT.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141025 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dda4a07cd8
commit
5cd5ac6ad4
@ -227,6 +227,10 @@ class tInstAlias<string Asm, dag Result, bit Emit = 0b1>
|
||||
: InstAlias<Asm, Result, Emit>, Requires<[IsThumb]>;
|
||||
class t2InstAlias<string Asm, dag Result, bit Emit = 0b1>
|
||||
: InstAlias<Asm, Result, Emit>, Requires<[IsThumb2]>;
|
||||
class VFP2InstAlias<string Asm, dag Result, bit Emit = 0b1>
|
||||
: InstAlias<Asm, Result, Emit>, Requires<[HasVFP2]>;
|
||||
class VFP3InstAlias<string Asm, dag Result, bit Emit = 0b1>
|
||||
: InstAlias<Asm, Result, Emit>, Requires<[HasVFP3]>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ARM Instruction templates.
|
||||
|
@ -1148,3 +1148,10 @@ def FCONSTS : VFPAI<(outs SPR:$Sd), (ins vfp_f32imm:$imm),
|
||||
let Inst{3-0} = imm{3-0};
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Assembler aliases.
|
||||
//
|
||||
|
||||
def : VFP2InstAlias<"fmstat${p}", (FMSTAT pred:$p)>;
|
||||
|
||||
|
@ -3046,6 +3046,7 @@ bool ARMAsmParser::parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
||||
Error(Parser.getTok().getLoc(), "unexpected token in operand");
|
||||
return true;
|
||||
case AsmToken::Identifier: {
|
||||
// If this is VMRS, check for the apsr_nzcv operand.
|
||||
if (!tryParseRegisterWithWriteBack(Operands))
|
||||
return false;
|
||||
int Res = tryParseShiftRegister(Operands);
|
||||
@ -3053,6 +3054,12 @@ bool ARMAsmParser::parseOperand(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
|
||||
return false;
|
||||
else if (Res == -1) // irrecoverable error
|
||||
return true;
|
||||
if (Mnemonic == "vmrs" && Parser.getTok().getString() == "apsr_nzcv") {
|
||||
S = Parser.getTok().getLoc();
|
||||
Parser.Lex();
|
||||
Operands.push_back(ARMOperand::CreateToken("apsr_nzcv", S));
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fall though for the Identifier case that is not a register or a
|
||||
// special name.
|
||||
|
@ -114,8 +114,10 @@
|
||||
@ CHECK: vnmls.f32 s1, s2, s0 @ encoding: [0x00,0x0a,0x51,0xee]
|
||||
vnmls.f32 s1, s2, s0
|
||||
|
||||
@ FIXME: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
|
||||
@ vmrs apsr_nzcv, fpscr
|
||||
@ CHECK: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
|
||||
@ CHECK: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
|
||||
vmrs apsr_nzcv, fpscr
|
||||
fmstat
|
||||
|
||||
@ CHECK: vnegne.f64 d16, d16 @ encoding: [0x60,0x0b,0xf1,0x1e]
|
||||
vnegne.f64 d16, d16
|
||||
|
Loading…
Reference in New Issue
Block a user