First round of support for doing scalar FP using the SSE2 ISA extension and
[oota-llvm.git] / lib / Target / X86 / X86.td
1 //===- X86.td - Target definition file for the Intel X86 arch ---*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 // This is a target description file for the Intel i386 architecture, refered to
11 // here as the "X86" architecture.
12 //
13 //===----------------------------------------------------------------------===//
14
15 // Get the target-independent interfaces which we are implementing...
16 //
17 include "../Target.td"
18
19 //===----------------------------------------------------------------------===//
20 // Register File Description
21 //===----------------------------------------------------------------------===//
22
23 include "X86RegisterInfo.td"
24
25 //===----------------------------------------------------------------------===//
26 // Instruction Descriptions
27 //===----------------------------------------------------------------------===//
28
29 include "X86InstrInfo.td"
30
31 def X86InstrInfo : InstrInfo {
32   let PHIInst  = PHI;
33
34   // Define how we want to layout our TargetSpecific information field... This
35   // should be kept up-to-date with the fields in the X86InstrInfo.h file.
36   let TSFlagsFields = ["FormBits",
37                        "hasOpSizePrefix",
38                        "Prefix",
39                        "ImmTypeBits",
40                        "FPFormBits",
41                        "Opcode"];
42   let TSFlagsShifts = [0,
43                        5,
44                        6,
45                        10,
46                        12,
47                        16];
48 }
49
50 // The X86 target supports two different syntaxes for emitting machine code.
51 // This is controlled by the -x86-asm-syntax={att|intel}
52 def ATTAsmWriter : AsmWriter {
53   string AsmWriterClassName  = "ATTAsmPrinter";
54   int Variant = 0;
55 }
56 def IntelAsmWriter : AsmWriter {
57   string AsmWriterClassName  = "IntelAsmPrinter";
58   int Variant = 1;
59 }
60
61
62 def X86 : Target {
63   // Specify the callee saved registers.
64   let CalleeSavedRegisters = [ESI, EDI, EBX, EBP, XMM4, XMM5, XMM6, XMM7];
65
66   // Yes, pointers are 32-bits in size.
67   let PointerType = i32;
68
69   // Information about the instructions...
70   let InstructionSet = X86InstrInfo;
71
72   let AssemblyWriters = [ATTAsmWriter, IntelAsmWriter];
73 }