Subtarget feature can now set any variable to any value
[oota-llvm.git] / lib / Target / Alpha / Alpha.td
1 //===- Alpha.td - Describe the Alpha Target Machine --------*- tablegen -*-===//
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 //
11 //===----------------------------------------------------------------------===//
12
13 // Get the target-independent interfaces which we are implementing...
14 //
15 include "../Target.td"
16
17 //Alpha is little endian
18
19 //===----------------------------------------------------------------------===//
20 // Subtarget Features
21 //===----------------------------------------------------------------------===//
22
23 def FeatureCIX : SubtargetFeature<"CIX", "HasCT", "true",
24                                   "Enable CIX extentions">;
25 def FeatureFIX : SubtargetFeature<"FIX", "HasF2I", "true",
26                                   "Enable FIX extentions">;
27
28 //===----------------------------------------------------------------------===//
29 // Register File Description
30 //===----------------------------------------------------------------------===//
31
32 include "AlphaRegisterInfo.td"
33
34 //===----------------------------------------------------------------------===//
35 // Instruction Descriptions
36 //===----------------------------------------------------------------------===//
37
38 include "AlphaInstrInfo.td"
39
40 def AlphaInstrInfo : InstrInfo {
41   // Define how we want to layout our target-specific information field.
42  // let TSFlagsFields = [];
43  // let TSFlagsShifts = [];
44 }
45
46 //===----------------------------------------------------------------------===//
47 // Alpha Processor Definitions
48 //===----------------------------------------------------------------------===//
49
50 def : Processor<"generic", NoItineraries, []>;
51 def : Processor<"pca56"  , NoItineraries, []>;
52 def : Processor<"ev56"   , NoItineraries, []>;
53 def : Processor<"ev6"    , NoItineraries, [FeatureFIX]>;
54 def : Processor<"ev67"   , NoItineraries, [FeatureFIX, FeatureCIX]>;
55
56 //===----------------------------------------------------------------------===//
57 // The Alpha Target
58 //===----------------------------------------------------------------------===//
59
60
61 def Alpha : Target {
62   // Pointers on Alpha are 64-bits in size.
63   let PointerType = i64;
64
65   let CalleeSavedRegisters = 
66         //saved regs
67         [R9, R10, R11, R12, R13, R14, 
68         //Frame pointer
69 //      R15, 
70         //return address
71 //      R26, 
72         //Stack Pointer
73 //      R30,
74          F2, F3, F4, F5, F6, F7, F8, F9];
75
76   // Pull in Instruction Info:
77   let InstructionSet = AlphaInstrInfo;
78 }