aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2026-03-26 20:25:57 +0000
committerJunyang Shao <shaojunyang@google.com>2026-04-10 07:25:07 -0700
commitce4459cf0ee339b3bcf0ed10427079a234aade36 (patch)
tree8a4798fdf60384f34fffedd15c877f1122dc041a /src/cmd/internal/obj
parent926a1bef08ae6b93b50a96eedb15210e1d8c4733 (diff)
downloadgo-ce4459cf0ee339b3bcf0ed10427079a234aade36.tar.xz
cmd/asm, cmd/internal/obj/arm64: support register with index in SVE
This CL is generated by CL 759800. The new register patterns are (examples): Z1.B[5] Z2[6] P1[7] PN1[8] Change-Id: I5bccc4f1c0474dbd4cd4878bd488f36a7026c7ca Reviewed-on: https://go-review.googlesource.com/c/go/+/759780 Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/arm64/a.out.go23
-rw-r--r--src/cmd/internal/obj/arm64/anames_gen.go3
-rw-r--r--src/cmd/internal/obj/arm64/asm7.go44
-rw-r--r--src/cmd/internal/obj/arm64/encoding_gen.go435
-rw-r--r--src/cmd/internal/obj/arm64/goops_gen.go3
-rw-r--r--src/cmd/internal/obj/arm64/inst.go138
-rw-r--r--src/cmd/internal/obj/arm64/inst_gen.go1809
-rw-r--r--src/cmd/internal/obj/arm64/list7.go17
-rw-r--r--src/cmd/internal/obj/util.go4
9 files changed, 2117 insertions, 359 deletions
diff --git a/src/cmd/internal/obj/arm64/a.out.go b/src/cmd/internal/obj/arm64/a.out.go
index 72e0d519d7..d259a651d5 100644
--- a/src/cmd/internal/obj/arm64/a.out.go
+++ b/src/cmd/internal/obj/arm64/a.out.go
@@ -218,12 +218,21 @@ const (
// bits 0-4 indicates register: Vn
// bits 5-8 indicates arrangement: <T>
+// TODO: consider putting the register and arrangement in different fields of an
+// [obj.Prog] to make the bit pattern less confusing.
const (
- REG_ARNG = obj.RBaseARM64 + 1<<10 + iota<<9 // Vn.<T>
- REG_ELEM // Vn.<T>[index]
- REG_ELEM_END
- REG_ZARNG // Zn.<T>
+ REG_ARNG = obj.RBaseARM64 + 1<<10 + iota<<9 // Vn.<T>
+ REG_ELEM // Vn.<T>[index]
+ REG_ZARNG // Zn.<T>
+ REG_ZARNGELEM // Zn.<T>[index]
+ // PZELEM is taking a portion of the P or Z register.
+ // Since it does not have an arrangement, it interpret bit 5 differently:
+ // bit 5 = 0: Z register
+ // bit 5 = 1: P register
+ REG_PZELEM // Zn[index] or Pn[index] or PNd[index]
REG_PARNGZM // Pn.<T> or Pn/M, Pn/Z
+ // This currently overlaps with REG_EXT, if more arrangements are to be added,
+ // move REG_EXT to a higher range and update RBase.*.
REG_PARNGZM_END
)
@@ -621,9 +630,9 @@ const (
AC_ZREG // the scalable vector registers, such as Z1
AC_PREG // the scalable predicate registers, such as P1
AC_PREGZM // Pg.Z or Pg.M
- AC_REGIDX // P8[1]
- AC_ZREGIDX // Z1[1]
- AC_PREGIDX // P0[R1, 1]
+ AC_PREGIDX // P8[1] or PN1[1] or Z1[1]
+ AC_ZREGIDX // P8[1] or PN1[1] or Z1[1]
+ AC_PREGSEL // P0[R1, 1], index is calculated as R1 + 1
AC_ARNG // vector register with arrangement, such as Z1.D
AC_ARNGIDX // vector register with arrangement and index, such as Z1.D[1]
diff --git a/src/cmd/internal/obj/arm64/anames_gen.go b/src/cmd/internal/obj/arm64/anames_gen.go
index b929487b3c..498d227772 100644
--- a/src/cmd/internal/obj/arm64/anames_gen.go
+++ b/src/cmd/internal/obj/arm64/anames_gen.go
@@ -37,6 +37,7 @@ var sveAnames = []string{
"PORNS",
"PORR",
"PORRS",
+ "PPEXT",
"PPFALSE",
"PPFIRST",
"PPNEXT",
@@ -171,6 +172,7 @@ var sveAnames = []string{
"ZCPYW",
"ZDECP",
"ZDUP",
+ "ZDUPQ",
"ZDUPW",
"ZEOR",
"ZEOR3",
@@ -439,6 +441,7 @@ var sveAnames = []string{
"ZSUBP",
"ZSUBPT",
"ZSUBR",
+ "ZSUDOT",
"ZSUNPKHI",
"ZSUNPKLO",
"ZSUQADD",
diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go
index aa1c76368a..972980defe 100644
--- a/src/cmd/internal/obj/arm64/asm7.go
+++ b/src/cmd/internal/obj/arm64/asm7.go
@@ -1864,7 +1864,7 @@ func rclass(r int16) int {
return C_RSP
case r >= REG_ARNG && r < REG_ELEM:
return C_ARNG
- case r >= REG_ELEM && r < REG_ELEM_END:
+ case r >= REG_ELEM && r < REG_ZARNG:
return C_ELEM
case r >= REG_UXTB && r < REG_SPECIAL,
r >= REG_LSL && r < REG_ARNG:
@@ -8419,19 +8419,54 @@ func EncodeRegisterExtension(a *obj.Addr, ext string, reg, num int16, isAmount,
var arng int
switch ext {
case "B":
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((ARNG_B&15)<<5)
+ a.Index = num
+ return nil
+ }
arng = ARNG_B
case "H":
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((ARNG_H&15)<<5)
+ a.Index = num
+ return nil
+ }
arng = ARNG_H
case "S":
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((ARNG_S&15)<<5)
+ a.Index = num
+ return nil
+ }
arng = ARNG_S
case "D":
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((ARNG_D&15)<<5)
+ a.Index = num
+ return nil
+ }
arng = ARNG_D
case "Q":
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((ARNG_Q&15)<<5)
+ a.Index = num
+ return nil
+ }
arng = ARNG_Q
default:
+ if isIndex && ext == "" {
+ a.Reg = REG_PZELEM + (reg & 31)
+ a.Index = num
+ return nil
+ }
return errors.New("invalid Z register arrangement: " + ext)
}
- a.Reg = REG_ZARNG + (reg & 31) + int16((arng&15)<<5)
+ if isIndex {
+ a.Reg = REG_ZARNGELEM + (reg & 31) + int16((arng&15)<<5)
+ a.Index = num
+ } else {
+ a.Reg = REG_ZARNG + (reg & 31) + int16((arng&15)<<5)
+ }
} else if REG_P0 <= reg && reg <= REG_PN15 {
var arng int
switch ext {
@@ -8450,6 +8485,11 @@ func EncodeRegisterExtension(a *obj.Addr, ext string, reg, num int16, isAmount,
case "M":
arng = PRED_M
default:
+ if isIndex && ext == "" {
+ a.Reg = REG_PZELEM + (reg & 31) + (1 << 5)
+ a.Index = num
+ return nil
+ }
return errors.New("invalid P register arrangement: " + ext)
}
a.Reg = REG_PARNGZM + (reg & 31) + int16((arng&15)<<5)
diff --git a/src/cmd/internal/obj/arm64/encoding_gen.go b/src/cmd/internal/obj/arm64/encoding_gen.go
index 3885c8d534..6fd3b93476 100644
--- a/src/cmd/internal/obj/arm64/encoding_gen.go
+++ b/src/cmd/internal/obj/arm64/encoding_gen.go
@@ -4,9 +4,15 @@ package arm64
const (
enc_NIL component = iota
+ enc_i1_tsz
+ enc_i2h_i2l
+ enc_i3h_i3l
+ enc_i4h_i4l
+ enc_imm2_tsz
enc_tszh_tszl
enc_M
enc_PNd
+ enc_PNn
enc_Pd
enc_Pdm
enc_Pdn
@@ -29,9 +35,13 @@ const (
enc_Zk
enc_Zm
enc_Zn
+ enc_i1
+ enc_i2
+ enc_imm2
enc_size
enc_size0
enc_sz
+ enc_tsz
)
// encodeArngBCheck is the implementation of the following encoding logic:
@@ -97,6 +107,164 @@ func encodeZeroPredCheck(v uint32) (uint32, bool) {
return 0, false
}
+// encodeI2_1921_16To32Bit is the implementation of the following encoding logic:
+// For the "16-bit to 32-bit" variant: is the immediate index of a pair of 16-bit elements within each 128-bit vector segment, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_16To32Bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeI1_2021_16To64Bit is the implementation of the following encoding logic:
+// For the "16-bit to 64-bit" variant: is the immediate index of a 64-bit group of four 16-bit values within each 128-bit vector segment, in the range 0 to 1, encoded in the "i1" field.
+// bit range mappings:
+// i1: [20:21)
+func encodeI1_2021_16To64Bit(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, true
+}
+
+// encodeZm1620_16To64Bit is the implementation of the following encoding logic:
+// For the "16-bit to 64-bit" variant: is the name of the second source scalable vector register Z0-Z15, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:20)
+func encodeZm1620_16To64Bit(v uint32) (uint32, bool) {
+ if v > 15 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeZm1619_16Bit32Bit is the implementation of the following encoding logic:
+// For the "16-bit" and "32-bit" variants: is the name of the second source scalable vector register Z0-Z7, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:19)
+func encodeZm1619_16Bit32Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeI3hI3l_1923_16Bit is the implementation of the following encoding logic:
+// For the "16-bit" variant: is the element index, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [22:23)
+// i3l: [19:21)
+func encodeI3hI3l_1923_16Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&3)<<19 | (v>>2)<<22, true
+}
+
+// encodeI2_1921_32Bit is the implementation of the following encoding logic:
+// For the "32-bit" variant: is the element index, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_32Bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeI3hI3l_1119_32Bit is the implementation of the following encoding logic:
+// For the "32-bit" variant: is the element index, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [19:21)
+// i3l: [11:12)
+func encodeI3hI3l_1119_32Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&1)<<11 | (v>>1)<<19, true
+}
+
+// encodeZm1619_32Bit is the implementation of the following encoding logic:
+// For the "32-bit" variant: is the name of the second source scalable vector register Z0-Z7, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:19)
+func encodeZm1619_32Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeI1_2021_64Bit is the implementation of the following encoding logic:
+// For the "64-bit" variant: is the element index, in the range 0 to 1, encoded in the "i1" field.
+// bit range mappings:
+// i1: [20:21)
+func encodeI1_2021_64Bit(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, true
+}
+
+// encodeI2hI2l_1120_64Bit is the implementation of the following encoding logic:
+// For the "64-bit" variant: is the element index, in the range 0 to 3, encoded in the "i2h:i2l" fields.
+// bit range mappings:
+// i2h: [20:21)
+// i2l: [11:12)
+func encodeI2hI2l_1120_64Bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return (v&1)<<11 | (v>>1)<<20, true
+}
+
+// encodeZm1620_64Bit is the implementation of the following encoding logic:
+// For the "64-bit" variant: is the name of the second source scalable vector register Z0-Z15, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:20)
+func encodeZm1620_64Bit(v uint32) (uint32, bool) {
+ if v > 15 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeI3hI3l_1923_8To16Bit is the implementation of the following encoding logic:
+// For the "8-bit to 16-bit" variant: is the immediate index of a pair of 8-bit elements within each 128-bit vector segment, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [22:23)
+// i3l: [19:21)
+func encodeI3hI3l_1923_8To16Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&3)<<19 | (v>>2)<<22, true
+}
+
+// encodeI2_1921_8To32Bit is the implementation of the following encoding logic:
+// For the "8-bit to 32-bit" variant: is the immediate index of a 32-bit group of four 8-bit values within each 128-bit vector segment, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_8To32Bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeZm1619_8To32Bit is the implementation of the following encoding logic:
+// For the "8-bit to 32-bit" variant: is the name of the second source scalable vector register Z0-Z7, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:19)
+func encodeZm1619_8To32Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
// encodeSzByteHalfword is the implementation of the following encoding logic:
// For the "Byte and halfword" variant: is the size specifier,
// sz <T>
@@ -135,6 +303,74 @@ func encodeSizeByteMergeZero(v uint32) (uint32, bool) {
return 0, false
}
+// encodeI1_2021_DoublePrecision is the implementation of the following encoding logic:
+// For the "Double-precision" variant: is the immediate index, in the range 0 to 1, encoded in the "i1" field.
+// bit range mappings:
+// i1: [20:21)
+func encodeI1_2021_DoublePrecision(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, true
+}
+
+// encodeZm1620_DoublePrecision is the implementation of the following encoding logic:
+// For the "Double-precision" variant: is the name of the second source scalable vector register Z0-Z15, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:20)
+func encodeZm1620_DoublePrecision(v uint32) (uint32, bool) {
+ if v > 15 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeI3hI3l_1722_Doubleword is the implementation of the following encoding logic:
+// For the "Doubleword" variant: is the optional portion index, in the range 0 to 7, defaulting to 0, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [22:23)
+// i3l: [17:19)
+func encodeI3hI3l_1722_Doubleword(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&3)<<17 | (v>>2)<<22, true
+}
+
+// encodeZm1619_HalfSinglePrecision is the implementation of the following encoding logic:
+// For the "Half-precision" and "Single-precision" variants: is the name of the second source scalable vector register Z0-Z7, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:19)
+func encodeZm1619_HalfSinglePrecision(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return v << 16, true
+}
+
+// encodeI3hI3l_1923_HalfPrecision is the implementation of the following encoding logic:
+// For the "Half-precision" variant: is the immediate index, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [22:23)
+// i3l: [19:21)
+func encodeI3hI3l_1923_HalfPrecision(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&3)<<19 | (v>>2)<<22, true
+}
+
+// encodeI1_1718_Halfword is the implementation of the following encoding logic:
+// For the "Halfword" variant: is the optional portion index, in the range 0 to 1, defaulting to 0, encoded in the "i1" field.
+// bit range mappings:
+// i1: [17:18)
+func encodeI1_1718_Halfword(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 17, true
+}
+
// encodeSize0HalfwordMergeZero is the implementation of the following encoding logic:
// For the "Halfword, merging" and "Halfword, zeroing" variants: is the size specifier,
// size[0] <T>
@@ -152,6 +388,17 @@ func encodeSize0HalfwordMergeZero(v uint32) (uint32, bool) {
return 0, false
}
+// encodeI2_1921_SinglePrecision is the implementation of the following encoding logic:
+// For the "Single-precision" variant: is the immediate index, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_SinglePrecision(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
// encodeSzWordDoubleword is the implementation of the following encoding logic:
// For the "Word and doubleword" variant: is the size specifier,
// sz <T>
@@ -169,6 +416,17 @@ func encodeSzWordDoubleword(v uint32) (uint32, bool) {
return 0, false
}
+// encodeI2_1719_Word is the implementation of the following encoding logic:
+// For the "Word" variant: is the optional portion index, in the range 0 to 3, defaulting to 0, encoded in the "i2" field.
+// bit range mappings:
+// i2: [17:19)
+func encodeI2_1719_Word(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 17, true
+}
+
// encodeSize16B8H4S2D is the implementation of the following encoding logic:
// Is an arrangement specifier,
// size <T>
@@ -276,6 +534,98 @@ func encodeXdn05(v uint32) (uint32, bool) {
return v & 31, true
}
+// encodeI2_1921_8BitGroup is the implementation of the following encoding logic:
+// Is the immediate index of a 32-bit group of four 8-bit values within each 128-bit vector segment, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_8BitGroup(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeI2_1921_Pair16Bit is the implementation of the following encoding logic:
+// Is the immediate index of a pair of 16-bit elements within each 128-bit vector segment, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_Pair16Bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeI3hI3l_1119_Pair8Bit is the implementation of the following encoding logic:
+// Is the immediate index of a pair of 8-bit elements within each 128-bit vector segment, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [19:21)
+// i3l: [11:12)
+func encodeI3hI3l_1119_Pair8Bit(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&1)<<11 | (v>>1)<<19, true
+}
+
+// encodeI4hI4l_1019 is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to 15, encoded in the "i4h:i4l" fields.
+// bit range mappings:
+// i4h: [19:21)
+// i4l: [10:12)
+func encodeI4hI4l_1019(v uint32) (uint32, bool) {
+ if v > 15 {
+ return 0, false
+ }
+ return (v&3)<<10 | (v>>2)<<19, true
+}
+
+// encodeI3hI3l_1119 is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [19:21)
+// i3l: [11:12)
+func encodeI3hI3l_1119(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&1)<<11 | (v>>1)<<19, true
+}
+
+// encodeI3hI3l_1922 is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to 7, encoded in the "i3h:i3l" fields.
+// bit range mappings:
+// i3h: [22:23)
+// i3l: [19:21)
+func encodeI3hI3l_1922(v uint32) (uint32, bool) {
+ if v > 7 {
+ return 0, false
+ }
+ return (v&3)<<19 | (v>>2)<<22, true
+}
+
+// encodeI1Tsz_Delegate is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to one less than the number of elements in 128 bits, encoded in "i1:tsz".
+// bit range mappings:
+// i1: [20:21)
+// tsz: [16:20)
+func encodeI1Tsz_Delegate(v uint32) (uint32, bool) {
+ // The statement "range 0 to one less than the number of elements in 128 bits"
+ // is not possible to handle here, we delegate this to the caller.
+ return codeI1Tsz, false
+}
+
+// encodeImm2Tsz_Delegate is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to one less than the number of elements in 512 bits, encoded in "imm2:tsz".
+// bit range mappings:
+// imm2: [22:24)
+// tsz: [16:21)
+func encodeImm2Tsz_Delegate(v uint32) (uint32, bool) {
+ // The statement "range 0 to one less than the number of elements in 512 bits"
+ // is not possible to handle here, we delegate this to the caller.
+ return codeImm2Tsz, false
+}
+
// encodeVd is the implementation of the following encoding logic:
// Is the name of the destination SIMD&FP register, encoded in the "Vd" field.
// bit range mappings:
@@ -328,6 +678,18 @@ func encodeZdnDest(v uint32) (uint32, bool) {
return v, true
}
+// encodePnN_58 is the implementation of the following encoding logic:
+// Is the name of the first source scalable predicate register PN8-PN15, with predicate-as-counter encoding, encoded in the "PNn" field.
+// bit range mappings:
+// PNn: [5:8)
+func encodePnN_58(v uint32) (uint32, bool) {
+ if v >= 24 && v <= 31 {
+ // PN registers starts from 16.
+ return (v - 24) << 5, true
+ }
+ return 0, false
+}
+
// encodePn59 is the implementation of the following encoding logic:
// Is the name of the first source scalable predicate register, encoded in the "Pn" field.
// bit range mappings:
@@ -395,6 +757,17 @@ func encodePm1620(v uint32) (uint32, bool) {
return v << 16, true
}
+// encodeZm_1619_Range0_7 is the implementation of the following encoding logic:
+// Is the name of the second source scalable vector register Z0-Z7, encoded in the "Zm" field.
+// bit range mappings:
+// Zm: [16:19)
+func encodeZm_1619_Range0_7(v uint32) (uint32, bool) {
+ if v <= 7 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
// encodeZm1621 is the implementation of the following encoding logic:
// Is the name of the second source scalable vector register, encoded in the "Zm" field.
// bit range mappings:
@@ -617,6 +990,17 @@ func encodeVdn05(v uint32) (uint32, bool) {
return v & 31, true
}
+// encodeImm2_810 is the implementation of the following encoding logic:
+// Is the portion index, in the range 0 to 3, encoded in the "imm2" field.
+// bit range mappings:
+// imm2: [8:10)
+func encodeImm2_810(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 8, true
+}
+
// encodePredQualM1617 is the implementation of the following encoding logic:
// Is the predication qualifier,
// M <ZM>
@@ -1000,6 +1384,57 @@ func encodeSzSD2223(v uint32) (uint32, bool) {
return 0, false
}
+// encodeTsz_1620_SizeSpecifier4 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tsz <T>
+// 0000 RESERVED
+// xxx1 B
+// xx10 H
+// x100 S
+// 1000 D
+// bit range mappings:
+// tsz: [16:20)
+func encodeTsz_1620_SizeSpecifier4(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 16, true
+ case ARNG_H:
+ return 2 << 16, true
+ case ARNG_S:
+ return 4 << 16, true
+ case ARNG_D:
+ return 8 << 16, true
+ }
+ return 0, false
+}
+
+// encodeTsz_1621_SizeSpecifier5 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tsz <T>
+// 00000 RESERVED
+// xxxx1 B
+// xxx10 H
+// xx100 S
+// x1000 D
+// 10000 Q
+// bit range mappings:
+// tsz: [16:21)
+func encodeTsz_1621_SizeSpecifier5(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 16, true
+ case ARNG_H:
+ return 2 << 16, true
+ case ARNG_S:
+ return 4 << 16, true
+ case ARNG_D:
+ return 8 << 16, true
+ case ARNG_Q:
+ return 16 << 16, true
+ }
+ return 0, false
+}
+
// encodeTszhTszlBHS is the implementation of the following encoding logic:
// Is the size specifier,
// tszh tszl <T>
diff --git a/src/cmd/internal/obj/arm64/goops_gen.go b/src/cmd/internal/obj/arm64/goops_gen.go
index 2f1a475e04..ba800712ca 100644
--- a/src/cmd/internal/obj/arm64/goops_gen.go
+++ b/src/cmd/internal/obj/arm64/goops_gen.go
@@ -38,6 +38,7 @@ const (
APORNS
APORR
APORRS
+ APPEXT
APPFALSE
APPFIRST
APPNEXT
@@ -172,6 +173,7 @@ const (
AZCPYW
AZDECP
AZDUP
+ AZDUPQ
AZDUPW
AZEOR
AZEOR3
@@ -440,6 +442,7 @@ const (
AZSUBP
AZSUBPT
AZSUBR
+ AZSUDOT
AZSUNPKHI
AZSUNPKLO
AZSUQADD
diff --git a/src/cmd/internal/obj/arm64/inst.go b/src/cmd/internal/obj/arm64/inst.go
index 28ff139d66..dd9c802aab 100644
--- a/src/cmd/internal/obj/arm64/inst.go
+++ b/src/cmd/internal/obj/arm64/inst.go
@@ -98,9 +98,19 @@ func aclass(a *obj.Addr) AClass {
if a.Reg >= REG_ARNG && a.Reg < REG_ELEM {
return AC_ARNG
}
- if a.Reg >= REG_ZARNG && a.Reg < REG_PARNGZM {
+ if a.Reg >= REG_ZARNG && a.Reg < REG_ZARNGELEM {
return AC_ARNG
}
+ if a.Reg >= REG_ZARNGELEM && a.Reg < REG_PZELEM {
+ return AC_ARNGIDX
+ }
+ if a.Reg >= REG_PZELEM && a.Reg < REG_PARNGZM {
+ if a.Reg&(1<<5) == 0 {
+ return AC_ZREGIDX
+ } else {
+ return AC_PREGIDX
+ }
+ }
if a.Reg >= REG_PARNGZM && a.Reg < REG_PARNGZM_END {
switch (a.Reg >> 5) & 15 {
case PRED_M, PRED_Z:
@@ -149,6 +159,27 @@ func addrComponent(a *obj.Addr, acl AClass, index int) uint32 {
default:
panic(fmt.Errorf("unknown elm index at %d in AClass %d", index, acl))
}
+ // AClass: AC_ARNGIDX, AC_PREGIDX, AC_ZREGIDX
+ // GNU mnemonic: <reg>.<T>[<index>]
+ // Go mnemonic:
+ // reg.T[index]
+ // Encoding:
+ // Type = TYPE_REG
+ // Reg = reg | (arrangement << 5)
+ // Index = index
+ case AC_ARNGIDX, AC_PREGIDX, AC_ZREGIDX:
+ switch index {
+ case 0:
+ return uint32(a.Reg & 31)
+ case 1:
+ // Arrangement
+ return uint32((a.Reg >> 5) & 15)
+ case 2:
+ // Index
+ return uint32(a.Index)
+ default:
+ panic(fmt.Errorf("unknown elm index at %d in AClass %d", index, acl))
+ }
// AClass: AC_SPZGREG, AC_VREG
// GNU mnemonic: <width><reg>
// Go mnemonic:
@@ -171,6 +202,96 @@ func addrComponent(a *obj.Addr, acl AClass, index int) uint32 {
panic(fmt.Errorf("unknown AClass %d", acl))
}
+var codeI1Tsz uint32 = 0xffffffff
+var codeImm2Tsz uint32 = 0xfffffffe
+
+// encodeI1Tsz is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to one less than the number of elements in 128 bits, encoded in "i1:tsz".
+// bit range mappings:
+// i1: [20:21)
+// tsz: [16:20)
+// Note:
+//
+// arr is the arrangement.
+// This encoding is aligned to the high bit of the box, according to the spec.
+func encodeI1Tsz(v, arr uint32) (uint32, bool) {
+ switch arr {
+ case ARNG_B:
+ if v > 15 {
+ return 0, false
+ }
+ return v << 17, true
+ case ARNG_H:
+ if v > 7 {
+ return 0, false
+ }
+ return v << 18, true
+ case ARNG_S:
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+ case ARNG_D:
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, true
+ case ARNG_Q:
+ if v > 0 {
+ return 0, false
+ }
+ return 0, true
+ default:
+ return 0, false
+ }
+}
+
+// encodeImm2Tsz is the implementation of the following encoding logic:
+// Is the immediate index, in the range 0 to one less than the number of elements in 512 bits, encoded in "imm2:tsz".
+// bit range mappings:
+// imm2: [22:24)
+// tsz: [16:21)
+// Note:
+//
+// arr is the arrangement.
+// This encoding is aligned to the high bit of the box, according to the spec.
+func encodeImm2Tsz(v, arr uint32) (uint32, bool) {
+ switch arr {
+ case ARNG_B:
+ if v > 63 {
+ return 0, false
+ }
+ v <<= 1
+ return (v&31)<<16 | (v>>5)<<22, true
+ case ARNG_H:
+ if v > 31 {
+ return 0, false
+ }
+ v <<= 2
+ return (v&31)<<16 | (v>>5)<<22, true
+ case ARNG_S:
+ if v > 15 {
+ return 0, false
+ }
+ v <<= 3
+ return (v&31)<<16 | (v>>5)<<22, true
+ case ARNG_D:
+ if v > 7 {
+ return 0, false
+ }
+ v <<= 4
+ return (v&31)<<16 | (v>>5)<<22, true
+ case ARNG_Q:
+ if v > 3 {
+ return 0, false
+ }
+ v <<= 5
+ return (v&31)<<16 | (v>>5)<<22, true
+ default:
+ return 0, false
+ }
+}
+
// tryEncode tries to encode p with i, it returns the encoded binary and ok signal.
func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
bin := i.fixedBits
@@ -191,7 +312,20 @@ func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
}
for i, enc := range op.elemEncoders {
val := addrComponent(addr, acl, i)
- if b, ok := enc.fn(val); ok {
+ if b, ok := enc.fn(val); ok || b != 0 {
+ if !ok {
+ switch b {
+ case codeI1Tsz:
+ b, ok = encodeI1Tsz(val, addrComponent(addr, acl, i-1))
+ case codeImm2Tsz:
+ b, ok = encodeImm2Tsz(val, addrComponent(addr, acl, i-1))
+ default:
+ panic(fmt.Errorf("unknown encoding function code %d", b))
+ }
+ }
+ if !ok {
+ return 0, false
+ }
bin |= b
if _, ok := encoded[enc.comp]; ok && b != encoded[enc.comp] {
return 0, false
diff --git a/src/cmd/internal/obj/arm64/inst_gen.go b/src/cmd/internal/obj/arm64/inst_gen.go
index 376dc0fe13..b1370c531f 100644
--- a/src/cmd/internal/obj/arm64/inst_gen.go
+++ b/src/cmd/internal/obj/arm64/inst_gen.go
@@ -303,6 +303,15 @@ var insts = [][]instEncoder{
args: Pm_B__Pn_B__PgZ__Pd_B,
},
},
+ // PPEXT
+ {
+ // PPEXT <PNn>[<imm>], <Pd>.<T>
+ {
+ goOp: APPEXT,
+ fixedBits: 0x25207010,
+ args: PNn_imm___Pd_T,
+ },
+ },
// PPFALSE
{
// PPFALSE <Pd>.B
@@ -1046,18 +1055,18 @@ var insts = [][]instEncoder{
},
// ZBFCVT
{
- // ZBFCVT <Zn>.S, <Pg>/Z, <Zd>.H
- {
- goOp: AZBFCVT,
- fixedBits: 0x649ac000,
- args: Zn_S__PgZ__Zd_H,
- },
// ZBFCVT <Zn>.S, <Pg>/M, <Zd>.H
{
goOp: AZBFCVT,
fixedBits: 0x658aa000,
args: Zn_S__PgM__Zd_H,
},
+ // ZBFCVT <Zn>.S, <Pg>/Z, <Zd>.H
+ {
+ goOp: AZBFCVT,
+ fixedBits: 0x649ac000,
+ args: Zn_S__PgZ__Zd_H,
+ },
},
// ZBFCVTNT
{
@@ -1076,6 +1085,12 @@ var insts = [][]instEncoder{
},
// ZBFDOT
{
+ // ZBFDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFDOT,
+ fixedBits: 0x64604000,
+ args: Zm_H_imm___Zn_H__Zda_S__3,
+ },
// ZBFDOT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFDOT,
@@ -1121,6 +1136,12 @@ var insts = [][]instEncoder{
},
// ZBFMLA
{
+ // ZBFMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZBFMLA,
+ fixedBits: 0x64200800,
+ args: Zm_H_imm___Zn_H__Zda_H__2,
+ },
// ZBFMLA <Zm>.H, <Zn>.H, <Pg>/M, <Zda>.H
{
goOp: AZBFMLA,
@@ -1130,6 +1151,12 @@ var insts = [][]instEncoder{
},
// ZBFMLALB
{
+ // ZBFMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLALB,
+ fixedBits: 0x64e04000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZBFMLALB <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLALB,
@@ -1139,6 +1166,12 @@ var insts = [][]instEncoder{
},
// ZBFMLALT
{
+ // ZBFMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLALT,
+ fixedBits: 0x64e04400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZBFMLALT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLALT,
@@ -1148,6 +1181,12 @@ var insts = [][]instEncoder{
},
// ZBFMLS
{
+ // ZBFMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZBFMLS,
+ fixedBits: 0x64200c00,
+ args: Zm_H_imm___Zn_H__Zda_H__2,
+ },
// ZBFMLS <Zm>.H, <Zn>.H, <Pg>/M, <Zda>.H
{
goOp: AZBFMLS,
@@ -1157,6 +1196,12 @@ var insts = [][]instEncoder{
},
// ZBFMLSLB
{
+ // ZBFMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLSLB,
+ fixedBits: 0x64e06000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZBFMLSLB <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLSLB,
@@ -1166,6 +1211,12 @@ var insts = [][]instEncoder{
},
// ZBFMLSLT
{
+ // ZBFMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLSLT,
+ fixedBits: 0x64e06400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZBFMLSLT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLSLT,
@@ -1175,26 +1226,26 @@ var insts = [][]instEncoder{
},
// ZBFMMLA
{
- // ZBFMMLA <Zm>.H, <Zn>.H, <Zda>.S
- {
- goOp: AZBFMMLA,
- fixedBits: 0x6460e400,
- args: Zm_H__Zn_H__Zda_S,
- },
// ZBFMMLA <Zm>.H, <Zn>.H, <Zda>.H
{
goOp: AZBFMMLA,
fixedBits: 0x64e0e000,
args: Zm_H__Zn_H__Zda_H,
},
+ // ZBFMMLA <Zm>.H, <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMMLA,
+ fixedBits: 0x6460e400,
+ args: Zm_H__Zn_H__Zda_S,
+ },
},
// ZBFMUL
{
- // ZBFMUL <Zm>.H, <Zn>.H, <Zd>.H
+ // ZBFMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
{
goOp: AZBFMUL,
- fixedBits: 0x65000800,
- args: Zm_H__Zn_H__Zd_H,
+ fixedBits: 0x64202800,
+ args: Zm_H_imm___Zn_H__Zd_H__2,
},
// ZBFMUL <Zm>.H, <Zdn>.H, <Pg>/M, <Zdn>.H
{
@@ -1202,6 +1253,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65028000,
args: Zm_H__Zdn_H__PgM__Zdn_H,
},
+ // ZBFMUL <Zm>.H, <Zn>.H, <Zd>.H
+ {
+ goOp: AZBFMUL,
+ fixedBits: 0x65000800,
+ args: Zm_H__Zn_H__Zd_H,
+ },
},
// ZBFSCALE
{
@@ -1214,18 +1271,18 @@ var insts = [][]instEncoder{
},
// ZBFSUB
{
- // ZBFSUB <Zm>.H, <Zn>.H, <Zd>.H
- {
- goOp: AZBFSUB,
- fixedBits: 0x65000400,
- args: Zm_H__Zn_H__Zd_H,
- },
// ZBFSUB <Zm>.H, <Zdn>.H, <Pg>/M, <Zdn>.H
{
goOp: AZBFSUB,
fixedBits: 0x65018000,
args: Zm_H__Zdn_H__PgM__Zdn_H,
},
+ // ZBFSUB <Zm>.H, <Zn>.H, <Zd>.H
+ {
+ goOp: AZBFSUB,
+ fixedBits: 0x65000400,
+ args: Zm_H__Zn_H__Zd_H,
+ },
},
// ZBGRP
{
@@ -1460,18 +1517,18 @@ var insts = [][]instEncoder{
},
// ZCMPGT
{
- // ZCMPGT <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
- {
- goOp: AZCMPGT,
- fixedBits: 0x24004010,
- args: Zm_D__Zn_T__PgZ__Pd_T,
- },
// ZCMPGT <Zm>.<T>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPGT,
fixedBits: 0x24008010,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
+ // ZCMPGT <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPGT,
+ fixedBits: 0x24004010,
+ args: Zm_D__Zn_T__PgZ__Pd_T,
+ },
},
// ZCMPHI
{
@@ -1571,32 +1628,32 @@ var insts = [][]instEncoder{
},
// ZCNT
{
- // ZCNT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZCNT,
- fixedBits: 0x40aa000,
- args: Zn_T__PgZ__Zd_T__2,
- },
// ZCNT <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZCNT,
fixedBits: 0x41aa000,
args: Zn_T__PgM__Zd_T__2,
},
+ // ZCNT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZCNT,
+ fixedBits: 0x40aa000,
+ args: Zn_T__PgZ__Zd_T__2,
+ },
},
// ZCOMPACT
{
// ZCOMPACT <Zn>.<T>, <Pg>, <Zd>.<T>
{
goOp: AZCOMPACT,
- fixedBits: 0x5218000,
- args: Zn_T__Pg__Zd_T__1,
+ fixedBits: 0x5a18000,
+ args: Zn_T__Pg__Zd_T__2,
},
// ZCOMPACT <Zn>.<T>, <Pg>, <Zd>.<T>
{
goOp: AZCOMPACT,
- fixedBits: 0x5a18000,
- args: Zn_T__Pg__Zd_T__2,
+ fixedBits: 0x5218000,
+ args: Zn_T__Pg__Zd_T__1,
},
},
// ZCPY
@@ -1670,6 +1727,21 @@ var insts = [][]instEncoder{
fixedBits: 0x5e03800,
args: RnSP__Zd_T,
},
+ // ZDUP <Zn>.<T>[<imm>], <Zd>.<T>
+ {
+ goOp: AZDUP,
+ fixedBits: 0x5202000,
+ args: Zn_T_imm___Zd_T__1,
+ },
+ },
+ // ZDUPQ
+ {
+ // ZDUPQ <Zn>.<T>[<imm>], <Zd>.<T>
+ {
+ goOp: AZDUPQ,
+ fixedBits: 0x5202400,
+ args: Zn_T_imm___Zd_T__2,
+ },
},
// ZDUPW
{
@@ -1682,18 +1754,18 @@ var insts = [][]instEncoder{
},
// ZEOR
{
- // ZEOR <Zm>.D, <Zn>.D, <Zd>.D
- {
- goOp: AZEOR,
- fixedBits: 0x4a03000,
- args: Zm_D__Zn_D__Zd_D,
- },
// ZEOR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZEOR,
fixedBits: 0x4190000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZEOR <Zm>.D, <Zn>.D, <Zd>.D
+ {
+ goOp: AZEOR,
+ fixedBits: 0x4a03000,
+ args: Zm_D__Zn_D__Zd_D,
+ },
},
// ZEOR3
{
@@ -1856,18 +1928,18 @@ var insts = [][]instEncoder{
},
// ZFADD
{
- // ZFADD <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZFADD,
- fixedBits: 0x65008000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__3,
- },
// ZFADD <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZFADD,
fixedBits: 0x65000000,
args: Zm_T__Zn_T__Zd_T__2,
},
+ // ZFADD <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFADD,
+ fixedBits: 0x65008000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__3,
+ },
},
// ZFADDAD
{
@@ -2015,11 +2087,11 @@ var insts = [][]instEncoder{
},
// ZFCVT
{
- // ZFCVT <Zn>.H, <Pg>/M, <Zd>.D
+ // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x65c9a000,
- args: Zn_H__PgM__Zd_D,
+ fixedBits: 0x649a8000,
+ args: Zn_S__PgZ__Zd_H,
},
// ZFCVT <Zn>.S, <Pg>/M, <Zd>.D
{
@@ -2027,18 +2099,18 @@ var insts = [][]instEncoder{
fixedBits: 0x65cba000,
args: Zn_S__PgM__Zd_D,
},
- // ZFCVT <Zn>.H, <Pg>/M, <Zd>.S
- {
- goOp: AZFCVT,
- fixedBits: 0x6589a000,
- args: Zn_H__PgM__Zd_S,
- },
// ZFCVT <Zn>.H, <Pg>/Z, <Zd>.S
{
goOp: AZFCVT,
fixedBits: 0x649aa000,
args: Zn_H__PgZ__Zd_S,
},
+ // ZFCVT <Zn>.H, <Pg>/M, <Zd>.D
+ {
+ goOp: AZFCVT,
+ fixedBits: 0x65c9a000,
+ args: Zn_H__PgM__Zd_D,
+ },
// ZFCVT <Zn>.H, <Pg>/Z, <Zd>.D
{
goOp: AZFCVT,
@@ -2051,29 +2123,23 @@ var insts = [][]instEncoder{
fixedBits: 0x6588a000,
args: Zn_S__PgM__Zd_H,
},
- // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.H
- {
- goOp: AZFCVT,
- fixedBits: 0x649a8000,
- args: Zn_S__PgZ__Zd_H,
- },
// ZFCVT <Zn>.D, <Pg>/Z, <Zd>.S
{
goOp: AZFCVT,
fixedBits: 0x64dac000,
args: Zn_D__PgZ__Zd_S,
},
- // ZFCVT <Zn>.D, <Pg>/M, <Zd>.S
+ // ZFCVT <Zn>.H, <Pg>/M, <Zd>.S
{
goOp: AZFCVT,
- fixedBits: 0x65caa000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x6589a000,
+ args: Zn_H__PgM__Zd_S,
},
- // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.H
+ // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZFCVT,
- fixedBits: 0x64da8000,
- args: Zn_D__PgZ__Zd_H,
+ fixedBits: 0x64dae000,
+ args: Zn_S__PgZ__Zd_D,
},
// ZFCVT <Zn>.D, <Pg>/M, <Zd>.H
{
@@ -2081,15 +2147,27 @@ var insts = [][]instEncoder{
fixedBits: 0x65c8a000,
args: Zn_D__PgM__Zd_H,
},
- // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.D
+ // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x64dae000,
- args: Zn_S__PgZ__Zd_D,
+ fixedBits: 0x64da8000,
+ args: Zn_D__PgZ__Zd_H,
+ },
+ // ZFCVT <Zn>.D, <Pg>/M, <Zd>.S
+ {
+ goOp: AZFCVT,
+ fixedBits: 0x65caa000,
+ args: Zn_D__PgM__Zd_S,
},
},
// ZFCVTLT
{
+ // ZFCVTLT <Zn>.S, <Pg>/Z, <Zd>.D
+ {
+ goOp: AZFCVTLT,
+ fixedBits: 0x64c3a000,
+ args: Zn_S__PgZ__Zd_D,
+ },
// ZFCVTLT <Zn>.H, <Pg>/M, <Zd>.S
{
goOp: AZFCVTLT,
@@ -2108,12 +2186,6 @@ var insts = [][]instEncoder{
fixedBits: 0x64cba000,
args: Zn_S__PgM__Zd_D,
},
- // ZFCVTLT <Zn>.S, <Pg>/Z, <Zd>.D
- {
- goOp: AZFCVTLT,
- fixedBits: 0x64c3a000,
- args: Zn_S__PgZ__Zd_D,
- },
},
// ZFCVTNT
{
@@ -2174,23 +2246,29 @@ var insts = [][]instEncoder{
},
// ZFCVTZS
{
- // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.H
+ // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x655aa000,
- args: Zn_H__PgM__Zd_H,
+ fixedBits: 0x655ca000,
+ args: Zn_H__PgM__Zd_S,
},
- // ZFCVTZS <Zn>.D, <Pg>/Z, <Zd>.D
+ // ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x64dfc000,
- args: Zn_D__PgZ__Zd_D,
+ fixedBits: 0x659ca000,
+ args: Zn_S__PgM__Zd_S,
},
- // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.S
+ // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZFCVTZS,
- fixedBits: 0x655ca000,
- args: Zn_H__PgM__Zd_S,
+ fixedBits: 0x645ec000,
+ args: Zn_H__PgZ__Zd_H,
+ },
+ // ZFCVTZS <Zn>.D, <Pg>/Z, <Zd>.D
+ {
+ goOp: AZFCVTZS,
+ fixedBits: 0x64dfc000,
+ args: Zn_D__PgZ__Zd_D,
},
// ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.S
{
@@ -2210,11 +2288,11 @@ var insts = [][]instEncoder{
fixedBits: 0x645fc000,
args: Zn_H__PgZ__Zd_D,
},
- // ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.S
+ // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZFCVTZS,
- fixedBits: 0x659ca000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x655aa000,
+ args: Zn_H__PgM__Zd_H,
},
// ZFCVTZS <Zn>.S, <Pg>/Z, <Zd>.S
{
@@ -2222,12 +2300,6 @@ var insts = [][]instEncoder{
fixedBits: 0x649f8000,
args: Zn_S__PgZ__Zd_S,
},
- // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.H
- {
- goOp: AZFCVTZS,
- fixedBits: 0x645ec000,
- args: Zn_H__PgZ__Zd_H,
- },
// ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.D
{
goOp: AZFCVTZS,
@@ -2261,17 +2333,17 @@ var insts = [][]instEncoder{
},
// ZFCVTZU
{
- // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.D
+ // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x64dfa000,
- args: Zn_S__PgZ__Zd_D,
+ fixedBits: 0x655da000,
+ args: Zn_H__PgM__Zd_S,
},
- // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.S
+ // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x659da000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x649fa000,
+ args: Zn_S__PgZ__Zd_S,
},
// ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.H
{
@@ -2279,12 +2351,6 @@ var insts = [][]instEncoder{
fixedBits: 0x645ee000,
args: Zn_H__PgZ__Zd_H,
},
- // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.H
- {
- goOp: AZFCVTZU,
- fixedBits: 0x655ba000,
- args: Zn_H__PgM__Zd_H,
- },
// ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZU,
@@ -2303,17 +2369,17 @@ var insts = [][]instEncoder{
fixedBits: 0x645fe000,
args: Zn_H__PgZ__Zd_D,
},
- // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.S
+ // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x655da000,
- args: Zn_H__PgM__Zd_S,
+ fixedBits: 0x659da000,
+ args: Zn_S__PgM__Zd_S,
},
- // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZFCVTZU,
- fixedBits: 0x649fa000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x655ba000,
+ args: Zn_H__PgM__Zd_H,
},
// ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.D
{
@@ -2321,6 +2387,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65dda000,
args: Zn_S__PgM__Zd_D,
},
+ // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.D
+ {
+ goOp: AZFCVTZU,
+ fixedBits: 0x64dfa000,
+ args: Zn_S__PgZ__Zd_D,
+ },
// ZFCVTZU <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
@@ -2366,11 +2438,17 @@ var insts = [][]instEncoder{
},
// ZFDOT
{
- // ZFDOT <Zm>.B, <Zn>.B, <Zda>.S
+ // ZFDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
goOp: AZFDOT,
- fixedBits: 0x64608400,
- args: Zm_B__Zn_B__Zda_S,
+ fixedBits: 0x64204400,
+ args: Zm_B_imm___Zn_B__Zda_H__3,
+ },
+ // ZFDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFDOT,
+ fixedBits: 0x64204000,
+ args: Zm_H_imm___Zn_H__Zda_S__3,
},
// ZFDOT <Zm>.H, <Zn>.H, <Zda>.S
{
@@ -2384,6 +2462,18 @@ var insts = [][]instEncoder{
fixedBits: 0x64208400,
args: Zm_B__Zn_B__Zda_H,
},
+ // ZFDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFDOT,
+ fixedBits: 0x64604400,
+ args: Zm_B_imm___Zn_B__Zda_S__2,
+ },
+ // ZFDOT <Zm>.B, <Zn>.B, <Zda>.S
+ {
+ goOp: AZFDOT,
+ fixedBits: 0x64608400,
+ args: Zm_B__Zn_B__Zda_S,
+ },
},
// ZFEXPA
{
@@ -2396,18 +2486,18 @@ var insts = [][]instEncoder{
},
// ZFLOGB
{
- // ZFLOGB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZFLOGB,
- fixedBits: 0x641e8000,
- args: Zn_T__PgZ__Zd_T__6,
- },
// ZFLOGB <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZFLOGB,
fixedBits: 0x6518a000,
args: Zn_T__PgM__Zd_T__6,
},
+ // ZFLOGB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFLOGB,
+ fixedBits: 0x641e8000,
+ args: Zn_T__PgZ__Zd_T__6,
+ },
},
// ZFMAD
{
@@ -2636,12 +2726,30 @@ var insts = [][]instEncoder{
},
// ZFMLA
{
+ // ZFMLA <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZFMLA,
+ fixedBits: 0x64e00000,
+ args: Zm_D_imm___Zn_D__Zda_D__2,
+ },
// ZFMLA <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
{
goOp: AZFMLA,
fixedBits: 0x65200000,
args: Zm_T__Zn_T__PgM__Zda_T__1,
},
+ // ZFMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZFMLA,
+ fixedBits: 0x64200000,
+ args: Zm_H_imm___Zn_H__Zda_H__3,
+ },
+ // ZFMLA <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZFMLA,
+ fixedBits: 0x64a00000,
+ args: Zm_S_imm___Zn_S__Zda_S__2,
+ },
},
// ZFMLALB
{
@@ -2657,6 +2765,18 @@ var insts = [][]instEncoder{
fixedBits: 0x64a08800,
args: Zm_B__Zn_B__Zda_H,
},
+ // ZFMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLALB,
+ fixedBits: 0x64a04000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
+ // ZFMLALB <Zm>.B[<imm>], <Zn>.B, <Zda>.H
+ {
+ goOp: AZFMLALB,
+ fixedBits: 0x64205000,
+ args: Zm_B_imm___Zn_B__Zda_H__1,
+ },
},
// ZFMLALLBB
{
@@ -2666,9 +2786,21 @@ var insts = [][]instEncoder{
fixedBits: 0x64208800,
args: Zm_B__Zn_B__Zda_S,
},
+ // ZFMLALLBB <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFMLALLBB,
+ fixedBits: 0x6420c000,
+ args: Zm_B_imm___Zn_B__Zda_S__1,
+ },
},
// ZFMLALLBT
{
+ // ZFMLALLBT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFMLALLBT,
+ fixedBits: 0x6460c000,
+ args: Zm_B_imm___Zn_B__Zda_S__1,
+ },
// ZFMLALLBT <Zm>.B, <Zn>.B, <Zda>.S
{
goOp: AZFMLALLBT,
@@ -2678,6 +2810,12 @@ var insts = [][]instEncoder{
},
// ZFMLALLTB
{
+ // ZFMLALLTB <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFMLALLTB,
+ fixedBits: 0x64a0c000,
+ args: Zm_B_imm___Zn_B__Zda_S__1,
+ },
// ZFMLALLTB <Zm>.B, <Zn>.B, <Zda>.S
{
goOp: AZFMLALLTB,
@@ -2693,9 +2831,27 @@ var insts = [][]instEncoder{
fixedBits: 0x6420b800,
args: Zm_B__Zn_B__Zda_S,
},
+ // ZFMLALLTT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFMLALLTT,
+ fixedBits: 0x64e0c000,
+ args: Zm_B_imm___Zn_B__Zda_S__1,
+ },
},
// ZFMLALT
{
+ // ZFMLALT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
+ {
+ goOp: AZFMLALT,
+ fixedBits: 0x64a05000,
+ args: Zm_B_imm___Zn_B__Zda_H__1,
+ },
+ // ZFMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLALT,
+ fixedBits: 0x64a04400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZFMLALT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZFMLALT,
@@ -2711,6 +2867,24 @@ var insts = [][]instEncoder{
},
// ZFMLS
{
+ // ZFMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZFMLS,
+ fixedBits: 0x64200400,
+ args: Zm_H_imm___Zn_H__Zda_H__3,
+ },
+ // ZFMLS <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZFMLS,
+ fixedBits: 0x64a00400,
+ args: Zm_S_imm___Zn_S__Zda_S__2,
+ },
+ // ZFMLS <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZFMLS,
+ fixedBits: 0x64e00400,
+ args: Zm_D_imm___Zn_D__Zda_D__2,
+ },
// ZFMLS <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
{
goOp: AZFMLS,
@@ -2720,6 +2894,12 @@ var insts = [][]instEncoder{
},
// ZFMLSLB
{
+ // ZFMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLSLB,
+ fixedBits: 0x64a06000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
// ZFMLSLB <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZFMLSLB,
@@ -2735,14 +2915,20 @@ var insts = [][]instEncoder{
fixedBits: 0x64a0a400,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZFMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLSLT,
+ fixedBits: 0x64a06400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
},
// ZFMMLA
{
- // ZFMMLA <Zm>.D, <Zn>.D, <Zda>.D
+ // ZFMMLA <Zm>.B, <Zn>.B, <Zda>.H
{
goOp: AZFMMLA,
- fixedBits: 0x64e0e400,
- args: Zm_D__Zn_D__Zda_D,
+ fixedBits: 0x6460e000,
+ args: Zm_B__Zn_B__Zda_H,
},
// ZFMMLA <Zm>.S, <Zn>.S, <Zda>.S
{
@@ -2750,11 +2936,11 @@ var insts = [][]instEncoder{
fixedBits: 0x64a0e400,
args: Zm_S__Zn_S__Zda_S,
},
- // ZFMMLA <Zm>.H, <Zn>.H, <Zda>.H
+ // ZFMMLA <Zm>.D, <Zn>.D, <Zda>.D
{
goOp: AZFMMLA,
- fixedBits: 0x64a0e000,
- args: Zm_H__Zn_H__Zda_H,
+ fixedBits: 0x64e0e400,
+ args: Zm_D__Zn_D__Zda_D,
},
// ZFMMLA <Zm>.H, <Zn>.H, <Zda>.S
{
@@ -2762,11 +2948,11 @@ var insts = [][]instEncoder{
fixedBits: 0x6420e400,
args: Zm_H__Zn_H__Zda_S,
},
- // ZFMMLA <Zm>.B, <Zn>.B, <Zda>.H
+ // ZFMMLA <Zm>.H, <Zn>.H, <Zda>.H
{
goOp: AZFMMLA,
- fixedBits: 0x6460e000,
- args: Zm_B__Zn_B__Zda_H,
+ fixedBits: 0x64a0e000,
+ args: Zm_H__Zn_H__Zda_H,
},
// ZFMMLA <Zm>.B, <Zn>.B, <Zda>.S
{
@@ -2786,18 +2972,36 @@ var insts = [][]instEncoder{
},
// ZFMUL
{
- // ZFMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
- {
- goOp: AZFMUL,
- fixedBits: 0x65000800,
- args: Zm_T__Zn_T__Zd_T__2,
- },
// ZFMUL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZFMUL,
fixedBits: 0x65028000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x64202000,
+ args: Zm_H_imm___Zn_H__Zd_H__3,
+ },
+ // ZFMUL <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x64a02000,
+ args: Zm_S_imm___Zn_S__Zd_S__2,
+ },
+ // ZFMUL <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x64e02000,
+ args: Zm_D_imm___Zn_D__Zd_D__2,
+ },
+ // ZFMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x65000800,
+ args: Zm_T__Zn_T__Zd_T__2,
+ },
},
// ZFMULX
{
@@ -2909,18 +3113,18 @@ var insts = [][]instEncoder{
},
// ZFRINT32Z
{
- // ZFRINT32Z <Zn>.<T>, <Pg>/M, <Zd>.<T>
- {
- goOp: AZFRINT32Z,
- fixedBits: 0x6510a000,
- args: Zn_T__PgM__Zd_T__3,
- },
// ZFRINT32Z <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
goOp: AZFRINT32Z,
fixedBits: 0x641c8000,
args: Zn_T__PgZ__Zd_T__3,
},
+ // ZFRINT32Z <Zn>.<T>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZFRINT32Z,
+ fixedBits: 0x6510a000,
+ args: Zn_T__PgM__Zd_T__3,
+ },
},
// ZFRINT64X
{
@@ -2954,18 +3158,18 @@ var insts = [][]instEncoder{
},
// ZFRINTA
{
- // ZFRINTA <Zn>.<T>, <Pg>/M, <Zd>.<T>
- {
- goOp: AZFRINTA,
- fixedBits: 0x6504a000,
- args: Zn_T__PgM__Zd_T__1,
- },
// ZFRINTA <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
goOp: AZFRINTA,
fixedBits: 0x64198000,
args: Zn_T__PgZ__Zd_T__1,
},
+ // ZFRINTA <Zn>.<T>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZFRINTA,
+ fixedBits: 0x6504a000,
+ args: Zn_T__PgM__Zd_T__1,
+ },
},
// ZFRINTI
{
@@ -2984,18 +3188,18 @@ var insts = [][]instEncoder{
},
// ZFRINTM
{
- // ZFRINTM <Zn>.<T>, <Pg>/M, <Zd>.<T>
- {
- goOp: AZFRINTM,
- fixedBits: 0x6502a000,
- args: Zn_T__PgM__Zd_T__1,
- },
// ZFRINTM <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
goOp: AZFRINTM,
fixedBits: 0x6418c000,
args: Zn_T__PgZ__Zd_T__1,
},
+ // ZFRINTM <Zn>.<T>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZFRINTM,
+ fixedBits: 0x6502a000,
+ args: Zn_T__PgM__Zd_T__1,
+ },
},
// ZFRINTN
{
@@ -3029,33 +3233,33 @@ var insts = [][]instEncoder{
},
// ZFRINTX
{
- // ZFRINTX <Zn>.<T>, <Pg>/M, <Zd>.<T>
- {
- goOp: AZFRINTX,
- fixedBits: 0x6506a000,
- args: Zn_T__PgM__Zd_T__1,
- },
// ZFRINTX <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
goOp: AZFRINTX,
fixedBits: 0x6419c000,
args: Zn_T__PgZ__Zd_T__1,
},
+ // ZFRINTX <Zn>.<T>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZFRINTX,
+ fixedBits: 0x6506a000,
+ args: Zn_T__PgM__Zd_T__1,
+ },
},
// ZFRINTZ
{
- // ZFRINTZ <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZFRINTZ,
- fixedBits: 0x6418e000,
- args: Zn_T__PgZ__Zd_T__1,
- },
// ZFRINTZ <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZFRINTZ,
fixedBits: 0x6503a000,
args: Zn_T__PgM__Zd_T__1,
},
+ // ZFRINTZ <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFRINTZ,
+ fixedBits: 0x6418e000,
+ args: Zn_T__PgZ__Zd_T__1,
+ },
},
// ZFRSQRTE
{
@@ -3437,6 +3641,24 @@ var insts = [][]instEncoder{
},
// ZMLA
{
+ // ZMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZMLA,
+ fixedBits: 0x44200800,
+ args: Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZMLA <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZMLA,
+ fixedBits: 0x44a00800,
+ args: Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZMLA <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZMLA,
+ fixedBits: 0x44e00800,
+ args: Zm_D_imm___Zn_D__Zda_D__1,
+ },
// ZMLA <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
{
goOp: AZMLA,
@@ -3461,6 +3683,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4006000,
args: Zm_T__Zn_T__PgM__Zda_T__2,
},
+ // ZMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZMLS,
+ fixedBits: 0x44200c00,
+ args: Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZMLS <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZMLS,
+ fixedBits: 0x44a00c00,
+ args: Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZMLS <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZMLS,
+ fixedBits: 0x44e00c00,
+ args: Zm_D_imm___Zn_D__Zda_D__1,
+ },
},
// ZMOVPRFX
{
@@ -3494,6 +3734,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4100000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZMUL <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ {
+ goOp: AZMUL,
+ fixedBits: 0x44a0f800,
+ args: Zm_S_imm___Zn_S__Zd_S__1,
+ },
+ // ZMUL <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZMUL,
+ fixedBits: 0x44e0f800,
+ args: Zm_D_imm___Zn_D__Zd_D__1,
+ },
+ // ZMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZMUL,
+ fixedBits: 0x4420f800,
+ args: Zm_H_imm___Zn_H__Zd_H__1,
+ },
// ZMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZMUL,
@@ -3536,18 +3794,18 @@ var insts = [][]instEncoder{
},
// ZNOT
{
- // ZNOT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZNOT,
- fixedBits: 0x40ea000,
- args: Zn_T__PgZ__Zd_T__2,
- },
// ZNOT <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZNOT,
fixedBits: 0x41ea000,
args: Zn_T__PgM__Zd_T__2,
},
+ // ZNOT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZNOT,
+ fixedBits: 0x40ea000,
+ args: Zn_T__PgZ__Zd_T__2,
+ },
},
// ZORQV
{
@@ -3560,18 +3818,18 @@ var insts = [][]instEncoder{
},
// ZORR
{
- // ZORR <Zm>.D, <Zn>.D, <Zd>.D
- {
- goOp: AZORR,
- fixedBits: 0x4603000,
- args: Zm_D__Zn_D__Zd_D,
- },
// ZORR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZORR,
fixedBits: 0x4180000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZORR <Zm>.D, <Zn>.D, <Zd>.D
+ {
+ goOp: AZORR,
+ fixedBits: 0x4603000,
+ args: Zm_D__Zn_D__Zd_D,
+ },
},
// ZORVB
{
@@ -3611,6 +3869,24 @@ var insts = [][]instEncoder{
},
// ZPMOV
{
+ // ZPMOV <Pn>.S, <Zd>{[<imm>]}
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x5693800,
+ args: Pn_S__Zd_imm_,
+ },
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.H
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x52c3800,
+ args: Zn_imm___Pd_H,
+ },
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.D
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x5a83800,
+ args: Zn_imm___Pd_D,
+ },
// ZPMOV <Zn>, <Pd>.B
{
goOp: AZPMOV,
@@ -3623,6 +3899,24 @@ var insts = [][]instEncoder{
fixedBits: 0x52b3800,
args: Pn_B__Zd,
},
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.S
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x5683800,
+ args: Zn_imm___Pd_S,
+ },
+ // ZPMOV <Pn>.H, <Zd>{[<imm>]}
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x52d3800,
+ args: Pn_H__Zd_imm_,
+ },
+ // ZPMOV <Pn>.D, <Zd>{[<imm>]}
+ {
+ goOp: AZPMOV,
+ fixedBits: 0x5a93800,
+ args: Pn_D__Zd_imm_,
+ },
},
// ZPMUL
{
@@ -3692,18 +3986,18 @@ var insts = [][]instEncoder{
},
// ZRBIT
{
- // ZRBIT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZRBIT,
- fixedBits: 0x527a000,
- args: Zn_T__PgZ__Zd_T__2,
- },
// ZRBIT <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZRBIT,
fixedBits: 0x5278000,
args: Zn_T__PgM__Zd_T__2,
},
+ // ZRBIT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZRBIT,
+ fixedBits: 0x527a000,
+ args: Zn_T__PgZ__Zd_T__2,
+ },
},
// ZREV
{
@@ -3731,18 +4025,18 @@ var insts = [][]instEncoder{
},
// ZREVD
{
- // ZREVD <Zn>.Q, <Pg>/Z, <Zd>.Q
- {
- goOp: AZREVD,
- fixedBits: 0x52ea000,
- args: Zn_Q__PgZ__Zd_Q,
- },
// ZREVD <Zn>.Q, <Pg>/M, <Zd>.Q
{
goOp: AZREVD,
fixedBits: 0x52e8000,
args: Zn_Q__PgM__Zd_Q,
},
+ // ZREVD <Zn>.Q, <Pg>/Z, <Zd>.Q
+ {
+ goOp: AZREVD,
+ fixedBits: 0x52ea000,
+ args: Zn_Q__PgZ__Zd_Q,
+ },
},
// ZREVH
{
@@ -3761,18 +4055,18 @@ var insts = [][]instEncoder{
},
// ZREVW
{
- // ZREVW <Zn>.D, <Pg>/M, <Zd>.D
- {
- goOp: AZREVW,
- fixedBits: 0x5e68000,
- args: Zn_D__PgM__Zd_D,
- },
// ZREVW <Zn>.D, <Pg>/Z, <Zd>.D
{
goOp: AZREVW,
fixedBits: 0x5e6a000,
args: Zn_D__PgZ__Zd_D,
},
+ // ZREVW <Zn>.D, <Pg>/M, <Zd>.D
+ {
+ goOp: AZREVW,
+ fixedBits: 0x5e68000,
+ args: Zn_D__PgM__Zd_D,
+ },
},
// ZRSUBHNB
{
@@ -3947,71 +4241,53 @@ var insts = [][]instEncoder{
},
// ZSCVTF
{
- // ZSCVTF <Zn>.H, <Pg>/Z, <Zd>.H
- {
- goOp: AZSCVTF,
- fixedBits: 0x645cc000,
- args: Zn_H__PgZ__Zd_H,
- },
- // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.D
- {
- goOp: AZSCVTF,
- fixedBits: 0x64dc8000,
- args: Zn_S__PgZ__Zd_D,
- },
// ZSCVTF <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
fixedBits: 0x6552a000,
args: Zn_H__PgM__Zd_H,
},
- // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.D
- {
- goOp: AZSCVTF,
- fixedBits: 0x64ddc000,
- args: Zn_D__PgZ__Zd_D,
- },
// ZSCVTF <Zn>.S, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
fixedBits: 0x6554a000,
args: Zn_S__PgM__Zd_H,
},
- // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.H
+ // ZSCVTF <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZSCVTF,
- fixedBits: 0x645d8000,
- args: Zn_S__PgZ__Zd_H,
+ fixedBits: 0x650c3000,
+ args: Zn_Tb__Zd_T__1,
},
- // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.S
+ // ZSCVTF <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x6594a000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x645cc000,
+ args: Zn_H__PgZ__Zd_H,
},
- // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.D
{
goOp: AZSCVTF,
- fixedBits: 0x649d8000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x64ddc000,
+ args: Zn_D__PgZ__Zd_D,
},
- // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.D
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.D
{
goOp: AZSCVTF,
- fixedBits: 0x65d0a000,
- args: Zn_S__PgM__Zd_D,
+ fixedBits: 0x65d6a000,
+ args: Zn_D__PgM__Zd_D,
},
- // ZSCVTF <Zn>.<Tb>, <Zd>.<T>
+ // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.S
{
goOp: AZSCVTF,
- fixedBits: 0x650c3000,
- args: Zn_Tb__Zd_T__1,
+ fixedBits: 0x64dd8000,
+ args: Zn_D__PgZ__Zd_S,
},
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.H
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZSCVTF,
- fixedBits: 0x6556a000,
- args: Zn_D__PgM__Zd_H,
+ fixedBits: 0x65d4a000,
+ args: Zn_D__PgM__Zd_S,
},
// ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.H
{
@@ -4019,23 +4295,41 @@ var insts = [][]instEncoder{
fixedBits: 0x645dc000,
args: Zn_D__PgZ__Zd_H,
},
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.S
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x65d4a000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x6556a000,
+ args: Zn_D__PgM__Zd_H,
},
- // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.S
+ // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZSCVTF,
- fixedBits: 0x64dd8000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x64dc8000,
+ args: Zn_S__PgZ__Zd_D,
},
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.D
+ // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.D
{
goOp: AZSCVTF,
- fixedBits: 0x65d6a000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x65d0a000,
+ args: Zn_S__PgM__Zd_D,
+ },
+ // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x649d8000,
+ args: Zn_S__PgZ__Zd_S,
+ },
+ // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.S
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x6594a000,
+ args: Zn_S__PgM__Zd_S,
+ },
+ // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.H
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x645d8000,
+ args: Zn_S__PgZ__Zd_H,
},
},
// ZSCVTFLT
@@ -4067,24 +4361,48 @@ var insts = [][]instEncoder{
},
// ZSDOT
{
- // ZSDOT <Zm>.H, <Zn>.H, <Zda>.S
- {
- goOp: AZSDOT,
- fixedBits: 0x4400c800,
- args: Zm_H__Zn_H__Zda_S,
- },
// ZSDOT <Zm>.B, <Zn>.B, <Zda>.H
{
goOp: AZSDOT,
fixedBits: 0x44400000,
args: Zm_B__Zn_B__Zda_H,
},
+ // ZSDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x44200000,
+ args: Zm_B_imm___Zn_B__Zda_H__2,
+ },
+ // ZSDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x4480c800,
+ args: Zm_H_imm___Zn_H__Zda_S__4,
+ },
// ZSDOT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSDOT,
fixedBits: 0x44800000,
args: Zm_Tb__Zn_Tb__Zda_T__2,
},
+ // ZSDOT <Zm>.H, <Zn>.H, <Zda>.S
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x4400c800,
+ args: Zm_H__Zn_H__Zda_S,
+ },
+ // ZSDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x44a00000,
+ args: Zm_B_imm___Zn_B__Zda_S__3,
+ },
+ // ZSDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.D
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x44e00000,
+ args: Zm_H_imm___Zn_H__Zda_D,
+ },
},
// ZSEL
{
@@ -4268,6 +4586,18 @@ var insts = [][]instEncoder{
},
// ZSMLALB
{
+ // ZSMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSMLALB,
+ fixedBits: 0x44e08000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
+ // ZSMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSMLALB,
+ fixedBits: 0x44a08000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
// ZSMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSMLALB,
@@ -4283,6 +4613,18 @@ var insts = [][]instEncoder{
fixedBits: 0x44004400,
args: Zm_Tb__Zn_Tb__Zda_T__1,
},
+ // ZSMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSMLALT,
+ fixedBits: 0x44a08400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSMLALT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSMLALT,
+ fixedBits: 0x44e08400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
},
// ZSMLSLB
{
@@ -4292,9 +4634,33 @@ var insts = [][]instEncoder{
fixedBits: 0x44005000,
args: Zm_Tb__Zn_Tb__Zda_T__1,
},
+ // ZSMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSMLSLB,
+ fixedBits: 0x44a0a000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSMLSLB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSMLSLB,
+ fixedBits: 0x44e0a000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
},
// ZSMLSLT
{
+ // ZSMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSMLSLT,
+ fixedBits: 0x44a0a400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSMLSLT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSMLSLT,
+ fixedBits: 0x44e0a400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZSMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSMLSLT,
@@ -4334,9 +4700,33 @@ var insts = [][]instEncoder{
fixedBits: 0x45007000,
args: Zm_Tb__Zn_Tb__Zd_T__1,
},
+ // ZSMULLB <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZSMULLB,
+ fixedBits: 0x44a0c000,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
+ // ZSMULLB <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZSMULLB,
+ fixedBits: 0x44e0c000,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
},
// ZSMULLT
{
+ // ZSMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZSMULLT,
+ fixedBits: 0x44a0c400,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
+ // ZSMULLT <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZSMULLT,
+ fixedBits: 0x44e0c400,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
// ZSMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZSMULLT,
@@ -4355,18 +4745,18 @@ var insts = [][]instEncoder{
},
// ZSQABS
{
- // ZSQABS <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZSQABS,
- fixedBits: 0x440aa000,
- args: Zn_T__PgZ__Zd_T__2,
- },
// ZSQABS <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZSQABS,
fixedBits: 0x4408a000,
args: Zn_T__PgM__Zd_T__2,
},
+ // ZSQABS <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZSQABS,
+ fixedBits: 0x440aa000,
+ args: Zn_T__PgZ__Zd_T__2,
+ },
},
// ZSQADD
{
@@ -4394,6 +4784,18 @@ var insts = [][]instEncoder{
},
// ZSQDMLALB
{
+ // ZSQDMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSQDMLALB,
+ fixedBits: 0x44e02000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
+ // ZSQDMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSQDMLALB,
+ fixedBits: 0x44a02000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
// ZSQDMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSQDMLALB,
@@ -4412,6 +4814,18 @@ var insts = [][]instEncoder{
},
// ZSQDMLALT
{
+ // ZSQDMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSQDMLALT,
+ fixedBits: 0x44a02400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSQDMLALT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSQDMLALT,
+ fixedBits: 0x44e02400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZSQDMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSQDMLALT,
@@ -4421,6 +4835,18 @@ var insts = [][]instEncoder{
},
// ZSQDMLSLB
{
+ // ZSQDMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSQDMLSLB,
+ fixedBits: 0x44a03000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSQDMLSLB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSQDMLSLB,
+ fixedBits: 0x44e03000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZSQDMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSQDMLSLB,
@@ -4445,15 +4871,45 @@ var insts = [][]instEncoder{
fixedBits: 0x44006c00,
args: Zm_Tb__Zn_Tb__Zda_T__1,
},
+ // ZSQDMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSQDMLSLT,
+ fixedBits: 0x44a03400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZSQDMLSLT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZSQDMLSLT,
+ fixedBits: 0x44e03400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
},
// ZSQDMULH
{
+ // ZSQDMULH <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZSQDMULH,
+ fixedBits: 0x4420f000,
+ args: Zm_H_imm___Zn_H__Zd_H__1,
+ },
// ZSQDMULH <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZSQDMULH,
fixedBits: 0x4207000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSQDMULH <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ {
+ goOp: AZSQDMULH,
+ fixedBits: 0x44a0f000,
+ args: Zm_S_imm___Zn_S__Zd_S__1,
+ },
+ // ZSQDMULH <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZSQDMULH,
+ fixedBits: 0x44e0f000,
+ args: Zm_D_imm___Zn_D__Zd_D__1,
+ },
},
// ZSQDMULLB
{
@@ -4463,9 +4919,33 @@ var insts = [][]instEncoder{
fixedBits: 0x45006000,
args: Zm_Tb__Zn_Tb__Zd_T__1,
},
+ // ZSQDMULLB <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZSQDMULLB,
+ fixedBits: 0x44e0e000,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
+ // ZSQDMULLB <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZSQDMULLB,
+ fixedBits: 0x44a0e000,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
},
// ZSQDMULLT
{
+ // ZSQDMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZSQDMULLT,
+ fixedBits: 0x44a0e400,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
+ // ZSQDMULLT <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZSQDMULLT,
+ fixedBits: 0x44e0e400,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
// ZSQDMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZSQDMULLT,
@@ -4499,6 +4979,24 @@ var insts = [][]instEncoder{
},
// ZSQRDMLAH
{
+ // ZSQRDMLAH <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZSQRDMLAH,
+ fixedBits: 0x44a01000,
+ args: Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZSQRDMLAH <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZSQRDMLAH,
+ fixedBits: 0x44201000,
+ args: Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZSQRDMLAH <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZSQRDMLAH,
+ fixedBits: 0x44e01000,
+ args: Zm_D_imm___Zn_D__Zda_D__1,
+ },
// ZSQRDMLAH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
{
goOp: AZSQRDMLAH,
@@ -4508,6 +5006,24 @@ var insts = [][]instEncoder{
},
// ZSQRDMLSH
{
+ // ZSQRDMLSH <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZSQRDMLSH,
+ fixedBits: 0x44201400,
+ args: Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZSQRDMLSH <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZSQRDMLSH,
+ fixedBits: 0x44a01400,
+ args: Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZSQRDMLSH <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZSQRDMLSH,
+ fixedBits: 0x44e01400,
+ args: Zm_D_imm___Zn_D__Zda_D__1,
+ },
// ZSQRDMLSH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
{
goOp: AZSQRDMLSH,
@@ -4523,6 +5039,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4207400,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSQRDMULH <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZSQRDMULH,
+ fixedBits: 0x4420f400,
+ args: Zm_H_imm___Zn_H__Zd_H__1,
+ },
+ // ZSQRDMULH <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ {
+ goOp: AZSQRDMULH,
+ fixedBits: 0x44a0f400,
+ args: Zm_S_imm___Zn_S__Zd_S__1,
+ },
+ // ZSQRDMULH <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZSQRDMULH,
+ fixedBits: 0x44e0f400,
+ args: Zm_D_imm___Zn_D__Zd_D__1,
+ },
},
// ZSQRSHL
{
@@ -4703,18 +5237,18 @@ var insts = [][]instEncoder{
},
// ZSUB
{
- // ZSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZSUB,
- fixedBits: 0x4010000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
- },
// ZSUB <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZSUB,
fixedBits: 0x4200400,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZSUB,
+ fixedBits: 0x4010000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZSUBHNB
{
@@ -4767,6 +5301,15 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSUDOT
+ {
+ // ZSUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZSUDOT,
+ fixedBits: 0x44a01c00,
+ args: Zm_B_imm___Zn_B__Zda_S__2,
+ },
+ },
// ZSUNPKHI
{
// ZSUNPKHI <Zn>.<Tb>, <Zd>.<T>
@@ -4859,18 +5402,18 @@ var insts = [][]instEncoder{
},
// ZTRN1
{
- // ZTRN1 <Zm>.Q, <Zn>.Q, <Zd>.Q
- {
- goOp: AZTRN1,
- fixedBits: 0x5a01800,
- args: Zm_Q__Zn_Q__Zd_Q,
- },
// ZTRN1 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZTRN1,
fixedBits: 0x5207000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZTRN1 <Zm>.Q, <Zn>.Q, <Zd>.Q
+ {
+ goOp: AZTRN1,
+ fixedBits: 0x5a01800,
+ args: Zm_Q__Zn_Q__Zd_Q,
+ },
},
// ZTRN2
{
@@ -5015,59 +5558,47 @@ var insts = [][]instEncoder{
},
// ZUCVTF
{
- // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.H
- {
- goOp: AZUCVTF,
- fixedBits: 0x645de000,
- args: Zn_D__PgZ__Zd_H,
- },
// ZUCVTF <Zn>.D, <Pg>/M, <Zd>.H
{
goOp: AZUCVTF,
fixedBits: 0x6557a000,
args: Zn_D__PgM__Zd_H,
},
- // ZUCVTF <Zn>.<Tb>, <Zd>.<T>
- {
- goOp: AZUCVTF,
- fixedBits: 0x650c3400,
- args: Zn_Tb__Zd_T__1,
- },
- // ZUCVTF <Zn>.H, <Pg>/M, <Zd>.H
+ // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x6553a000,
- args: Zn_H__PgM__Zd_H,
+ fixedBits: 0x649da000,
+ args: Zn_S__PgZ__Zd_S,
},
- // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.D
+ // ZUCVTF <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x64dde000,
- args: Zn_D__PgZ__Zd_D,
+ fixedBits: 0x645ce000,
+ args: Zn_H__PgZ__Zd_H,
},
- // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.D
+ // ZUCVTF <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x65d7a000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x6553a000,
+ args: Zn_H__PgM__Zd_H,
},
- // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.S
+ // ZUCVTF <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZUCVTF,
- fixedBits: 0x64dda000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x650c3400,
+ args: Zn_Tb__Zd_T__1,
},
- // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.S
+ // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x65d5a000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x645da000,
+ args: Zn_S__PgZ__Zd_H,
},
- // ZUCVTF <Zn>.H, <Pg>/Z, <Zd>.H
+ // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x645ce000,
- args: Zn_H__PgZ__Zd_H,
+ fixedBits: 0x6595a000,
+ args: Zn_S__PgM__Zd_S,
},
// ZUCVTF <Zn>.S, <Pg>/M, <Zd>.H
{
@@ -5075,35 +5606,47 @@ var insts = [][]instEncoder{
fixedBits: 0x6555a000,
args: Zn_S__PgM__Zd_H,
},
+ // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.D
+ {
+ goOp: AZUCVTF,
+ fixedBits: 0x65d1a000,
+ args: Zn_S__PgM__Zd_D,
+ },
// ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZUCVTF,
fixedBits: 0x64dca000,
args: Zn_S__PgZ__Zd_D,
},
- // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.D
+ // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.D
{
goOp: AZUCVTF,
- fixedBits: 0x65d1a000,
- args: Zn_S__PgM__Zd_D,
+ fixedBits: 0x64dde000,
+ args: Zn_D__PgZ__Zd_D,
},
- // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x649da000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x645de000,
+ args: Zn_D__PgZ__Zd_H,
},
- // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.S
+ // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x6595a000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x65d5a000,
+ args: Zn_D__PgM__Zd_S,
},
- // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.H
+ // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x645da000,
- args: Zn_S__PgZ__Zd_H,
+ fixedBits: 0x64dda000,
+ args: Zn_D__PgZ__Zd_S,
+ },
+ // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.D
+ {
+ goOp: AZUCVTF,
+ fixedBits: 0x65d7a000,
+ args: Zn_D__PgM__Zd_D,
},
},
// ZUCVTFLT
@@ -5135,11 +5678,17 @@ var insts = [][]instEncoder{
},
// ZUDOT
{
- // ZUDOT <Zm>.H, <Zn>.H, <Zda>.S
+ // ZUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
goOp: AZUDOT,
- fixedBits: 0x4400cc00,
- args: Zm_H__Zn_H__Zda_S,
+ fixedBits: 0x44200400,
+ args: Zm_B_imm___Zn_B__Zda_H__2,
+ },
+ // ZUDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x4480cc00,
+ args: Zm_H_imm___Zn_H__Zda_S__4,
},
// ZUDOT <Zm>.B, <Zn>.B, <Zda>.H
{
@@ -5147,6 +5696,24 @@ var insts = [][]instEncoder{
fixedBits: 0x44400400,
args: Zm_B__Zn_B__Zda_H,
},
+ // ZUDOT <Zm>.H, <Zn>.H, <Zda>.S
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x4400cc00,
+ args: Zm_H__Zn_H__Zda_S,
+ },
+ // ZUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x44a00400,
+ args: Zm_B_imm___Zn_B__Zda_S__3,
+ },
+ // ZUDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.D
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x44e00400,
+ args: Zm_H_imm___Zn_H__Zda_D,
+ },
// ZUDOT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZUDOT,
@@ -5315,9 +5882,33 @@ var insts = [][]instEncoder{
fixedBits: 0x44004800,
args: Zm_Tb__Zn_Tb__Zda_T__1,
},
+ // ZUMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZUMLALB,
+ fixedBits: 0x44a09000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZUMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZUMLALB,
+ fixedBits: 0x44e09000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
},
// ZUMLALT
{
+ // ZUMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZUMLALT,
+ fixedBits: 0x44a09400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZUMLALT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZUMLALT,
+ fixedBits: 0x44e09400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZUMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZUMLALT,
@@ -5327,6 +5918,18 @@ var insts = [][]instEncoder{
},
// ZUMLSLB
{
+ // ZUMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZUMLSLB,
+ fixedBits: 0x44a0b000,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZUMLSLB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZUMLSLB,
+ fixedBits: 0x44e0b000,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZUMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZUMLSLB,
@@ -5336,6 +5939,18 @@ var insts = [][]instEncoder{
},
// ZUMLSLT
{
+ // ZUMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZUMLSLT,
+ fixedBits: 0x44a0b400,
+ args: Zm_H_imm___Zn_H__Zda_S__1,
+ },
+ // ZUMLSLT <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ {
+ goOp: AZUMLSLT,
+ fixedBits: 0x44e0b400,
+ args: Zm_S_imm___Zn_S__Zda_D,
+ },
// ZUMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZUMLSLT,
@@ -5369,6 +5984,18 @@ var insts = [][]instEncoder{
},
// ZUMULLB
{
+ // ZUMULLB <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZUMULLB,
+ fixedBits: 0x44a0d000,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
+ // ZUMULLB <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZUMULLB,
+ fixedBits: 0x44e0d000,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
// ZUMULLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZUMULLB,
@@ -5378,6 +6005,18 @@ var insts = [][]instEncoder{
},
// ZUMULLT
{
+ // ZUMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
+ {
+ goOp: AZUMULLT,
+ fixedBits: 0x44a0d400,
+ args: Zm_H_imm___Zn_H__Zd_S,
+ },
+ // ZUMULLT <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZUMULLT,
+ fixedBits: 0x44e0d400,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
// ZUMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZUMULLT,
@@ -5387,18 +6026,18 @@ var insts = [][]instEncoder{
},
// ZUQADD
{
- // ZUQADD <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
- {
- goOp: AZUQADD,
- fixedBits: 0x4201400,
- args: Zm_T__Zn_T__Zd_T__1,
- },
// ZUQADD <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZUQADD,
fixedBits: 0x44198000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZUQADD <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZUQADD,
+ fixedBits: 0x4201400,
+ args: Zm_T__Zn_T__Zd_T__1,
+ },
},
// ZUQDECP
{
@@ -5456,18 +6095,18 @@ var insts = [][]instEncoder{
},
// ZUQSUB
{
- // ZUQSUB <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
- {
- goOp: AZUQSUB,
- fixedBits: 0x4201c00,
- args: Zm_T__Zn_T__Zd_T__1,
- },
// ZUQSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZUQSUB,
fixedBits: 0x441b8000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZUQSUB <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZUQSUB,
+ fixedBits: 0x4201c00,
+ args: Zm_T__Zn_T__Zd_T__1,
+ },
},
// ZUQSUBR
{
@@ -5498,18 +6137,18 @@ var insts = [][]instEncoder{
},
// ZURECPE
{
- // ZURECPE <Zn>.S, <Pg>/Z, <Zd>.S
- {
- goOp: AZURECPE,
- fixedBits: 0x4482a000,
- args: Zn_S__PgZ__Zd_S,
- },
// ZURECPE <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZURECPE,
fixedBits: 0x4480a000,
args: Zn_S__PgM__Zd_S,
},
+ // ZURECPE <Zn>.S, <Pg>/Z, <Zd>.S
+ {
+ goOp: AZURECPE,
+ fixedBits: 0x4482a000,
+ args: Zn_S__PgZ__Zd_S,
+ },
},
// ZURHADD
{
@@ -5540,18 +6179,18 @@ var insts = [][]instEncoder{
},
// ZURSQRTE
{
- // ZURSQRTE <Zn>.S, <Pg>/M, <Zd>.S
- {
- goOp: AZURSQRTE,
- fixedBits: 0x4481a000,
- args: Zn_S__PgM__Zd_S,
- },
// ZURSQRTE <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZURSQRTE,
fixedBits: 0x4483a000,
args: Zn_S__PgZ__Zd_S,
},
+ // ZURSQRTE <Zn>.S, <Pg>/M, <Zd>.S
+ {
+ goOp: AZURSQRTE,
+ fixedBits: 0x4481a000,
+ args: Zn_S__PgM__Zd_S,
+ },
},
// ZUSDOT
{
@@ -5561,6 +6200,12 @@ var insts = [][]instEncoder{
fixedBits: 0x44807800,
args: Zm_B__Zn_B__Zda_S,
},
+ // ZUSDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZUSDOT,
+ fixedBits: 0x44a01800,
+ args: Zm_B_imm___Zn_B__Zda_S__2,
+ },
},
// ZUSMMLA
{
@@ -5636,18 +6281,18 @@ var insts = [][]instEncoder{
},
// ZUXTB
{
- // ZUXTB <Zn>.<T>, <Pg>/M, <Zd>.<T>
- {
- goOp: AZUXTB,
- fixedBits: 0x411a000,
- args: Zn_T__PgM__Zd_T__4,
- },
// ZUXTB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
goOp: AZUXTB,
fixedBits: 0x401a000,
args: Zn_T__PgZ__Zd_T__4,
},
+ // ZUXTB <Zn>.<T>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZUXTB,
+ fixedBits: 0x411a000,
+ args: Zn_T__PgM__Zd_T__4,
+ },
},
// ZUXTH
{
@@ -5777,6 +6422,166 @@ var insts = [][]instEncoder{
},
}
+var a_ARNGIDX_Zm1619_16Bit32Bit_ArngHCheck_I3hI3l_1923_16Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_16Bit32Bit, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI3hI3l_1923_16Bit, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm1619_16Bit32Bit_ArngSCheck_I2_1921_32Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_16Bit32Bit, enc_Zm},
+ {encodeArngSCheck, enc_NIL},
+ {encodeI2_1921_32Bit, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm1619_32Bit_ArngHCheck_I3hI3l_1119_32Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_32Bit, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI3hI3l_1119_32Bit, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm1619_8To32Bit_ArngBCheck_I2_1921_8To32Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_8To32Bit, enc_Zm},
+ {encodeArngBCheck, enc_NIL},
+ {encodeI2_1921_8To32Bit, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngHCheck_I3hI3l_1923_HalfPrecision = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_HalfSinglePrecision, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI3hI3l_1923_HalfPrecision, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngSCheck_I2_1921_SinglePrecision = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1619_HalfSinglePrecision, enc_Zm},
+ {encodeArngSCheck, enc_NIL},
+ {encodeI2_1921_SinglePrecision, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm1620_16To64Bit_ArngHCheck_I1_2021_16To64Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1620_16To64Bit, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI1_2021_16To64Bit, enc_i1},
+ },
+}
+
+var a_ARNGIDX_Zm1620_64Bit_ArngDCheck_I1_2021_64Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1620_64Bit, enc_Zm},
+ {encodeArngDCheck, enc_NIL},
+ {encodeI1_2021_64Bit, enc_i1},
+ },
+}
+
+var a_ARNGIDX_Zm1620_64Bit_ArngSCheck_I2hI2l_1120_64Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1620_64Bit, enc_Zm},
+ {encodeArngSCheck, enc_NIL},
+ {encodeI2hI2l_1120_64Bit, enc_i2h_i2l},
+ },
+}
+
+var a_ARNGIDX_Zm1620_DoublePrecision_ArngDCheck_I1_2021_DoublePrecision = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm1620_DoublePrecision, enc_Zm},
+ {encodeArngDCheck, enc_NIL},
+ {encodeI1_2021_DoublePrecision, enc_i1},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I2_1921_8BitGroup = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngBCheck, enc_NIL},
+ {encodeI2_1921_8BitGroup, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1119_Pair8Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngBCheck, enc_NIL},
+ {encodeI3hI3l_1119_Pair8Bit, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1923_8To16Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngBCheck, enc_NIL},
+ {encodeI3hI3l_1923_8To16Bit, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I4hI4l_1019 = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngBCheck, enc_NIL},
+ {encodeI4hI4l_1019, enc_i4h_i4l},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_16To32Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI2_1921_16To32Bit, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_Pair16Bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI2_1921_Pair16Bit, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1119 = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI3hI3l_1119, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922 = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI3hI3l_1922, enc_i3h_i3l},
+ },
+}
+
+var a_ARNGIDX_Zn510Src_Tsz_1620_SizeSpecifier4_I1Tsz_Delegate = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeTsz_1620_SizeSpecifier4, enc_tsz},
+ {encodeI1Tsz_Delegate, enc_i1_tsz},
+ },
+}
+
+var a_ARNGIDX_Zn510Src_Tsz_1621_SizeSpecifier5_Imm2Tsz_Delegate = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeTsz_1621_SizeSpecifier5, enc_tsz},
+ {encodeImm2Tsz_Delegate, enc_imm2_tsz},
+ },
+}
+
var a_ARNG_PNd_SizeBHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodePNd, enc_PNd},
@@ -5791,6 +6596,13 @@ var a_ARNG_Pd_ArngBCheck = operand{
},
}
+var a_ARNG_Pd_ArngDCheck = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodePd, enc_Pd},
+ {encodeArngDCheck, enc_NIL},
+ },
+}
+
var a_ARNG_Pd_ArngHCheck = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodePd, enc_Pd},
@@ -5798,6 +6610,13 @@ var a_ARNG_Pd_ArngHCheck = operand{
},
}
+var a_ARNG_Pd_ArngSCheck = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodePd, enc_Pd},
+ {encodeArngSCheck, enc_NIL},
+ },
+}
+
var a_ARNG_Pd_Size0BH2223 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodePd, enc_Pd},
@@ -5896,6 +6715,27 @@ var a_ARNG_Pn59v2_ArngBCheck = operand{
},
}
+var a_ARNG_Pn59v2_ArngDCheck = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodePn59v2, enc_Pn},
+ {encodeArngDCheck, enc_NIL},
+ },
+}
+
+var a_ARNG_Pn59v2_ArngHCheck = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodePn59v2, enc_Pn},
+ {encodeArngHCheck, enc_NIL},
+ },
+}
+
+var a_ARNG_Pn59v2_ArngSCheck = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodePn59v2, enc_Pn},
+ {encodeArngSCheck, enc_NIL},
+ },
+}
+
var a_ARNG_Pn59v2_SizeBHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodePn59v2, enc_Pn},
@@ -6078,6 +6918,20 @@ var a_ARNG_Zd_SzWordDoubleword = operand{
},
}
+var a_ARNG_Zd_Tsz_1620_SizeSpecifier4 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeTsz_1620_SizeSpecifier4, enc_tsz},
+ },
+}
+
+var a_ARNG_Zd_Tsz_1621_SizeSpecifier5 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeTsz_1621_SizeSpecifier5, enc_tsz},
+ },
+}
+
var a_ARNG_Zd_TszhTszlBHS = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZd, enc_Zd},
@@ -6666,6 +7520,14 @@ var a_ARNG_Zn510_SzSD2223 = operand{
},
}
+var a_PREGIDX_PnN_58_Noop_Imm2_810 = operand{
+ class: AC_PREGIDX, elemEncoders: []elemEncoder{
+ {encodePnN_58, enc_PNn},
+ {encodeNoop, enc_NIL},
+ {encodeImm2_810, enc_imm2},
+ },
+}
+
var a_PREGZM_Pg1013_MergePredCheck = operand{
class: AC_PREGZM, elemEncoders: []elemEncoder{
{encodePg1013, enc_Pg},
@@ -6862,6 +7724,54 @@ var a_VREG_Noop_Vn510 = operand{
},
}
+var a_ZREGIDX_Zd_Noop_I1_1718_Halfword = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeNoop, enc_NIL},
+ {encodeI1_1718_Halfword, enc_i1},
+ },
+}
+
+var a_ZREGIDX_Zd_Noop_I2_1719_Word = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeNoop, enc_NIL},
+ {encodeI2_1719_Word, enc_i2},
+ },
+}
+
+var a_ZREGIDX_Zd_Noop_I3hI3l_1722_Doubleword = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeNoop, enc_NIL},
+ {encodeI3hI3l_1722_Doubleword, enc_i3h_i3l},
+ },
+}
+
+var a_ZREGIDX_Zn510Src_Noop_I1_1718_Halfword = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeNoop, enc_NIL},
+ {encodeI1_1718_Halfword, enc_i1},
+ },
+}
+
+var a_ZREGIDX_Zn510Src_Noop_I2_1719_Word = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeNoop, enc_NIL},
+ {encodeI2_1719_Word, enc_i2},
+ },
+}
+
+var a_ZREGIDX_Zn510Src_Noop_I3hI3l_1722_Doubleword = operand{
+ class: AC_ZREGIDX, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeNoop, enc_NIL},
+ {encodeI3hI3l_1722_Doubleword, enc_i3h_i3l},
+ },
+}
+
var a_ZREG_Zd_Noop = operand{
class: AC_ZREG, elemEncoders: []elemEncoder{
{encodeZd, enc_Zd},
@@ -6880,6 +7790,11 @@ var PNd_T = []operand{
a_ARNG_PNd_SizeBHSD2224,
}
+var PNn_imm___Pd_T = []operand{
+ a_PREGIDX_PnN_58_Noop_Imm2_810,
+ a_ARNG_Pd_SizeBHSD2224,
+}
+
var Pd_B = []operand{
a_ARNG_Pd_ArngBCheck,
}
@@ -6974,6 +7889,21 @@ var Pn_B__Zd = []operand{
a_ZREG_Zd_Noop,
}
+var Pn_D__Zd_imm_ = []operand{
+ a_ARNG_Pn59v2_ArngDCheck,
+ a_ZREGIDX_Zd_Noop_I3hI3l_1722_Doubleword,
+}
+
+var Pn_H__Zd_imm_ = []operand{
+ a_ARNG_Pn59v2_ArngHCheck,
+ a_ZREGIDX_Zd_Noop_I1_1718_Halfword,
+}
+
+var Pn_S__Zd_imm_ = []operand{
+ a_ARNG_Pn59v2_ArngSCheck,
+ a_ZREGIDX_Zd_Noop_I2_1719_Word,
+}
+
var Pn_T__Pd_T = []operand{
a_ARNG_Pn59v2_SizeBHSD2224,
a_ARNG_Pd_SizeBHSD2224,
@@ -7097,6 +8027,42 @@ var Zm_B__Zn_B__Zda_S = []operand{
a_ARNG_Zda3RdSrcDst_ArngSCheck,
}
+var Zm_B_imm___Zn_B__Zda_H__1 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I4hI4l_1019,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_B_imm___Zn_B__Zda_H__2 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1923_8To16Bit,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_B_imm___Zn_B__Zda_H__3 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1119_Pair8Bit,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_B_imm___Zn_B__Zda_S__1 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I4hI4l_1019,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_B_imm___Zn_B__Zda_S__2 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I2_1921_8BitGroup,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_B_imm___Zn_B__Zda_S__3 = []operand{
+ a_ARNGIDX_Zm1619_8To32Bit_ArngBCheck_I2_1921_8To32Bit,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
var Zm_D__Zdn_D__PgM__Zdn_D = []operand{
a_ARNG_Zm510V1_ArngDCheck,
a_ARNG_ZdnDest_ArngDCheck,
@@ -7142,6 +8108,30 @@ var Zm_D__Zn_T__Zd_T = []operand{
a_ARNG_Zd_SizeBHS2224,
}
+var Zm_D_imm___Zn_D__Zd_D__1 = []operand{
+ a_ARNGIDX_Zm1620_64Bit_ArngDCheck_I1_2021_64Bit,
+ a_ARNG_Zn510_ArngDCheck,
+ a_ARNG_Zd_ArngDCheck,
+}
+
+var Zm_D_imm___Zn_D__Zd_D__2 = []operand{
+ a_ARNGIDX_Zm1620_DoublePrecision_ArngDCheck_I1_2021_DoublePrecision,
+ a_ARNG_Zn510_ArngDCheck,
+ a_ARNG_Zd_ArngDCheck,
+}
+
+var Zm_D_imm___Zn_D__Zda_D__1 = []operand{
+ a_ARNGIDX_Zm1620_64Bit_ArngDCheck_I1_2021_64Bit,
+ a_ARNG_Zn510_ArngDCheck,
+ a_ARNG_Zda3RdSrcDst_ArngDCheck,
+}
+
+var Zm_D_imm___Zn_D__Zda_D__2 = []operand{
+ a_ARNGIDX_Zm1620_DoublePrecision_ArngDCheck_I1_2021_DoublePrecision,
+ a_ARNG_Zn510_ArngDCheck,
+ a_ARNG_Zda3RdSrcDst_ArngDCheck,
+}
+
var Zm_H__Zdn_H__PgM__Zdn_H = []operand{
a_ARNG_Zm510V1_ArngHCheck,
a_ARNG_ZdnDest_ArngHCheck,
@@ -7174,6 +8164,78 @@ var Zm_H__Zn_H__Zda_S = []operand{
a_ARNG_Zda3RdSrcDst_ArngSCheck,
}
+var Zm_H_imm___Zn_H__Zd_H__1 = []operand{
+ a_ARNGIDX_Zm1619_16Bit32Bit_ArngHCheck_I3hI3l_1923_16Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zd_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zd_H__2 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zd_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zd_H__3 = []operand{
+ a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngHCheck_I3hI3l_1923_HalfPrecision,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zd_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zd_S = []operand{
+ a_ARNGIDX_Zm1619_32Bit_ArngHCheck_I3hI3l_1119_32Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zd_ArngSCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_D = []operand{
+ a_ARNGIDX_Zm1620_16To64Bit_ArngHCheck_I1_2021_16To64Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngDCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_H__1 = []operand{
+ a_ARNGIDX_Zm1619_16Bit32Bit_ArngHCheck_I3hI3l_1923_16Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_H__2 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_H__3 = []operand{
+ a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngHCheck_I3hI3l_1923_HalfPrecision,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_S__1 = []operand{
+ a_ARNGIDX_Zm1619_32Bit_ArngHCheck_I3hI3l_1119_32Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_S__2 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1119,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_S__3 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_Pair16Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_H_imm___Zn_H__Zda_S__4 = []operand{
+ a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_16To32Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
var Zm_Q__Zn_Q__Zd_Q = []operand{
a_ARNG_Zm1621_ArngQCheck,
a_ARNG_Zn510_ArngQCheck,
@@ -7198,6 +8260,42 @@ var Zm_S__Zn_S__Zda_S = []operand{
a_ARNG_Zda3RdSrcDst_ArngSCheck,
}
+var Zm_S_imm___Zn_S__Zd_D = []operand{
+ a_ARNGIDX_Zm1620_64Bit_ArngSCheck_I2hI2l_1120_64Bit,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zd_ArngDCheck,
+}
+
+var Zm_S_imm___Zn_S__Zd_S__1 = []operand{
+ a_ARNGIDX_Zm1619_16Bit32Bit_ArngSCheck_I2_1921_32Bit,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zd_ArngSCheck,
+}
+
+var Zm_S_imm___Zn_S__Zd_S__2 = []operand{
+ a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngSCheck_I2_1921_SinglePrecision,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zd_ArngSCheck,
+}
+
+var Zm_S_imm___Zn_S__Zda_D = []operand{
+ a_ARNGIDX_Zm1620_64Bit_ArngSCheck_I2hI2l_1120_64Bit,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zda3RdSrcDst_ArngDCheck,
+}
+
+var Zm_S_imm___Zn_S__Zda_S__1 = []operand{
+ a_ARNGIDX_Zm1619_16Bit32Bit_ArngSCheck_I2_1921_32Bit,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var Zm_S_imm___Zn_S__Zda_S__2 = []operand{
+ a_ARNGIDX_Zm1619_HalfSinglePrecision_ArngSCheck_I2_1921_SinglePrecision,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
var Zm_T__Rdn__Pg__Rdn = []operand{
a_ARNG_Zm510V2_SizeBHSD2224,
a_SPZGREG_Noop_Rdn05ZR,
@@ -7637,6 +8735,16 @@ var Zn_T__Zd_T__2 = []operand{
a_ARNG_Zd_SizeBHSD2224,
}
+var Zn_T_imm___Zd_T__1 = []operand{
+ a_ARNGIDX_Zn510Src_Tsz_1621_SizeSpecifier5_Imm2Tsz_Delegate,
+ a_ARNG_Zd_Tsz_1621_SizeSpecifier5,
+}
+
+var Zn_T_imm___Zd_T__2 = []operand{
+ a_ARNGIDX_Zn510Src_Tsz_1620_SizeSpecifier4_I1Tsz_Delegate,
+ a_ARNG_Zd_Tsz_1620_SizeSpecifier4,
+}
+
var Zn_Tb__PgM__Zda_T = []operand{
a_ARNG_Zn510_SizeTbBHS2224,
a_PREGZM_Pg1013_MergePredCheck,
@@ -7675,4 +8783,19 @@ var Zn__Zd = []operand{
a_ZREG_Zd_Noop,
}
+var Zn_imm___Pd_D = []operand{
+ a_ZREGIDX_Zn510Src_Noop_I3hI3l_1722_Doubleword,
+ a_ARNG_Pd_ArngDCheck,
+}
+
+var Zn_imm___Pd_H = []operand{
+ a_ZREGIDX_Zn510Src_Noop_I1_1718_Halfword,
+ a_ARNG_Pd_ArngHCheck,
+}
+
+var Zn_imm___Pd_S = []operand{
+ a_ZREGIDX_Zn510Src_Noop_I2_1719_Word,
+ a_ARNG_Pd_ArngSCheck,
+}
+
var oc = []operand{}
diff --git a/src/cmd/internal/obj/arm64/list7.go b/src/cmd/internal/obj/arm64/list7.go
index 424da1c22d..3ce949f465 100644
--- a/src/cmd/internal/obj/arm64/list7.go
+++ b/src/cmd/internal/obj/arm64/list7.go
@@ -176,14 +176,25 @@ func rconv(r int) string {
return fmt.Sprintf("R%d<<%d", r&31, (r>>5)&7)
case REG_ARNG <= r && r < REG_ELEM:
return fmt.Sprintf("V%d.%s", r&31, arrange((r>>5)&15))
- case REG_ELEM <= r && r < REG_ELEM_END:
+ case REG_ELEM <= r && r < REG_ZARNG:
return fmt.Sprintf("V%d.%s", r&31, arrange((r>>5)&15))
- case REG_ZARNG <= r && r < REG_PARNGZM:
+ case REG_ZARNG <= r && r < REG_PZELEM:
return fmt.Sprintf("Z%d.%s", r&31, arrange((r>>5)&15))
+ case REG_PZELEM <= r && r < REG_PARNGZM:
+ regPrefix := "Z"
+ reg := r & 31
+ if r&(1<<5) != 0 {
+ regPrefix = "P"
+ if reg >= 16 {
+ regPrefix = "PN"
+ reg -= 16
+ }
+ }
+ return fmt.Sprintf("%s%d", regPrefix, reg)
case REG_PARNGZM <= r && r < REG_PARNGZM_END:
// SVE predicate register with arrangement.
// Pn.<T> or Pn/M, Pn/Z.
- arng := (r >> 5) & 31
+ arng := (r >> 5) & 15
suffix := arrange(arng)
reg := r & 31
if reg >= 16 {
diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go
index 8d53a7b412..9b440ebd58 100644
--- a/src/cmd/internal/obj/util.go
+++ b/src/cmd/internal/obj/util.go
@@ -273,8 +273,8 @@ func writeDconv(w io.Writer, p *Prog, a *Addr, abiDetail bool) {
io.WriteString(w, Rconv(int(a.Reg)))
}
- if (RBaseARM64+1<<10+1<<9) /* arm64.REG_ELEM */ <= a.Reg &&
- a.Reg < (RBaseARM64+1<<11) /* arm64.REG_ELEM_END */ {
+ if ((RBaseARM64+1<<10+1<<9) /* arm64.REG_ELEM */ <= a.Reg && a.Reg < (RBaseARM64+1<<11) /* arm64.REG_ZARNG */) ||
+ ((RBaseARM64+1<<11+1<<9) /* arm64.REG_ZARNGELEM */ <= a.Reg && a.Reg < (RBaseARM64+1<<11+1<<10+1<<9) /* arm64.REG_PARNGZM */) {
fmt.Fprintf(w, "[%d]", a.Index)
}