1034 lines
15 KiB
Go
1034 lines
15 KiB
Go
|
// cmd/7c/7.out.h from Vita Nuova.
|
||
|
// https://code.google.com/p/ken-cc/source/browse/src/cmd/7c/7.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 arm64
|
||
|
|
||
|
import "github.com/twitchyliquid64/golang-asm/obj"
|
||
|
|
||
|
const (
|
||
|
NSNAME = 8
|
||
|
NSYM = 50
|
||
|
NREG = 32 /* number of general registers */
|
||
|
NFREG = 32 /* number of floating point registers */
|
||
|
)
|
||
|
|
||
|
// General purpose registers, kept in the low bits of Prog.Reg.
|
||
|
const (
|
||
|
// integer
|
||
|
REG_R0 = obj.RBaseARM64 + iota
|
||
|
REG_R1
|
||
|
REG_R2
|
||
|
REG_R3
|
||
|
REG_R4
|
||
|
REG_R5
|
||
|
REG_R6
|
||
|
REG_R7
|
||
|
REG_R8
|
||
|
REG_R9
|
||
|
REG_R10
|
||
|
REG_R11
|
||
|
REG_R12
|
||
|
REG_R13
|
||
|
REG_R14
|
||
|
REG_R15
|
||
|
REG_R16
|
||
|
REG_R17
|
||
|
REG_R18
|
||
|
REG_R19
|
||
|
REG_R20
|
||
|
REG_R21
|
||
|
REG_R22
|
||
|
REG_R23
|
||
|
REG_R24
|
||
|
REG_R25
|
||
|
REG_R26
|
||
|
REG_R27
|
||
|
REG_R28
|
||
|
REG_R29
|
||
|
REG_R30
|
||
|
REG_R31
|
||
|
|
||
|
// scalar floating point
|
||
|
REG_F0
|
||
|
REG_F1
|
||
|
REG_F2
|
||
|
REG_F3
|
||
|
REG_F4
|
||
|
REG_F5
|
||
|
REG_F6
|
||
|
REG_F7
|
||
|
REG_F8
|
||
|
REG_F9
|
||
|
REG_F10
|
||
|
REG_F11
|
||
|
REG_F12
|
||
|
REG_F13
|
||
|
REG_F14
|
||
|
REG_F15
|
||
|
REG_F16
|
||
|
REG_F17
|
||
|
REG_F18
|
||
|
REG_F19
|
||
|
REG_F20
|
||
|
REG_F21
|
||
|
REG_F22
|
||
|
REG_F23
|
||
|
REG_F24
|
||
|
REG_F25
|
||
|
REG_F26
|
||
|
REG_F27
|
||
|
REG_F28
|
||
|
REG_F29
|
||
|
REG_F30
|
||
|
REG_F31
|
||
|
|
||
|
// SIMD
|
||
|
REG_V0
|
||
|
REG_V1
|
||
|
REG_V2
|
||
|
REG_V3
|
||
|
REG_V4
|
||
|
REG_V5
|
||
|
REG_V6
|
||
|
REG_V7
|
||
|
REG_V8
|
||
|
REG_V9
|
||
|
REG_V10
|
||
|
REG_V11
|
||
|
REG_V12
|
||
|
REG_V13
|
||
|
REG_V14
|
||
|
REG_V15
|
||
|
REG_V16
|
||
|
REG_V17
|
||
|
REG_V18
|
||
|
REG_V19
|
||
|
REG_V20
|
||
|
REG_V21
|
||
|
REG_V22
|
||
|
REG_V23
|
||
|
REG_V24
|
||
|
REG_V25
|
||
|
REG_V26
|
||
|
REG_V27
|
||
|
REG_V28
|
||
|
REG_V29
|
||
|
REG_V30
|
||
|
REG_V31
|
||
|
|
||
|
// The EQ in
|
||
|
// CSET EQ, R0
|
||
|
// is encoded as TYPE_REG, even though it's not really a register.
|
||
|
COND_EQ
|
||
|
COND_NE
|
||
|
COND_HS
|
||
|
COND_LO
|
||
|
COND_MI
|
||
|
COND_PL
|
||
|
COND_VS
|
||
|
COND_VC
|
||
|
COND_HI
|
||
|
COND_LS
|
||
|
COND_GE
|
||
|
COND_LT
|
||
|
COND_GT
|
||
|
COND_LE
|
||
|
COND_AL
|
||
|
COND_NV
|
||
|
|
||
|
REG_RSP = REG_V31 + 32 // to differentiate ZR/SP, REG_RSP&0x1f = 31
|
||
|
)
|
||
|
|
||
|
// bits 0-4 indicates register: Vn
|
||
|
// bits 5-8 indicates arrangement: <T>
|
||
|
const (
|
||
|
REG_ARNG = obj.RBaseARM64 + 1<<10 + iota<<9 // Vn.<T>
|
||
|
REG_ELEM // Vn.<T>[index]
|
||
|
REG_ELEM_END
|
||
|
)
|
||
|
|
||
|
// Not registers, but flags that can be combined with regular register
|
||
|
// constants to indicate extended register conversion. When checking,
|
||
|
// you should subtract obj.RBaseARM64 first. From this difference, bit 11
|
||
|
// indicates extended register, bits 8-10 select the conversion mode.
|
||
|
// REG_LSL is the index shift specifier, bit 9 indicates shifted offset register.
|
||
|
const REG_LSL = obj.RBaseARM64 + 1<<9
|
||
|
const REG_EXT = obj.RBaseARM64 + 1<<11
|
||
|
|
||
|
const (
|
||
|
REG_UXTB = REG_EXT + iota<<8
|
||
|
REG_UXTH
|
||
|
REG_UXTW
|
||
|
REG_UXTX
|
||
|
REG_SXTB
|
||
|
REG_SXTH
|
||
|
REG_SXTW
|
||
|
REG_SXTX
|
||
|
)
|
||
|
|
||
|
// Special registers, after subtracting obj.RBaseARM64, bit 12 indicates
|
||
|
// a special register and the low bits select the register.
|
||
|
// SYSREG_END is the last item in the automatically generated system register
|
||
|
// declaration, and it is defined in the sysRegEnc.go file.
|
||
|
const (
|
||
|
REG_SPECIAL = obj.RBaseARM64 + 1<<12
|
||
|
REG_DAIFSet = SYSREG_END + iota
|
||
|
REG_DAIFClr
|
||
|
REG_PLDL1KEEP
|
||
|
REG_PLDL1STRM
|
||
|
REG_PLDL2KEEP
|
||
|
REG_PLDL2STRM
|
||
|
REG_PLDL3KEEP
|
||
|
REG_PLDL3STRM
|
||
|
REG_PLIL1KEEP
|
||
|
REG_PLIL1STRM
|
||
|
REG_PLIL2KEEP
|
||
|
REG_PLIL2STRM
|
||
|
REG_PLIL3KEEP
|
||
|
REG_PLIL3STRM
|
||
|
REG_PSTL1KEEP
|
||
|
REG_PSTL1STRM
|
||
|
REG_PSTL2KEEP
|
||
|
REG_PSTL2STRM
|
||
|
REG_PSTL3KEEP
|
||
|
REG_PSTL3STRM
|
||
|
)
|
||
|
|
||
|
// Register assignments:
|
||
|
//
|
||
|
// compiler allocates R0 up as temps
|
||
|
// compiler allocates register variables R7-R25
|
||
|
// compiler allocates external registers R26 down
|
||
|
//
|
||
|
// compiler allocates register variables F7-F26
|
||
|
// compiler allocates external registers F26 down
|
||
|
const (
|
||
|
REGMIN = REG_R7 // register variables allocated from here to REGMAX
|
||
|
REGRT1 = REG_R16 // ARM64 IP0, external linker may use as a scrach register in trampoline
|
||
|
REGRT2 = REG_R17 // ARM64 IP1, external linker may use as a scrach register in trampoline
|
||
|
REGPR = REG_R18 // ARM64 platform register, unused in the Go toolchain
|
||
|
REGMAX = REG_R25
|
||
|
|
||
|
REGCTXT = REG_R26 // environment for closures
|
||
|
REGTMP = REG_R27 // reserved for liblink
|
||
|
REGG = REG_R28 // G
|
||
|
REGFP = REG_R29 // frame pointer, unused in the Go toolchain
|
||
|
REGLINK = REG_R30
|
||
|
|
||
|
// ARM64 uses R31 as both stack pointer and zero register,
|
||
|
// depending on the instruction. To differentiate RSP from ZR,
|
||
|
// we use a different numeric value for REGZERO and REGSP.
|
||
|
REGZERO = REG_R31
|
||
|
REGSP = REG_RSP
|
||
|
|
||
|
FREGRET = REG_F0
|
||
|
FREGMIN = REG_F7 // first register variable
|
||
|
FREGMAX = REG_F26 // last register variable for 7g only
|
||
|
FREGEXT = REG_F26 // first external register
|
||
|
)
|
||
|
|
||
|
// http://infocenter.arm.com/help/topic/com.arm.doc.ecm0665627/abi_sve_aadwarf_100985_0000_00_en.pdf
|
||
|
var ARM64DWARFRegisters = map[int16]int16{
|
||
|
REG_R0: 0,
|
||
|
REG_R1: 1,
|
||
|
REG_R2: 2,
|
||
|
REG_R3: 3,
|
||
|
REG_R4: 4,
|
||
|
REG_R5: 5,
|
||
|
REG_R6: 6,
|
||
|
REG_R7: 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,
|
||
|
REG_R16: 16,
|
||
|
REG_R17: 17,
|
||
|
REG_R18: 18,
|
||
|
REG_R19: 19,
|
||
|
REG_R20: 20,
|
||
|
REG_R21: 21,
|
||
|
REG_R22: 22,
|
||
|
REG_R23: 23,
|
||
|
REG_R24: 24,
|
||
|
REG_R25: 25,
|
||
|
REG_R26: 26,
|
||
|
REG_R27: 27,
|
||
|
REG_R28: 28,
|
||
|
REG_R29: 29,
|
||
|
REG_R30: 30,
|
||
|
|
||
|
// floating point
|
||
|
REG_F0: 64,
|
||
|
REG_F1: 65,
|
||
|
REG_F2: 66,
|
||
|
REG_F3: 67,
|
||
|
REG_F4: 68,
|
||
|
REG_F5: 69,
|
||
|
REG_F6: 70,
|
||
|
REG_F7: 71,
|
||
|
REG_F8: 72,
|
||
|
REG_F9: 73,
|
||
|
REG_F10: 74,
|
||
|
REG_F11: 75,
|
||
|
REG_F12: 76,
|
||
|
REG_F13: 77,
|
||
|
REG_F14: 78,
|
||
|
REG_F15: 79,
|
||
|
REG_F16: 80,
|
||
|
REG_F17: 81,
|
||
|
REG_F18: 82,
|
||
|
REG_F19: 83,
|
||
|
REG_F20: 84,
|
||
|
REG_F21: 85,
|
||
|
REG_F22: 86,
|
||
|
REG_F23: 87,
|
||
|
REG_F24: 88,
|
||
|
REG_F25: 89,
|
||
|
REG_F26: 90,
|
||
|
REG_F27: 91,
|
||
|
REG_F28: 92,
|
||
|
REG_F29: 93,
|
||
|
REG_F30: 94,
|
||
|
REG_F31: 95,
|
||
|
|
||
|
// SIMD
|
||
|
REG_V0: 64,
|
||
|
REG_V1: 65,
|
||
|
REG_V2: 66,
|
||
|
REG_V3: 67,
|
||
|
REG_V4: 68,
|
||
|
REG_V5: 69,
|
||
|
REG_V6: 70,
|
||
|
REG_V7: 71,
|
||
|
REG_V8: 72,
|
||
|
REG_V9: 73,
|
||
|
REG_V10: 74,
|
||
|
REG_V11: 75,
|
||
|
REG_V12: 76,
|
||
|
REG_V13: 77,
|
||
|
REG_V14: 78,
|
||
|
REG_V15: 79,
|
||
|
REG_V16: 80,
|
||
|
REG_V17: 81,
|
||
|
REG_V18: 82,
|
||
|
REG_V19: 83,
|
||
|
REG_V20: 84,
|
||
|
REG_V21: 85,
|
||
|
REG_V22: 86,
|
||
|
REG_V23: 87,
|
||
|
REG_V24: 88,
|
||
|
REG_V25: 89,
|
||
|
REG_V26: 90,
|
||
|
REG_V27: 91,
|
||
|
REG_V28: 92,
|
||
|
REG_V29: 93,
|
||
|
REG_V30: 94,
|
||
|
REG_V31: 95,
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
BIG = 2048 - 8
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
/* mark flags */
|
||
|
LABEL = 1 << iota
|
||
|
LEAF
|
||
|
FLOAT
|
||
|
BRANCH
|
||
|
LOAD
|
||
|
FCMP
|
||
|
SYNC
|
||
|
LIST
|
||
|
FOLL
|
||
|
NOSCHED
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// optab is sorted based on the order of these constants
|
||
|
// and the first match is chosen.
|
||
|
// The more specific class needs to come earlier.
|
||
|
C_NONE = iota
|
||
|
C_REG // R0..R30
|
||
|
C_RSP // R0..R30, RSP
|
||
|
C_FREG // F0..F31
|
||
|
C_VREG // V0..V31
|
||
|
C_PAIR // (Rn, Rm)
|
||
|
C_SHIFT // Rn<<2
|
||
|
C_EXTREG // Rn.UXTB[<<3]
|
||
|
C_SPR // REG_NZCV
|
||
|
C_COND // EQ, NE, etc
|
||
|
C_ARNG // Vn.<T>
|
||
|
C_ELEM // Vn.<T>[index]
|
||
|
C_LIST // [V1, V2, V3]
|
||
|
|
||
|
C_ZCON // $0 or ZR
|
||
|
C_ABCON0 // could be C_ADDCON0 or C_BITCON
|
||
|
C_ADDCON0 // 12-bit unsigned, unshifted
|
||
|
C_ABCON // could be C_ADDCON or C_BITCON
|
||
|
C_AMCON // could be C_ADDCON or C_MOVCON
|
||
|
C_ADDCON // 12-bit unsigned, shifted left by 0 or 12
|
||
|
C_MBCON // could be C_MOVCON or C_BITCON
|
||
|
C_MOVCON // generated by a 16-bit constant, optionally inverted and/or shifted by multiple of 16
|
||
|
C_BITCON // bitfield and logical immediate masks
|
||
|
C_ADDCON2 // 24-bit constant
|
||
|
C_LCON // 32-bit constant
|
||
|
C_MOVCON2 // a constant that can be loaded with one MOVZ/MOVN and one MOVK
|
||
|
C_MOVCON3 // a constant that can be loaded with one MOVZ/MOVN and two MOVKs
|
||
|
C_VCON // 64-bit constant
|
||
|
C_FCON // floating-point constant
|
||
|
C_VCONADDR // 64-bit memory address
|
||
|
|
||
|
C_AACON // ADDCON offset in auto constant $a(FP)
|
||
|
C_AACON2 // 24-bit offset in auto constant $a(FP)
|
||
|
C_LACON // 32-bit offset in auto constant $a(FP)
|
||
|
C_AECON // ADDCON offset in extern constant $e(SB)
|
||
|
|
||
|
// TODO(aram): only one branch class should be enough
|
||
|
C_SBRA // for TYPE_BRANCH
|
||
|
C_LBRA
|
||
|
|
||
|
C_ZAUTO // 0(RSP)
|
||
|
C_NSAUTO_8 // -256 <= x < 0, 0 mod 8
|
||
|
C_NSAUTO_4 // -256 <= x < 0, 0 mod 4
|
||
|
C_NSAUTO // -256 <= x < 0
|
||
|
C_NPAUTO // -512 <= x < 0, 0 mod 8
|
||
|
C_NAUTO4K // -4095 <= x < 0
|
||
|
C_PSAUTO_8 // 0 to 255, 0 mod 8
|
||
|
C_PSAUTO_4 // 0 to 255, 0 mod 4
|
||
|
C_PSAUTO // 0 to 255
|
||
|
C_PPAUTO // 0 to 504, 0 mod 8
|
||
|
C_UAUTO4K_8 // 0 to 4095, 0 mod 8
|
||
|
C_UAUTO4K_4 // 0 to 4095, 0 mod 4
|
||
|
C_UAUTO4K_2 // 0 to 4095, 0 mod 2
|
||
|
C_UAUTO4K // 0 to 4095
|
||
|
C_UAUTO8K_8 // 0 to 8190, 0 mod 8
|
||
|
C_UAUTO8K_4 // 0 to 8190, 0 mod 4
|
||
|
C_UAUTO8K // 0 to 8190, 0 mod 2
|
||
|
C_UAUTO16K_8 // 0 to 16380, 0 mod 8
|
||
|
C_UAUTO16K // 0 to 16380, 0 mod 4
|
||
|
C_UAUTO32K // 0 to 32760, 0 mod 8
|
||
|
C_LAUTO // any other 32-bit constant
|
||
|
|
||
|
C_SEXT1 // 0 to 4095, direct
|
||
|
C_SEXT2 // 0 to 8190
|
||
|
C_SEXT4 // 0 to 16380
|
||
|
C_SEXT8 // 0 to 32760
|
||
|
C_SEXT16 // 0 to 65520
|
||
|
C_LEXT
|
||
|
|
||
|
C_ZOREG // 0(R)
|
||
|
C_NSOREG_8 // must mirror C_NSAUTO_8, etc
|
||
|
C_NSOREG_4
|
||
|
C_NSOREG
|
||
|
C_NPOREG
|
||
|
C_NOREG4K
|
||
|
C_PSOREG_8
|
||
|
C_PSOREG_4
|
||
|
C_PSOREG
|
||
|
C_PPOREG
|
||
|
C_UOREG4K_8
|
||
|
C_UOREG4K_4
|
||
|
C_UOREG4K_2
|
||
|
C_UOREG4K
|
||
|
C_UOREG8K_8
|
||
|
C_UOREG8K_4
|
||
|
C_UOREG8K
|
||
|
C_UOREG16K_8
|
||
|
C_UOREG16K
|
||
|
C_UOREG32K
|
||
|
C_LOREG
|
||
|
|
||
|
C_ADDR // TODO(aram): explain difference from C_VCONADDR
|
||
|
|
||
|
// The GOT slot for a symbol in -dynlink mode.
|
||
|
C_GOTADDR
|
||
|
|
||
|
// TLS "var" in local exec mode: will become a constant offset from
|
||
|
// thread local base that is ultimately chosen by the program linker.
|
||
|
C_TLS_LE
|
||
|
|
||
|
// TLS "var" in initial exec mode: will become a memory address (chosen
|
||
|
// by the program linker) that the dynamic linker will fill with the
|
||
|
// offset from the thread local base.
|
||
|
C_TLS_IE
|
||
|
|
||
|
C_ROFF // register offset (including register extended)
|
||
|
|
||
|
C_GOK
|
||
|
C_TEXTSIZE
|
||
|
C_NCLASS // must be last
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
C_XPRE = 1 << 6 // match arm.C_WBIT, so Prog.String know how to print it
|
||
|
C_XPOST = 1 << 5 // match arm.C_PBIT, so Prog.String know how to print it
|
||
|
)
|
||
|
|
||
|
//go:generate go run ../stringer.go -i $GOFILE -o anames.go -p arm64
|
||
|
|
||
|
const (
|
||
|
AADC = obj.ABaseARM64 + obj.A_ARCHSPECIFIC + iota
|
||
|
AADCS
|
||
|
AADCSW
|
||
|
AADCW
|
||
|
AADD
|
||
|
AADDS
|
||
|
AADDSW
|
||
|
AADDW
|
||
|
AADR
|
||
|
AADRP
|
||
|
AAND
|
||
|
AANDS
|
||
|
AANDSW
|
||
|
AANDW
|
||
|
AASR
|
||
|
AASRW
|
||
|
AAT
|
||
|
ABFI
|
||
|
ABFIW
|
||
|
ABFM
|
||
|
ABFMW
|
||
|
ABFXIL
|
||
|
ABFXILW
|
||
|
ABIC
|
||
|
ABICS
|
||
|
ABICSW
|
||
|
ABICW
|
||
|
ABRK
|
||
|
ACBNZ
|
||
|
ACBNZW
|
||
|
ACBZ
|
||
|
ACBZW
|
||
|
ACCMN
|
||
|
ACCMNW
|
||
|
ACCMP
|
||
|
ACCMPW
|
||
|
ACINC
|
||
|
ACINCW
|
||
|
ACINV
|
||
|
ACINVW
|
||
|
ACLREX
|
||
|
ACLS
|
||
|
ACLSW
|
||
|
ACLZ
|
||
|
ACLZW
|
||
|
ACMN
|
||
|
ACMNW
|
||
|
ACMP
|
||
|
ACMPW
|
||
|
ACNEG
|
||
|
ACNEGW
|
||
|
ACRC32B
|
||
|
ACRC32CB
|
||
|
ACRC32CH
|
||
|
ACRC32CW
|
||
|
ACRC32CX
|
||
|
ACRC32H
|
||
|
ACRC32W
|
||
|
ACRC32X
|
||
|
ACSEL
|
||
|
ACSELW
|
||
|
ACSET
|
||
|
ACSETM
|
||
|
ACSETMW
|
||
|
ACSETW
|
||
|
ACSINC
|
||
|
ACSINCW
|
||
|
ACSINV
|
||
|
ACSINVW
|
||
|
ACSNEG
|
||
|
ACSNEGW
|
||
|
ADC
|
||
|
ADCPS1
|
||
|
ADCPS2
|
||
|
ADCPS3
|
||
|
ADMB
|
||
|
ADRPS
|
||
|
ADSB
|
||
|
AEON
|
||
|
AEONW
|
||
|
AEOR
|
||
|
AEORW
|
||
|
AERET
|
||
|
AEXTR
|
||
|
AEXTRW
|
||
|
AHINT
|
||
|
AHLT
|
||
|
AHVC
|
||
|
AIC
|
||
|
AISB
|
||
|
ALDADDAB
|
||
|
ALDADDAD
|
||
|
ALDADDAH
|
||
|
ALDADDAW
|
||
|
ALDADDALB
|
||
|
ALDADDALD
|
||
|
ALDADDALH
|
||
|
ALDADDALW
|
||
|
ALDADDB
|
||
|
ALDADDD
|
||
|
ALDADDH
|
||
|
ALDADDW
|
||
|
ALDADDLB
|
||
|
ALDADDLD
|
||
|
ALDADDLH
|
||
|
ALDADDLW
|
||
|
ALDANDAB
|
||
|
ALDANDAD
|
||
|
ALDANDAH
|
||
|
ALDANDAW
|
||
|
ALDANDALB
|
||
|
ALDANDALD
|
||
|
ALDANDALH
|
||
|
ALDANDALW
|
||
|
ALDANDB
|
||
|
ALDANDD
|
||
|
ALDANDH
|
||
|
ALDANDW
|
||
|
ALDANDLB
|
||
|
ALDANDLD
|
||
|
ALDANDLH
|
||
|
ALDANDLW
|
||
|
ALDAR
|
||
|
ALDARB
|
||
|
ALDARH
|
||
|
ALDARW
|
||
|
ALDAXP
|
||
|
ALDAXPW
|
||
|
ALDAXR
|
||
|
ALDAXRB
|
||
|
ALDAXRH
|
||
|
ALDAXRW
|
||
|
ALDEORAB
|
||
|
ALDEORAD
|
||
|
ALDEORAH
|
||
|
ALDEORAW
|
||
|
ALDEORALB
|
||
|
ALDEORALD
|
||
|
ALDEORALH
|
||
|
ALDEORALW
|
||
|
ALDEORB
|
||
|
ALDEORD
|
||
|
ALDEORH
|
||
|
ALDEORW
|
||
|
ALDEORLB
|
||
|
ALDEORLD
|
||
|
ALDEORLH
|
||
|
ALDEORLW
|
||
|
ALDORAB
|
||
|
ALDORAD
|
||
|
ALDORAH
|
||
|
ALDORAW
|
||
|
ALDORALB
|
||
|
ALDORALD
|
||
|
ALDORALH
|
||
|
ALDORALW
|
||
|
ALDORB
|
||
|
ALDORD
|
||
|
ALDORH
|
||
|
ALDORW
|
||
|
ALDORLB
|
||
|
ALDORLD
|
||
|
ALDORLH
|
||
|
ALDORLW
|
||
|
ALDP
|
||
|
ALDPW
|
||
|
ALDPSW
|
||
|
ALDXR
|
||
|
ALDXRB
|
||
|
ALDXRH
|
||
|
ALDXRW
|
||
|
ALDXP
|
||
|
ALDXPW
|
||
|
ALSL
|
||
|
ALSLW
|
||
|
ALSR
|
||
|
ALSRW
|
||
|
AMADD
|
||
|
AMADDW
|
||
|
AMNEG
|
||
|
AMNEGW
|
||
|
AMOVK
|
||
|
AMOVKW
|
||
|
AMOVN
|
||
|
AMOVNW
|
||
|
AMOVZ
|
||
|
AMOVZW
|
||
|
AMRS
|
||
|
AMSR
|
||
|
AMSUB
|
||
|
AMSUBW
|
||
|
AMUL
|
||
|
AMULW
|
||
|
AMVN
|
||
|
AMVNW
|
||
|
ANEG
|
||
|
ANEGS
|
||
|
ANEGSW
|
||
|
ANEGW
|
||
|
ANGC
|
||
|
ANGCS
|
||
|
ANGCSW
|
||
|
ANGCW
|
||
|
ANOOP
|
||
|
AORN
|
||
|
AORNW
|
||
|
AORR
|
||
|
AORRW
|
||
|
APRFM
|
||
|
APRFUM
|
||
|
ARBIT
|
||
|
ARBITW
|
||
|
AREM
|
||
|
AREMW
|
||
|
AREV
|
||
|
AREV16
|
||
|
AREV16W
|
||
|
AREV32
|
||
|
AREVW
|
||
|
AROR
|
||
|
ARORW
|
||
|
ASBC
|
||
|
ASBCS
|
||
|
ASBCSW
|
||
|
ASBCW
|
||
|
ASBFIZ
|
||
|
ASBFIZW
|
||
|
ASBFM
|
||
|
ASBFMW
|
||
|
ASBFX
|
||
|
ASBFXW
|
||
|
ASDIV
|
||
|
ASDIVW
|
||
|
ASEV
|
||
|
ASEVL
|
||
|
ASMADDL
|
||
|
ASMC
|
||
|
ASMNEGL
|
||
|
ASMSUBL
|
||
|
ASMULH
|
||
|
ASMULL
|
||
|
ASTXR
|
||
|
ASTXRB
|
||
|
ASTXRH
|
||
|
ASTXP
|
||
|
ASTXPW
|
||
|
ASTXRW
|
||
|
ASTLP
|
||
|
ASTLPW
|
||
|
ASTLR
|
||
|
ASTLRB
|
||
|
ASTLRH
|
||
|
ASTLRW
|
||
|
ASTLXP
|
||
|
ASTLXPW
|
||
|
ASTLXR
|
||
|
ASTLXRB
|
||
|
ASTLXRH
|
||
|
ASTLXRW
|
||
|
ASTP
|
||
|
ASTPW
|
||
|
ASUB
|
||
|
ASUBS
|
||
|
ASUBSW
|
||
|
ASUBW
|
||
|
ASVC
|
||
|
ASXTB
|
||
|
ASXTBW
|
||
|
ASXTH
|
||
|
ASXTHW
|
||
|
ASXTW
|
||
|
ASYS
|
||
|
ASYSL
|
||
|
ATBNZ
|
||
|
ATBZ
|
||
|
ATLBI
|
||
|
ATST
|
||
|
ATSTW
|
||
|
AUBFIZ
|
||
|
AUBFIZW
|
||
|
AUBFM
|
||
|
AUBFMW
|
||
|
AUBFX
|
||
|
AUBFXW
|
||
|
AUDIV
|
||
|
AUDIVW
|
||
|
AUMADDL
|
||
|
AUMNEGL
|
||
|
AUMSUBL
|
||
|
AUMULH
|
||
|
AUMULL
|
||
|
AUREM
|
||
|
AUREMW
|
||
|
AUXTB
|
||
|
AUXTH
|
||
|
AUXTW
|
||
|
AUXTBW
|
||
|
AUXTHW
|
||
|
AWFE
|
||
|
AWFI
|
||
|
AYIELD
|
||
|
AMOVB
|
||
|
AMOVBU
|
||
|
AMOVH
|
||
|
AMOVHU
|
||
|
AMOVW
|
||
|
AMOVWU
|
||
|
AMOVD
|
||
|
AMOVNP
|
||
|
AMOVNPW
|
||
|
AMOVP
|
||
|
AMOVPD
|
||
|
AMOVPQ
|
||
|
AMOVPS
|
||
|
AMOVPSW
|
||
|
AMOVPW
|
||
|
ASWPAD
|
||
|
ASWPAW
|
||
|
ASWPAH
|
||
|
ASWPAB
|
||
|
ASWPALD
|
||
|
ASWPALW
|
||
|
ASWPALH
|
||
|
ASWPALB
|
||
|
ASWPD
|
||
|
ASWPW
|
||
|
ASWPH
|
||
|
ASWPB
|
||
|
ASWPLD
|
||
|
ASWPLW
|
||
|
ASWPLH
|
||
|
ASWPLB
|
||
|
ABEQ
|
||
|
ABNE
|
||
|
ABCS
|
||
|
ABHS
|
||
|
ABCC
|
||
|
ABLO
|
||
|
ABMI
|
||
|
ABPL
|
||
|
ABVS
|
||
|
ABVC
|
||
|
ABHI
|
||
|
ABLS
|
||
|
ABGE
|
||
|
ABLT
|
||
|
ABGT
|
||
|
ABLE
|
||
|
AFABSD
|
||
|
AFABSS
|
||
|
AFADDD
|
||
|
AFADDS
|
||
|
AFCCMPD
|
||
|
AFCCMPED
|
||
|
AFCCMPS
|
||
|
AFCCMPES
|
||
|
AFCMPD
|
||
|
AFCMPED
|
||
|
AFCMPES
|
||
|
AFCMPS
|
||
|
AFCVTSD
|
||
|
AFCVTDS
|
||
|
AFCVTZSD
|
||
|
AFCVTZSDW
|
||
|
AFCVTZSS
|
||
|
AFCVTZSSW
|
||
|
AFCVTZUD
|
||
|
AFCVTZUDW
|
||
|
AFCVTZUS
|
||
|
AFCVTZUSW
|
||
|
AFDIVD
|
||
|
AFDIVS
|
||
|
AFLDPD
|
||
|
AFLDPS
|
||
|
AFMOVD
|
||
|
AFMOVS
|
||
|
AFMOVQ
|
||
|
AFMULD
|
||
|
AFMULS
|
||
|
AFNEGD
|
||
|
AFNEGS
|
||
|
AFSQRTD
|
||
|
AFSQRTS
|
||
|
AFSTPD
|
||
|
AFSTPS
|
||
|
AFSUBD
|
||
|
AFSUBS
|
||
|
ASCVTFD
|
||
|
ASCVTFS
|
||
|
ASCVTFWD
|
||
|
ASCVTFWS
|
||
|
AUCVTFD
|
||
|
AUCVTFS
|
||
|
AUCVTFWD
|
||
|
AUCVTFWS
|
||
|
AWORD
|
||
|
ADWORD
|
||
|
AFCSELS
|
||
|
AFCSELD
|
||
|
AFMAXS
|
||
|
AFMINS
|
||
|
AFMAXD
|
||
|
AFMIND
|
||
|
AFMAXNMS
|
||
|
AFMAXNMD
|
||
|
AFNMULS
|
||
|
AFNMULD
|
||
|
AFRINTNS
|
||
|
AFRINTND
|
||
|
AFRINTPS
|
||
|
AFRINTPD
|
||
|
AFRINTMS
|
||
|
AFRINTMD
|
||
|
AFRINTZS
|
||
|
AFRINTZD
|
||
|
AFRINTAS
|
||
|
AFRINTAD
|
||
|
AFRINTXS
|
||
|
AFRINTXD
|
||
|
AFRINTIS
|
||
|
AFRINTID
|
||
|
AFMADDS
|
||
|
AFMADDD
|
||
|
AFMSUBS
|
||
|
AFMSUBD
|
||
|
AFNMADDS
|
||
|
AFNMADDD
|
||
|
AFNMSUBS
|
||
|
AFNMSUBD
|
||
|
AFMINNMS
|
||
|
AFMINNMD
|
||
|
AFCVTDH
|
||
|
AFCVTHS
|
||
|
AFCVTHD
|
||
|
AFCVTSH
|
||
|
AAESD
|
||
|
AAESE
|
||
|
AAESIMC
|
||
|
AAESMC
|
||
|
ASHA1C
|
||
|
ASHA1H
|
||
|
ASHA1M
|
||
|
ASHA1P
|
||
|
ASHA1SU0
|
||
|
ASHA1SU1
|
||
|
ASHA256H
|
||
|
ASHA256H2
|
||
|
ASHA256SU0
|
||
|
ASHA256SU1
|
||
|
ASHA512H
|
||
|
ASHA512H2
|
||
|
ASHA512SU0
|
||
|
ASHA512SU1
|
||
|
AVADD
|
||
|
AVADDP
|
||
|
AVAND
|
||
|
AVBIF
|
||
|
AVCMEQ
|
||
|
AVCNT
|
||
|
AVEOR
|
||
|
AVMOV
|
||
|
AVLD1
|
||
|
AVLD2
|
||
|
AVLD3
|
||
|
AVLD4
|
||
|
AVLD1R
|
||
|
AVLD2R
|
||
|
AVLD3R
|
||
|
AVLD4R
|
||
|
AVORR
|
||
|
AVREV16
|
||
|
AVREV32
|
||
|
AVREV64
|
||
|
AVST1
|
||
|
AVST2
|
||
|
AVST3
|
||
|
AVST4
|
||
|
AVDUP
|
||
|
AVADDV
|
||
|
AVMOVI
|
||
|
AVUADDLV
|
||
|
AVSUB
|
||
|
AVFMLA
|
||
|
AVFMLS
|
||
|
AVPMULL
|
||
|
AVPMULL2
|
||
|
AVEXT
|
||
|
AVRBIT
|
||
|
AVUSHR
|
||
|
AVUSHLL
|
||
|
AVUSHLL2
|
||
|
AVUXTL
|
||
|
AVUXTL2
|
||
|
AVUZP1
|
||
|
AVUZP2
|
||
|
AVSHL
|
||
|
AVSRI
|
||
|
AVBSL
|
||
|
AVBIT
|
||
|
AVTBL
|
||
|
AVZIP1
|
||
|
AVZIP2
|
||
|
AVCMTST
|
||
|
ALAST
|
||
|
AB = obj.AJMP
|
||
|
ABL = obj.ACALL
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// shift types
|
||
|
SHIFT_LL = 0 << 22
|
||
|
SHIFT_LR = 1 << 22
|
||
|
SHIFT_AR = 2 << 22
|
||
|
)
|
||
|
|
||
|
// Arrangement for ARM64 SIMD instructions
|
||
|
const (
|
||
|
// arrangement types
|
||
|
ARNG_8B = iota
|
||
|
ARNG_16B
|
||
|
ARNG_1D
|
||
|
ARNG_4H
|
||
|
ARNG_8H
|
||
|
ARNG_2S
|
||
|
ARNG_4S
|
||
|
ARNG_2D
|
||
|
ARNG_1Q
|
||
|
ARNG_B
|
||
|
ARNG_H
|
||
|
ARNG_S
|
||
|
ARNG_D
|
||
|
)
|