[llvm-commits] [llvm] r57380 - in /llvm/trunk/lib/Target/X86: X86.td X86CodeEmitter.cpp X86InstrFormats.td X86InstrInfo.h
Mon Ping Wang
monping at apple.com
Sat Oct 11 19:33:59 PDT 2008
Hi Anton,
Shouldn't we also increment the size for the overside segment in
X86InstrInfo.cpp?
static unsigned GetInstSizeWithDesc(const MachineInstr &MI,
const TargetInstrDesc *Desc,
bool IsPIC, bool Is64BitMode) {
...
// Emit the operand size opcode prefix as needed.
switch (Desc->TSFlags & X86II::SegOvrMask) {
case X86II::FS:
++FinalSize;
break;
case X86II::GS:
++FinalSize;
break;
}
...
-- Mon Ping
On Oct 11, 2008, at 12:09 PM, Anton Korobeynikov wrote:
> Author: asl
> Date: Sat Oct 11 14:09:15 2008
> New Revision: 57380
>
> URL: http://llvm.org/viewvc/llvm-project?rev=57380&view=rev
> Log:
> Add ability to override segment (mostly for code emitter purposes).
>
> Modified:
> llvm/trunk/lib/Target/X86/X86.td
> llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp
> llvm/trunk/lib/Target/X86/X86InstrFormats.td
> llvm/trunk/lib/Target/X86/X86InstrInfo.h
>
> Modified: llvm/trunk/lib/Target/X86/X86.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86.td?rev=57380&r1=57379&r2=57380&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86.td (original)
> +++ llvm/trunk/lib/Target/X86/X86.td Sat Oct 11 14:09:15 2008
> @@ -116,6 +116,7 @@
> "ImmTypeBits",
> "FPFormBits",
> "hasLockPrefix",
> + "SegOvrBits",
> "Opcode"];
> let TSFlagsShifts = [0,
> 6,
> @@ -125,6 +126,7 @@
> 13,
> 16,
> 19,
> + 20,
> 24];
> }
>
>
> Modified: llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp?rev=57380&r1=57379&r2=57380&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86CodeEmitter.cpp Sat Oct 11 14:09:15
> 2008
> @@ -412,6 +412,16 @@
> // Emit the lock opcode prefix as needed.
> if (Desc->TSFlags & X86II::LOCK) MCE.emitByte(0xF0);
>
> + // Emit segment overrid opcode prefix as needed.
> + switch (Desc->TSFlags & X86II::SegOvrMask) {
> + case X86II::FS:
> + MCE.emitByte(0x64);
> + break;
> + case X86II::GS:
> + MCE.emitByte(0x65);
> + break;
> + }
> +
> // Emit the repeat opcode prefix as needed.
> if ((Desc->TSFlags & X86II::Op0Mask) == X86II::REP) MCE.emitByte
> (0xF3);
>
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrFormats.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrFormats.td?rev=57380&r1=57379&r2=57380&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrFormats.td (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrFormats.td Sat Oct 11 14:09:15
> 2008
> @@ -63,6 +63,8 @@
> class AdSize { bit hasAdSizePrefix = 1; }
> class REX_W { bit hasREX_WPrefix = 1; }
> class LOCK { bit hasLockPrefix = 1; }
> +class SegFS { bits<2> SegOvrBits = 1; }
> +class SegGS { bits<2> SegOvrBits = 2; }
> class TB { bits<4> Prefix = 1; }
> class REP { bits<4> Prefix = 2; }
> class D8 { bits<4> Prefix = 3; }
> @@ -104,6 +106,7 @@
> FPFormat FPForm; // What flavor of FP instruction is this?
> bits<3> FPFormBits = 0;
> bit hasLockPrefix = 0; // Does this inst have a 0xF0 prefix?
> + bits<2> SegOvrBits = 0; // Segment override prefix.
> }
>
> class I<bits<8> o, Format f, dag outs, dag ins, string asm,
> list<dag> pattern>
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=57380&r1=57379&r2=57380&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Sat Oct 11 14:09:15 2008
> @@ -221,7 +221,14 @@
> LOCKShift = 19,
> LOCK = 1 << LOCKShift,
>
> - // Bits 20 -> 23 are unused
> + // Segment override prefixes. Currently we just need ability to
> address
> + // stuff in gs and fs segments.
> + SegOvrShift = 20,
> + SegOvrMask = 3 << SegOvrShift,
> + FS = 1 << SegOvrShift,
> + GS = 2 << SegOvrShift,
> +
> + // Bits 22 -> 23 are unused
> OpcodeShift = 24,
> OpcodeMask = 0xFF << OpcodeShift
> };
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list