You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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
|
|
)
|