1 // i386 register table.
2 // Copyright (C) 2007-2019 Free Software Foundation, Inc.
4 // This file is part of the GNU opcodes library.
6 // This library is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3, or (at your option)
11 // It is distributed in the hope that it will be useful, but WITHOUT
12 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 // License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with GAS; see the file COPYING. If not, write to the Free
18 // Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21 // Make %st first as we test for it.
22 st, FloatReg|Acc, 0, 0, 11, 33
24 al, Reg8|Acc, 0, 0, Dw2Inval, Dw2Inval
25 cl, Reg8|ShiftCount, 0, 1, Dw2Inval, Dw2Inval
26 dl, Reg8, 0, 2, Dw2Inval, Dw2Inval
27 bl, Reg8, 0, 3, Dw2Inval, Dw2Inval
28 ah, Reg8, 0, 4, Dw2Inval, Dw2Inval
29 ch, Reg8, 0, 5, Dw2Inval, Dw2Inval
30 dh, Reg8, 0, 6, Dw2Inval, Dw2Inval
31 bh, Reg8, 0, 7, Dw2Inval, Dw2Inval
32 axl, Reg8, RegRex64, 0, Dw2Inval, Dw2Inval
33 cxl, Reg8, RegRex64, 1, Dw2Inval, Dw2Inval
34 dxl, Reg8, RegRex64, 2, Dw2Inval, Dw2Inval
35 bxl, Reg8, RegRex64, 3, Dw2Inval, Dw2Inval
36 spl, Reg8, RegRex64, 4, Dw2Inval, Dw2Inval
37 bpl, Reg8, RegRex64, 5, Dw2Inval, Dw2Inval
38 sil, Reg8, RegRex64, 6, Dw2Inval, Dw2Inval
39 dil, Reg8, RegRex64, 7, Dw2Inval, Dw2Inval
40 r8b, Reg8, RegRex|RegRex64, 0, Dw2Inval, Dw2Inval
41 r9b, Reg8, RegRex|RegRex64, 1, Dw2Inval, Dw2Inval
42 r10b, Reg8, RegRex|RegRex64, 2, Dw2Inval, Dw2Inval
43 r11b, Reg8, RegRex|RegRex64, 3, Dw2Inval, Dw2Inval
44 r12b, Reg8, RegRex|RegRex64, 4, Dw2Inval, Dw2Inval
45 r13b, Reg8, RegRex|RegRex64, 5, Dw2Inval, Dw2Inval
46 r14b, Reg8, RegRex|RegRex64, 6, Dw2Inval, Dw2Inval
47 r15b, Reg8, RegRex|RegRex64, 7, Dw2Inval, Dw2Inval
49 ax, Reg16|Acc, 0, 0, Dw2Inval, Dw2Inval
50 cx, Reg16, 0, 1, Dw2Inval, Dw2Inval
51 dx, Reg16|InOutPortReg, 0, 2, Dw2Inval, Dw2Inval
52 bx, Reg16|BaseIndex, 0, 3, Dw2Inval, Dw2Inval
53 sp, Reg16, 0, 4, Dw2Inval, Dw2Inval
54 bp, Reg16|BaseIndex, 0, 5, Dw2Inval, Dw2Inval
55 si, Reg16|BaseIndex, 0, 6, Dw2Inval, Dw2Inval
56 di, Reg16|BaseIndex, 0, 7, Dw2Inval, Dw2Inval
57 r8w, Reg16, RegRex, 0, Dw2Inval, Dw2Inval
58 r9w, Reg16, RegRex, 1, Dw2Inval, Dw2Inval
59 r10w, Reg16, RegRex, 2, Dw2Inval, Dw2Inval
60 r11w, Reg16, RegRex, 3, Dw2Inval, Dw2Inval
61 r12w, Reg16, RegRex, 4, Dw2Inval, Dw2Inval
62 r13w, Reg16, RegRex, 5, Dw2Inval, Dw2Inval
63 r14w, Reg16, RegRex, 6, Dw2Inval, Dw2Inval
64 r15w, Reg16, RegRex, 7, Dw2Inval, Dw2Inval
66 eax, Reg32|BaseIndex|Acc, 0, 0, 0, Dw2Inval
67 ecx, Reg32|BaseIndex, 0, 1, 1, Dw2Inval
68 edx, Reg32|BaseIndex, 0, 2, 2, Dw2Inval
69 ebx, Reg32|BaseIndex, 0, 3, 3, Dw2Inval
70 esp, Reg32, 0, 4, 4, Dw2Inval
71 ebp, Reg32|BaseIndex, 0, 5, 5, Dw2Inval
72 esi, Reg32|BaseIndex, 0, 6, 6, Dw2Inval
73 edi, Reg32|BaseIndex, 0, 7, 7, Dw2Inval
74 r8d, Reg32|BaseIndex, RegRex, 0, Dw2Inval, Dw2Inval
75 r9d, Reg32|BaseIndex, RegRex, 1, Dw2Inval, Dw2Inval
76 r10d, Reg32|BaseIndex, RegRex, 2, Dw2Inval, Dw2Inval
77 r11d, Reg32|BaseIndex, RegRex, 3, Dw2Inval, Dw2Inval
78 r12d, Reg32|BaseIndex, RegRex, 4, Dw2Inval, Dw2Inval
79 r13d, Reg32|BaseIndex, RegRex, 5, Dw2Inval, Dw2Inval
80 r14d, Reg32|BaseIndex, RegRex, 6, Dw2Inval, Dw2Inval
81 r15d, Reg32|BaseIndex, RegRex, 7, Dw2Inval, Dw2Inval
82 rax, Reg64|BaseIndex|Acc, 0, 0, Dw2Inval, 0
83 rcx, Reg64|BaseIndex, 0, 1, Dw2Inval, 2
84 rdx, Reg64|BaseIndex, 0, 2, Dw2Inval, 1
85 rbx, Reg64|BaseIndex, 0, 3, Dw2Inval, 3
86 rsp, Reg64, 0, 4, Dw2Inval, 7
87 rbp, Reg64|BaseIndex, 0, 5, Dw2Inval, 6
88 rsi, Reg64|BaseIndex, 0, 6, Dw2Inval, 4
89 rdi, Reg64|BaseIndex, 0, 7, Dw2Inval, 5
90 r8, Reg64|BaseIndex, RegRex, 0, Dw2Inval, 8
91 r9, Reg64|BaseIndex, RegRex, 1, Dw2Inval, 9
92 r10, Reg64|BaseIndex, RegRex, 2, Dw2Inval, 10
93 r11, Reg64|BaseIndex, RegRex, 3, Dw2Inval, 11
94 r12, Reg64|BaseIndex, RegRex, 4, Dw2Inval, 12
95 r13, Reg64|BaseIndex, RegRex, 5, Dw2Inval, 13
96 r14, Reg64|BaseIndex, RegRex, 6, Dw2Inval, 14
97 r15, Reg64|BaseIndex, RegRex, 7, Dw2Inval, 15
98 // Vector mask registers.
99 k0, RegMask, 0, 0, 93, 118
100 k1, RegMask, 0, 1, 94, 119
101 k2, RegMask, 0, 2, 95, 120
102 k3, RegMask, 0, 3, 96, 121
103 k4, RegMask, 0, 4, 97, 122
104 k5, RegMask, 0, 5, 98, 123
105 k6, RegMask, 0, 6, 99, 124
106 k7, RegMask, 0, 7, 100, 125
107 // Segment registers.
108 es, SReg, 0, 0, 40, 50
109 cs, SReg, 0, 1, 41, 51
110 ss, SReg, 0, 2, 42, 52
111 ds, SReg, 0, 3, 43, 53
112 fs, SReg, 0, 4, 44, 54
113 gs, SReg, 0, 5, 45, 55
114 flat, SReg, 0, RegFlat, Dw2Inval, Dw2Inval
115 // Control registers.
116 cr0, Control, 0, 0, Dw2Inval, Dw2Inval
117 cr1, Control, 0, 1, Dw2Inval, Dw2Inval
118 cr2, Control, 0, 2, Dw2Inval, Dw2Inval
119 cr3, Control, 0, 3, Dw2Inval, Dw2Inval
120 cr4, Control, 0, 4, Dw2Inval, Dw2Inval
121 cr5, Control, 0, 5, Dw2Inval, Dw2Inval
122 cr6, Control, 0, 6, Dw2Inval, Dw2Inval
123 cr7, Control, 0, 7, Dw2Inval, Dw2Inval
124 cr8, Control, RegRex, 0, Dw2Inval, Dw2Inval
125 cr9, Control, RegRex, 1, Dw2Inval, Dw2Inval
126 cr10, Control, RegRex, 2, Dw2Inval, Dw2Inval
127 cr11, Control, RegRex, 3, Dw2Inval, Dw2Inval
128 cr12, Control, RegRex, 4, Dw2Inval, Dw2Inval
129 cr13, Control, RegRex, 5, Dw2Inval, Dw2Inval
130 cr14, Control, RegRex, 6, Dw2Inval, Dw2Inval
131 cr15, Control, RegRex, 7, Dw2Inval, Dw2Inval
133 db0, Debug, 0, 0, Dw2Inval, Dw2Inval
134 db1, Debug, 0, 1, Dw2Inval, Dw2Inval
135 db2, Debug, 0, 2, Dw2Inval, Dw2Inval
136 db3, Debug, 0, 3, Dw2Inval, Dw2Inval
137 db4, Debug, 0, 4, Dw2Inval, Dw2Inval
138 db5, Debug, 0, 5, Dw2Inval, Dw2Inval
139 db6, Debug, 0, 6, Dw2Inval, Dw2Inval
140 db7, Debug, 0, 7, Dw2Inval, Dw2Inval
141 db8, Debug, RegRex, 0, Dw2Inval, Dw2Inval
142 db9, Debug, RegRex, 1, Dw2Inval, Dw2Inval
143 db10, Debug, RegRex, 2, Dw2Inval, Dw2Inval
144 db11, Debug, RegRex, 3, Dw2Inval, Dw2Inval
145 db12, Debug, RegRex, 4, Dw2Inval, Dw2Inval
146 db13, Debug, RegRex, 5, Dw2Inval, Dw2Inval
147 db14, Debug, RegRex, 6, Dw2Inval, Dw2Inval
148 db15, Debug, RegRex, 7, Dw2Inval, Dw2Inval
149 dr0, Debug, 0, 0, Dw2Inval, Dw2Inval
150 dr1, Debug, 0, 1, Dw2Inval, Dw2Inval
151 dr2, Debug, 0, 2, Dw2Inval, Dw2Inval
152 dr3, Debug, 0, 3, Dw2Inval, Dw2Inval
153 dr4, Debug, 0, 4, Dw2Inval, Dw2Inval
154 dr5, Debug, 0, 5, Dw2Inval, Dw2Inval
155 dr6, Debug, 0, 6, Dw2Inval, Dw2Inval
156 dr7, Debug, 0, 7, Dw2Inval, Dw2Inval
157 dr8, Debug, RegRex, 0, Dw2Inval, Dw2Inval
158 dr9, Debug, RegRex, 1, Dw2Inval, Dw2Inval
159 dr10, Debug, RegRex, 2, Dw2Inval, Dw2Inval
160 dr11, Debug, RegRex, 3, Dw2Inval, Dw2Inval
161 dr12, Debug, RegRex, 4, Dw2Inval, Dw2Inval
162 dr13, Debug, RegRex, 5, Dw2Inval, Dw2Inval
163 dr14, Debug, RegRex, 6, Dw2Inval, Dw2Inval
164 dr15, Debug, RegRex, 7, Dw2Inval, Dw2Inval
166 tr0, Test, 0, 0, Dw2Inval, Dw2Inval
167 tr1, Test, 0, 1, Dw2Inval, Dw2Inval
168 tr2, Test, 0, 2, Dw2Inval, Dw2Inval
169 tr3, Test, 0, 3, Dw2Inval, Dw2Inval
170 tr4, Test, 0, 4, Dw2Inval, Dw2Inval
171 tr5, Test, 0, 5, Dw2Inval, Dw2Inval
172 tr6, Test, 0, 6, Dw2Inval, Dw2Inval
173 tr7, Test, 0, 7, Dw2Inval, Dw2Inval
174 // MMX and simd registers.
175 mm0, RegMMX, 0, 0, 29, 41
176 mm1, RegMMX, 0, 1, 30, 42
177 mm2, RegMMX, 0, 2, 31, 43
178 mm3, RegMMX, 0, 3, 32, 44
179 mm4, RegMMX, 0, 4, 33, 45
180 mm5, RegMMX, 0, 5, 34, 46
181 mm6, RegMMX, 0, 6, 35, 47
182 mm7, RegMMX, 0, 7, 36, 48
183 xmm0, RegXMM|Acc, 0, 0, 21, 17
184 xmm1, RegXMM, 0, 1, 22, 18
185 xmm2, RegXMM, 0, 2, 23, 19
186 xmm3, RegXMM, 0, 3, 24, 20
187 xmm4, RegXMM, 0, 4, 25, 21
188 xmm5, RegXMM, 0, 5, 26, 22
189 xmm6, RegXMM, 0, 6, 27, 23
190 xmm7, RegXMM, 0, 7, 28, 24
191 xmm8, RegXMM, RegRex, 0, Dw2Inval, 25
192 xmm9, RegXMM, RegRex, 1, Dw2Inval, 26
193 xmm10, RegXMM, RegRex, 2, Dw2Inval, 27
194 xmm11, RegXMM, RegRex, 3, Dw2Inval, 28
195 xmm12, RegXMM, RegRex, 4, Dw2Inval, 29
196 xmm13, RegXMM, RegRex, 5, Dw2Inval, 30
197 xmm14, RegXMM, RegRex, 6, Dw2Inval, 31
198 xmm15, RegXMM, RegRex, 7, Dw2Inval, 32
199 xmm16, RegXMM, RegVRex, 0, Dw2Inval, 67
200 xmm17, RegXMM, RegVRex, 1, Dw2Inval, 68
201 xmm18, RegXMM, RegVRex, 2, Dw2Inval, 69
202 xmm19, RegXMM, RegVRex, 3, Dw2Inval, 70
203 xmm20, RegXMM, RegVRex, 4, Dw2Inval, 71
204 xmm21, RegXMM, RegVRex, 5, Dw2Inval, 72
205 xmm22, RegXMM, RegVRex, 6, Dw2Inval, 73
206 xmm23, RegXMM, RegVRex, 7, Dw2Inval, 74
207 xmm24, RegXMM, RegVRex|RegRex, 0, Dw2Inval, 75
208 xmm25, RegXMM, RegVRex|RegRex, 1, Dw2Inval, 76
209 xmm26, RegXMM, RegVRex|RegRex, 2, Dw2Inval, 77
210 xmm27, RegXMM, RegVRex|RegRex, 3, Dw2Inval, 78
211 xmm28, RegXMM, RegVRex|RegRex, 4, Dw2Inval, 79
212 xmm29, RegXMM, RegVRex|RegRex, 5, Dw2Inval, 80
213 xmm30, RegXMM, RegVRex|RegRex, 6, Dw2Inval, 81
214 xmm31, RegXMM, RegVRex|RegRex, 7, Dw2Inval, 82
216 ymm0, RegYMM, 0, 0, Dw2Inval, Dw2Inval
217 ymm1, RegYMM, 0, 1, Dw2Inval, Dw2Inval
218 ymm2, RegYMM, 0, 2, Dw2Inval, Dw2Inval
219 ymm3, RegYMM, 0, 3, Dw2Inval, Dw2Inval
220 ymm4, RegYMM, 0, 4, Dw2Inval, Dw2Inval
221 ymm5, RegYMM, 0, 5, Dw2Inval, Dw2Inval
222 ymm6, RegYMM, 0, 6, Dw2Inval, Dw2Inval
223 ymm7, RegYMM, 0, 7, Dw2Inval, Dw2Inval
224 ymm8, RegYMM, RegRex, 0, Dw2Inval, Dw2Inval
225 ymm9, RegYMM, RegRex, 1, Dw2Inval, Dw2Inval
226 ymm10, RegYMM, RegRex, 2, Dw2Inval, Dw2Inval
227 ymm11, RegYMM, RegRex, 3, Dw2Inval, Dw2Inval
228 ymm12, RegYMM, RegRex, 4, Dw2Inval, Dw2Inval
229 ymm13, RegYMM, RegRex, 5, Dw2Inval, Dw2Inval
230 ymm14, RegYMM, RegRex, 6, Dw2Inval, Dw2Inval
231 ymm15, RegYMM, RegRex, 7, Dw2Inval, Dw2Inval
232 ymm16, RegYMM, RegVRex, 0, Dw2Inval, Dw2Inval
233 ymm17, RegYMM, RegVRex, 1, Dw2Inval, Dw2Inval
234 ymm18, RegYMM, RegVRex, 2, Dw2Inval, Dw2Inval
235 ymm19, RegYMM, RegVRex, 3, Dw2Inval, Dw2Inval
236 ymm20, RegYMM, RegVRex, 4, Dw2Inval, Dw2Inval
237 ymm21, RegYMM, RegVRex, 5, Dw2Inval, Dw2Inval
238 ymm22, RegYMM, RegVRex, 6, Dw2Inval, Dw2Inval
239 ymm23, RegYMM, RegVRex, 7, Dw2Inval, Dw2Inval
240 ymm24, RegYMM, RegVRex|RegRex, 0, Dw2Inval, Dw2Inval
241 ymm25, RegYMM, RegVRex|RegRex, 1, Dw2Inval, Dw2Inval
242 ymm26, RegYMM, RegVRex|RegRex, 2, Dw2Inval, Dw2Inval
243 ymm27, RegYMM, RegVRex|RegRex, 3, Dw2Inval, Dw2Inval
244 ymm28, RegYMM, RegVRex|RegRex, 4, Dw2Inval, Dw2Inval
245 ymm29, RegYMM, RegVRex|RegRex, 5, Dw2Inval, Dw2Inval
246 ymm30, RegYMM, RegVRex|RegRex, 6, Dw2Inval, Dw2Inval
247 ymm31, RegYMM, RegVRex|RegRex, 7, Dw2Inval, Dw2Inval
249 zmm0, RegZMM, 0, 0, Dw2Inval, Dw2Inval
250 zmm1, RegZMM, 0, 1, Dw2Inval, Dw2Inval
251 zmm2, RegZMM, 0, 2, Dw2Inval, Dw2Inval
252 zmm3, RegZMM, 0, 3, Dw2Inval, Dw2Inval
253 zmm4, RegZMM, 0, 4, Dw2Inval, Dw2Inval
254 zmm5, RegZMM, 0, 5, Dw2Inval, Dw2Inval
255 zmm6, RegZMM, 0, 6, Dw2Inval, Dw2Inval
256 zmm7, RegZMM, 0, 7, Dw2Inval, Dw2Inval
257 zmm8, RegZMM, RegRex, 0, Dw2Inval, Dw2Inval
258 zmm9, RegZMM, RegRex, 1, Dw2Inval, Dw2Inval
259 zmm10, RegZMM, RegRex, 2, Dw2Inval, Dw2Inval
260 zmm11, RegZMM, RegRex, 3, Dw2Inval, Dw2Inval
261 zmm12, RegZMM, RegRex, 4, Dw2Inval, Dw2Inval
262 zmm13, RegZMM, RegRex, 5, Dw2Inval, Dw2Inval
263 zmm14, RegZMM, RegRex, 6, Dw2Inval, Dw2Inval
264 zmm15, RegZMM, RegRex, 7, Dw2Inval, Dw2Inval
265 zmm16, RegZMM, RegVRex, 0, Dw2Inval, Dw2Inval
266 zmm17, RegZMM, RegVRex, 1, Dw2Inval, Dw2Inval
267 zmm18, RegZMM, RegVRex, 2, Dw2Inval, Dw2Inval
268 zmm19, RegZMM, RegVRex, 3, Dw2Inval, Dw2Inval
269 zmm20, RegZMM, RegVRex, 4, Dw2Inval, Dw2Inval
270 zmm21, RegZMM, RegVRex, 5, Dw2Inval, Dw2Inval
271 zmm22, RegZMM, RegVRex, 6, Dw2Inval, Dw2Inval
272 zmm23, RegZMM, RegVRex, 7, Dw2Inval, Dw2Inval
273 zmm24, RegZMM, RegVRex|RegRex, 0, Dw2Inval, Dw2Inval
274 zmm25, RegZMM, RegVRex|RegRex, 1, Dw2Inval, Dw2Inval
275 zmm26, RegZMM, RegVRex|RegRex, 2, Dw2Inval, Dw2Inval
276 zmm27, RegZMM, RegVRex|RegRex, 3, Dw2Inval, Dw2Inval
277 zmm28, RegZMM, RegVRex|RegRex, 4, Dw2Inval, Dw2Inval
278 zmm29, RegZMM, RegVRex|RegRex, 5, Dw2Inval, Dw2Inval
279 zmm30, RegZMM, RegVRex|RegRex, 6, Dw2Inval, Dw2Inval
280 zmm31, RegZMM, RegVRex|RegRex, 7, Dw2Inval, Dw2Inval
281 // Bound registers for MPX
282 bnd0, RegBND, 0, 0, Dw2Inval, Dw2Inval
283 bnd1, RegBND, 0, 1, Dw2Inval, Dw2Inval
284 bnd2, RegBND, 0, 2, Dw2Inval, Dw2Inval
285 bnd3, RegBND, 0, 3, Dw2Inval, Dw2Inval
286 // No Reg will make these registers rejected for all purposes except
287 // for addressing. This saves creating one extra type for RIP/EIP.
288 rip, Qword, RegRex64, RegIP, Dw2Inval, 16
289 eip, Dword, RegRex64, RegIP, 8, Dw2Inval
290 // No Reg will make these registers rejected for all purposes except
292 riz, Qword|BaseIndex, RegRex64, RegIZ, Dw2Inval, Dw2Inval
293 eiz, Dword|BaseIndex, 0, RegIZ, Dw2Inval, Dw2Inval
295 st(0), FloatReg|Acc, 0, 0, 11, 33
296 st(1), FloatReg, 0, 1, 12, 34
297 st(2), FloatReg, 0, 2, 13, 35
298 st(3), FloatReg, 0, 3, 14, 36
299 st(4), FloatReg, 0, 4, 15, 37
300 st(5), FloatReg, 0, 5, 16, 38
301 st(6), FloatReg, 0, 6, 17, 39
302 st(7), FloatReg, 0, 7, 18, 40
303 // Pseudo-register names only used in .cfi_* directives
304 eflags, 0, 0, 0, 9, 49
305 rflags, 0, 0, 0, Dw2Inval, 49
306 fs.base, 0, 0, 0, Dw2Inval, 58
307 gs.base, 0, 0, 0, Dw2Inval, 59
309 ldtr, 0, 0, 0, 49, 63
310 // st0...7 for backward compatibility
321 mxcsr, 0, 0, 0, 39, 64