diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2002-12-13 07:56:18 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2002-12-13 07:56:18 +0000 |
commit | 44876fdee4c95cae1f8dbd6fd498f58ddde0020f (patch) | |
tree | 1c864ed6dcad3f525d28cc9abc227476af909468 /llvm/lib/Target/X86/MachineCodeEmitter.cpp | |
parent | a8d8e0d9dd3811f56e93bca05c67651425e40d9c (diff) | |
download | bcm5719-llvm-44876fdee4c95cae1f8dbd6fd498f58ddde0020f.tar.gz bcm5719-llvm-44876fdee4c95cae1f8dbd6fd498f58ddde0020f.zip |
InstSelectSimple.cpp: Give promote32 a comment. Add initial
implementation of getReg() for arguments.
MachineCodeEmitter.cpp: Fix using EBP with index, scale and no
displacement (whew!) due to Chris.
Printer.cpp: Fix printing out index and scale in memory references.
llvm-svn: 4998
Diffstat (limited to 'llvm/lib/Target/X86/MachineCodeEmitter.cpp')
-rw-r--r-- | llvm/lib/Target/X86/MachineCodeEmitter.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/MachineCodeEmitter.cpp b/llvm/lib/Target/X86/MachineCodeEmitter.cpp index b5b1a0d754f..e4d17246821 100644 --- a/llvm/lib/Target/X86/MachineCodeEmitter.cpp +++ b/llvm/lib/Target/X86/MachineCodeEmitter.cpp @@ -157,17 +157,19 @@ void Emitter::emitMemModRMByte(const MachineInstr &MI, assert(IndexReg.getReg() != X86::ESP && "Cannot use ESP as index reg!"); bool ForceDisp32 = false; + bool ForceDisp8 = false; if (BaseReg.getReg() == 0) { // If there is no base register, we emit the special case SIB byte with // MOD=0, BASE=5, to JUST get the index, scale, and displacement. MCE.emitByte(ModRMByte(0, RegOpcodeField, 4)); ForceDisp32 = true; - } else if (Disp.getImmedValue() == 0) { + } else if (Disp.getImmedValue() == 0 && BaseReg.getReg() != X86::EBP) { // Emit no displacement ModR/M byte MCE.emitByte(ModRMByte(0, RegOpcodeField, 4)); } else if (isDisp8(Disp.getImmedValue())) { // Emit the disp8 encoding... MCE.emitByte(ModRMByte(1, RegOpcodeField, 4)); + ForceDisp8 = true; // Make sure to force 8 bit disp if Base=EBP } else { // Emit the normal disp32 encoding... MCE.emitByte(ModRMByte(2, RegOpcodeField, 4)); @@ -189,7 +191,7 @@ void Emitter::emitMemModRMByte(const MachineInstr &MI, } // Do we need to output a displacement? - if (Disp.getImmedValue() != 0 || ForceDisp32) { + if (Disp.getImmedValue() != 0 || ForceDisp32 || ForceDisp8) { if (!ForceDisp32 && isDisp8(Disp.getImmedValue())) emitConstant(Disp.getImmedValue(), 1); else |