mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
ARM fix encoding of VMOV.f32 and VMOV.f64 immediates.
Encode the immediate into its 8-bit form as part of isel rather than later, which simplifies things for mapping the encoding bits, allows the removal of the custom disassembler decoding hook, makes the operand printer trivial, and prepares things more cleanly for handling these in the asm parser. rdar://10211428 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140834 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -934,39 +934,10 @@ void ARMInstPrinter::printT2AddrModeSoRegOperand(const MCInst *MI,
|
||||
O << "]";
|
||||
}
|
||||
|
||||
void ARMInstPrinter::printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum,
|
||||
raw_ostream &O) {
|
||||
void ARMInstPrinter::printFPImmOperand(const MCInst *MI, unsigned OpNum,
|
||||
raw_ostream &O) {
|
||||
const MCOperand &MO = MI->getOperand(OpNum);
|
||||
O << '#';
|
||||
if (MO.isFPImm()) {
|
||||
O << (float)MO.getFPImm();
|
||||
} else {
|
||||
union {
|
||||
uint32_t I;
|
||||
float F;
|
||||
} FPUnion;
|
||||
|
||||
FPUnion.I = MO.getImm();
|
||||
O << FPUnion.F;
|
||||
}
|
||||
}
|
||||
|
||||
void ARMInstPrinter::printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum,
|
||||
raw_ostream &O) {
|
||||
const MCOperand &MO = MI->getOperand(OpNum);
|
||||
O << '#';
|
||||
if (MO.isFPImm()) {
|
||||
O << MO.getFPImm();
|
||||
} else {
|
||||
// We expect the binary encoding of a floating point number here.
|
||||
union {
|
||||
uint64_t I;
|
||||
double D;
|
||||
} FPUnion;
|
||||
|
||||
FPUnion.I = MO.getImm();
|
||||
O << FPUnion.D;
|
||||
}
|
||||
O << '#' << ARM_AM::getFPImmFloat(MO.getImm());
|
||||
}
|
||||
|
||||
void ARMInstPrinter::printNEONModImmOperand(const MCInst *MI, unsigned OpNum,
|
||||
|
@@ -120,8 +120,7 @@ public:
|
||||
void printNoHashImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printPImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printCImmediate(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printFPImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printNEONModImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printImmPlusOneOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
void printRotImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
||||
|
Reference in New Issue
Block a user