Implemented functions for emitting prologues and epilogues;
[oota-llvm.git] / lib / Target / X86 / X86InstrInfo.def
index e13202616c82eede4f5618473e1bc43f37ea78f9..2693ee6821574b9eedb4a3969637e0f3f2a9ec37 100644 (file)
@@ -58,7 +58,7 @@ I(PHI         , "phi",      0,             0, 0, NoImpRegs, NoImpRegs)
 I(NOOP        , "nop",   0x90,             0, X86II::RawFrm | X86II::Void, NoImpRegs, NoImpRegs)       // nop
 
 // Flow control instructions
-I(RET         , "ret",   0xCB,    M_RET_FLAG, X86II::RawFrm | X86II::Void, NoImpRegs, NoImpRegs)       // ret
+I(RET         , "ret",   0xC3,    M_RET_FLAG, X86II::RawFrm | X86II::Void, NoImpRegs, NoImpRegs)       // ret
 I(JMP         , "jmp",   0xE9, M_BRANCH_FLAG, X86II::RawFrm | X86II::Void, NoImpRegs, NoImpRegs)       // jmp foo
 I(JNE         , "jne",   0x85, M_BRANCH_FLAG, X86II::RawFrm | X86II::TB | X86II::Void, NoImpRegs, NoImpRegs)
 I(JE          , "je",    0x84, M_BRANCH_FLAG, X86II::RawFrm | X86II::TB | X86II::Void, NoImpRegs, NoImpRegs)
@@ -82,15 +82,18 @@ I(MOVrm16     , "movw",  0x89,             0, X86II::MRMDestMem | X86II::Void |
                                               X86II::OpSize, NoImpRegs, NoImpRegs)
 I(MOVrm32     , "movl",  0x89,             0, X86II::MRMDestMem | X86II::Void, NoImpRegs, NoImpRegs)   // [mem] = R32
 
-I(PUSHr32     , "pushl", 0x50,             0, X86II::AddRegFrm | X86II::Void, NoImpRegs, NoImpRegs)
+I(PUSHr32     , "pushl", 0x50,             0, X86II::AddRegFrm | X86II::Void, NoImpRegs, NoImpRegs)    
+I(POPr32      , "popl",  0x58,             0, X86II::AddRegFrm, NoImpRegs, NoImpRegs)
 
 // Arithmetic instructions
 I(ADDrr8      , "addb",  0x00,             0, X86II::MRMDestReg, NoImpRegs, NoImpRegs)                 // R8  += R8
 I(ADDrr16     , "addw",  0x01,             0, X86II::MRMDestReg | X86II::OpSize, NoImpRegs, NoImpRegs) // R16 += R16
 I(ADDrr32     , "addl",  0x01,             0, X86II::MRMDestReg, NoImpRegs, NoImpRegs)                 // R32 += R32
+I(ADDri32     , "add",   0x81,             0, X86II::MRMS0r, NoImpRegs, NoImpRegs)                     // R32 += imm32
 I(SUBrr8      , "subb",  0x2A,             0, X86II::MRMDestReg, NoImpRegs, NoImpRegs)                 // R8  -= R8
 I(SUBrr16     , "subw",  0x2B,             0, X86II::MRMDestReg | X86II::OpSize, NoImpRegs, NoImpRegs) // R16 -= R16
 I(SUBrr32     , "subl",  0x2B,             0, X86II::MRMDestReg, NoImpRegs, NoImpRegs)                 // R32 -= R32
+I(SUBri32     , "sub",   0x81,             0, X86II::MRMS5r, NoImpRegs, NoImpRegs)                     // R32 -= imm32
 I(MULrr8      , "mulb",  0xF6,             0, X86II::MRMS4r     | X86II::Void, O_AL, O_AX)             // AX   = AL*R8
 I(MULrr16     , "mulw",  0xF7,             0, X86II::MRMS4r     | X86II::Void |                        // DX:AX= AX*R16
                                               X86II::OpSize, O_AX, T_AXDX)