123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- // Inferno utils/6c/list.c
- // https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6c/list.c
- //
- // 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"
- "fmt"
- )
- var Register = []string{
- "AL", // [D_AL]
- "CL",
- "DL",
- "BL",
- "SPB",
- "BPB",
- "SIB",
- "DIB",
- "R8B",
- "R9B",
- "R10B",
- "R11B",
- "R12B",
- "R13B",
- "R14B",
- "R15B",
- "AX", // [D_AX]
- "CX",
- "DX",
- "BX",
- "SP",
- "BP",
- "SI",
- "DI",
- "R8",
- "R9",
- "R10",
- "R11",
- "R12",
- "R13",
- "R14",
- "R15",
- "AH",
- "CH",
- "DH",
- "BH",
- "F0", // [D_F0]
- "F1",
- "F2",
- "F3",
- "F4",
- "F5",
- "F6",
- "F7",
- "M0",
- "M1",
- "M2",
- "M3",
- "M4",
- "M5",
- "M6",
- "M7",
- "K0",
- "K1",
- "K2",
- "K3",
- "K4",
- "K5",
- "K6",
- "K7",
- "X0",
- "X1",
- "X2",
- "X3",
- "X4",
- "X5",
- "X6",
- "X7",
- "X8",
- "X9",
- "X10",
- "X11",
- "X12",
- "X13",
- "X14",
- "X15",
- "X16",
- "X17",
- "X18",
- "X19",
- "X20",
- "X21",
- "X22",
- "X23",
- "X24",
- "X25",
- "X26",
- "X27",
- "X28",
- "X29",
- "X30",
- "X31",
- "Y0",
- "Y1",
- "Y2",
- "Y3",
- "Y4",
- "Y5",
- "Y6",
- "Y7",
- "Y8",
- "Y9",
- "Y10",
- "Y11",
- "Y12",
- "Y13",
- "Y14",
- "Y15",
- "Y16",
- "Y17",
- "Y18",
- "Y19",
- "Y20",
- "Y21",
- "Y22",
- "Y23",
- "Y24",
- "Y25",
- "Y26",
- "Y27",
- "Y28",
- "Y29",
- "Y30",
- "Y31",
- "Z0",
- "Z1",
- "Z2",
- "Z3",
- "Z4",
- "Z5",
- "Z6",
- "Z7",
- "Z8",
- "Z9",
- "Z10",
- "Z11",
- "Z12",
- "Z13",
- "Z14",
- "Z15",
- "Z16",
- "Z17",
- "Z18",
- "Z19",
- "Z20",
- "Z21",
- "Z22",
- "Z23",
- "Z24",
- "Z25",
- "Z26",
- "Z27",
- "Z28",
- "Z29",
- "Z30",
- "Z31",
- "CS", // [D_CS]
- "SS",
- "DS",
- "ES",
- "FS",
- "GS",
- "GDTR", // [D_GDTR]
- "IDTR", // [D_IDTR]
- "LDTR", // [D_LDTR]
- "MSW", // [D_MSW]
- "TASK", // [D_TASK]
- "CR0", // [D_CR]
- "CR1",
- "CR2",
- "CR3",
- "CR4",
- "CR5",
- "CR6",
- "CR7",
- "CR8",
- "CR9",
- "CR10",
- "CR11",
- "CR12",
- "CR13",
- "CR14",
- "CR15",
- "DR0", // [D_DR]
- "DR1",
- "DR2",
- "DR3",
- "DR4",
- "DR5",
- "DR6",
- "DR7",
- "TR0", // [D_TR]
- "TR1",
- "TR2",
- "TR3",
- "TR4",
- "TR5",
- "TR6",
- "TR7",
- "TLS", // [D_TLS]
- "MAXREG", // [MAXREG]
- }
- func init() {
- obj.RegisterRegister(REG_AL, REG_AL+len(Register), rconv)
- obj.RegisterOpcode(obj.ABaseAMD64, Anames)
- obj.RegisterRegisterList(obj.RegListX86Lo, obj.RegListX86Hi, rlconv)
- obj.RegisterOpSuffix("386", opSuffixString)
- obj.RegisterOpSuffix("amd64", opSuffixString)
- }
- func rconv(r int) string {
- if REG_AL <= r && r-REG_AL < len(Register) {
- return Register[r-REG_AL]
- }
- return fmt.Sprintf("Rgok(%d)", r-obj.RBaseAMD64)
- }
- func rlconv(bits int64) string {
- reg0, reg1 := decodeRegisterRange(bits)
- return fmt.Sprintf("[%s-%s]", rconv(reg0), rconv(reg1))
- }
- func opSuffixString(s uint8) string {
- return "." + opSuffix(s).String()
- }
|