]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/llvm/lib/Target/NVPTX/gen-register-defs.py
MFC r244628:
[FreeBSD/stable/9.git] / contrib / llvm / lib / Target / NVPTX / gen-register-defs.py
1 #!/usr/bin/env python
2
3 num_regs = 396
4
5 outFile = open('NVPTXRegisterInfo.td', 'w')
6
7 outFile.write('''
8 //===-- NVPTXRegisterInfo.td - NVPTX Register defs ---------*- tablegen -*-===//
9 //
10 //                     The LLVM Compiler Infrastructure
11 //
12 // This file is distributed under the University of Illinois Open Source
13 // License. See LICENSE.TXT for details.
14 //
15 //===----------------------------------------------------------------------===//
16
17 //===----------------------------------------------------------------------===//
18 //  Declarations that describe the PTX register file
19 //===----------------------------------------------------------------------===//
20
21 class NVPTXReg<string n> : Register<n> {
22   let Namespace = "NVPTX";
23 }
24
25 class NVPTXRegClass<list<ValueType> regTypes, int alignment, dag regList>
26      : RegisterClass <"NVPTX", regTypes, alignment, regList>;
27
28 //===----------------------------------------------------------------------===//
29 //  Registers
30 //===----------------------------------------------------------------------===//
31
32 // Special Registers used as stack pointer
33 def VRFrame         : NVPTXReg<"%SP">;
34 def VRFrameLocal    : NVPTXReg<"%SPL">;
35
36 // Special Registers used as the stack
37 def VRDepot  : NVPTXReg<"%Depot">;
38 ''')
39
40 # Predicates
41 outFile.write('''
42 //===--- Predicate --------------------------------------------------------===//
43 ''')
44 for i in range(0, num_regs):
45   outFile.write('def P%d : NVPTXReg<"%%p%d">;\n' % (i, i))
46
47 # Int8
48 outFile.write('''
49 //===--- 8-bit ------------------------------------------------------------===//
50 ''')
51 for i in range(0, num_regs):
52   outFile.write('def RC%d : NVPTXReg<"%%rc%d">;\n' % (i, i))
53
54 # Int16
55 outFile.write('''
56 //===--- 16-bit -----------------------------------------------------------===//
57 ''')
58 for i in range(0, num_regs):
59   outFile.write('def RS%d : NVPTXReg<"%%rs%d">;\n' % (i, i))
60
61 # Int32
62 outFile.write('''
63 //===--- 32-bit -----------------------------------------------------------===//
64 ''')
65 for i in range(0, num_regs):
66   outFile.write('def R%d : NVPTXReg<"%%r%d">;\n' % (i, i))
67
68 # Int64
69 outFile.write('''
70 //===--- 64-bit -----------------------------------------------------------===//
71 ''')
72 for i in range(0, num_regs):
73   outFile.write('def RL%d : NVPTXReg<"%%rl%d">;\n' % (i, i))
74
75 # F32
76 outFile.write('''
77 //===--- 32-bit float -----------------------------------------------------===//
78 ''')
79 for i in range(0, num_regs):
80   outFile.write('def F%d : NVPTXReg<"%%f%d">;\n' % (i, i))
81
82 # F64
83 outFile.write('''
84 //===--- 64-bit float -----------------------------------------------------===//
85 ''')
86 for i in range(0, num_regs):
87   outFile.write('def FL%d : NVPTXReg<"%%fl%d">;\n' % (i, i))
88
89 # Vector registers
90 outFile.write('''
91 //===--- Vector -----------------------------------------------------------===//
92 ''')
93 for i in range(0, num_regs):
94   outFile.write('def v2b8_%d : NVPTXReg<"%%v2b8_%d">;\n' % (i, i))
95 for i in range(0, num_regs):
96   outFile.write('def v2b16_%d : NVPTXReg<"%%v2b16_%d">;\n' % (i, i))
97 for i in range(0, num_regs):
98   outFile.write('def v2b32_%d : NVPTXReg<"%%v2b32_%d">;\n' % (i, i))
99 for i in range(0, num_regs):
100   outFile.write('def v2b64_%d : NVPTXReg<"%%v2b64_%d">;\n' % (i, i))
101
102 for i in range(0, num_regs):
103   outFile.write('def v4b8_%d : NVPTXReg<"%%v4b8_%d">;\n' % (i, i))
104 for i in range(0, num_regs):
105   outFile.write('def v4b16_%d : NVPTXReg<"%%v4b16_%d">;\n' % (i, i))
106 for i in range(0, num_regs):
107   outFile.write('def v4b32_%d : NVPTXReg<"%%v4b32_%d">;\n' % (i, i))
108
109 # Argument registers
110 outFile.write('''
111 //===--- Arguments --------------------------------------------------------===//
112 ''')
113 for i in range(0, num_regs):
114   outFile.write('def ia%d : NVPTXReg<"%%ia%d">;\n' % (i, i))
115 for i in range(0, num_regs):
116   outFile.write('def la%d : NVPTXReg<"%%la%d">;\n' % (i, i))
117 for i in range(0, num_regs):
118   outFile.write('def fa%d : NVPTXReg<"%%fa%d">;\n' % (i, i))
119 for i in range(0, num_regs):
120   outFile.write('def da%d : NVPTXReg<"%%da%d">;\n' % (i, i))
121
122 outFile.write('''
123 //===----------------------------------------------------------------------===//
124 //  Register classes
125 //===----------------------------------------------------------------------===//
126 ''')
127
128 outFile.write('def Int1Regs : NVPTXRegClass<[i1], 8, (add (sequence "P%%u", 0, %d))>;\n' % (num_regs-1))
129 outFile.write('def Int8Regs : NVPTXRegClass<[i8], 8, (add (sequence "RC%%u", 0, %d))>;\n' % (num_regs-1))
130 outFile.write('def Int16Regs : NVPTXRegClass<[i16], 16, (add (sequence "RS%%u", 0, %d))>;\n' % (num_regs-1))
131 outFile.write('def Int32Regs : NVPTXRegClass<[i32], 32, (add (sequence "R%%u", 0, %d))>;\n' % (num_regs-1))
132 outFile.write('def Int64Regs : NVPTXRegClass<[i64], 64, (add (sequence "RL%%u", 0, %d))>;\n' % (num_regs-1))
133
134 outFile.write('def Float32Regs : NVPTXRegClass<[f32], 32, (add (sequence "F%%u", 0, %d))>;\n' % (num_regs-1))
135 outFile.write('def Float64Regs : NVPTXRegClass<[f64], 64, (add (sequence "FL%%u", 0, %d))>;\n' % (num_regs-1))
136
137 outFile.write('def Int32ArgRegs : NVPTXRegClass<[i32], 32, (add (sequence "ia%%u", 0, %d))>;\n' % (num_regs-1))
138 outFile.write('def Int64ArgRegs : NVPTXRegClass<[i64], 64, (add (sequence "la%%u", 0, %d))>;\n' % (num_regs-1))
139 outFile.write('def Float32ArgRegs : NVPTXRegClass<[f32], 32, (add (sequence "fa%%u", 0, %d))>;\n' % (num_regs-1))
140 outFile.write('def Float64ArgRegs : NVPTXRegClass<[f64], 64, (add (sequence "da%%u", 0, %d))>;\n' % (num_regs-1))
141
142 outFile.write('''
143 // Read NVPTXRegisterInfo.cpp to see how VRFrame and VRDepot are used.
144 def SpecialRegs : NVPTXRegClass<[i32], 32, (add VRFrame, VRDepot)>;
145 ''')
146
147 outFile.write('''
148 class NVPTXVecRegClass<list<ValueType> regTypes, int alignment, dag regList,
149                        NVPTXRegClass sClass,
150                        int e,
151                        string n>
152   : NVPTXRegClass<regTypes, alignment, regList>
153 {
154   NVPTXRegClass scalarClass=sClass;
155   int elems=e;
156   string name=n;
157 }
158 ''')
159
160
161 outFile.write('def V2F32Regs\n  : NVPTXVecRegClass<[v2f32], 64, (add (sequence "v2b32_%%u", 0, %d)),\n    Float32Regs, 2, ".v2.f32">;\n' % (num_regs-1))
162 outFile.write('def V4F32Regs\n  : NVPTXVecRegClass<[v4f32], 128, (add (sequence "v4b32_%%u", 0, %d)),\n    Float32Regs, 4, ".v4.f32">;\n' % (num_regs-1))
163
164 outFile.write('def V2I32Regs\n  : NVPTXVecRegClass<[v2i32], 64, (add (sequence "v2b32_%%u", 0, %d)),\n    Int32Regs, 2, ".v2.u32">;\n' % (num_regs-1))
165 outFile.write('def V4I32Regs\n  : NVPTXVecRegClass<[v4i32], 128, (add (sequence "v4b32_%%u", 0, %d)),\n    Int32Regs, 4, ".v4.u32">;\n' % (num_regs-1))
166
167 outFile.write('def V2F64Regs\n  : NVPTXVecRegClass<[v2f64], 128, (add (sequence "v2b64_%%u", 0, %d)),\n    Float64Regs, 2, ".v2.f64">;\n' % (num_regs-1))
168 outFile.write('def V2I64Regs\n  : NVPTXVecRegClass<[v2i64], 128, (add (sequence "v2b64_%%u", 0, %d)),\n    Int64Regs, 2, ".v2.u64">;\n' % (num_regs-1))
169
170 outFile.write('def V2I16Regs\n  : NVPTXVecRegClass<[v2i16], 32, (add (sequence "v2b16_%%u", 0, %d)),\n    Int16Regs, 2, ".v2.u16">;\n' % (num_regs-1))
171 outFile.write('def V4I16Regs\n  : NVPTXVecRegClass<[v4i16], 64, (add (sequence "v4b16_%%u", 0, %d)),\n    Int16Regs, 4, ".v4.u16">;\n' % (num_regs-1))
172
173 outFile.write('def V2I8Regs\n  : NVPTXVecRegClass<[v2i8], 16, (add (sequence "v2b8_%%u", 0, %d)),\n    Int8Regs, 2, ".v2.u8">;\n' % (num_regs-1))
174 outFile.write('def V4I8Regs\n  : NVPTXVecRegClass<[v4i8], 32, (add (sequence "v4b8_%%u", 0, %d)),\n    Int8Regs, 4, ".v4.u8">;\n' % (num_regs-1))
175
176 outFile.close()
177
178
179 outFile = open('NVPTXNumRegisters.h', 'w')
180 outFile.write('''
181 //===-- NVPTXNumRegisters.h - PTX Register Info ---------------------------===//
182 //
183 //                     The LLVM Compiler Infrastructure
184 //
185 // This file is distributed under the University of Illinois Open Source
186 // License. See LICENSE.TXT for details.
187 //
188 //===----------------------------------------------------------------------===//
189
190 #ifndef NVPTX_NUM_REGISTERS_H
191 #define NVPTX_NUM_REGISTERS_H
192
193 namespace llvm {
194
195 const unsigned NVPTXNumRegisters = %d;
196
197 }
198
199 #endif
200 ''' % num_regs)
201
202 outFile.close()