podman
423 строки · 6.6 Кб
1// Inferno utils/6c/6.out.h
2// https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6c/6.out.h
3//
4// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
5// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
6// Portions Copyright © 1997-1999 Vita Nuova Limited
7// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
8// Portions Copyright © 2004,2006 Bruce Ellis
9// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
10// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
11// Portions Copyright © 2009 The Go Authors. All rights reserved.
12//
13// Permission is hereby granted, free of charge, to any person obtaining a copy
14// of this software and associated documentation files (the "Software"), to deal
15// in the Software without restriction, including without limitation the rights
16// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17// copies of the Software, and to permit persons to whom the Software is
18// furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included in
21// all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29// THE SOFTWARE.
30
31package x8632
33import "github.com/twitchyliquid64/golang-asm/obj"34
35const (36REG_NONE = 037)
38
39const (40REG_AL = obj.RBaseAMD64 + iota41REG_CL
42REG_DL
43REG_BL
44REG_SPB
45REG_BPB
46REG_SIB
47REG_DIB
48REG_R8B
49REG_R9B
50REG_R10B
51REG_R11B
52REG_R12B
53REG_R13B
54REG_R14B
55REG_R15B
56
57REG_AX
58REG_CX
59REG_DX
60REG_BX
61REG_SP
62REG_BP
63REG_SI
64REG_DI
65REG_R8
66REG_R9
67REG_R10
68REG_R11
69REG_R12
70REG_R13
71REG_R14
72REG_R15
73
74REG_AH
75REG_CH
76REG_DH
77REG_BH
78
79REG_F0
80REG_F1
81REG_F2
82REG_F3
83REG_F4
84REG_F5
85REG_F6
86REG_F7
87
88REG_M0
89REG_M1
90REG_M2
91REG_M3
92REG_M4
93REG_M5
94REG_M6
95REG_M7
96
97REG_K0
98REG_K1
99REG_K2
100REG_K3
101REG_K4
102REG_K5
103REG_K6
104REG_K7
105
106REG_X0
107REG_X1
108REG_X2
109REG_X3
110REG_X4
111REG_X5
112REG_X6
113REG_X7
114REG_X8
115REG_X9
116REG_X10
117REG_X11
118REG_X12
119REG_X13
120REG_X14
121REG_X15
122REG_X16
123REG_X17
124REG_X18
125REG_X19
126REG_X20
127REG_X21
128REG_X22
129REG_X23
130REG_X24
131REG_X25
132REG_X26
133REG_X27
134REG_X28
135REG_X29
136REG_X30
137REG_X31
138
139REG_Y0
140REG_Y1
141REG_Y2
142REG_Y3
143REG_Y4
144REG_Y5
145REG_Y6
146REG_Y7
147REG_Y8
148REG_Y9
149REG_Y10
150REG_Y11
151REG_Y12
152REG_Y13
153REG_Y14
154REG_Y15
155REG_Y16
156REG_Y17
157REG_Y18
158REG_Y19
159REG_Y20
160REG_Y21
161REG_Y22
162REG_Y23
163REG_Y24
164REG_Y25
165REG_Y26
166REG_Y27
167REG_Y28
168REG_Y29
169REG_Y30
170REG_Y31
171
172REG_Z0
173REG_Z1
174REG_Z2
175REG_Z3
176REG_Z4
177REG_Z5
178REG_Z6
179REG_Z7
180REG_Z8
181REG_Z9
182REG_Z10
183REG_Z11
184REG_Z12
185REG_Z13
186REG_Z14
187REG_Z15
188REG_Z16
189REG_Z17
190REG_Z18
191REG_Z19
192REG_Z20
193REG_Z21
194REG_Z22
195REG_Z23
196REG_Z24
197REG_Z25
198REG_Z26
199REG_Z27
200REG_Z28
201REG_Z29
202REG_Z30
203REG_Z31
204
205REG_CS
206REG_SS
207REG_DS
208REG_ES
209REG_FS
210REG_GS
211
212REG_GDTR // global descriptor table register213REG_IDTR // interrupt descriptor table register214REG_LDTR // local descriptor table register215REG_MSW // machine status word216REG_TASK // task register217
218REG_CR0
219REG_CR1
220REG_CR2
221REG_CR3
222REG_CR4
223REG_CR5
224REG_CR6
225REG_CR7
226REG_CR8
227REG_CR9
228REG_CR10
229REG_CR11
230REG_CR12
231REG_CR13
232REG_CR14
233REG_CR15
234
235REG_DR0
236REG_DR1
237REG_DR2
238REG_DR3
239REG_DR4
240REG_DR5
241REG_DR6
242REG_DR7
243
244REG_TR0
245REG_TR1
246REG_TR2
247REG_TR3
248REG_TR4
249REG_TR5
250REG_TR6
251REG_TR7
252
253REG_TLS
254
255MAXREG
256
257REG_CR = REG_CR0258REG_DR = REG_DR0259REG_TR = REG_TR0260
261REGARG = -1262REGRET = REG_AX263FREGRET = REG_X0264REGSP = REG_SP265REGCTXT = REG_DX266REGEXT = REG_R15 // compiler allocates external registers R15 down267FREGMIN = REG_X0 + 5 // first register variable268FREGEXT = REG_X0 + 15 // first external register269T_TYPE = 1 << 0270T_INDEX = 1 << 1271T_OFFSET = 1 << 2272T_FCONST = 1 << 3273T_SYM = 1 << 4274T_SCONST = 1 << 5275T_64 = 1 << 6276T_GOTYPE = 1 << 7277)
278
279// https://www.uclibc.org/docs/psABI-x86_64.pdf, figure 3.36
280var AMD64DWARFRegisters = map[int16]int16{281REG_AX: 0,282REG_DX: 1,283REG_CX: 2,284REG_BX: 3,285REG_SI: 4,286REG_DI: 5,287REG_BP: 6,288REG_SP: 7,289REG_R8: 8,290REG_R9: 9,291REG_R10: 10,292REG_R11: 11,293REG_R12: 12,294REG_R13: 13,295REG_R14: 14,296REG_R15: 15,297// 16 is "Return Address RA", whatever that is.298// 17-24 vector registers (X/Y/Z).299REG_X0: 17,300REG_X1: 18,301REG_X2: 19,302REG_X3: 20,303REG_X4: 21,304REG_X5: 22,305REG_X6: 23,306REG_X7: 24,307// 25-32 extended vector registers (X/Y/Z).308REG_X8: 25,309REG_X9: 26,310REG_X10: 27,311REG_X11: 28,312REG_X12: 29,313REG_X13: 30,314REG_X14: 31,315REG_X15: 32,316// ST registers. %stN => FN.317REG_F0: 33,318REG_F1: 34,319REG_F2: 35,320REG_F3: 36,321REG_F4: 37,322REG_F5: 38,323REG_F6: 39,324REG_F7: 40,325// MMX registers. %mmN => MN.326REG_M0: 41,327REG_M1: 42,328REG_M2: 43,329REG_M3: 44,330REG_M4: 45,331REG_M5: 46,332REG_M6: 47,333REG_M7: 48,334// 48 is flags, which doesn't have a name.335REG_ES: 50,336REG_CS: 51,337REG_SS: 52,338REG_DS: 53,339REG_FS: 54,340REG_GS: 55,341// 58 and 59 are {fs,gs}base, which don't have names.342REG_TR: 62,343REG_LDTR: 63,344// 64-66 are mxcsr, fcw, fsw, which don't have names.345
346// 67-82 upper vector registers (X/Y/Z).347REG_X16: 67,348REG_X17: 68,349REG_X18: 69,350REG_X19: 70,351REG_X20: 71,352REG_X21: 72,353REG_X22: 73,354REG_X23: 74,355REG_X24: 75,356REG_X25: 76,357REG_X26: 77,358REG_X27: 78,359REG_X28: 79,360REG_X29: 80,361REG_X30: 81,362REG_X31: 82,363
364// 118-125 vector mask registers. %kN => KN.365REG_K0: 118,366REG_K1: 119,367REG_K2: 120,368REG_K3: 121,369REG_K4: 122,370REG_K5: 123,371REG_K6: 124,372REG_K7: 125,373}
374
375// https://www.uclibc.org/docs/psABI-i386.pdf, table 2.14
376var X86DWARFRegisters = map[int16]int16{377REG_AX: 0,378REG_CX: 1,379REG_DX: 2,380REG_BX: 3,381REG_SP: 4,382REG_BP: 5,383REG_SI: 6,384REG_DI: 7,385// 8 is "Return Address RA", whatever that is.386// 9 is flags, which doesn't have a name.387// ST registers. %stN => FN.388REG_F0: 11,389REG_F1: 12,390REG_F2: 13,391REG_F3: 14,392REG_F4: 15,393REG_F5: 16,394REG_F6: 17,395REG_F7: 18,396// XMM registers. %xmmN => XN.397REG_X0: 21,398REG_X1: 22,399REG_X2: 23,400REG_X3: 24,401REG_X4: 25,402REG_X5: 26,403REG_X6: 27,404REG_X7: 28,405// MMX registers. %mmN => MN.406REG_M0: 29,407REG_M1: 30,408REG_M2: 31,409REG_M3: 32,410REG_M4: 33,411REG_M5: 34,412REG_M6: 35,413REG_M7: 36,414// 39 is mxcsr, which doesn't have a name.415REG_ES: 40,416REG_CS: 41,417REG_SS: 42,418REG_DS: 43,419REG_FS: 44,420REG_GS: 45,421REG_TR: 48,422REG_LDTR: 49,423}
424