summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-06-05 18:25:08 +0000
committerChris Lattner <sabre@nondot.org>2003-06-05 18:25:08 +0000
commit76594014f2ce0a88b212d0ea4b7a939ab93c533c (patch)
tree75e01dc8894593852b95d2a66a86f557d6e9be88 /lib
parent08d2e4e09adc53aa93c08c8327d2f5f2814acb74 (diff)
downloadllvm-76594014f2ce0a88b212d0ea4b7a939ab93c533c.tar.gz
llvm-76594014f2ce0a88b212d0ea4b7a939ab93c533c.tar.bz2
llvm-76594014f2ce0a88b212d0ea4b7a939ab93c533c.tar.xz
Add instructions for (add|sub|and|or|xor)ri(8|16|32)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6625 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86InstrInfo.def25
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/Target/X86/X86InstrInfo.def b/lib/Target/X86/X86InstrInfo.def
index 03c893ba11..7c79081e1f 100644
--- a/lib/Target/X86/X86InstrInfo.def
+++ b/lib/Target/X86/X86InstrInfo.def
@@ -142,15 +142,25 @@ I(MOVrm32 , "mov", 0x89, 0, X86II::MRMDestMem | X86II::Void |
// Arithmetic instructions
I(ADDrr8 , "add", 0x00, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R8 += R8
I(ADDrr16 , "add", 0x01, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::OpSize, NoIR, NoIR) // R16 += R16
-I(ADDrr32 , "add", 0x01, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R32 += R32
-I(ADDri32 , "add", 0x81, M_2_ADDR_FLAG, X86II::MRMS0r | X86II::Arg32, NoIR, NoIR) // R32 += imm32
+I(ADDrr32 , "add", 0x01, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::Arg32, NoIR, NoIR) // R32 += R32
+
+I(ADDri8 , "add", 0x80, M_2_ADDR_FLAG, X86II::MRMS0r | X86II::Arg8, NoIR, NoIR) // R8 += imm8
+I(ADDri16 , "add", 0x81, M_2_ADDR_FLAG, X86II::MRMS0r | X86II::OpSize | X86II::Arg16, NoIR, NoIR) // R16 += imm16
+I(ADDri32 , "add", 0x81, M_2_ADDR_FLAG, X86II::MRMS0r | X86II::Arg32, NoIR, NoIR) // R32 += imm32
+
I(ADCrr32 , "adc", 0x11, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::Arg32, NoIR, NoIR) // R32 += R32 + Carry
I(SUBrr8 , "sub", 0x28, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R8 -= R8
I(SUBrr16 , "sub", 0x29, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::OpSize, NoIR, NoIR) // R16 -= R16
I(SUBrr32 , "sub", 0x29, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R32 -= R32
+
+I(SUBri8 , "sub", 0x80, M_2_ADDR_FLAG, X86II::MRMS5r | X86II::Arg8 , NoIR, NoIR) // R8 -= imm8
+I(SUBri16 , "sub", 0x81, M_2_ADDR_FLAG, X86II::MRMS5r | X86II::OpSize | X86II::Arg16, NoIR, NoIR) // R16 -= imm16
I(SUBri32 , "sub", 0x81, M_2_ADDR_FLAG, X86II::MRMS5r | X86II::Arg32, NoIR, NoIR) // R32 -= imm32
+
I(SBBrr32 , "sbb", 0x19, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::Arg32, NoIR, NoIR) // R32 -= R32 + Carry
+
+
I(MULr8 , "mul", 0xF6, 0, X86II::MRMS4r | X86II::Void, O_AL, O_AX) // AX = AL*R8
I(MULr16 , "mul", 0xF7, 0, X86II::MRMS4r | X86II::Void | // DX:AX= AX*R16
X86II::OpSize, O_AX, T_AXDX)
@@ -174,13 +184,24 @@ I(IDIVr32 , "idiv", 0xF7, 0, X86II::MRMS7r | X86II::Void, T_EAXE
I(ANDrr8 , "and", 0x20, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R8 &= R8
I(ANDrr16 , "and", 0x21, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::OpSize, NoIR, NoIR) // R16 &= R16
I(ANDrr32 , "and", 0x21, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R32 &= R32
+I(ANDri8 , "and", 0x80, M_2_ADDR_FLAG, X86II::MRMS4r | X86II::Arg8 , NoIR, NoIR) // R8 &= imm8
+I(ANDri16 , "and", 0x81, M_2_ADDR_FLAG, X86II::MRMS4r | X86II::Arg16 | X86II::OpSize, NoIR, NoIR) // R16 &= imm16
I(ANDri32 , "and", 0x81, M_2_ADDR_FLAG, X86II::MRMS4r | X86II::Arg32, NoIR, NoIR) // R32 &= imm32
+
+
I(ORrr8 , "or", 0x08, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R8 |= R8
I(ORrr16 , "or", 0x09, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::OpSize, NoIR, NoIR) // R16 |= R16
I(ORrr32 , "or", 0x09, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R32 |= R32
+I(ORri8 , "or", 0x80, M_2_ADDR_FLAG, X86II::MRMS1r | X86II::Arg8 , NoIR, NoIR) // R8 |= imm8
+I(ORri16 , "or", 0x81, M_2_ADDR_FLAG, X86II::MRMS1r | X86II::Arg16 | X86II::OpSize, NoIR, NoIR) // R16 |= imm16
+I(ORri32 , "or", 0x81, M_2_ADDR_FLAG, X86II::MRMS1r | X86II::Arg32, NoIR, NoIR) // R32 |= imm32
+
I(XORrr8 , "xor", 0x30, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R8 ^= R8
I(XORrr16 , "xor", 0x31, M_2_ADDR_FLAG, X86II::MRMDestReg | X86II::OpSize, NoIR, NoIR) // R16 ^= R16
I(XORrr32 , "xor", 0x31, M_2_ADDR_FLAG, X86II::MRMDestReg, NoIR, NoIR) // R32 ^= R32
+I(XORri8 , "xor", 0x80, M_2_ADDR_FLAG, X86II::MRMS6r | X86II::Arg8 , NoIR, NoIR) // R8 ^= imm8
+I(XORri16 , "xor", 0x81, M_2_ADDR_FLAG, X86II::MRMS6r | X86II::Arg16 | X86II::OpSize, NoIR, NoIR) // R16 ^= imm16
+I(XORri32 , "xor", 0x81, M_2_ADDR_FLAG, X86II::MRMS6r | X86II::Arg32, NoIR, NoIR) // R32 ^= imm32
// test instructions are just like and, except they don't generate a result (but
// they do set flags).