projects
/
oota-llvm.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7e44a65
)
[X86] Don't print 'dword ptr' or 'qword ptr' on the operand to some of the LEA varian...
author
Craig Topper
<craig.topper@gmail.com>
Thu, 8 Jan 2015 07:41:30 +0000
(07:41 +0000)
committer
Craig Topper
<craig.topper@gmail.com>
Thu, 8 Jan 2015 07:41:30 +0000
(07:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225432
91177308
-0d34-0410-b5e6-
96231b3b80d8
lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
patch
|
blob
|
history
lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
patch
|
blob
|
history
lib/Target/X86/X86InstrArithmetic.td
patch
|
blob
|
history
lib/Target/X86/X86InstrInfo.td
patch
|
blob
|
history
test/MC/Disassembler/X86/intel-syntax-32.txt
patch
|
blob
|
history
test/MC/Disassembler/X86/intel-syntax.txt
patch
|
blob
|
history
test/MC/Disassembler/X86/simple-tests.txt
patch
|
blob
|
history
utils/TableGen/X86RecognizableInstr.cpp
patch
|
blob
|
history
diff --git
a/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
b/lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
index 245e78face45ec16368cd727bca0e0f6b82287fc..649dc84a0cfcd09675284d07d2d7e6b80d09890b 100644
(file)
--- a/
lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
+++ b/
lib/Target/X86/InstPrinter/X86ATTInstPrinter.h
@@
-53,6
+53,10
@@
public:
void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
+ void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
+ printMemReference(MI, OpNo, O);
+ }
+
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
printMemReference(MI, OpNo, O);
}
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
printMemReference(MI, OpNo, O);
}
diff --git
a/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
b/lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
index b97f152f86a8661ae1a8137e18a94027b476cede..641423d56d03adb3e938cb2e94d0f7a54263de46 100644
(file)
--- a/
lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
+++ b/
lib/Target/X86/InstPrinter/X86IntelInstPrinter.h
@@
-44,6
+44,10
@@
public:
void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
+ void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
+ printMemReference(MI, OpNo, O);
+ }
+
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
O << "opaque ptr ";
printMemReference(MI, OpNo, O);
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
O << "opaque ptr ";
printMemReference(MI, OpNo, O);
diff --git
a/lib/Target/X86/X86InstrArithmetic.td
b/lib/Target/X86/X86InstrArithmetic.td
index 57efd7e1525e716fc96ec74430bd1512424ef724..78efc4d5711116ed21e8167c1ad49c5dd95cd14f 100644
(file)
--- a/
lib/Target/X86/X86InstrArithmetic.td
+++ b/
lib/Target/X86/X86InstrArithmetic.td
@@
-17,11
+17,11
@@
let SchedRW = [WriteLEA] in {
let hasSideEffects = 0 in
def LEA16r : I<0x8D, MRMSrcMem,
let SchedRW = [WriteLEA] in {
let hasSideEffects = 0 in
def LEA16r : I<0x8D, MRMSrcMem,
- (outs GR16:$dst), (ins
i32
mem:$src),
+ (outs GR16:$dst), (ins
any
mem:$src),
"lea{w}\t{$src|$dst}, {$dst|$src}", [], IIC_LEA_16>, OpSize16;
let isReMaterializable = 1 in
def LEA32r : I<0x8D, MRMSrcMem,
"lea{w}\t{$src|$dst}, {$dst|$src}", [], IIC_LEA_16>, OpSize16;
let isReMaterializable = 1 in
def LEA32r : I<0x8D, MRMSrcMem,
- (outs GR32:$dst), (ins
i32
mem:$src),
+ (outs GR32:$dst), (ins
any
mem:$src),
"lea{l}\t{$src|$dst}, {$dst|$src}",
[(set GR32:$dst, lea32addr:$src)], IIC_LEA>,
OpSize32, Requires<[Not64BitMode]>;
"lea{l}\t{$src|$dst}, {$dst|$src}",
[(set GR32:$dst, lea32addr:$src)], IIC_LEA>,
OpSize32, Requires<[Not64BitMode]>;
diff --git
a/lib/Target/X86/X86InstrInfo.td
b/lib/Target/X86/X86InstrInfo.td
index 069b48896b523502b577ff353cd95dba83f3e8d8..4903a730955f991846dc59ceddddf4ad216b31ee 100644
(file)
--- a/
lib/Target/X86/X86InstrInfo.td
+++ b/
lib/Target/X86/X86InstrInfo.td
@@
-300,6
+300,8
@@
class X86VMemOperand<RegisterClass RC, string printMethod,
let MIOperandInfo = (ops ptr_rc, i8imm, RC, i32imm, i8imm);
}
let MIOperandInfo = (ops ptr_rc, i8imm, RC, i32imm, i8imm);
}
+def anymem : X86MemOperand<"printanymem">;
+
def opaque32mem : X86MemOperand<"printopaquemem">;
def opaque48mem : X86MemOperand<"printopaquemem">;
def opaque80mem : X86MemOperand<"printopaquemem">;
def opaque32mem : X86MemOperand<"printopaquemem">;
def opaque48mem : X86MemOperand<"printopaquemem">;
def opaque80mem : X86MemOperand<"printopaquemem">;
@@
-640,14
+642,14
@@
def i64i8imm : Operand<i64> {
}
def lea64_32mem : Operand<i32> {
}
def lea64_32mem : Operand<i32> {
- let PrintMethod = "print
i32
mem";
+ let PrintMethod = "print
any
mem";
let MIOperandInfo = (ops GR64, i8imm, GR64_NOSP, i32imm, i8imm);
let ParserMatchClass = X86MemAsmOperand;
}
// Memory operands that use 64-bit pointers in both ILP32 and LP64.
def lea64mem : Operand<i64> {
let MIOperandInfo = (ops GR64, i8imm, GR64_NOSP, i32imm, i8imm);
let ParserMatchClass = X86MemAsmOperand;
}
// Memory operands that use 64-bit pointers in both ILP32 and LP64.
def lea64mem : Operand<i64> {
- let PrintMethod = "print
i64
mem";
+ let PrintMethod = "print
any
mem";
let MIOperandInfo = (ops GR64, i8imm, GR64_NOSP, i32imm, i8imm);
let ParserMatchClass = X86MemAsmOperand;
}
let MIOperandInfo = (ops GR64, i8imm, GR64_NOSP, i32imm, i8imm);
let ParserMatchClass = X86MemAsmOperand;
}
diff --git
a/test/MC/Disassembler/X86/intel-syntax-32.txt
b/test/MC/Disassembler/X86/intel-syntax-32.txt
index 2298823604aa8872d561990758c5a80f8af850d1..66c87b8bc07b526dc1780b62862b6f33946aec7b 100644
(file)
--- a/
test/MC/Disassembler/X86/intel-syntax-32.txt
+++ b/
test/MC/Disassembler/X86/intel-syntax-32.txt
@@
-29,3
+29,15
@@
# CHECK: mov dword ptr [878082192], eax
0xa3 0x90 0x78 0x56 0x34
# CHECK: mov dword ptr [878082192], eax
0xa3 0x90 0x78 0x56 0x34
+
+# CHECK: lea cx, [si + 4]
+0x67 0x66 0x8d 0x4c 0x04
+
+# CHECK: lea ecx, [si + 4]
+0x67 0x8d 0x4c 0x04
+
+# CHECK: lea cx, [esp + 4]
+0x66 0x8d 0x4c 0x24 0x04
+
+# CHECK: lea ecx, [esp + 4]
+0x8d 0x4c 0x24 0x04
diff --git
a/test/MC/Disassembler/X86/intel-syntax.txt
b/test/MC/Disassembler/X86/intel-syntax.txt
index 3689525d92fa96eb16cfb05bc4acde2b7bd6cf6a..0a628af02c157eecbc9afa52c5e718ed042c9c03 100644
(file)
--- a/
test/MC/Disassembler/X86/intel-syntax.txt
+++ b/
test/MC/Disassembler/X86/intel-syntax.txt
@@
-152,3
+152,23
@@
# CHECK: movabs qword ptr [-6066930261531658096], rax
0x48 0xa3 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab
# CHECK: movabs qword ptr [-6066930261531658096], rax
0x48 0xa3 0x90 0x78 0x56 0x34 0x12 0xef 0xcd 0xab
+
+# CHECK: lea cx, [esp + 4]
+0x67 0x66 0x8d 0x4c 0x24 0x04
+
+# CHECK: lea ecx, [esp + 4]
+0x67 0x8d 0x4c 0x24 0x04
+
+# CHECK: lea rcx, [esp + 4]
+0x67 0x48 0x8d 0x4c 0x24 0x04
+
+# CHECK: lea cx, [rsp + 4]
+0x66 0x8d 0x4c 0x24 0x04
+
+# CHECK: lea ecx, [rsp + 4]
+0x8d 0x4c 0x24 0x04
+
+# CHECK: lea rcx, [rsp + 4]
+0x48 0x8d 0x4c 0x24 0x04
+
+
diff --git
a/test/MC/Disassembler/X86/simple-tests.txt
b/test/MC/Disassembler/X86/simple-tests.txt
index e6e9c7bc9cc5bd3dc34fa0337f3fbce9fc9e02de..8fab6c9febcb99e0222b40b19cffeb7f5b74c0db 100644
(file)
--- a/
test/MC/Disassembler/X86/simple-tests.txt
+++ b/
test/MC/Disassembler/X86/simple-tests.txt
@@
-90,9
+90,24
@@
# CHECK: movq %cr0, %rcx
0x0f 0x20 0xc1
# CHECK: movq %cr0, %rcx
0x0f 0x20 0xc1
+# CHECK: leaw 4(%esp), %cx
+0x67 0x66 0x8d 0x4c 0x24 0x04
+
+# CHECK: leal 4(%esp), %ecx
+0x67 0x8d 0x4c 0x24 0x04
+
+# CHECK: leaq 4(%esp), %rcx
+0x67 0x48 0x8d 0x4c 0x24 0x04
+
+# CHECK: leaw 4(%rsp), %cx
+0x66 0x8d 0x4c 0x24 0x04
+
# CHECK: leal 4(%rsp), %ecx
0x8d 0x4c 0x24 0x04
# CHECK: leal 4(%rsp), %ecx
0x8d 0x4c 0x24 0x04
+# CHECK: leaq 4(%rsp), %rcx
+0x48 0x8d 0x4c 0x24 0x04
+
# CHECK: enter $1, $2
0xc8 0x01 0x00 0x02
# CHECK: enter $1, $2
0xc8 0x01 0x00 0x02
diff --git
a/utils/TableGen/X86RecognizableInstr.cpp
b/utils/TableGen/X86RecognizableInstr.cpp
index 64bbfba9be8bed525a7054cb76bccd5fd3906b94..198ad1090493b763d98c69c918a644b5d7c223f6 100644
(file)
--- a/
utils/TableGen/X86RecognizableInstr.cpp
+++ b/
utils/TableGen/X86RecognizableInstr.cpp
@@
-964,6
+964,7
@@
OperandType RecognizableInstr::typeFromString(const std::string &s,
TYPE("lea64mem", TYPE_LEA)
TYPE("VR64", TYPE_MM64)
TYPE("i64imm", TYPE_IMMv)
TYPE("lea64mem", TYPE_LEA)
TYPE("VR64", TYPE_MM64)
TYPE("i64imm", TYPE_IMMv)
+ TYPE("anymem", TYPE_M)
TYPE("opaque32mem", TYPE_M1616)
TYPE("opaque48mem", TYPE_M1632)
TYPE("opaque80mem", TYPE_M1664)
TYPE("opaque32mem", TYPE_M1616)
TYPE("opaque48mem", TYPE_M1632)
TYPE("opaque80mem", TYPE_M1664)
@@
-1176,9
+1177,9
@@
RecognizableInstr::memoryEncodingFromString(const std::string &s,
ENCODING("i256mem", ENCODING_RM)
ENCODING("i512mem", ENCODING_RM)
ENCODING("f80mem", ENCODING_RM)
ENCODING("i256mem", ENCODING_RM)
ENCODING("i512mem", ENCODING_RM)
ENCODING("f80mem", ENCODING_RM)
- ENCODING("lea32mem", ENCODING_RM)
ENCODING("lea64_32mem", ENCODING_RM)
ENCODING("lea64mem", ENCODING_RM)
ENCODING("lea64_32mem", ENCODING_RM)
ENCODING("lea64mem", ENCODING_RM)
+ ENCODING("anymem", ENCODING_RM)
ENCODING("opaque32mem", ENCODING_RM)
ENCODING("opaque48mem", ENCODING_RM)
ENCODING("opaque80mem", ENCODING_RM)
ENCODING("opaque32mem", ENCODING_RM)
ENCODING("opaque48mem", ENCODING_RM)
ENCODING("opaque80mem", ENCODING_RM)