mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 15:39:06 +00:00
ARM add some pre-UAL VFP mnemonics for convenience when porting old code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146296 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
52ee230f6e
commit
21d7fb814a
@ -5308,6 +5308,11 @@ def : Pat<(v2f64 (bitconvert (v4f32 QPR:$src))), (v2f64 QPR:$src)>;
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Assembler aliases
|
||||
//
|
||||
def : VFP2InstAlias<"fmdhr${p} $Dd, $Rn",
|
||||
(VSETLNi32 DPR:$Dd, GPR:$Rn, 1, pred:$p)>;
|
||||
def : VFP2InstAlias<"fmdlr${p} $Dd, $Rn",
|
||||
(VSETLNi32 DPR:$Dd, GPR:$Rn, 0, pred:$p)>;
|
||||
|
||||
|
||||
// VADD two-operand aliases.
|
||||
def : NEONInstAlias<"vadd${p}.i8 $Vdn, $Vm",
|
||||
|
@ -1161,15 +1161,26 @@ def FCONSTS : VFPAI<(outs SPR:$Sd), (ins vfp_f32imm:$imm),
|
||||
// Assembler aliases.
|
||||
//
|
||||
|
||||
class VFP2MnemonicAlias<string src, string dst> : MnemonicAlias<src, dst>,
|
||||
Requires<[HasVFP2]>;
|
||||
// A few mnemnoic aliases for pre-unifixed syntax. We don't guarantee to
|
||||
// support them all, but supporting at least some of the basics is
|
||||
// good to be friendly.
|
||||
def : MnemonicAlias<"flds", "vldr">;
|
||||
def : MnemonicAlias<"fldd", "vldr">;
|
||||
def : MnemonicAlias<"fmrs", "vmov">;
|
||||
def : MnemonicAlias<"fmsr", "vmov">;
|
||||
def : MnemonicAlias<"fsqrts", "vsqrt">;
|
||||
def : MnemonicAlias<"fsqrtd", "vsqrt">;
|
||||
def : VFP2MnemonicAlias<"flds", "vldr">;
|
||||
def : VFP2MnemonicAlias<"fldd", "vldr">;
|
||||
def : VFP2MnemonicAlias<"fmrs", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fmsr", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fsqrts", "vsqrt">;
|
||||
def : VFP2MnemonicAlias<"fsqrtd", "vsqrt">;
|
||||
def : VFP2MnemonicAlias<"fadds", "vadd.f32">;
|
||||
def : VFP2MnemonicAlias<"faddd", "vadd.f64">;
|
||||
def : VFP2MnemonicAlias<"fmrdd", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fmrds", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fmrrd", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fmdrr", "vmov">;
|
||||
def : VFP2MnemonicAlias<"fmuld", "vmul.f64">;
|
||||
def : VFP2MnemonicAlias<"fnegs", "vneg.f32">;
|
||||
def : VFP2MnemonicAlias<"fnegd", "vneg.f64">;
|
||||
|
||||
def : VFP2InstAlias<"fmstat${p}", (FMSTAT pred:$p)>;
|
||||
|
||||
|
@ -4523,9 +4523,18 @@ static bool doesIgnoreDataTypeSuffix(StringRef Mnemonic, StringRef DT) {
|
||||
return Mnemonic.startswith("vldm") || Mnemonic.startswith("vstm");
|
||||
}
|
||||
|
||||
static void applyMnemonicAliases(StringRef &Mnemonic, unsigned Features);
|
||||
/// Parse an arm instruction mnemonic followed by its operands.
|
||||
bool ARMAsmParser::ParseInstruction(StringRef Name, SMLoc NameLoc,
|
||||
SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
|
||||
// Apply mnemonic aliases before doing anything else, as the destination
|
||||
// mnemnonic may include suffices and we want to handle them normally.
|
||||
// The generic tblgen'erated code does this later, at the start of
|
||||
// MatchInstructionImpl(), but that's too late for aliases that include
|
||||
// any sort of suffix.
|
||||
unsigned AvailableFeatures = getAvailableFeatures();
|
||||
applyMnemonicAliases(Name, AvailableFeatures);
|
||||
|
||||
// Create the leading tokens for the mnemonic, split by '.' characters.
|
||||
size_t Start = 0, Next = Name.find('.');
|
||||
StringRef Mnemonic = Name.slice(Start, Next);
|
||||
|
Loading…
Reference in New Issue
Block a user