123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- // Inferno utils/6c/6.out.h
- // https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6c/6.out.h
- //
- // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
- // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
- // Portions Copyright © 1997-1999 Vita Nuova Limited
- // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
- // Portions Copyright © 2004,2006 Bruce Ellis
- // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
- // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
- // Portions Copyright © 2009 The Go Authors. All rights reserved.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- package x86
- import "github.com/twitchyliquid64/golang-asm/obj"
- const (
- REG_NONE = 0
- )
- const (
- REG_AL = obj.RBaseAMD64 + iota
- REG_CL
- REG_DL
- REG_BL
- REG_SPB
- REG_BPB
- REG_SIB
- REG_DIB
- REG_R8B
- REG_R9B
- REG_R10B
- REG_R11B
- REG_R12B
- REG_R13B
- REG_R14B
- REG_R15B
- REG_AX
- REG_CX
- REG_DX
- REG_BX
- REG_SP
- REG_BP
- REG_SI
- REG_DI
- REG_R8
- REG_R9
- REG_R10
- REG_R11
- REG_R12
- REG_R13
- REG_R14
- REG_R15
- REG_AH
- REG_CH
- REG_DH
- REG_BH
- REG_F0
- REG_F1
- REG_F2
- REG_F3
- REG_F4
- REG_F5
- REG_F6
- REG_F7
- REG_M0
- REG_M1
- REG_M2
- REG_M3
- REG_M4
- REG_M5
- REG_M6
- REG_M7
- REG_K0
- REG_K1
- REG_K2
- REG_K3
- REG_K4
- REG_K5
- REG_K6
- REG_K7
- REG_X0
- REG_X1
- REG_X2
- REG_X3
- REG_X4
- REG_X5
- REG_X6
- REG_X7
- REG_X8
- REG_X9
- REG_X10
- REG_X11
- REG_X12
- REG_X13
- REG_X14
- REG_X15
- REG_X16
- REG_X17
- REG_X18
- REG_X19
- REG_X20
- REG_X21
- REG_X22
- REG_X23
- REG_X24
- REG_X25
- REG_X26
- REG_X27
- REG_X28
- REG_X29
- REG_X30
- REG_X31
- REG_Y0
- REG_Y1
- REG_Y2
- REG_Y3
- REG_Y4
- REG_Y5
- REG_Y6
- REG_Y7
- REG_Y8
- REG_Y9
- REG_Y10
- REG_Y11
- REG_Y12
- REG_Y13
- REG_Y14
- REG_Y15
- REG_Y16
- REG_Y17
- REG_Y18
- REG_Y19
- REG_Y20
- REG_Y21
- REG_Y22
- REG_Y23
- REG_Y24
- REG_Y25
- REG_Y26
- REG_Y27
- REG_Y28
- REG_Y29
- REG_Y30
- REG_Y31
- REG_Z0
- REG_Z1
- REG_Z2
- REG_Z3
- REG_Z4
- REG_Z5
- REG_Z6
- REG_Z7
- REG_Z8
- REG_Z9
- REG_Z10
- REG_Z11
- REG_Z12
- REG_Z13
- REG_Z14
- REG_Z15
- REG_Z16
- REG_Z17
- REG_Z18
- REG_Z19
- REG_Z20
- REG_Z21
- REG_Z22
- REG_Z23
- REG_Z24
- REG_Z25
- REG_Z26
- REG_Z27
- REG_Z28
- REG_Z29
- REG_Z30
- REG_Z31
- REG_CS
- REG_SS
- REG_DS
- REG_ES
- REG_FS
- REG_GS
- REG_GDTR // global descriptor table register
- REG_IDTR // interrupt descriptor table register
- REG_LDTR // local descriptor table register
- REG_MSW // machine status word
- REG_TASK // task register
- REG_CR0
- REG_CR1
- REG_CR2
- REG_CR3
- REG_CR4
- REG_CR5
- REG_CR6
- REG_CR7
- REG_CR8
- REG_CR9
- REG_CR10
- REG_CR11
- REG_CR12
- REG_CR13
- REG_CR14
- REG_CR15
- REG_DR0
- REG_DR1
- REG_DR2
- REG_DR3
- REG_DR4
- REG_DR5
- REG_DR6
- REG_DR7
- REG_TR0
- REG_TR1
- REG_TR2
- REG_TR3
- REG_TR4
- REG_TR5
- REG_TR6
- REG_TR7
- REG_TLS
- MAXREG
- REG_CR = REG_CR0
- REG_DR = REG_DR0
- REG_TR = REG_TR0
- REGARG = -1
- REGRET = REG_AX
- FREGRET = REG_X0
- REGSP = REG_SP
- REGCTXT = REG_DX
- REGEXT = REG_R15 // compiler allocates external registers R15 down
- FREGMIN = REG_X0 + 5 // first register variable
- FREGEXT = REG_X0 + 15 // first external register
- T_TYPE = 1 << 0
- T_INDEX = 1 << 1
- T_OFFSET = 1 << 2
- T_FCONST = 1 << 3
- T_SYM = 1 << 4
- T_SCONST = 1 << 5
- T_64 = 1 << 6
- T_GOTYPE = 1 << 7
- )
- // https://www.uclibc.org/docs/psABI-x86_64.pdf, figure 3.36
- var AMD64DWARFRegisters = map[int16]int16{
- REG_AX: 0,
- REG_DX: 1,
- REG_CX: 2,
- REG_BX: 3,
- REG_SI: 4,
- REG_DI: 5,
- REG_BP: 6,
- REG_SP: 7,
- REG_R8: 8,
- REG_R9: 9,
- REG_R10: 10,
- REG_R11: 11,
- REG_R12: 12,
- REG_R13: 13,
- REG_R14: 14,
- REG_R15: 15,
- // 16 is "Return Address RA", whatever that is.
- // 17-24 vector registers (X/Y/Z).
- REG_X0: 17,
- REG_X1: 18,
- REG_X2: 19,
- REG_X3: 20,
- REG_X4: 21,
- REG_X5: 22,
- REG_X6: 23,
- REG_X7: 24,
- // 25-32 extended vector registers (X/Y/Z).
- REG_X8: 25,
- REG_X9: 26,
- REG_X10: 27,
- REG_X11: 28,
- REG_X12: 29,
- REG_X13: 30,
- REG_X14: 31,
- REG_X15: 32,
- // ST registers. %stN => FN.
- REG_F0: 33,
- REG_F1: 34,
- REG_F2: 35,
- REG_F3: 36,
- REG_F4: 37,
- REG_F5: 38,
- REG_F6: 39,
- REG_F7: 40,
- // MMX registers. %mmN => MN.
- REG_M0: 41,
- REG_M1: 42,
- REG_M2: 43,
- REG_M3: 44,
- REG_M4: 45,
- REG_M5: 46,
- REG_M6: 47,
- REG_M7: 48,
- // 48 is flags, which doesn't have a name.
- REG_ES: 50,
- REG_CS: 51,
- REG_SS: 52,
- REG_DS: 53,
- REG_FS: 54,
- REG_GS: 55,
- // 58 and 59 are {fs,gs}base, which don't have names.
- REG_TR: 62,
- REG_LDTR: 63,
- // 64-66 are mxcsr, fcw, fsw, which don't have names.
- // 67-82 upper vector registers (X/Y/Z).
- REG_X16: 67,
- REG_X17: 68,
- REG_X18: 69,
- REG_X19: 70,
- REG_X20: 71,
- REG_X21: 72,
- REG_X22: 73,
- REG_X23: 74,
- REG_X24: 75,
- REG_X25: 76,
- REG_X26: 77,
- REG_X27: 78,
- REG_X28: 79,
- REG_X29: 80,
- REG_X30: 81,
- REG_X31: 82,
- // 118-125 vector mask registers. %kN => KN.
- REG_K0: 118,
- REG_K1: 119,
- REG_K2: 120,
- REG_K3: 121,
- REG_K4: 122,
- REG_K5: 123,
- REG_K6: 124,
- REG_K7: 125,
- }
- // https://www.uclibc.org/docs/psABI-i386.pdf, table 2.14
- var X86DWARFRegisters = map[int16]int16{
- REG_AX: 0,
- REG_CX: 1,
- REG_DX: 2,
- REG_BX: 3,
- REG_SP: 4,
- REG_BP: 5,
- REG_SI: 6,
- REG_DI: 7,
- // 8 is "Return Address RA", whatever that is.
- // 9 is flags, which doesn't have a name.
- // ST registers. %stN => FN.
- REG_F0: 11,
- REG_F1: 12,
- REG_F2: 13,
- REG_F3: 14,
- REG_F4: 15,
- REG_F5: 16,
- REG_F6: 17,
- REG_F7: 18,
- // XMM registers. %xmmN => XN.
- REG_X0: 21,
- REG_X1: 22,
- REG_X2: 23,
- REG_X3: 24,
- REG_X4: 25,
- REG_X5: 26,
- REG_X6: 27,
- REG_X7: 28,
- // MMX registers. %mmN => MN.
- REG_M0: 29,
- REG_M1: 30,
- REG_M2: 31,
- REG_M3: 32,
- REG_M4: 33,
- REG_M5: 34,
- REG_M6: 35,
- REG_M7: 36,
- // 39 is mxcsr, which doesn't have a name.
- REG_ES: 40,
- REG_CS: 41,
- REG_SS: 42,
- REG_DS: 43,
- REG_FS: 44,
- REG_GS: 45,
- REG_TR: 48,
- REG_LDTR: 49,
- }
|