aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/asm/internal/asm/testdata/arm64sveenc.s110
-rw-r--r--src/cmd/asm/internal/asm/testdata/arm64sveerror.s110
-rw-r--r--src/cmd/internal/obj/arm64/anames_gen.go49
-rw-r--r--src/cmd/internal/obj/arm64/encoding_gen.go704
-rw-r--r--src/cmd/internal/obj/arm64/goops_gen.go51
-rw-r--r--src/cmd/internal/obj/arm64/inst.go260
-rw-r--r--src/cmd/internal/obj/arm64/inst_gen.go2903
7 files changed, 3441 insertions, 746 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/arm64sveenc.s b/src/cmd/asm/internal/asm/testdata/arm64sveenc.s
index f5467164ab..369c047dfa 100644
--- a/src/cmd/asm/internal/asm/testdata/arm64sveenc.s
+++ b/src/cmd/asm/internal/asm/testdata/arm64sveenc.s
@@ -808,4 +808,114 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$-8
ZUMULLT Z6.H[3], Z23.H, Z13.S // eddeae44
ZUMULLT Z6.S[3], Z23.S, Z13.D // eddef644
ZUSDOT Z6.B[3], Z23.B, Z13.S // ed1abe44
+ ADDPL $9, R11, RSP // 3f516b04
+ ADDVL $9, R11, RSP // 3f512b04
+ RDVL $1, R27 // 3b50bf04
+ ZADD $6, Z7.D, Z7.D // c7c0e025
+ ZAND $6, Z7.D, Z7.D // 27f88305
+ ZASR $6, Z23.B, P1.M, Z23.B // 57850004
+ ZASR $6, Z7.D, Z23.D // f790fa04
+ ZASRD $6, Z23.B, P1.M, Z23.B // 57850404
+ ZCADD $270, Z25.S, Z22.S, Z22.S // 36df8045
+ ZCDOT $0, Z5.B[3], Z16.B, Z26.S // 1a42bd44
+ ZCDOT $270, Z3.H[0], Z2.H, Z23.D // 574ce344
+ ZCDOT $270, Z28.B, Z1.B, Z9.S // 291c9c44
+ ZCMLA $0, Z5.H[3], Z16.H, Z26.H // 1a62bd44
+ ZCMLA $270, Z3.S[0], Z2.S, Z23.S // 576ce344
+ ZCMLA $180, Z19.S, Z20.S, Z9.S // 892a9344
+ ZCMPEQ $6, Z23.B, P1.Z, P14.B // ee860625
+ ZCMPGE $6, Z23.B, P1.Z, P14.B // ee060625
+ ZCMPGT $6, Z23.B, P1.Z, P14.B // fe060625
+ ZCMPHI $6, Z23.B, P1.Z, P14.B // fe862124
+ ZCMPHS $6, Z23.B, P1.Z, P14.B // ee862124
+ // TODO: CMPLE
+ // TODO: CMPLO
+ // TODO: CMPLS
+ // TODO: CMPLT
+ ZCMPNE $6, Z23.B, P1.Z, P14.B // fe860625
+ ZCPY $6, P5.M, Z6.H // c6405505
+ ZCPY $6, P5.Z, Z6.H // c6005505
+ ZDUP $9, Z11.B // 2bc13825
+ ZDUPM $7, Z6.H // 4604c005
+ ZEOR $6, Z7.D, Z7.D // 27f84305
+ ZEXT $6, Z23.B, Z13.B, Z13.B // ed1a2005
+ ZEXTQ $6, Z23.B, Z13.B, Z13.B // ed266605
+ ZFADD $(1.0), Z5.D, P5.M, Z5.D // 2594d865
+ ZFCADD $90, Z13.S, Z4.S, P4.M, Z4.S // a4918064
+ ZFCMEQ $(0.0), Z7.D, P4.Z, P2.D // e230d265
+ ZFCMGE $(0.0), Z7.D, P4.Z, P2.D // e230d065
+ ZFCMGT $(0.0), Z7.D, P4.Z, P2.D // f230d065
+ ZFCMLA $0, Z5.H[3], Z16.H, Z26.H // 1a12bd64
+ ZFCMLA $270, Z3.S[0], Z2.S, Z23.S // 571ce364
+ ZFCMLA $180, Z30.D, Z29.D, P7.M, Z25.D // b95fde64
+ ZFCMLE $(0.0), Z7.D, P4.Z, P2.D // f230d165
+ ZFCMLT $(0.0), Z7.D, P4.Z, P2.D // e230d165
+ ZFCMNE $(0.0), Z7.D, P4.Z, P2.D // e230d365
+ ZFCPY $(2.0), P6.M, Z23.H // 17c05605
+ ZFDUP $(2.0), Z4.S // 04c0b925
+ ZFMAX $(0.0), Z3.D, P1.M, Z3.D // 0384de65
+ ZFMAXNM $(0.0), Z3.D, P1.M, Z3.D // 0384dc65
+ ZFMIN $(0.0), Z3.D, P1.M, Z3.D // 0384df65
+ ZFMINNM $(0.0), Z3.D, P1.M, Z3.D // 0384dd65
+ ZFMUL $(2.0), Z16.S, P1.M, Z16.S // 30849a65
+ ZFSUB $(1.0), Z5.D, P5.M, Z5.D // 2594d965
+ ZFSUBR $(1.0), Z5.D, P5.M, Z5.D // 2594db65
+ ZFTMAD $3, Z13.S, Z9.S, Z9.S // a9819365
+ ZINDEX R11, $6, Z7.D // c748eb04
+ ZINDEX $1, $11, Z26.S // 7a41a104
+ ZINDEX $8, R24, Z14.D // 0e47e804
+ ZINDEXW R2, $10, Z8.H // 48496204
+ ZINDEXW $1, R27, Z26.S // 7a47a104
+ ZLSL $6, Z23.B, P1.M, Z23.B // d7850304
+ ZLSL $6, Z7.D, Z23.D // f79ca604
+ ZLSR $6, Z23.B, P1.M, Z23.B // 57850104
+ ZLSR $6, Z7.D, Z23.D // f794fa04
+ ZMUL $6, Z7.D, Z7.D // c7c0f025
+ ZORR $6, Z7.D, Z7.D // 27f80305
+ ZRSHRNB $9, Z7.S, Z23.H // f7183745
+ ZRSHRNT $9, Z7.S, Z23.H // f71c3745
+ ZSHRNB $9, Z7.S, Z23.H // f7103745
+ ZSHRNT $9, Z7.S, Z23.H // f7143745
+ ZSLI $6, Z7.D, Z23.D // f7f48645
+ ZSMAX $6, Z7.D, Z7.D // c7c0e825
+ ZSMIN $6, Z7.D, Z7.D // c7c0ea25
+ ZSQADD $6, Z7.D, Z7.D // c7c0e425
+ ZSQCADD $270, Z25.S, Z22.S, Z22.S // 36df8145
+ ZSQRDCMLAH $0, Z5.H[3], Z16.H, Z26.H // 1a72bd44
+ ZSQRDCMLAH $270, Z3.S[0], Z2.S, Z23.S // 577ce344
+ ZSQRDCMLAH $180, Z19.S, Z20.S, Z9.S // 893a9344
+ ZSQRSHRNB $9, Z7.S, Z23.H // f7283745
+ ZSQRSHRNT $9, Z7.S, Z23.H // f72c3745
+ ZSQRSHRUNB $9, Z7.S, Z23.H // f7083745
+ ZSQRSHRUNT $9, Z7.S, Z23.H // f70c3745
+ ZSQSHL $6, Z23.B, P1.M, Z23.B // d7850604
+ ZSQSHLU $6, Z23.B, P1.M, Z23.B // d7850f04
+ ZSQSHRNB $9, Z7.S, Z23.H // f7203745
+ ZSQSHRNT $9, Z7.S, Z23.H // f7243745
+ ZSQSHRUNB $9, Z7.S, Z23.H // f7003745
+ ZSQSHRUNT $9, Z7.S, Z23.H // f7043745
+ ZSQSUB $6, Z7.D, Z7.D // c7c0e625
+ ZSRI $6, Z7.D, Z23.D // f7f0da45
+ ZSRSHR $6, Z23.B, P1.M, Z23.B // 57850c04
+ ZSRSRA $6, Z7.D, Z23.D // f7e8da45
+ ZSSHLLB $5, Z22.S, Z10.D // caa24545
+ ZSSHLLT $5, Z22.S, Z10.D // caa64545
+ ZSSRA $6, Z7.D, Z23.D // f7e0da45
+ ZSUB $6, Z7.D, Z7.D // c7c0e125
+ ZSUBR $6, Z7.D, Z7.D // c7c0e325
+ ZUMAX $6, Z7.D, Z7.D // c7c0e925
+ ZUMIN $6, Z7.D, Z7.D // c7c0eb25
+ ZUQADD $6, Z7.D, Z7.D // c7c0e525
+ ZUQRSHRNB $9, Z7.S, Z23.H // f7383745
+ ZUQRSHRNT $9, Z7.S, Z23.H // f73c3745
+ ZUQSHL $6, Z23.B, P1.M, Z23.B // d7850704
+ ZUQSHRNB $9, Z7.S, Z23.H // f7303745
+ ZUQSHRNT $9, Z7.S, Z23.H // f7343745
+ ZUQSUB $6, Z7.D, Z7.D // c7c0e725
+ ZURSHR $6, Z23.B, P1.M, Z23.B // 57850d04
+ ZURSRA $6, Z7.D, Z23.D // f7ecda45
+ ZUSHLLB $5, Z22.S, Z10.D // caaa4545
+ ZUSHLLT $5, Z22.S, Z10.D // caae4545
+ ZUSRA $6, Z7.D, Z23.D // f7e4da45
+ ZXAR $6, Z23.B, Z21.B, Z21.B // f5362a04
RET
diff --git a/src/cmd/asm/internal/asm/testdata/arm64sveerror.s b/src/cmd/asm/internal/asm/testdata/arm64sveerror.s
index 52798e8336..ade1c64ddc 100644
--- a/src/cmd/asm/internal/asm/testdata/arm64sveerror.s
+++ b/src/cmd/asm/internal/asm/testdata/arm64sveerror.s
@@ -807,4 +807,114 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$-8
ZUMULLT Z27.H[1], Z26.S, Z11.B // ERROR "illegal combination from SVE"
ZUMULLT Z27.S[1], Z26.S, Z11.B // ERROR "illegal combination from SVE"
ZUSDOT Z27.B[1], Z26.S, Z11.B // ERROR "illegal combination from SVE"
+ ADDPL $1, R27, ZR // ERROR "illegal combination from SVE"
+ ADDVL $1, R27, ZR // ERROR "illegal combination from SVE"
+ RDVL $11, RSP // ERROR "illegal combination from SVE"
+ ZADD $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZAND $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZASR $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZASR $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZASRD $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZCADD $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCDOT $1, Z26.B[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCDOT $1, Z26.H[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCDOT $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCMLA $1, Z26.H[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCMLA $1, Z26.S[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCMLA $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZCMPEQ $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPGE $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPGT $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPHI $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPHS $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPLE $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPLO $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPLS $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPLT $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCMPNE $1, Z27.Q, P7.Z, P0.H // ERROR "illegal combination from SVE"
+ ZCPY $1, P7.M, Z25.Q // ERROR "illegal combination from SVE"
+ ZCPY $1, P7.M, Z25.Q // ERROR "illegal combination from SVE"
+ ZDUP $1, Z27.Q // ERROR "illegal combination from SVE"
+ ZDUPM $1, Z27.Q // ERROR "illegal combination from SVE"
+ ZEOR $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZEXT $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZEXTQ $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZFADD $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFCADD $1, Z27.Q, Z25.Q, P0.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFCMEQ $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCMGE $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCMGT $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCMLA $1, Z26.H[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZFCMLA $1, Z26.S[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZFCMLA $1, Z27.Q, Z25.Q, P0.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFCMLE $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCMLT $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCMNE $(0.0), Z1.S, P13.Z, P14.B // ERROR "illegal combination from SVE"
+ ZFCPY $(3.6), P7.M, Z25.Q // ERROR "illegal combination from SVE"
+ ZFDUP $(3.6), Z27.Q // ERROR "illegal combination from SVE"
+ ZFMAX $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFMAXNM $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFMIN $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFMINNM $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFMUL $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFSUB $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFSUBR $(3.6), Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZFTMAD $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZINDEX RSP, $11, Z26.S // ERROR "illegal combination from SVE"
+ ZINDEX $7, $90, Z21.Q // ERROR "illegal combination from SVE"
+ // TODO: INDEX
+ ZINDEXW RSP, $11, Z26.S // ERROR "illegal combination from SVE"
+ // TODO: INDEX
+ ZLSL $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZLSL $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZLSR $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZLSR $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZMUL $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZORR $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZRSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZRSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSLI $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSMAX $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSMIN $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQADD $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQCADD $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZSQRDCMLAH $1, Z26.H[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZSQRDCMLAH $1, Z26.S[3], Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZSQRDCMLAH $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
+ ZSQRSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQRSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQRSHRUNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQRSHRUNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQSHL $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZSQSHLU $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZSQSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQSHRUNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQSHRUNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSQSUB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSRI $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSRSHR $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZSRSRA $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSSHLLB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSSHLLT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSSRA $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSUB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZSUBR $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUMAX $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUMIN $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQADD $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQRSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQRSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQSHL $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZUQSHRNB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQSHRNT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUQSUB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZURSHR $1, Z27.Q, P7.Z, Z6.H // ERROR "illegal combination from SVE"
+ ZURSRA $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUSHLLB $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUSHLLT $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZUSRA $1, Z27.Q, Z25.Q // ERROR "illegal combination from SVE"
+ ZXAR $1, Z27.Q, Z25.Q, Z6.H // ERROR "illegal combination from SVE"
RET
diff --git a/src/cmd/internal/obj/arm64/anames_gen.go b/src/cmd/internal/obj/arm64/anames_gen.go
index 498d227772..9d15f9f801 100644
--- a/src/cmd/internal/obj/arm64/anames_gen.go
+++ b/src/cmd/internal/obj/arm64/anames_gen.go
@@ -4,6 +4,8 @@ package arm64
var sveAnames = []string{
"SVESTART",
+ "ADDPL",
+ "ADDVL",
"CTERMEQ",
"CTERMEQW",
"CTERMNE",
@@ -82,6 +84,7 @@ var sveAnames = []string{
"PWRFFR",
"PZIP1",
"PZIP2",
+ "RDVL",
"SETFFR",
"ZABS",
"ZADCLB",
@@ -105,6 +108,7 @@ var sveAnames = []string{
"ZANDVH",
"ZANDVS",
"ZASR",
+ "ZASRD",
"ZASRR",
"ZBCAX",
"ZBDEP",
@@ -137,6 +141,8 @@ var sveAnames = []string{
"ZBSL",
"ZBSL1N",
"ZBSL2N",
+ "ZCADD",
+ "ZCDOT",
"ZCLASTA",
"ZCLASTAB",
"ZCLASTAD",
@@ -151,6 +157,7 @@ var sveAnames = []string{
"ZCLASTBW",
"ZCLS",
"ZCLZ",
+ "ZCMLA",
"ZCMPEQ",
"ZCMPGE",
"ZCMPGT",
@@ -172,6 +179,7 @@ var sveAnames = []string{
"ZCPYW",
"ZDECP",
"ZDUP",
+ "ZDUPM",
"ZDUPQ",
"ZDUPW",
"ZEOR",
@@ -184,6 +192,8 @@ var sveAnames = []string{
"ZEORVH",
"ZEORVS",
"ZEXPAND",
+ "ZEXT",
+ "ZEXTQ",
"ZF1CVT",
"ZF1CVTLT",
"ZF2CVT",
@@ -203,12 +213,17 @@ var sveAnames = []string{
"ZFADDVS",
"ZFAMAX",
"ZFAMIN",
+ "ZFCADD",
"ZFCLAMP",
"ZFCMEQ",
"ZFCMGE",
"ZFCMGT",
+ "ZFCMLA",
+ "ZFCMLE",
+ "ZFCMLT",
"ZFCMNE",
"ZFCMUO",
+ "ZFCPY",
"ZFCVT",
"ZFCVTLT",
"ZFCVTNT",
@@ -219,6 +234,7 @@ var sveAnames = []string{
"ZFDIV",
"ZFDIVR",
"ZFDOT",
+ "ZFDUP",
"ZFEXPA",
"ZFLOGB",
"ZFMAD",
@@ -285,6 +301,7 @@ var sveAnames = []string{
"ZFSQRT",
"ZFSUB",
"ZFSUBR",
+ "ZFTMAD",
"ZFTSMUL",
"ZFTSSEL",
"ZHISTCNT",
@@ -346,6 +363,8 @@ var sveAnames = []string{
"ZREVD",
"ZREVH",
"ZREVW",
+ "ZRSHRNB",
+ "ZRSHRNT",
"ZRSUBHNB",
"ZRSUBHNT",
"ZSABA",
@@ -372,8 +391,11 @@ var sveAnames = []string{
"ZSDOT",
"ZSEL",
"ZSHADD",
+ "ZSHRNB",
+ "ZSHRNT",
"ZSHSUB",
"ZSHSUBR",
+ "ZSLI",
"ZSM4E",
"ZSM4EKEY",
"ZSMAX",
@@ -401,6 +423,7 @@ var sveAnames = []string{
"ZSPLICE",
"ZSQABS",
"ZSQADD",
+ "ZSQCADD",
"ZSQDECP",
"ZSQDMLALB",
"ZSQDMLALBT",
@@ -413,13 +436,23 @@ var sveAnames = []string{
"ZSQDMULLT",
"ZSQINCP",
"ZSQNEG",
+ "ZSQRDCMLAH",
"ZSQRDMLAH",
"ZSQRDMLSH",
"ZSQRDMULH",
"ZSQRSHL",
"ZSQRSHLR",
+ "ZSQRSHRNB",
+ "ZSQRSHRNT",
+ "ZSQRSHRUNB",
+ "ZSQRSHRUNT",
"ZSQSHL",
"ZSQSHLR",
+ "ZSQSHLU",
+ "ZSQSHRNB",
+ "ZSQSHRNT",
+ "ZSQSHRUNB",
+ "ZSQSHRUNT",
"ZSQSUB",
"ZSQSUBR",
"ZSQXTNB",
@@ -427,8 +460,14 @@ var sveAnames = []string{
"ZSQXTUNB",
"ZSQXTUNT",
"ZSRHADD",
+ "ZSRI",
"ZSRSHL",
"ZSRSHLR",
+ "ZSRSHR",
+ "ZSRSRA",
+ "ZSSHLLB",
+ "ZSSHLLT",
+ "ZSSRA",
"ZSSUBLB",
"ZSSUBLBT",
"ZSSUBLT",
@@ -501,8 +540,12 @@ var sveAnames = []string{
"ZUQINCP",
"ZUQRSHL",
"ZUQRSHLR",
+ "ZUQRSHRNB",
+ "ZUQRSHRNT",
"ZUQSHL",
"ZUQSHLR",
+ "ZUQSHRNB",
+ "ZUQSHRNT",
"ZUQSUB",
"ZUQSUBR",
"ZUQXTNB",
@@ -511,10 +554,15 @@ var sveAnames = []string{
"ZURHADD",
"ZURSHL",
"ZURSHLR",
+ "ZURSHR",
"ZURSQRTE",
+ "ZURSRA",
"ZUSDOT",
+ "ZUSHLLB",
+ "ZUSHLLT",
"ZUSMMLA",
"ZUSQADD",
+ "ZUSRA",
"ZUSUBLB",
"ZUSUBLT",
"ZUSUBWB",
@@ -528,6 +576,7 @@ var sveAnames = []string{
"ZUZP2",
"ZUZPQ1",
"ZUZPQ2",
+ "ZXAR",
"ZZIP1",
"ZZIP2",
"ZZIPQ1",
diff --git a/src/cmd/internal/obj/arm64/encoding_gen.go b/src/cmd/internal/obj/arm64/encoding_gen.go
index 6fd3b93476..da5e6fea67 100644
--- a/src/cmd/internal/obj/arm64/encoding_gen.go
+++ b/src/cmd/internal/obj/arm64/encoding_gen.go
@@ -9,6 +9,8 @@ const (
enc_i3h_i3l
enc_i4h_i4l
enc_imm2_tsz
+ enc_imm8h_imm8l
+ enc_tszh_tszl_imm3
enc_tszh_tszl
enc_M
enc_PNd
@@ -37,13 +39,28 @@ const (
enc_Zn
enc_i1
enc_i2
+ enc_imm13
enc_imm2
+ enc_imm3
+ enc_imm4
+ enc_imm5
+ enc_imm5b
+ enc_imm6
+ enc_imm7
+ enc_imm8
+ enc_rot
enc_size
enc_size0
enc_sz
enc_tsz
)
+// encodeXCheck is the implementation of the following encoding logic:
+// Check this is a 64-bit scalar register
+func encodeXCheck(v uint32) (uint32, bool) {
+ return 0, true
+}
+
// encodeArngBCheck is the implementation of the following encoding logic:
// Check this is a B arrangement
func encodeArngBCheck(v uint32) (uint32, bool) {
@@ -107,6 +124,15 @@ func encodeZeroPredCheck(v uint32) (uint32, bool) {
return 0, false
}
+// encodeFimm0_0_56 is the implementation of the following encoding logic:
+// Check this is immediate 0.0
+func encodeFimm0_0_56(v uint32) (uint32, bool) {
+ if (v & 0x7FFFFFFF) != 0 {
+ return 0, false
+ }
+ return 0, true
+}
+
// 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:
@@ -151,6 +177,17 @@ func encodeZm1619_16Bit32Bit(v uint32) (uint32, bool) {
return v << 16, true
}
+// encodeI2_1921_16bit is the implementation of the following encoding logic:
+// For the "16-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_16bit(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, 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:
@@ -163,6 +200,28 @@ func encodeI3hI3l_1923_16Bit(v uint32) (uint32, bool) {
return (v&3)<<19 | (v>>2)<<22, true
}
+// encodeZm_1619_Range0_7V1 is the implementation of the following encoding logic:
+// For the "16-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 encodeZm_1619_Range0_7V1(v uint32) (uint32, bool) {
+ if v <= 7 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
+// encodeI1_2021_32bit is the implementation of the following encoding logic:
+// For the "32-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_32bit(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, 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:
@@ -186,6 +245,17 @@ func encodeI3hI3l_1119_32Bit(v uint32) (uint32, bool) {
return (v&1)<<11 | (v>>1)<<19, true
}
+// encodeZm_1620_Range0_15 is the implementation of the following encoding logic:
+// For the "32-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 encodeZm_1620_Range0_15(v uint32) (uint32, bool) {
+ if v <= 15 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
// 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:
@@ -337,6 +407,17 @@ func encodeI3hI3l_1722_Doubleword(v uint32) (uint32, bool) {
return (v&3)<<17 | (v>>2)<<22, true
}
+// encodeImm5Signed_1621V2 is the implementation of the following encoding logic:
+// For the "Equal", "Greater than or equal", "Greater than", "Less than or equal", "Less than", and "Not equal" variants: is the signed immediate operand, in the range -16 to 15, encoded in the "imm5" field.
+// bit range mappings:
+// imm5: [16:21)
+func encodeImm5Signed_1621V2(v uint32) (uint32, bool) {
+ if int32(v) >= -16 && int32(v) <= 15 {
+ return (v & 31) << 16, true
+ }
+ return 0, false
+}
+
// 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:
@@ -360,6 +441,28 @@ func encodeI3hI3l_1923_HalfPrecision(v uint32) (uint32, bool) {
return (v&3)<<19 | (v>>2)<<22, true
}
+// encodeI2_1921_Half is the implementation of the following encoding logic:
+// For the "Half-precision" variant: is the index of a Real and Imaginary pair, in the range 0 to 3, encoded in the "i2" field.
+// bit range mappings:
+// i2: [19:21)
+func encodeI2_1921_Half(v uint32) (uint32, bool) {
+ if v > 3 {
+ return 0, false
+ }
+ return v << 19, true
+}
+
+// encodeZm_1619_Half is the implementation of the following encoding logic:
+// For the "Half-precision" 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 encodeZm_1619_Half(v uint32) (uint32, bool) {
+ if v <= 7 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
// 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:
@@ -388,6 +491,17 @@ func encodeSize0HalfwordMergeZero(v uint32) (uint32, bool) {
return 0, false
}
+// encodeImm7Unsigned_1421 is the implementation of the following encoding logic:
+// For the "Higher or same", "Higher", "Lower or same", and "Lower" variants: is the unsigned immediate operand, in the range 0 to 127, encoded in the "imm7" field.
+// bit range mappings:
+// imm7: [14:21)
+func encodeImm7Unsigned_1421(v uint32) (uint32, bool) {
+ if v <= 127 {
+ return v << 14, true
+ }
+ 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:
@@ -399,6 +513,28 @@ func encodeI2_1921_SinglePrecision(v uint32) (uint32, bool) {
return v << 19, true
}
+// encodeI1_2021_Single is the implementation of the following encoding logic:
+// For the "Single-precision" variant: is the index of a Real and Imaginary pair, in the range 0 to 1, encoded in the "i1" field.
+// bit range mappings:
+// i1: [20:21)
+func encodeI1_2021_Single(v uint32) (uint32, bool) {
+ if v > 1 {
+ return 0, false
+ }
+ return v << 20, true
+}
+
+// encodeZm_1620_Single is the implementation of the following encoding logic:
+// For the "Single-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 encodeZm_1620_Single(v uint32) (uint32, bool) {
+ if v <= 15 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
// encodeSzWordDoubleword is the implementation of the following encoding logic:
// For the "Word and doubleword" variant: is the size specifier,
// sz <T>
@@ -427,6 +563,52 @@ func encodeI2_1719_Word(v uint32) (uint32, bool) {
return v << 17, true
}
+// encodeImm13_518 is the implementation of the following encoding logic:
+// Is a 64, 32, 16 or 8-bit bitmask consisting of replicated 2, 4, 8, 16, 32 or 64 bit fields, each field containing a rotated run of non-zero bits, encoded in the "imm13" field.
+// bit range mappings:
+// imm13: [5:18)
+func encodeImm13_518(v uint32) (uint32, bool) {
+ return codeLogicalImmArrEncoding, false
+}
+
+// encodeImm8_513_Fimm is the implementation of the following encoding logic:
+// Is a floating-point immediate value expressible as ±n÷16×2^r, where n and r are integers such that 16 ≤ n ≤ 31 and -3 ≤ r ≤ 4, i.e. a normalized binary floating-point encoding with 1 sign bit, 3-bit exponent, and 4-bit fractional part, encoded in the "imm8" field.
+// bit range mappings:
+// imm8: [5:13)
+func encodeImm8_513_Fimm(v uint32) (uint32, bool) {
+ if v <= 255 {
+ return v << 5, true
+ }
+ return 0, false
+}
+
+// encodeImm8SignedLsl8 is the implementation of the following encoding logic:
+// Is a signed immediate in the range -128 to 127, encoded in the "imm8" field.
+// bit range mappings:
+// imm8: [5:13)
+//
+// Is the optional left shift to apply to the immediate, defaulting to LSL #0 and
+// sh <shift>
+// 0 LSL #0
+// 1 LSL #8
+// bit range mappings:
+// sh: [13:14)
+func encodeImm8SignedLsl8(v uint32) (uint32, bool) {
+ vi := int32(v)
+ if vi >= -128 && vi <= 127 {
+ imm8 := uint32(uint8(int8(vi)))
+ return (imm8 << 5), true
+ }
+ if vi&255 == 0 {
+ unshifted := vi >> 8
+ if unshifted >= -128 && unshifted <= 127 {
+ imm8 := uint32(uint8(int8(unshifted)))
+ return (imm8 << 5) | (1 << 13), true
+ }
+ }
+ return 0, false
+}
+
// encodeSize16B8H4S2D is the implementation of the following encoding logic:
// Is an arrangement specifier,
// size <T>
@@ -471,6 +653,30 @@ func encodeSize8H4S2D(v uint32) (uint32, bool) {
return 0, false
}
+// encodeImm8UnsignedLsl8 is the implementation of the following encoding logic:
+// Is an unsigned immediate in the range 0 to 255, encoded in the "imm8" field.
+// bit range mappings:
+// imm8: [5:13)
+//
+// Is the optional left shift to apply to the immediate, defaulting to LSL #0 and
+// sh <shift>
+// 0 LSL #0
+// 1 LSL #8
+// bit range mappings:
+// sh: [13:14)
+func encodeImm8UnsignedLsl8(v uint32) (uint32, bool) {
+ if v <= 255 {
+ return v << 5, true
+ }
+ if v&255 == 0 {
+ unshifted := v >> 8
+ if unshifted <= 255 {
+ return (unshifted << 5) | (1 << 13), true
+ }
+ }
+ return 0, false
+}
+
// encodeWdn05 is the implementation of the following encoding logic:
// Is the 32-bit name of the source and destination general-purpose register, encoded in the "Rdn" field.
// bit range mappings:
@@ -490,6 +696,20 @@ func encodeVd0564(v uint32) (uint32, bool) {
return v & 31, true
}
+// encodeRd05_SPAllowed is the implementation of the following encoding logic:
+// Is the 64-bit name of the destination general-purpose register or stack pointer, encoded in the "Rd" field.
+// bit range mappings:
+// Rd: [0:5)
+func encodeRd05_SPAllowed(v uint32) (uint32, bool) {
+ if v == REG_R31 {
+ return 0, false
+ }
+ if v == REG_RSP {
+ return 31, true
+ }
+ return v & 31, true
+}
+
// encodeRd05 is the implementation of the following encoding logic:
// Is the 64-bit name of the destination general-purpose register, encoded in the "Rd" field.
// bit range mappings:
@@ -534,6 +754,162 @@ func encodeXdn05(v uint32) (uint32, bool) {
return v & 31, true
}
+// encodeRn1621_SPAllowed is the implementation of the following encoding logic:
+// Is the 64-bit name of the source general-purpose register or stack pointer, encoded in the "Rn" field.
+// bit range mappings:
+// Rn: [16:21)
+func encodeRn1621_SPAllowed(v uint32) (uint32, bool) {
+ if v == REG_R31 {
+ return 0, false
+ }
+ if v == REG_RSP {
+ return 31 << 16, true
+ }
+ return (v & 31) << 16, true
+}
+
+// encodeRot90_270_1011 is the implementation of the following encoding logic:
+// Is the const specifier,
+// rot <const>
+// 0 #90
+// 1 #270
+// bit range mappings:
+// rot: [10:11)
+func encodeRot90_270_1011(v uint32) (uint32, bool) {
+ switch v {
+ case 90:
+ return 0, true
+ case 270:
+ return 1 << 10, true
+ }
+ return 0, false
+}
+
+// encodeRot90_270_1617 is the implementation of the following encoding logic:
+// Is the const specifier,
+// rot <const>
+// 0 #90
+// 1 #270
+// bit range mappings:
+// rot: [16:17)
+func encodeRot90_270_1617(v uint32) (uint32, bool) {
+ switch v {
+ case 90:
+ return 0, true
+ case 270:
+ return 1 << 16, true
+ }
+ return 0, false
+}
+
+// encodeRot0_90_180_270_1012 is the implementation of the following encoding logic:
+// Is the const specifier,
+// rot <const>
+// 00 #0
+// 01 #90
+// 10 #180
+// 11 #270
+// bit range mappings:
+// rot: [10:12)
+func encodeRot0_90_180_270_1012(v uint32) (uint32, bool) {
+ switch v {
+ case 0:
+ return 0, true
+ case 90:
+ return 1 << 10, true
+ case 180:
+ return 2 << 10, true
+ case 270:
+ return 3 << 10, true
+ }
+ return 0, false
+}
+
+// encodeRot0_90_180_270_1315 is the implementation of the following encoding logic:
+// Is the const specifier,
+// rot <const>
+// 00 #0
+// 01 #90
+// 10 #180
+// 11 #270
+// bit range mappings:
+// rot: [13:15)
+func encodeRot0_90_180_270_1315(v uint32) (uint32, bool) {
+ switch v {
+ case 0:
+ return 0, true
+ case 90:
+ return 1 << 13, true
+ case 180:
+ return 2 << 13, true
+ case 270:
+ return 3 << 13, true
+ }
+ return 0, false
+}
+
+// encodeImm5Signed_510 is the implementation of the following encoding logic:
+// Is the first signed immediate operand, in the range -16 to 15, encoded in the "imm5" field.
+// bit range mappings:
+// imm5: [5:10)
+func encodeImm5Signed_510(v uint32) (uint32, bool) {
+ if int32(v) >= -16 && int32(v) <= 15 {
+ return (v & 31) << 5, true
+ }
+ return 0, false
+}
+
+// encodeFimm0_0_1_0_56 is the implementation of the following encoding logic:
+// Is the floating-point immediate value,
+// i1 <const>
+// 0 #0.0
+// 1 #1.0
+// bit range mappings:
+// i1: [5:6)
+func encodeFimm0_0_1_0_56(v uint32) (uint32, bool) {
+ switch v {
+ case 0:
+ return 0, true
+ case 0x3F800000: // 1.0
+ return 1 << 5, true
+ }
+ return 0, false
+}
+
+// encodeFimm0_5_1_0_56 is the implementation of the following encoding logic:
+// Is the floating-point immediate value,
+// i1 <const>
+// 0 #0.5
+// 1 #1.0
+// bit range mappings:
+// i1: [5:6)
+func encodeFimm0_5_1_0_56(v uint32) (uint32, bool) {
+ switch v {
+ case 0x3F000000: // 0.5
+ return 0, true
+ case 0x3F800000: // 1.0
+ return 1 << 5, true
+ }
+ return 0, false
+}
+
+// encodeFimm0_5_2_0_56 is the implementation of the following encoding logic:
+// Is the floating-point immediate value,
+// i1 <const>
+// 0 #0.5
+// 1 #2.0
+// bit range mappings:
+// i1: [5:6)
+func encodeFimm0_5_2_0_56(v uint32) (uint32, bool) {
+ switch v {
+ case 0x3F000000: // 0.5
+ return 0, true
+ case 0x40000000: // 2.0
+ return 1 << 5, true
+ }
+ return 0, false
+}
+
// 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:
@@ -626,6 +1002,66 @@ func encodeImm2Tsz_Delegate(v uint32) (uint32, bool) {
return codeImm2Tsz, false
}
+// encodeShiftTsz1619Range0V1 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 0 to number of bits per element minus 1, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [16:19)
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeShiftTsz1619Range0V1(v uint32) (uint32, bool) {
+ return codeShift161919212223, false
+}
+
+// encodeShiftTsz1619Range0V2 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 0 to number of bits per element minus 1, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [16:19)
+// tszh: [22:24)
+// tszl: [19:21)
+func encodeShiftTsz1619Range0V2(v uint32) (uint32, bool) {
+ return codeShift161919212224, false
+}
+
+// encodeShiftTsz58Range0 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 0 to number of bits per element minus 1, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [5:8)
+// tszh: [22:24)
+// tszl: [8:10)
+func encodeShiftTsz58Range0(v uint32) (uint32, bool) {
+ return codeShift588102224, false
+}
+
+// encodeShiftTsz1619Range1V1 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 1 to number of bits per element, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [16:19)
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeShiftTsz1619Range1V1(v uint32) (uint32, bool) {
+ return codeShift161919212223, false
+}
+
+// encodeShiftTsz1619Range1V2 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 1 to number of bits per element, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [16:19)
+// tszh: [22:24)
+// tszl: [19:21)
+func encodeShiftTsz1619Range1V2(v uint32) (uint32, bool) {
+ return codeShift161919212224, false
+}
+
+// encodeShiftTsz58Range1 is the implementation of the following encoding logic:
+// Is the immediate shift amount, in the range 1 to number of bits per element, encoded in "tszh:tszl:imm3".
+// bit range mappings:
+// imm3: [5:8)
+// tszh: [22:24)
+// tszl: [8:10)
+func encodeShiftTsz58Range1(v uint32) (uint32, bool) {
+ return codeShift588102224, 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:
@@ -725,6 +1161,14 @@ func encodePg1014(v uint32) (uint32, bool) {
return v << 10, true
}
+// encodePg1620 is the implementation of the following encoding logic:
+// Is the name of the governing scalable predicate register, encoded in the "Pg" field.
+// bit range mappings:
+// Pg: [16:20)
+func encodePg1620(v uint32) (uint32, bool) {
+ return v << 16, true
+}
+
// encodePg59 is the implementation of the following encoding logic:
// Is the name of the governing scalable predicate register, encoded in the "Pg" field.
// bit range mappings:
@@ -757,11 +1201,11 @@ func encodePm1620(v uint32) (uint32, bool) {
return v << 16, true
}
-// encodeZm_1619_Range0_7 is the implementation of the following encoding logic:
+// encodeZm_1619_Range0_7V2 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) {
+func encodeZm_1619_Range0_7V2(v uint32) (uint32, bool) {
if v <= 7 {
return v << 16, true
}
@@ -1035,6 +1479,77 @@ func encodePredQualM45(v uint32) (uint32, bool) {
return 0, false
}
+// encodeImm5bSigned_1621 is the implementation of the following encoding logic:
+// Is the second signed immediate operand, in the range -16 to 15, encoded in the "imm5b" field.
+// bit range mappings:
+// imm5b: [16:21)
+func encodeImm5bSigned_1621(v uint32) (uint32, bool) {
+ if int32(v) >= -16 && int32(v) <= 15 {
+ return (v & 31) << 16, true
+ }
+ return 0, false
+}
+
+// encodeImm8Signed_513 is the implementation of the following encoding logic:
+// Is the signed immediate operand, in the range -128 to 127, encoded in the "imm8" field.
+// bit range mappings:
+// imm8: [5:13)
+func encodeImm8Signed_513(v uint32) (uint32, bool) {
+ if int32(v) >= -128 && int32(v) <= 127 {
+ return (v & 255) << 5, true
+ }
+ return 0, false
+}
+
+// encodeImm5Signed_1621V1 is the implementation of the following encoding logic:
+// Is the signed immediate operand, in the range -16 to 15, encoded in the "imm5" field.
+// bit range mappings:
+// imm5: [16:21)
+func encodeImm5Signed_1621V1(v uint32) (uint32, bool) {
+ if int32(v) >= -16 && int32(v) <= 15 {
+ return (v & 31) << 16, true
+ }
+ return 0, false
+}
+
+// encodeImm5Signed510Unique is the implementation of the following encoding logic:
+// Is the signed immediate operand, in the range -16 to 15, encoded in the "imm5" field.
+// bit range mappings:
+// imm5: [5:10)
+func encodeImm5Signed510Unique(v uint32) (uint32, bool) {
+ if int32(v) >= -16 && int32(v) <= 15 {
+ return (v & 31) << 5, true
+ }
+ return 0, false
+}
+
+// encodeImm6Signed_511 is the implementation of the following encoding logic:
+// Is the signed immediate operand, in the range -32 to 31, encoded in the "imm6" field.
+// bit range mappings:
+// imm6: [5:11)
+func encodeImm6Signed_511(v uint32) (uint32, bool) {
+ if int32(v) >= -32 && int32(v) <= 31 {
+ return (v & 63) << 5, true
+ }
+ return 0, false
+}
+
+// encodeSizeImm13NoOp is the implementation of the following encoding logic:
+// Is the size specifier,
+// imm13 <T>
+// 0xxxxxx0xxxxx S
+// 0xxxxxx10xxxx H
+// 0xxxxxx110xxx B
+// 0xxxxxx1110xx B
+// 0xxxxxx11110x B
+// 0xxxxxx11111x RESERVED
+// 1xxxxxxxxxxxx D
+// bit range mappings:
+// imm13: [5:18)
+func encodeSizeImm13NoOp(v uint32) (uint32, bool) {
+ return codeNoOp, false
+}
+
// encodeSizeBHSD2224 is the implementation of the following encoding logic:
// Is the size specifier,
// size <T>
@@ -1460,6 +1975,122 @@ func encodeTszhTszlBHS(v uint32) (uint32, bool) {
return 0, false
}
+// encodeSizeBhsTsz1921 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <T>
+// 0 00 RESERVED
+// 0 01 B
+// 0 1x H
+// 1 xx S
+// bit range mappings:
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeSizeBhsTsz1921(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 19, true
+ case ARNG_H:
+ return 2 << 19, true
+ case ARNG_S:
+ return 1 << 22, true
+ }
+ return 0, false
+}
+
+// encodeSizeHsdTsz1921 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <T>
+// 0 00 RESERVED
+// 0 01 H
+// 0 1x S
+// 1 xx D
+// bit range mappings:
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeSizeHsdTsz1921(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_H:
+ return 1 << 19, true
+ case ARNG_S:
+ return 2 << 19, true
+ case ARNG_D:
+ return 1 << 22, true
+ }
+ return 0, false
+}
+
+// encodeSizeBhsdTsz1921 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <T>
+// 00 00 RESERVED
+// 00 01 B
+// 00 1x H
+// 01 xx S
+// 1x xx D
+// bit range mappings:
+// tszh: [22:24)
+// tszl: [19:21)
+func encodeSizeBhsdTsz1921(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 19, true
+ case ARNG_H:
+ return 2 << 19, true
+ case ARNG_S:
+ return 1 << 22, true
+ case ARNG_D:
+ return 1 << 23, true
+ }
+ return 0, false
+}
+
+// encodeSizeBhsdTsz810 is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <T>
+// 00 00 RESERVED
+// 00 01 B
+// 00 1x H
+// 01 xx S
+// 1x xx D
+// bit range mappings:
+// tszh: [22:24)
+// tszl: [8:10)
+func encodeSizeBhsdTsz810(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 8, true
+ case ARNG_H:
+ return 2 << 8, true
+ case ARNG_S:
+ return 1 << 22, true
+ case ARNG_D:
+ return 1 << 23, true
+ }
+ return 0, false
+}
+
+// encodeSizeBhsTsz1921Unique is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <Tb>
+// 0 00 RESERVED
+// 0 01 B
+// 0 1x H
+// 1 xx S
+// bit range mappings:
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeSizeBhsTsz1921Unique(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_B:
+ return 1 << 19, true
+ case ARNG_H:
+ return 2 << 19, true
+ case ARNG_S:
+ return 1 << 22, true
+ }
+ return 0, false
+}
+
// encodeTszhTszlTbHSD is the implementation of the following encoding logic:
// Is the size specifier,
// tszh tszl <Tb>
@@ -1485,6 +2116,75 @@ func encodeTszhTszlTbHSD(v uint32) (uint32, bool) {
return 0, false
}
+// encodeSizeHsdTsz1921Unique is the implementation of the following encoding logic:
+// Is the size specifier,
+// tszh tszl <Tb>
+// 0 00 RESERVED
+// 0 01 H
+// 0 1x S
+// 1 xx D
+// bit range mappings:
+// tszh: [22:23)
+// tszl: [19:21)
+func encodeSizeHsdTsz1921Unique(v uint32) (uint32, bool) {
+ switch v {
+ case ARNG_H:
+ return 1 << 19, true
+ case ARNG_S:
+ return 2 << 19, true
+ case ARNG_D:
+ return 1 << 22, true
+ }
+ return 0, false
+}
+
+// encodeImm4Unsigned_1620 is the implementation of the following encoding logic:
+// Is the unsigned immediate operand, in the range 0 to 15, encoded in the "imm4" field.
+// bit range mappings:
+// imm4: [16:20)
+func encodeImm4Unsigned_1620(v uint32) (uint32, bool) {
+ if v <= 15 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
+// encodeImm8Unsigned_513 is the implementation of the following encoding logic:
+// Is the unsigned immediate operand, in the range 0 to 255, encoded in the "imm8" field.
+// bit range mappings:
+// imm8: [5:13)
+func encodeImm8Unsigned_513(v uint32) (uint32, bool) {
+ if v <= 255 {
+ return v << 5, true
+ }
+ return 0, false
+}
+
+// encodeImm8hImm8l_Unsigned is the implementation of the following encoding logic:
+// Is the unsigned immediate operand, in the range 0 to 255, encoded in the "imm8h:imm8l" fields.
+// bit range mappings:
+// imm8h: [16:21)
+// imm8l: [10:13)
+func encodeImm8hImm8l_Unsigned(v uint32) (uint32, bool) {
+ if v <= 255 {
+ l := v & 7
+ h := v >> 3
+ return (l << 10) | (h << 16), true
+ }
+ return 0, false
+}
+
+// encodeImm3Unsigned_1619 is the implementation of the following encoding logic:
+// Is the unsigned immediate operand, in the range 0 to 7, encoded in the "imm3" field.
+// bit range mappings:
+// imm3: [16:19)
+func encodeImm3Unsigned_1619(v uint32) (uint32, bool) {
+ if v <= 7 {
+ return v << 16, true
+ }
+ return 0, false
+}
+
// encodeNoop is the implementation of the following encoding logic:
// No-op check, returns true
func encodeNoop(v uint32) (uint32, bool) {
diff --git a/src/cmd/internal/obj/arm64/goops_gen.go b/src/cmd/internal/obj/arm64/goops_gen.go
index ba800712ca..f479bbd7df 100644
--- a/src/cmd/internal/obj/arm64/goops_gen.go
+++ b/src/cmd/internal/obj/arm64/goops_gen.go
@@ -5,7 +5,9 @@ package arm64
import "cmd/internal/obj"
const (
- ACTERMEQ obj.As = ASVESTART + 1 + iota
+ AADDPL obj.As = ASVESTART + 1 + iota
+ AADDVL
+ ACTERMEQ
ACTERMEQW
ACTERMNE
ACTERMNEW
@@ -83,6 +85,7 @@ const (
APWRFFR
APZIP1
APZIP2
+ ARDVL
ASETFFR
AZABS
AZADCLB
@@ -106,6 +109,7 @@ const (
AZANDVH
AZANDVS
AZASR
+ AZASRD
AZASRR
AZBCAX
AZBDEP
@@ -138,6 +142,8 @@ const (
AZBSL
AZBSL1N
AZBSL2N
+ AZCADD
+ AZCDOT
AZCLASTA
AZCLASTAB
AZCLASTAD
@@ -152,6 +158,7 @@ const (
AZCLASTBW
AZCLS
AZCLZ
+ AZCMLA
AZCMPEQ
AZCMPGE
AZCMPGT
@@ -173,6 +180,7 @@ const (
AZCPYW
AZDECP
AZDUP
+ AZDUPM
AZDUPQ
AZDUPW
AZEOR
@@ -185,6 +193,8 @@ const (
AZEORVH
AZEORVS
AZEXPAND
+ AZEXT
+ AZEXTQ
AZF1CVT
AZF1CVTLT
AZF2CVT
@@ -204,12 +214,17 @@ const (
AZFADDVS
AZFAMAX
AZFAMIN
+ AZFCADD
AZFCLAMP
AZFCMEQ
AZFCMGE
AZFCMGT
+ AZFCMLA
+ AZFCMLE
+ AZFCMLT
AZFCMNE
AZFCMUO
+ AZFCPY
AZFCVT
AZFCVTLT
AZFCVTNT
@@ -220,6 +235,7 @@ const (
AZFDIV
AZFDIVR
AZFDOT
+ AZFDUP
AZFEXPA
AZFLOGB
AZFMAD
@@ -286,6 +302,7 @@ const (
AZFSQRT
AZFSUB
AZFSUBR
+ AZFTMAD
AZFTSMUL
AZFTSSEL
AZHISTCNT
@@ -347,6 +364,8 @@ const (
AZREVD
AZREVH
AZREVW
+ AZRSHRNB
+ AZRSHRNT
AZRSUBHNB
AZRSUBHNT
AZSABA
@@ -373,8 +392,11 @@ const (
AZSDOT
AZSEL
AZSHADD
+ AZSHRNB
+ AZSHRNT
AZSHSUB
AZSHSUBR
+ AZSLI
AZSM4E
AZSM4EKEY
AZSMAX
@@ -402,6 +424,7 @@ const (
AZSPLICE
AZSQABS
AZSQADD
+ AZSQCADD
AZSQDECP
AZSQDMLALB
AZSQDMLALBT
@@ -414,13 +437,23 @@ const (
AZSQDMULLT
AZSQINCP
AZSQNEG
+ AZSQRDCMLAH
AZSQRDMLAH
AZSQRDMLSH
AZSQRDMULH
AZSQRSHL
AZSQRSHLR
+ AZSQRSHRNB
+ AZSQRSHRNT
+ AZSQRSHRUNB
+ AZSQRSHRUNT
AZSQSHL
AZSQSHLR
+ AZSQSHLU
+ AZSQSHRNB
+ AZSQSHRNT
+ AZSQSHRUNB
+ AZSQSHRUNT
AZSQSUB
AZSQSUBR
AZSQXTNB
@@ -428,8 +461,14 @@ const (
AZSQXTUNB
AZSQXTUNT
AZSRHADD
+ AZSRI
AZSRSHL
AZSRSHLR
+ AZSRSHR
+ AZSRSRA
+ AZSSHLLB
+ AZSSHLLT
+ AZSSRA
AZSSUBLB
AZSSUBLBT
AZSSUBLT
@@ -502,8 +541,12 @@ const (
AZUQINCP
AZUQRSHL
AZUQRSHLR
+ AZUQRSHRNB
+ AZUQRSHRNT
AZUQSHL
AZUQSHLR
+ AZUQSHRNB
+ AZUQSHRNT
AZUQSUB
AZUQSUBR
AZUQXTNB
@@ -512,10 +555,15 @@ const (
AZURHADD
AZURSHL
AZURSHLR
+ AZURSHR
AZURSQRTE
+ AZURSRA
AZUSDOT
+ AZUSHLLB
+ AZUSHLLT
AZUSMMLA
AZUSQADD
+ AZUSRA
AZUSUBLB
AZUSUBLT
AZUSUBWB
@@ -529,6 +577,7 @@ const (
AZUZP2
AZUZPQ1
AZUZPQ2
+ AZXAR
AZZIP1
AZZIP2
AZZIPQ1
diff --git a/src/cmd/internal/obj/arm64/inst.go b/src/cmd/internal/obj/arm64/inst.go
index dd9c802aab..131d0211af 100644
--- a/src/cmd/internal/obj/arm64/inst.go
+++ b/src/cmd/internal/obj/arm64/inst.go
@@ -8,6 +8,8 @@ import (
"cmd/internal/obj"
"fmt"
"iter"
+ "math"
+ "math/bits"
)
// instEncoder represents an instruction encoder.
@@ -126,6 +128,9 @@ func aclass(a *obj.Addr) AClass {
return AC_SPZGREG
}
}
+ if a.Type == obj.TYPE_CONST || a.Type == obj.TYPE_FCONST {
+ return AC_IMM
+ }
panic("unknown AClass")
}
@@ -197,6 +202,28 @@ 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_IMM
+ // GNU mnemonic: <imm>, <shift>
+ // Go mnemonic:
+ // $imm<<shift
+ // Encoding:
+ // Type = TYPE_CONST or TYPE_FCONST
+ // Offset = imm (shift already applied)
+ case AC_IMM:
+ switch index {
+ case 0:
+ if a.Type == obj.TYPE_FCONST {
+ switch v := a.Val.(type) {
+ case float64:
+ return math.Float32bits(float32(v))
+ default:
+ panic(fmt.Errorf("unknown float immediate value %v", a.Val))
+ }
+ }
+ return uint32(a.Offset)
+ default:
+ panic(fmt.Errorf("unknown elm index at %d in AClass %d", index, acl))
+ }
}
// TODO: handle more AClasses.
panic(fmt.Errorf("unknown AClass %d", acl))
@@ -204,6 +231,11 @@ func addrComponent(a *obj.Addr, acl AClass, index int) uint32 {
var codeI1Tsz uint32 = 0xffffffff
var codeImm2Tsz uint32 = 0xfffffffe
+var codeShift161919212223 uint32 = 0xfffffffd
+var codeShift161919212224 uint32 = 0xfffffffc
+var codeShift588102224 uint32 = 0xfffffffb
+var codeLogicalImmArrEncoding uint32 = 0xfffffffa
+var codeNoOp uint32 = 0xfffffff9
// 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".
@@ -292,6 +324,203 @@ func encodeImm2Tsz(v, arr uint32) (uint32, bool) {
}
}
+type arrAlignType int
+
+const (
+ arrAlignBHSD arrAlignType = iota
+ arrAlignHSD
+ arrAlignBHS
+)
+
+// encodeShiftTriple encodes an shift immediate value in "tszh:tszl:imm3".
+// tszh, tszl, imm3 are in ranges, sorted by bit position.
+// These shifts are also bounded by arrangement element size.
+func encodeShiftTriple(v uint32, r [6]int, prevAddr *obj.Addr, op obj.As) (uint32, bool) {
+ // The previous op must be a scalable vector, and we need its arrangement.
+ acl := aclass(prevAddr)
+ if acl != AC_ARNG {
+ return 0, false
+ }
+ arr := addrComponent(prevAddr, acl, 1) // Get arrangement
+ elemBits := uint32(0)
+ switch arr {
+ case ARNG_B:
+ elemBits = 8
+ case ARNG_H:
+ elemBits = 16
+ case ARNG_S:
+ elemBits = 32
+ case ARNG_D:
+ elemBits = 64
+ default:
+ return 0, false
+ }
+ if v >= elemBits {
+ return 0, false
+ }
+ var C uint32
+ // Unfortunately these information are in the decoding ASL.
+ // For these instructions, the esize (see comment in the switch below)
+ // is derived from the destination arrangement, however how this function is called is deriving
+ // the esize from one of the source.
+ // We need to address this discrepancy.
+ effectiveEsize := elemBits
+ switch op {
+ case AZRSHRNB, AZRSHRNT, AZSHRNB, AZSHRNT, AZSQRSHRNB, AZSQRSHRNT, AZSQRSHRUNB, AZSQRSHRUNT,
+ AZSQSHRNB, AZSQSHRNT, AZSQSHRUNB, AZSQSHRUNT, AZUQRSHRNB, AZUQRSHRNT, AZUQSHRNB, AZUQSHRNT:
+ effectiveEsize = elemBits / 2
+ }
+ switch op {
+ case AZASR, AZLSR, AZURSHR, AZASRD,
+ AZRSHRNB, AZRSHRNT, AZSHRNB, AZSHRNT, AZSQRSHRNB, AZSQRSHRNT, AZSQRSHRUNB, AZSQRSHRUNT,
+ AZSQSHRNB, AZSQSHRNT, AZSQSHRUNB, AZSQSHRUNT, AZSRSHR, AZUQRSHRNB, AZUQRSHRNT, AZUQSHRNB, AZUQSHRNT,
+ AZURSRA, AZUSRA, AZXAR, AZSRI, AZSRSRA, AZSSRA:
+ // ASL: let shift : integer = (2 * esize) - UInt(tsize::imm3);
+ if v == 0 {
+ return 0, false
+ }
+ C = (2 * effectiveEsize) - v
+ default:
+ // ASL: let shift : integer = UInt(tsize::imm3) - esize;
+ C = effectiveEsize + v
+ }
+ var chunks [3]uint32
+ for i := 0; i < 6; i += 2 {
+ chunks[i/2] = C & ((1 << (r[i+1] - r[i])) - 1)
+ C >>= (r[i+1] - r[i])
+ }
+ return uint32((chunks[0] << r[0]) |
+ (chunks[1] << r[2]) |
+ (chunks[2] << r[4])), true
+}
+
+// encodeLogicalImmEncoding is the implementation of the following encoding logic:
+// Is the size specifier,
+// imm13 <T>
+// 0xxxxxx0xxxxx S
+// 0xxxxxx10xxxx H
+// 0xxxxxx110xxx B
+// 0xxxxxx1110xx B
+// 0xxxxxx11110x B
+// 0xxxxxx11111x RESERVED
+// 1xxxxxxxxxxxx D
+// At the meantime:
+// Is a 64, 32, 16 or 8-bit bitmask consisting of replicated 2, 4, 8, 16, 32 or 64 bit fields,
+// each field containing a rotated run of non-zero bits, encoded in the "imm13" field.
+//
+// bit range mappings:
+// imm13: [5:18)
+//
+// ARM created a "clever" recipe that can generate useful repeating 8-64 bit bitmasks.
+// Instead of storing the literal binary number, the processor reads a 13-bit recipe
+// using three fields (bits from high to low):
+// N (1 bit), immr (6 bits), and imms (6 bits).
+//
+// How the recipe works:
+// Every logical immediate represents a repeating pattern (like repeating tiles). The processor
+// uses the three fields to figure out the size of the tile, how many 1s are in the tile, and
+// how far to rotate it.
+// The N bit combined with the upper bits of imms determines the width of the repeating block.
+// Depending on these bits, the fundamental block can be 2, 4, 8, 16, 32, or 64 bits wide.
+// The lower bits of imms dictate exactly how many contiguous 1s exist inside that block.
+// The immr value tells the processor how many bits to rotate that block to the right.
+// Finally, the resulting block is duplicated to fill a standard 64-bit lane.
+func encodeLogicalImmArrEncoding(v uint32, adjacentAddr *obj.Addr) (uint32, bool) {
+ acl := aclass(adjacentAddr)
+ if acl != AC_ARNG {
+ return 0, false
+ }
+ arr := addrComponent(adjacentAddr, acl, 1)
+
+ // Replicate the given immediate to fill a full 64-bit lane.
+ // This ensures our pattern-shrinking logic naturally respects the vector lane bounds.
+ var val uint64
+ switch arr {
+ case ARNG_B: // 8-bit lane
+ v8 := uint64(v & 0xFF)
+ val = v8 * 0x0101010101010101
+ case ARNG_H: // 16-bit lane
+ v16 := uint64(v & 0xFFFF)
+ val = v16 * 0x0001000100010001
+ case ARNG_S: // 32-bit lane
+ v32 := uint64(v)
+ val = v32 | (v32 << 32)
+ case ARNG_D: // 64-bit lane
+ val = uint64(v) // Top 32 bits are implicitly 0
+ default:
+ return 0, false
+ }
+
+ // Reject all zeros or all ones (handled by MOV/EOR, invalid for AND/ORR immediates)
+ if val == 0 || val == ^uint64(0) {
+ return 0, false
+ }
+
+ // Find the absolute smallest repeating pattern size (64 down to 2)
+ size := uint64(64)
+ for size > 2 {
+ half := size / 2
+ mask := (uint64(1) << half) - 1
+ lower := val & mask
+ upper := (val >> half) & mask
+
+ // If the top half matches the bottom half, shrink our window
+ if lower == upper {
+ size = half
+ val = lower
+ } else {
+ break
+ }
+ }
+
+ // Count the contiguous ones in this minimal pattern
+ mask := (uint64(1) << size) - 1
+ val &= mask
+ ones := bits.OnesCount64(val)
+
+ // Find the right-rotation (rot) needed to align the 1s at the bottom
+ expected := (uint64(1) << ones) - 1
+ rot := -1
+ for r := 0; r < int(size); r++ {
+ // Right rotate 'val' by 'r' bits within a 'size'-bit window
+ rotated := ((val >> r) | (val << (int(size) - r))) & mask
+ if rotated == expected {
+ rot = r
+ break
+ }
+ }
+
+ if rot == -1 {
+ return 0, false
+ }
+
+ // immr is the amount the hardware must right-rotate the base pattern.
+ // Since 'rot' is how much we right-rotated the target to find the base,
+ // the hardware needs the inverse rotation.
+ immr := uint32((int(size) - rot) % int(size))
+
+ // If we couldn't find a rotation that forms a perfect contiguous block of 1s, it's invalid.
+ if rot == -1 {
+ return 0, false
+ }
+
+ // Encode N, immr, and imms
+ n := uint32(0)
+ if size == 64 {
+ n = 1
+ }
+
+ // The imms prefix is mathematically generated by (~(size*2 - 1) & 0x3F).
+ // We then OR it with the number of ones (minus 1).
+ imms := (uint32(^(size*2 - 1)) & 0x3F) | uint32(ones-1)
+
+ // Construct the final 13-bit field: N (1) | immr (6) | imms (6)
+ imm13 := (n << 12) | (immr << 6) | imms
+
+ // Shift by 5 to place imm13 into instruction bits [5:17]
+ return imm13 << 5, true
+}
+
// 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
@@ -300,7 +529,11 @@ func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
// The 2 instances of <Tb> must encode to the same value.
encoded := map[component]uint32{}
opIdx := 0
+ var addrs []*obj.Addr
for addr := range opsInProg(p) {
+ addrs = append(addrs, addr)
+ }
+ for ii, addr := range addrs {
if opIdx >= len(i.args) {
return 0, false
}
@@ -312,13 +545,36 @@ func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
}
for i, enc := range op.elemEncoders {
val := addrComponent(addr, acl, i)
+ if (p.As == AZFCPY || p.As == AZFDUP) && acl == AC_IMM {
+ // These instructions expects ARM's 8-bit float encoding.
+ // Reinterpret the uint32 bits back as a float32, then convert to float64 for chipfloat7
+ fval := float64(math.Float32frombits(val))
+ encode := (&ctxt7{}).chipfloat7(fval)
+ if encode == -1 {
+ // Handle error or return false to indicate mismatch
+ return 0, false
+ }
+ val = uint32(encode)
+ }
if b, ok := enc.fn(val); ok || b != 0 {
+ specialB := uint32(b)
if !ok {
+ specialB = b
switch b {
case codeI1Tsz:
b, ok = encodeI1Tsz(val, addrComponent(addr, acl, i-1))
case codeImm2Tsz:
b, ok = encodeImm2Tsz(val, addrComponent(addr, acl, i-1))
+ case codeShift161919212223:
+ b, ok = encodeShiftTriple(val, [6]int{16, 19, 19, 21, 22, 23}, addrs[ii+1], p.As)
+ case codeShift161919212224:
+ b, ok = encodeShiftTriple(val, [6]int{16, 19, 19, 21, 22, 24}, addrs[ii+1], p.As)
+ case codeShift588102224:
+ b, ok = encodeShiftTriple(val, [6]int{5, 8, 8, 10, 22, 24}, addrs[ii+1], p.As)
+ case codeLogicalImmArrEncoding:
+ b, ok = encodeLogicalImmArrEncoding(val, addrs[ii+1])
+ case codeNoOp:
+ b, ok = 0, true
default:
panic(fmt.Errorf("unknown encoding function code %d", b))
}
@@ -328,6 +584,10 @@ func (i *instEncoder) tryEncode(p *obj.Prog) (uint32, bool) {
}
bin |= b
if _, ok := encoded[enc.comp]; ok && b != encoded[enc.comp] {
+ if specialB == codeNoOp {
+ // NoOp encodings don't need checks.
+ continue
+ }
return 0, false
}
if enc.comp != enc_NIL {
diff --git a/src/cmd/internal/obj/arm64/inst_gen.go b/src/cmd/internal/obj/arm64/inst_gen.go
index b1370c531f..cd13e3e022 100644
--- a/src/cmd/internal/obj/arm64/inst_gen.go
+++ b/src/cmd/internal/obj/arm64/inst_gen.go
@@ -6,6 +6,24 @@ package arm64
// insts are grouped by [goOp].
var insts = [][]instEncoder{
+ // ADDPL
+ {
+ // ADDPL #<imm>, <Xn|SP>, <Xd|SP>
+ {
+ goOp: AADDPL,
+ fixedBits: 0x4605000,
+ args: cimm__XnSP__XdSP,
+ },
+ },
+ // ADDVL
+ {
+ // ADDVL #<imm>, <Xn|SP>, <Xd|SP>
+ {
+ goOp: AADDVL,
+ fixedBits: 0x4205000,
+ args: cimm__XnSP__XdSP,
+ },
+ },
// CTERMEQ
{
// CTERMEQ <R><m>, <R><n>
@@ -714,6 +732,15 @@ var insts = [][]instEncoder{
args: Pm_T__Pn_T__Pd_T,
},
},
+ // RDVL
+ {
+ // RDVL #<imm>, <Xd>
+ {
+ goOp: ARDVL,
+ fixedBits: 0x4bf5000,
+ args: cimm__Xd,
+ },
+ },
// SETFFR
{
// SETFFR
@@ -770,6 +797,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4200000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZADD #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZADD,
+ fixedBits: 0x2520c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
},
// ZADDHNB
{
@@ -878,17 +911,23 @@ var insts = [][]instEncoder{
},
// ZAND
{
+ // ZAND <Zm>.D, <Zn>.D, <Zd>.D
+ {
+ goOp: AZAND,
+ fixedBits: 0x4203000,
+ args: Zm_D__Zn_D__Zd_D,
+ },
// ZAND <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZAND,
fixedBits: 0x41a0000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
- // ZAND <Zm>.D, <Zn>.D, <Zd>.D
+ // ZAND #<const>, <Zdn>.<T>, <Zdn>.<T>
{
goOp: AZAND,
- fixedBits: 0x4203000,
- args: Zm_D__Zn_D__Zd_D,
+ fixedBits: 0x5800000,
+ args: cconst__Zdn_T__Zdn_T,
},
},
// ZANDQV
@@ -938,12 +977,6 @@ var insts = [][]instEncoder{
},
// ZASR
{
- // ZASR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZASR,
- fixedBits: 0x4108000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
- },
// ZASR <Zm>.D, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZASR,
@@ -956,6 +989,33 @@ var insts = [][]instEncoder{
fixedBits: 0x4208000,
args: Zm_D__Zn_T__Zd_T,
},
+ // ZASR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZASR,
+ fixedBits: 0x4108000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ },
+ // ZASR #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZASR,
+ fixedBits: 0x4008000,
+ args: cconst__Zdn_T__PgM__Zdn_T__1,
+ },
+ // ZASR #<const>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZASR,
+ fixedBits: 0x4209000,
+ args: cconst__Zn_T__Zd_T__1,
+ },
+ },
+ // ZASRD
+ {
+ // ZASRD #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZASRD,
+ fixedBits: 0x4048000,
+ args: cconst__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZASRR
{
@@ -1085,18 +1145,18 @@ 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,
fixedBits: 0x64608000,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZBFDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFDOT,
+ fixedBits: 0x64604000,
+ args: Zm_H_imm___Zn_H__Zda_S__3,
+ },
},
// ZBFMAX
{
@@ -1136,93 +1196,93 @@ 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,
fixedBits: 0x65200000,
args: Zm_H__Zn_H__PgM__Zda_H,
},
+ // ZBFMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZBFMLA,
+ fixedBits: 0x64200800,
+ args: Zm_H_imm___Zn_H__Zda_H__2,
+ },
},
// 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,
fixedBits: 0x64e08000,
args: Zm_H__Zn_H__Zda_S,
},
- },
- // ZBFMLALT
- {
- // ZBFMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ // ZBFMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
- goOp: AZBFMLALT,
- fixedBits: 0x64e04400,
+ goOp: AZBFMLALB,
+ fixedBits: 0x64e04000,
args: Zm_H_imm___Zn_H__Zda_S__2,
},
+ },
+ // ZBFMLALT
+ {
// ZBFMLALT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLALT,
fixedBits: 0x64e08400,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZBFMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLALT,
+ fixedBits: 0x64e04400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
},
// 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,
fixedBits: 0x65202000,
args: Zm_H__Zn_H__PgM__Zda_H,
},
+ // ZBFMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZBFMLS,
+ fixedBits: 0x64200c00,
+ args: Zm_H_imm___Zn_H__Zda_H__2,
+ },
},
// 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,
fixedBits: 0x64e0a000,
args: Zm_H__Zn_H__Zda_S,
},
- },
- // ZBFMLSLT
- {
- // ZBFMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ // ZBFMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
- goOp: AZBFMLSLT,
- fixedBits: 0x64e06400,
+ goOp: AZBFMLSLB,
+ fixedBits: 0x64e06000,
args: Zm_H_imm___Zn_H__Zda_S__2,
},
+ },
+ // ZBFMLSLT
+ {
// ZBFMLSLT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZBFMLSLT,
fixedBits: 0x64e0a400,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZBFMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZBFMLSLT,
+ fixedBits: 0x64e06400,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
},
// ZBFMMLA
{
@@ -1241,12 +1301,6 @@ var insts = [][]instEncoder{
},
// ZBFMUL
{
- // ZBFMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
- {
- goOp: AZBFMUL,
- fixedBits: 0x64202800,
- args: Zm_H_imm___Zn_H__Zd_H__2,
- },
// ZBFMUL <Zm>.H, <Zdn>.H, <Pg>/M, <Zdn>.H
{
goOp: AZBFMUL,
@@ -1259,6 +1313,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65000800,
args: Zm_H__Zn_H__Zd_H,
},
+ // ZBFMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZBFMUL,
+ fixedBits: 0x64202800,
+ args: Zm_H_imm___Zn_H__Zd_H__2,
+ },
},
// ZBFSCALE
{
@@ -1295,18 +1355,18 @@ var insts = [][]instEncoder{
},
// ZBIC
{
- // ZBIC <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZBIC,
- fixedBits: 0x41b0000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
- },
// ZBIC <Zm>.D, <Zn>.D, <Zd>.D
{
goOp: AZBIC,
fixedBits: 0x4e03000,
args: Zm_D__Zn_D__Zd_D,
},
+ // ZBIC <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZBIC,
+ fixedBits: 0x41b0000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZBSL
{
@@ -1335,20 +1395,50 @@ var insts = [][]instEncoder{
args: Zk_D__Zm_D__Zdn_D__Zdn_D,
},
},
- // ZCLASTA
+ // ZCADD
{
- // ZCLASTA <Zm>.<T>, <R><dn>, <Pg>, <R><dn>
+ // ZCADD <const>, <Zm>.<T>, <Zdn>.<T>, <Zdn>.<T>
{
- goOp: AZCLASTA,
- fixedBits: 0x5f0a000,
- args: Zm_T__Rdn__Pg__Rdn,
+ goOp: AZCADD,
+ fixedBits: 0x4500d800,
+ args: const__Zm_T__Zdn_T__Zdn_T,
},
+ },
+ // ZCDOT
+ {
+ // ZCDOT <const>, <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZCDOT,
+ fixedBits: 0x44a04000,
+ args: const__Zm_B_imm___Zn_B__Zda_S,
+ },
+ // ZCDOT <const>, <Zm>.H[<imm>], <Zn>.H, <Zda>.D
+ {
+ goOp: AZCDOT,
+ fixedBits: 0x44e04000,
+ args: const__Zm_H_imm___Zn_H__Zda_D,
+ },
+ // ZCDOT <const>, <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZCDOT,
+ fixedBits: 0x44801000,
+ args: const__Zm_Tb__Zn_Tb__Zda_T,
+ },
+ },
+ // ZCLASTA
+ {
// ZCLASTA <Zm>.<T>, <Zdn>.<T>, <Pg>, <Zdn>.<T>
{
goOp: AZCLASTA,
fixedBits: 0x5288000,
args: Zm_T__Zdn_T__Pg__Zdn_T,
},
+ // ZCLASTA <Zm>.<T>, <R><dn>, <Pg>, <R><dn>
+ {
+ goOp: AZCLASTA,
+ fixedBits: 0x5f0a000,
+ args: Zm_T__Rdn__Pg__Rdn,
+ },
},
// ZCLASTAB
{
@@ -1397,18 +1487,18 @@ var insts = [][]instEncoder{
},
// ZCLASTB
{
- // ZCLASTB <Zm>.<T>, <R><dn>, <Pg>, <R><dn>
- {
- goOp: AZCLASTB,
- fixedBits: 0x5f1a000,
- args: Zm_T__Rdn__Pg__Rdn,
- },
// ZCLASTB <Zm>.<T>, <Zdn>.<T>, <Pg>, <Zdn>.<T>
{
goOp: AZCLASTB,
fixedBits: 0x5298000,
args: Zm_T__Zdn_T__Pg__Zdn_T,
},
+ // ZCLASTB <Zm>.<T>, <R><dn>, <Pg>, <R><dn>
+ {
+ goOp: AZCLASTB,
+ fixedBits: 0x5f1a000,
+ args: Zm_T__Rdn__Pg__Rdn,
+ },
},
// ZCLASTBB
{
@@ -1485,19 +1575,46 @@ var insts = [][]instEncoder{
args: Zn_T__PgZ__Zd_T__2,
},
},
+ // ZCMLA
+ {
+ // ZCMLA <const>, <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZCMLA,
+ fixedBits: 0x44a06000,
+ args: const__Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZCMLA <const>, <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZCMLA,
+ fixedBits: 0x44e06000,
+ args: const__Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZCMLA <const>, <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
+ {
+ goOp: AZCMLA,
+ fixedBits: 0x44002000,
+ args: const__Zm_T__Zn_T__Zda_T,
+ },
+ },
// ZCMPEQ
{
+ // ZCMPEQ <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPEQ,
+ fixedBits: 0x24002000,
+ args: Zm_D__Zn_T__PgZ__Pd_T,
+ },
// ZCMPEQ <Zm>.<T>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPEQ,
fixedBits: 0x2400a000,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
- // ZCMPEQ <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ // ZCMPEQ #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPEQ,
- fixedBits: 0x24002000,
- args: Zm_D__Zn_T__PgZ__Pd_T,
+ fixedBits: 0x25008000,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
},
},
// ZCMPGE
@@ -1514,50 +1631,74 @@ var insts = [][]instEncoder{
fixedBits: 0x24008000,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
+ // ZCMPGE #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPGE,
+ fixedBits: 0x25000000,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
+ },
},
// 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>
+ // ZCMPGT #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPGT,
- fixedBits: 0x24004010,
- args: Zm_D__Zn_T__PgZ__Pd_T,
+ fixedBits: 0x25000010,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
},
},
// ZCMPHI
{
+ // ZCMPHI <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPHI,
+ fixedBits: 0x2400c010,
+ args: Zm_D__Zn_T__PgZ__Pd_T,
+ },
// ZCMPHI <Zm>.<T>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPHI,
fixedBits: 0x24000010,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
- // ZCMPHI <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ // ZCMPHI #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPHI,
- fixedBits: 0x2400c010,
- args: Zm_D__Zn_T__PgZ__Pd_T,
+ fixedBits: 0x24200010,
+ args: cimm__Zn_T__PgZ__Pd_T__2,
},
},
// ZCMPHS
{
+ // ZCMPHS <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPHS,
+ fixedBits: 0x2400c000,
+ args: Zm_D__Zn_T__PgZ__Pd_T,
+ },
// ZCMPHS <Zm>.<T>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPHS,
fixedBits: 0x24000000,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
- // ZCMPHS <Zm>.D, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ // ZCMPHS #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
{
goOp: AZCMPHS,
- fixedBits: 0x2400c000,
- args: Zm_D__Zn_T__PgZ__Pd_T,
+ fixedBits: 0x24200000,
+ args: cimm__Zn_T__PgZ__Pd_T__2,
},
},
// ZCMPLE
@@ -1568,6 +1709,12 @@ var insts = [][]instEncoder{
fixedBits: 0x24006010,
args: Zm_D__Zn_T__PgZ__Pd_T,
},
+ // ZCMPLE #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPLE,
+ fixedBits: 0x25002010,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
+ },
},
// ZCMPLO
{
@@ -1577,6 +1724,12 @@ var insts = [][]instEncoder{
fixedBits: 0x2400e000,
args: Zm_D__Zn_T__PgZ__Pd_T,
},
+ // ZCMPLO #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPLO,
+ fixedBits: 0x24202000,
+ args: cimm__Zn_T__PgZ__Pd_T__2,
+ },
},
// ZCMPLS
{
@@ -1586,6 +1739,12 @@ var insts = [][]instEncoder{
fixedBits: 0x2400e010,
args: Zm_D__Zn_T__PgZ__Pd_T,
},
+ // ZCMPLS #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPLS,
+ fixedBits: 0x24202010,
+ args: cimm__Zn_T__PgZ__Pd_T__2,
+ },
},
// ZCMPLT
{
@@ -1595,6 +1754,12 @@ var insts = [][]instEncoder{
fixedBits: 0x24006000,
args: Zm_D__Zn_T__PgZ__Pd_T,
},
+ // ZCMPLT #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPLT,
+ fixedBits: 0x25002000,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
+ },
},
// ZCMPNE
{
@@ -1610,21 +1775,27 @@ var insts = [][]instEncoder{
fixedBits: 0x2400a010,
args: Zm_T__Zn_T__PgZ__Pd_T__2,
},
+ // ZCMPNE #<imm>, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZCMPNE,
+ fixedBits: 0x25008010,
+ args: cimm__Zn_T__PgZ__Pd_T__1,
+ },
},
// ZCNOT
{
- // ZCNOT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZCNOT,
- fixedBits: 0x40ba000,
- args: Zn_T__PgZ__Zd_T__2,
- },
// ZCNOT <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZCNOT,
fixedBits: 0x41ba000,
args: Zn_T__PgM__Zd_T__2,
},
+ // ZCNOT <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZCNOT,
+ fixedBits: 0x40ba000,
+ args: Zn_T__PgZ__Zd_T__2,
+ },
},
// ZCNT
{
@@ -1646,14 +1817,14 @@ var insts = [][]instEncoder{
// 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,
},
// 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,
},
},
// ZCPY
@@ -1664,6 +1835,18 @@ var insts = [][]instEncoder{
fixedBits: 0x5e8a000,
args: RnSP__PgM__Zd_T,
},
+ // ZCPY #<imm>{, <shift>}, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZCPY,
+ fixedBits: 0x5104000,
+ args: cimm__shift__PgM__Zd_T,
+ },
+ // ZCPY #<imm>{, <shift>}, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZCPY,
+ fixedBits: 0x5100000,
+ args: cimm__shift__PgZ__Zd_T,
+ },
},
// ZCPYB
{
@@ -1733,6 +1916,21 @@ var insts = [][]instEncoder{
fixedBits: 0x5202000,
args: Zn_T_imm___Zd_T__1,
},
+ // ZDUP #<imm>{, <shift>}, <Zd>.<T>
+ {
+ goOp: AZDUP,
+ fixedBits: 0x2538c000,
+ args: cimm__shift__Zd_T,
+ },
+ },
+ // ZDUPM
+ {
+ // ZDUPM #<const>, <Zd>.<T>
+ {
+ goOp: AZDUPM,
+ fixedBits: 0x5c00000,
+ args: cconst__Zd_T__1,
+ },
},
// ZDUPQ
{
@@ -1754,17 +1952,23 @@ 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
+ // ZEOR #<const>, <Zdn>.<T>, <Zdn>.<T>
{
goOp: AZEOR,
- fixedBits: 0x4a03000,
- args: Zm_D__Zn_D__Zd_D,
+ fixedBits: 0x5400000,
+ args: cconst__Zdn_T__Zdn_T,
},
},
// ZEOR3
@@ -1848,6 +2052,24 @@ var insts = [][]instEncoder{
args: Zn_T__Pg__Zd_T__3,
},
},
+ // ZEXT
+ {
+ // ZEXT #<imm>, <Zm>.B, <Zdn>.B, <Zdn>.B
+ {
+ goOp: AZEXT,
+ fixedBits: 0x5200000,
+ args: cimm__Zm_B__Zdn_B__Zdn_B__1,
+ },
+ },
+ // ZEXTQ
+ {
+ // ZEXTQ #<imm>, <Zm>.B, <Zdn>.B, <Zdn>.B
+ {
+ goOp: AZEXTQ,
+ fixedBits: 0x5602400,
+ args: cimm__Zm_B__Zdn_B__Zdn_B__2,
+ },
+ },
// ZF1CVT
{
// ZF1CVT <Zn>.B, <Zd>.H
@@ -1895,18 +2117,18 @@ var insts = [][]instEncoder{
},
// ZFABS
{
- // ZFABS <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZFABS,
- fixedBits: 0x40ca000,
- args: Zn_T__PgZ__Zd_T__1,
- },
// ZFABS <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZFABS,
fixedBits: 0x41ca000,
args: Zn_T__PgM__Zd_T__1,
},
+ // ZFABS <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFABS,
+ fixedBits: 0x40ca000,
+ args: Zn_T__PgZ__Zd_T__1,
+ },
},
// ZFACGE
{
@@ -1928,17 +2150,23 @@ 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>
+ // ZFADD <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZFADD,
- fixedBits: 0x65008000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__3,
+ fixedBits: 0x65188000,
+ args: const__Zdn_T__PgM__Zdn_T__2,
},
},
// ZFADDAD
@@ -2031,6 +2259,15 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__2,
},
},
+ // ZFCADD
+ {
+ // ZFCADD <const>, <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFCADD,
+ fixedBits: 0x64008000,
+ args: const__Zm_T__Zdn_T__PgM__Zdn_T,
+ },
+ },
// ZFCLAMP
{
// ZFCLAMP <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
@@ -2048,6 +2285,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65006000,
args: Zm_T__Zn_T__PgZ__Pd_T__1,
},
+ // ZFCMEQ #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMEQ,
+ fixedBits: 0x65122000,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
},
// ZFCMGE
{
@@ -2057,6 +2300,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65004000,
args: Zm_T__Zn_T__PgZ__Pd_T__1,
},
+ // ZFCMGE #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMGE,
+ fixedBits: 0x65102000,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
},
// ZFCMGT
{
@@ -2066,6 +2315,51 @@ var insts = [][]instEncoder{
fixedBits: 0x65004010,
args: Zm_T__Zn_T__PgZ__Pd_T__1,
},
+ // ZFCMGT #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMGT,
+ fixedBits: 0x65102010,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
+ },
+ // ZFCMLA
+ {
+ // ZFCMLA <const>, <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ {
+ goOp: AZFCMLA,
+ fixedBits: 0x64a01000,
+ args: const__Zm_H_imm___Zn_H__Zda_H__2,
+ },
+ // ZFCMLA <const>, <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZFCMLA,
+ fixedBits: 0x64e01000,
+ args: const__Zm_S_imm___Zn_S__Zda_S__2,
+ },
+ // ZFCMLA <const>, <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
+ {
+ goOp: AZFCMLA,
+ fixedBits: 0x64000000,
+ args: const__Zm_T__Zn_T__PgM__Zda_T,
+ },
+ },
+ // ZFCMLE
+ {
+ // ZFCMLE #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMLE,
+ fixedBits: 0x65112010,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
+ },
+ // ZFCMLT
+ {
+ // ZFCMLT #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMLT,
+ fixedBits: 0x65112000,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
},
// ZFCMNE
{
@@ -2075,6 +2369,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65006010,
args: Zm_T__Zn_T__PgZ__Pd_T__1,
},
+ // ZFCMNE #0.0, <Zn>.<T>, <Pg>/Z, <Pd>.<T>
+ {
+ goOp: AZFCMNE,
+ fixedBits: 0x65132000,
+ args: c0_0__Zn_T__PgZ__Pd_T,
+ },
},
// ZFCMUO
{
@@ -2085,25 +2385,40 @@ var insts = [][]instEncoder{
args: Zm_T__Zn_T__PgZ__Pd_T__1,
},
},
+ // ZFCPY
+ {
+ // ZFCPY #<const>, <Pg>/M, <Zd>.<T>
+ {
+ goOp: AZFCPY,
+ fixedBits: 0x510c000,
+ args: cconst__PgM__Zd_T,
+ },
+ },
// ZFCVT
{
- // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.H
+ // ZFCVT <Zn>.D, <Pg>/M, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x649a8000,
- args: Zn_S__PgZ__Zd_H,
+ fixedBits: 0x65c8a000,
+ args: Zn_D__PgM__Zd_H,
},
- // ZFCVT <Zn>.S, <Pg>/M, <Zd>.D
+ // ZFCVT <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVT,
- fixedBits: 0x65cba000,
- args: Zn_S__PgM__Zd_D,
+ fixedBits: 0x65caa000,
+ args: Zn_D__PgM__Zd_S,
},
- // ZFCVT <Zn>.H, <Pg>/Z, <Zd>.S
+ // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x649aa000,
- args: Zn_H__PgZ__Zd_S,
+ fixedBits: 0x64da8000,
+ args: Zn_D__PgZ__Zd_H,
+ },
+ // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.S
+ {
+ goOp: AZFCVT,
+ fixedBits: 0x64dac000,
+ args: Zn_D__PgZ__Zd_S,
},
// ZFCVT <Zn>.H, <Pg>/M, <Zd>.D
{
@@ -2111,29 +2426,35 @@ var insts = [][]instEncoder{
fixedBits: 0x65c9a000,
args: Zn_H__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>.D
{
goOp: AZFCVT,
fixedBits: 0x64daa000,
args: Zn_H__PgZ__Zd_D,
},
- // ZFCVT <Zn>.S, <Pg>/M, <Zd>.H
+ // ZFCVT <Zn>.H, <Pg>/Z, <Zd>.S
{
goOp: AZFCVT,
- fixedBits: 0x6588a000,
- args: Zn_S__PgM__Zd_H,
+ fixedBits: 0x649aa000,
+ args: Zn_H__PgZ__Zd_S,
},
- // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.S
+ // ZFCVT <Zn>.S, <Pg>/M, <Zd>.D
{
goOp: AZFCVT,
- fixedBits: 0x64dac000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x65cba000,
+ args: Zn_S__PgM__Zd_D,
},
- // ZFCVT <Zn>.H, <Pg>/M, <Zd>.S
+ // ZFCVT <Zn>.S, <Pg>/M, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x6589a000,
- args: Zn_H__PgM__Zd_S,
+ fixedBits: 0x6588a000,
+ args: Zn_S__PgM__Zd_H,
},
// ZFCVT <Zn>.S, <Pg>/Z, <Zd>.D
{
@@ -2141,33 +2462,15 @@ var insts = [][]instEncoder{
fixedBits: 0x64dae000,
args: Zn_S__PgZ__Zd_D,
},
- // ZFCVT <Zn>.D, <Pg>/M, <Zd>.H
- {
- goOp: AZFCVT,
- fixedBits: 0x65c8a000,
- args: Zn_D__PgM__Zd_H,
- },
- // ZFCVT <Zn>.D, <Pg>/Z, <Zd>.H
- {
- goOp: AZFCVT,
- fixedBits: 0x64da8000,
- args: Zn_D__PgZ__Zd_H,
- },
- // ZFCVT <Zn>.D, <Pg>/M, <Zd>.S
+ // ZFCVT <Zn>.S, <Pg>/Z, <Zd>.H
{
goOp: AZFCVT,
- fixedBits: 0x65caa000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x649a8000,
+ args: Zn_S__PgZ__Zd_H,
},
},
// 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,
@@ -2186,21 +2489,15 @@ 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
{
- // ZFCVTNT <Zn>.S, <Pg>/Z, <Zd>.H
- {
- goOp: AZFCVTNT,
- fixedBits: 0x6480a000,
- args: Zn_S__PgZ__Zd_H,
- },
- // ZFCVTNT <Zn>.S, <Pg>/M, <Zd>.H
- {
- goOp: AZFCVTNT,
- fixedBits: 0x6488a000,
- args: Zn_S__PgM__Zd_H,
- },
// ZFCVTNT <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVTNT,
@@ -2213,6 +2510,18 @@ var insts = [][]instEncoder{
fixedBits: 0x64c2a000,
args: Zn_D__PgZ__Zd_S,
},
+ // ZFCVTNT <Zn>.S, <Pg>/M, <Zd>.H
+ {
+ goOp: AZFCVTNT,
+ fixedBits: 0x6488a000,
+ args: Zn_S__PgM__Zd_H,
+ },
+ // ZFCVTNT <Zn>.S, <Pg>/Z, <Zd>.H
+ {
+ goOp: AZFCVTNT,
+ fixedBits: 0x6480a000,
+ args: Zn_S__PgZ__Zd_H,
+ },
},
// ZFCVTX
{
@@ -2231,38 +2540,32 @@ var insts = [][]instEncoder{
},
// ZFCVTXNT
{
- // ZFCVTXNT <Zn>.D, <Pg>/Z, <Zd>.S
- {
- goOp: AZFCVTXNT,
- fixedBits: 0x6402a000,
- args: Zn_D__PgZ__Zd_S,
- },
// ZFCVTXNT <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVTXNT,
fixedBits: 0x640aa000,
args: Zn_D__PgM__Zd_S,
},
+ // ZFCVTXNT <Zn>.D, <Pg>/Z, <Zd>.S
+ {
+ goOp: AZFCVTXNT,
+ fixedBits: 0x6402a000,
+ args: Zn_D__PgZ__Zd_S,
+ },
},
// ZFCVTZS
{
- // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.S
- {
- goOp: AZFCVTZS,
- fixedBits: 0x655ca000,
- args: Zn_H__PgM__Zd_S,
- },
- // ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.S
+ // ZFCVTZS <Zn>.D, <Pg>/M, <Zd>.D
{
goOp: AZFCVTZS,
- fixedBits: 0x659ca000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x65dea000,
+ args: Zn_D__PgM__Zd_D,
},
- // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.H
+ // ZFCVTZS <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x645ec000,
- args: Zn_H__PgZ__Zd_H,
+ fixedBits: 0x65d8a000,
+ args: Zn_D__PgM__Zd_S,
},
// ZFCVTZS <Zn>.D, <Pg>/Z, <Zd>.D
{
@@ -2270,11 +2573,11 @@ var insts = [][]instEncoder{
fixedBits: 0x64dfc000,
args: Zn_D__PgZ__Zd_D,
},
- // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.S
+ // ZFCVTZS <Zn>.D, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x645f8000,
- args: Zn_H__PgZ__Zd_S,
+ fixedBits: 0x64de8000,
+ args: Zn_D__PgZ__Zd_S,
},
// ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.D
{
@@ -2282,23 +2585,35 @@ var insts = [][]instEncoder{
fixedBits: 0x655ea000,
args: Zn_H__PgM__Zd_D,
},
+ // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.H
+ {
+ goOp: AZFCVTZS,
+ fixedBits: 0x655aa000,
+ args: Zn_H__PgM__Zd_H,
+ },
+ // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.S
+ {
+ goOp: AZFCVTZS,
+ fixedBits: 0x655ca000,
+ args: Zn_H__PgM__Zd_S,
+ },
// ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.D
{
goOp: AZFCVTZS,
fixedBits: 0x645fc000,
args: Zn_H__PgZ__Zd_D,
},
- // ZFCVTZS <Zn>.H, <Pg>/M, <Zd>.H
+ // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZFCVTZS,
- fixedBits: 0x655aa000,
- args: Zn_H__PgM__Zd_H,
+ fixedBits: 0x645ec000,
+ args: Zn_H__PgZ__Zd_H,
},
- // ZFCVTZS <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZFCVTZS <Zn>.H, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x649f8000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x645f8000,
+ args: Zn_H__PgZ__Zd_S,
},
// ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.D
{
@@ -2306,56 +2621,50 @@ var insts = [][]instEncoder{
fixedBits: 0x65dca000,
args: Zn_S__PgM__Zd_D,
},
- // ZFCVTZS <Zn>.S, <Pg>/Z, <Zd>.D
- {
- goOp: AZFCVTZS,
- fixedBits: 0x64df8000,
- args: Zn_S__PgZ__Zd_D,
- },
- // ZFCVTZS <Zn>.D, <Pg>/M, <Zd>.S
+ // ZFCVTZS <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x65d8a000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x659ca000,
+ args: Zn_S__PgM__Zd_S,
},
- // ZFCVTZS <Zn>.D, <Pg>/Z, <Zd>.S
+ // ZFCVTZS <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZFCVTZS,
- fixedBits: 0x64de8000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x64df8000,
+ args: Zn_S__PgZ__Zd_D,
},
- // ZFCVTZS <Zn>.D, <Pg>/M, <Zd>.D
+ // ZFCVTZS <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZS,
- fixedBits: 0x65dea000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x649f8000,
+ args: Zn_S__PgZ__Zd_S,
},
},
// ZFCVTZU
{
- // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.S
+ // ZFCVTZU <Zn>.D, <Pg>/M, <Zd>.D
{
goOp: AZFCVTZU,
- fixedBits: 0x655da000,
- args: Zn_H__PgM__Zd_S,
+ fixedBits: 0x65dfa000,
+ args: Zn_D__PgM__Zd_D,
},
- // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZFCVTZU <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x649fa000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x65d9a000,
+ args: Zn_D__PgM__Zd_S,
},
- // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.H
+ // ZFCVTZU <Zn>.D, <Pg>/Z, <Zd>.D
{
goOp: AZFCVTZU,
- fixedBits: 0x645ee000,
- args: Zn_H__PgZ__Zd_H,
+ fixedBits: 0x64dfe000,
+ args: Zn_D__PgZ__Zd_D,
},
- // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.S
+ // ZFCVTZU <Zn>.D, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x645fa000,
- args: Zn_H__PgZ__Zd_S,
+ fixedBits: 0x64dea000,
+ args: Zn_D__PgZ__Zd_S,
},
// ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.D
{
@@ -2363,59 +2672,59 @@ var insts = [][]instEncoder{
fixedBits: 0x655fa000,
args: Zn_H__PgM__Zd_D,
},
- // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.D
+ // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZFCVTZU,
- fixedBits: 0x645fe000,
- args: Zn_H__PgZ__Zd_D,
+ fixedBits: 0x655ba000,
+ args: Zn_H__PgM__Zd_H,
},
- // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.S
+ // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x659da000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x655da000,
+ args: Zn_H__PgM__Zd_S,
},
- // ZFCVTZU <Zn>.H, <Pg>/M, <Zd>.H
+ // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.D
{
goOp: AZFCVTZU,
- fixedBits: 0x655ba000,
- args: Zn_H__PgM__Zd_H,
+ fixedBits: 0x645fe000,
+ args: Zn_H__PgZ__Zd_D,
},
- // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.D
+ // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZFCVTZU,
- fixedBits: 0x65dda000,
- args: Zn_S__PgM__Zd_D,
+ fixedBits: 0x645ee000,
+ args: Zn_H__PgZ__Zd_H,
},
- // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.D
+ // ZFCVTZU <Zn>.H, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x64dfa000,
- args: Zn_S__PgZ__Zd_D,
+ fixedBits: 0x645fa000,
+ args: Zn_H__PgZ__Zd_S,
},
- // ZFCVTZU <Zn>.D, <Pg>/M, <Zd>.S
+ // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.D
{
goOp: AZFCVTZU,
- fixedBits: 0x65d9a000,
- args: Zn_D__PgM__Zd_S,
+ fixedBits: 0x65dda000,
+ args: Zn_S__PgM__Zd_D,
},
- // ZFCVTZU <Zn>.D, <Pg>/Z, <Zd>.S
+ // ZFCVTZU <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x64dea000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x659da000,
+ args: Zn_S__PgM__Zd_S,
},
- // ZFCVTZU <Zn>.D, <Pg>/M, <Zd>.D
+ // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZFCVTZU,
- fixedBits: 0x65dfa000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x64dfa000,
+ args: Zn_S__PgZ__Zd_D,
},
- // ZFCVTZU <Zn>.D, <Pg>/Z, <Zd>.D
+ // ZFCVTZU <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZFCVTZU,
- fixedBits: 0x64dfe000,
- args: Zn_D__PgZ__Zd_D,
+ fixedBits: 0x649fa000,
+ args: Zn_S__PgZ__Zd_S,
},
},
// ZFDIV
@@ -2438,17 +2747,17 @@ var insts = [][]instEncoder{
},
// ZFDOT
{
- // ZFDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
+ // ZFDOT <Zm>.B, <Zn>.B, <Zda>.H
{
goOp: AZFDOT,
- fixedBits: 0x64204400,
- args: Zm_B_imm___Zn_B__Zda_H__3,
+ fixedBits: 0x64208400,
+ args: Zm_B__Zn_B__Zda_H,
},
- // ZFDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ // ZFDOT <Zm>.B, <Zn>.B, <Zda>.S
{
goOp: AZFDOT,
- fixedBits: 0x64204000,
- args: Zm_H_imm___Zn_H__Zda_S__3,
+ fixedBits: 0x64608400,
+ args: Zm_B__Zn_B__Zda_S,
},
// ZFDOT <Zm>.H, <Zn>.H, <Zda>.S
{
@@ -2456,11 +2765,11 @@ var insts = [][]instEncoder{
fixedBits: 0x64208000,
args: Zm_H__Zn_H__Zda_S,
},
- // ZFDOT <Zm>.B, <Zn>.B, <Zda>.H
+ // ZFDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
goOp: AZFDOT,
- fixedBits: 0x64208400,
- args: Zm_B__Zn_B__Zda_H,
+ fixedBits: 0x64204400,
+ args: Zm_B_imm___Zn_B__Zda_H__3,
},
// ZFDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
{
@@ -2468,11 +2777,20 @@ var insts = [][]instEncoder{
fixedBits: 0x64604400,
args: Zm_B_imm___Zn_B__Zda_S__2,
},
- // ZFDOT <Zm>.B, <Zn>.B, <Zda>.S
+ // ZFDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZFDOT,
- fixedBits: 0x64608400,
- args: Zm_B__Zn_B__Zda_S,
+ fixedBits: 0x64204000,
+ args: Zm_H_imm___Zn_H__Zda_S__3,
+ },
+ },
+ // ZFDUP
+ {
+ // ZFDUP #<const>, <Zd>.<T>
+ {
+ goOp: AZFDUP,
+ fixedBits: 0x2539c000,
+ args: cconst__Zd_T__2,
},
},
// ZFEXPA
@@ -2516,6 +2834,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65068000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMAX <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFMAX,
+ fixedBits: 0x651e8000,
+ args: const__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZFMAXNM
{
@@ -2525,6 +2849,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65048000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMAXNM <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFMAXNM,
+ fixedBits: 0x651c8000,
+ args: const__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZFMAXNMP
{
@@ -2624,6 +2954,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65078000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMIN <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFMIN,
+ fixedBits: 0x651f8000,
+ args: const__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZFMINNM
{
@@ -2633,6 +2969,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65058000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMINNM <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFMINNM,
+ fixedBits: 0x651d8000,
+ args: const__Zdn_T__PgM__Zdn_T__1,
+ },
},
// ZFMINNMP
{
@@ -2726,18 +3068,18 @@ 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>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZFMLA,
+ fixedBits: 0x64e00000,
+ args: Zm_D_imm___Zn_D__Zda_D__2,
+ },
// ZFMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZFMLA,
@@ -2753,23 +3095,17 @@ var insts = [][]instEncoder{
},
// ZFMLALB
{
- // ZFMLALB <Zm>.H, <Zn>.H, <Zda>.S
- {
- goOp: AZFMLALB,
- fixedBits: 0x64a08000,
- args: Zm_H__Zn_H__Zda_S,
- },
// ZFMLALB <Zm>.B, <Zn>.B, <Zda>.H
{
goOp: AZFMLALB,
fixedBits: 0x64a08800,
args: Zm_B__Zn_B__Zda_H,
},
- // ZFMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ // ZFMLALB <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZFMLALB,
- fixedBits: 0x64a04000,
- args: Zm_H_imm___Zn_H__Zda_S__2,
+ fixedBits: 0x64a08000,
+ args: Zm_H__Zn_H__Zda_S,
},
// ZFMLALB <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
@@ -2777,6 +3113,12 @@ var insts = [][]instEncoder{
fixedBits: 0x64205000,
args: Zm_B_imm___Zn_B__Zda_H__1,
},
+ // ZFMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLALB,
+ fixedBits: 0x64a04000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
},
// ZFMLALLBB
{
@@ -2795,33 +3137,33 @@ var insts = [][]instEncoder{
},
// 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,
fixedBits: 0x64209800,
args: Zm_B__Zn_B__Zda_S,
},
- },
- // ZFMLALLTB
- {
- // ZFMLALLTB <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ // ZFMLALLBT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
{
- goOp: AZFMLALLTB,
- fixedBits: 0x64a0c000,
+ goOp: AZFMLALLBT,
+ fixedBits: 0x6460c000,
args: Zm_B_imm___Zn_B__Zda_S__1,
},
+ },
+ // ZFMLALLTB
+ {
// ZFMLALLTB <Zm>.B, <Zn>.B, <Zda>.S
{
goOp: AZFMLALLTB,
fixedBits: 0x6420a800,
args: Zm_B__Zn_B__Zda_S,
},
+ // ZFMLALLTB <Zm>.B[<imm>], <Zn>.B, <Zda>.S
+ {
+ goOp: AZFMLALLTB,
+ fixedBits: 0x64a0c000,
+ args: Zm_B_imm___Zn_B__Zda_S__1,
+ },
},
// ZFMLALLTT
{
@@ -2840,6 +3182,18 @@ var insts = [][]instEncoder{
},
// ZFMLALT
{
+ // ZFMLALT <Zm>.B, <Zn>.B, <Zda>.H
+ {
+ goOp: AZFMLALT,
+ fixedBits: 0x64a09800,
+ args: Zm_B__Zn_B__Zda_H,
+ },
+ // ZFMLALT <Zm>.H, <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLALT,
+ fixedBits: 0x64a08400,
+ args: Zm_H__Zn_H__Zda_S,
+ },
// ZFMLALT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
goOp: AZFMLALT,
@@ -2852,21 +3206,21 @@ var insts = [][]instEncoder{
fixedBits: 0x64a04400,
args: Zm_H_imm___Zn_H__Zda_S__2,
},
- // ZFMLALT <Zm>.H, <Zn>.H, <Zda>.S
+ },
+ // ZFMLS
+ {
+ // ZFMLS <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
{
- goOp: AZFMLALT,
- fixedBits: 0x64a08400,
- args: Zm_H__Zn_H__Zda_S,
+ goOp: AZFMLS,
+ fixedBits: 0x65202000,
+ args: Zm_T__Zn_T__PgM__Zda_T__1,
},
- // ZFMLALT <Zm>.B, <Zn>.B, <Zda>.H
+ // ZFMLS <Zm>.D[<imm>], <Zn>.D, <Zda>.D
{
- goOp: AZFMLALT,
- fixedBits: 0x64a09800,
- args: Zm_B__Zn_B__Zda_H,
+ goOp: AZFMLS,
+ fixedBits: 0x64e00400,
+ args: Zm_D_imm___Zn_D__Zda_D__2,
},
- },
- // ZFMLS
- {
// ZFMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZFMLS,
@@ -2879,33 +3233,21 @@ var insts = [][]instEncoder{
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,
- fixedBits: 0x65202000,
- args: Zm_T__Zn_T__PgM__Zda_T__1,
- },
},
// 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,
fixedBits: 0x64a0a000,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZFMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZFMLSLB,
+ fixedBits: 0x64a06000,
+ args: Zm_H_imm___Zn_H__Zda_S__2,
+ },
},
// ZFMLSLT
{
@@ -2930,11 +3272,11 @@ var insts = [][]instEncoder{
fixedBits: 0x6460e000,
args: Zm_B__Zn_B__Zda_H,
},
- // ZFMMLA <Zm>.S, <Zn>.S, <Zda>.S
+ // ZFMMLA <Zm>.B, <Zn>.B, <Zda>.S
{
goOp: AZFMMLA,
- fixedBits: 0x64a0e400,
- args: Zm_S__Zn_S__Zda_S,
+ fixedBits: 0x6420e000,
+ args: Zm_B__Zn_B__Zda_S,
},
// ZFMMLA <Zm>.D, <Zn>.D, <Zda>.D
{
@@ -2942,23 +3284,23 @@ var insts = [][]instEncoder{
fixedBits: 0x64e0e400,
args: Zm_D__Zn_D__Zda_D,
},
- // ZFMMLA <Zm>.H, <Zn>.H, <Zda>.S
- {
- goOp: AZFMMLA,
- fixedBits: 0x6420e400,
- args: Zm_H__Zn_H__Zda_S,
- },
// ZFMMLA <Zm>.H, <Zn>.H, <Zda>.H
{
goOp: AZFMMLA,
fixedBits: 0x64a0e000,
args: Zm_H__Zn_H__Zda_H,
},
- // ZFMMLA <Zm>.B, <Zn>.B, <Zda>.S
+ // ZFMMLA <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZFMMLA,
- fixedBits: 0x6420e000,
- args: Zm_B__Zn_B__Zda_S,
+ fixedBits: 0x6420e400,
+ args: Zm_H__Zn_H__Zda_S,
+ },
+ // ZFMMLA <Zm>.S, <Zn>.S, <Zda>.S
+ {
+ goOp: AZFMMLA,
+ fixedBits: 0x64a0e400,
+ args: Zm_S__Zn_S__Zda_S,
},
},
// ZFMSB
@@ -2978,6 +3320,18 @@ var insts = [][]instEncoder{
fixedBits: 0x65028000,
args: Zm_T__Zdn_T__PgM__Zdn_T__3,
},
+ // ZFMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x65000800,
+ args: Zm_T__Zn_T__Zd_T__2,
+ },
+ // ZFMUL <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZFMUL,
+ fixedBits: 0x64e02000,
+ args: Zm_D_imm___Zn_D__Zd_D__2,
+ },
// ZFMUL <Zm>.H[<imm>], <Zn>.H, <Zd>.H
{
goOp: AZFMUL,
@@ -2990,17 +3344,11 @@ var insts = [][]instEncoder{
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>
+ // ZFMUL <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZFMUL,
- fixedBits: 0x65000800,
- args: Zm_T__Zn_T__Zd_T__2,
+ fixedBits: 0x651a8000,
+ args: const__Zdn_T__PgM__Zdn_T__3,
},
},
// ZFMULX
@@ -3083,18 +3431,18 @@ var insts = [][]instEncoder{
},
// ZFRECPX
{
- // ZFRECPX <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZFRECPX,
- fixedBits: 0x641b8000,
- args: Zn_T__PgZ__Zd_T__1,
- },
// ZFRECPX <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZFRECPX,
fixedBits: 0x650ca000,
args: Zn_T__PgM__Zd_T__1,
},
+ // ZFRECPX <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFRECPX,
+ fixedBits: 0x641b8000,
+ args: Zn_T__PgZ__Zd_T__1,
+ },
},
// ZFRINT32X
{
@@ -3113,18 +3461,18 @@ var insts = [][]instEncoder{
},
// ZFRINT32Z
{
- // 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,
},
+ // ZFRINT32Z <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFRINT32Z,
+ fixedBits: 0x641c8000,
+ args: Zn_T__PgZ__Zd_T__3,
+ },
},
// ZFRINT64X
{
@@ -3158,18 +3506,18 @@ var insts = [][]instEncoder{
},
// ZFRINTA
{
- // 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,
},
+ // ZFRINTA <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFRINTA,
+ fixedBits: 0x64198000,
+ args: Zn_T__PgZ__Zd_T__1,
+ },
},
// ZFRINTI
{
@@ -3188,18 +3536,18 @@ var insts = [][]instEncoder{
},
// ZFRINTM
{
- // 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,
},
+ // ZFRINTM <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZFRINTM,
+ fixedBits: 0x6418c000,
+ args: Zn_T__PgZ__Zd_T__1,
+ },
},
// ZFRINTN
{
@@ -3218,33 +3566,33 @@ var insts = [][]instEncoder{
},
// ZFRINTP
{
- // ZFRINTP <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZFRINTP,
- fixedBits: 0x6418a000,
- args: Zn_T__PgZ__Zd_T__1,
- },
// ZFRINTP <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZFRINTP,
fixedBits: 0x6501a000,
args: Zn_T__PgM__Zd_T__1,
},
- },
- // ZFRINTX
- {
- // ZFRINTX <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ // ZFRINTP <Zn>.<T>, <Pg>/Z, <Zd>.<T>
{
- goOp: AZFRINTX,
- fixedBits: 0x6419c000,
+ goOp: AZFRINTP,
+ fixedBits: 0x6418a000,
args: Zn_T__PgZ__Zd_T__1,
},
+ },
+ // 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,
+ },
},
// ZFRINTZ
{
@@ -3317,6 +3665,12 @@ var insts = [][]instEncoder{
fixedBits: 0x65000400,
args: Zm_T__Zn_T__Zd_T__2,
},
+ // ZFSUB <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFSUB,
+ fixedBits: 0x65198000,
+ args: const__Zdn_T__PgM__Zdn_T__2,
+ },
},
// ZFSUBR
{
@@ -3326,6 +3680,21 @@ var insts = [][]instEncoder{
fixedBits: 0x65038000,
args: Zm_T__Zdn_T__PgM__Zdn_T__2,
},
+ // ZFSUBR <const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZFSUBR,
+ fixedBits: 0x651b8000,
+ args: const__Zdn_T__PgM__Zdn_T__2,
+ },
+ },
+ // ZFTMAD
+ {
+ // ZFTMAD #<imm>, <Zm>.<T>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZFTMAD,
+ fixedBits: 0x65108000,
+ args: cimm__Zm_T__Zdn_T__Zdn_T,
+ },
},
// ZFTSMUL
{
@@ -3380,6 +3749,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4e04c00,
args: Rm__Rn__Zd_T,
},
+ // ZINDEX <R><m>, #<imm>, <Zd>.<T>
+ {
+ goOp: AZINDEX,
+ fixedBits: 0x4e04800,
+ args: Rm__cimm__Zd_T,
+ },
+ // ZINDEX #<imm2>, #<imm1>, <Zd>.<T>
+ {
+ goOp: AZINDEX,
+ fixedBits: 0x4204000,
+ args: cimm2__cimm1__Zd_T,
+ },
+ // ZINDEX #<imm>, <R><n>, <Zd>.<T>
+ {
+ goOp: AZINDEX,
+ fixedBits: 0x4e04400,
+ args: cimm__Rn__Zd_T,
+ },
},
// ZINDEXW
{
@@ -3389,6 +3776,18 @@ var insts = [][]instEncoder{
fixedBits: 0x4204c00,
args: Rm__Rn__Zd_T,
},
+ // ZINDEXW <R><m>, #<imm>, <Zd>.<T>
+ {
+ goOp: AZINDEXW,
+ fixedBits: 0x4204800,
+ args: Rm__cimm__Zd_T,
+ },
+ // ZINDEXW #<imm>, <R><n>, <Zd>.<T>
+ {
+ goOp: AZINDEXW,
+ fixedBits: 0x4204400,
+ args: cimm__Rn__Zd_T,
+ },
},
// ZINSR
{
@@ -3554,12 +3953,6 @@ var insts = [][]instEncoder{
},
// ZLSL
{
- // ZLSL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZLSL,
- fixedBits: 0x4138000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
- },
// ZLSL <Zm>.D, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZLSL,
@@ -3572,6 +3965,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4208c00,
args: Zm_D__Zn_T__Zd_T,
},
+ // ZLSL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZLSL,
+ fixedBits: 0x4138000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ },
+ // ZLSL #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZLSL,
+ fixedBits: 0x4038000,
+ args: cconst__Zdn_T__PgM__Zdn_T__2,
+ },
+ // ZLSL #<const>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZLSL,
+ fixedBits: 0x4209c00,
+ args: cconst__Zn_T__Zd_T__2,
+ },
},
// ZLSLR
{
@@ -3584,12 +3995,6 @@ var insts = [][]instEncoder{
},
// ZLSR
{
- // ZLSR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
- {
- goOp: AZLSR,
- fixedBits: 0x4118000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
- },
// ZLSR <Zm>.D, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
{
goOp: AZLSR,
@@ -3602,6 +4007,24 @@ var insts = [][]instEncoder{
fixedBits: 0x4208400,
args: Zm_D__Zn_T__Zd_T,
},
+ // ZLSR <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZLSR,
+ fixedBits: 0x4118000,
+ args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ },
+ // ZLSR #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZLSR,
+ fixedBits: 0x4018000,
+ args: cconst__Zdn_T__PgM__Zdn_T__1,
+ },
+ // ZLSR #<const>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZLSR,
+ fixedBits: 0x4209400,
+ args: cconst__Zn_T__Zd_T__1,
+ },
},
// ZLSRR
{
@@ -3641,17 +4064,11 @@ 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
+ // ZMLA <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
{
goOp: AZMLA,
- fixedBits: 0x44a00800,
- args: Zm_S_imm___Zn_S__Zda_S__1,
+ fixedBits: 0x4004000,
+ args: Zm_T__Zn_T__PgM__Zda_T__2,
},
// ZMLA <Zm>.D[<imm>], <Zn>.D, <Zda>.D
{
@@ -3659,11 +4076,17 @@ var insts = [][]instEncoder{
fixedBits: 0x44e00800,
args: Zm_D_imm___Zn_D__Zda_D__1,
},
- // ZMLA <Zm>.<T>, <Zn>.<T>, <Pg>/M, <Zda>.<T>
+ // ZMLA <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZMLA,
- fixedBits: 0x4004000,
- args: Zm_T__Zn_T__PgM__Zda_T__2,
+ 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,
},
},
// ZMLAPT
@@ -3683,6 +4106,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4006000,
args: Zm_T__Zn_T__PgM__Zda_T__2,
},
+ // ZMLS <Zm>.D[<imm>], <Zn>.D, <Zda>.D
+ {
+ goOp: AZMLS,
+ fixedBits: 0x44e00c00,
+ args: Zm_D_imm___Zn_D__Zda_D__1,
+ },
// ZMLS <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZMLS,
@@ -3695,12 +4124,6 @@ var insts = [][]instEncoder{
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
{
@@ -3734,11 +4157,11 @@ var insts = [][]instEncoder{
fixedBits: 0x4100000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
- // ZMUL <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ // ZMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
goOp: AZMUL,
- fixedBits: 0x44a0f800,
- args: Zm_S_imm___Zn_S__Zd_S__1,
+ fixedBits: 0x4206000,
+ args: Zm_T__Zn_T__Zd_T__1,
},
// ZMUL <Zm>.D[<imm>], <Zn>.D, <Zd>.D
{
@@ -3752,11 +4175,17 @@ var insts = [][]instEncoder{
fixedBits: 0x4420f800,
args: Zm_H_imm___Zn_H__Zd_H__1,
},
- // ZMUL <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ // ZMUL <Zm>.S[<imm>], <Zn>.S, <Zd>.S
{
goOp: AZMUL,
- fixedBits: 0x4206000,
- args: Zm_T__Zn_T__Zd_T__1,
+ fixedBits: 0x44a0f800,
+ args: Zm_S_imm___Zn_S__Zd_S__1,
+ },
+ // ZMUL #<imm>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZMUL,
+ fixedBits: 0x2530c000,
+ args: cimm__Zdn_T__Zdn_T__1,
},
},
// ZNBSL
@@ -3818,17 +4247,23 @@ 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
+ // ZORR #<const>, <Zdn>.<T>, <Zdn>.<T>
{
goOp: AZORR,
- fixedBits: 0x4603000,
- args: Zm_D__Zn_D__Zd_D,
+ fixedBits: 0x5000000,
+ args: cconst__Zdn_T__Zdn_T,
},
},
// ZORVB
@@ -3869,53 +4304,53 @@ var insts = [][]instEncoder{
},
// ZPMOV
{
- // ZPMOV <Pn>.S, <Zd>{[<imm>]}
+ // ZPMOV <Pn>.B, <Zd>
{
goOp: AZPMOV,
- fixedBits: 0x5693800,
- args: Pn_S__Zd_imm_,
+ fixedBits: 0x52b3800,
+ args: Pn_B__Zd,
},
- // ZPMOV <Zn>{[<imm>]}, <Pd>.H
+ // ZPMOV <Zn>, <Pd>.B
{
goOp: AZPMOV,
- fixedBits: 0x52c3800,
- args: Zn_imm___Pd_H,
+ fixedBits: 0x52a3800,
+ args: Zn__Pd_B,
},
- // ZPMOV <Zn>{[<imm>]}, <Pd>.D
+ // ZPMOV <Pn>.D, <Zd>{[<imm>]}
{
goOp: AZPMOV,
- fixedBits: 0x5a83800,
- args: Zn_imm___Pd_D,
+ fixedBits: 0x5a93800,
+ args: Pn_D__Zd_imm_,
},
- // ZPMOV <Zn>, <Pd>.B
+ // ZPMOV <Pn>.H, <Zd>{[<imm>]}
{
goOp: AZPMOV,
- fixedBits: 0x52a3800,
- args: Zn__Pd_B,
+ fixedBits: 0x52d3800,
+ args: Pn_H__Zd_imm_,
},
- // ZPMOV <Pn>.B, <Zd>
+ // ZPMOV <Pn>.S, <Zd>{[<imm>]}
{
goOp: AZPMOV,
- fixedBits: 0x52b3800,
- args: Pn_B__Zd,
+ fixedBits: 0x5693800,
+ args: Pn_S__Zd_imm_,
},
- // ZPMOV <Zn>{[<imm>]}, <Pd>.S
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.D
{
goOp: AZPMOV,
- fixedBits: 0x5683800,
- args: Zn_imm___Pd_S,
+ fixedBits: 0x5a83800,
+ args: Zn_imm___Pd_D,
},
- // ZPMOV <Pn>.H, <Zd>{[<imm>]}
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.H
{
goOp: AZPMOV,
- fixedBits: 0x52d3800,
- args: Pn_H__Zd_imm_,
+ fixedBits: 0x52c3800,
+ args: Zn_imm___Pd_H,
},
- // ZPMOV <Pn>.D, <Zd>{[<imm>]}
+ // ZPMOV <Zn>{[<imm>]}, <Pd>.S
{
goOp: AZPMOV,
- fixedBits: 0x5a93800,
- args: Pn_D__Zd_imm_,
+ fixedBits: 0x5683800,
+ args: Zn_imm___Pd_S,
},
},
// ZPMUL
@@ -3929,17 +4364,17 @@ var insts = [][]instEncoder{
},
// ZPMULLB
{
- // ZPMULLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
+ // ZPMULLB <Zm>.D, <Zn>.D, <Zd>.Q
{
goOp: AZPMULLB,
fixedBits: 0x45006800,
- args: Zm_Tb__Zn_Tb__Zd_T__3,
+ args: Zm_D__Zn_D__Zd_Q,
},
- // ZPMULLB <Zm>.D, <Zn>.D, <Zd>.Q
+ // ZPMULLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZPMULLB,
fixedBits: 0x45006800,
- args: Zm_D__Zn_D__Zd_Q,
+ args: Zm_Tb__Zn_Tb__Zd_T__3,
},
},
// ZPMULLT
@@ -4010,18 +4445,18 @@ var insts = [][]instEncoder{
},
// ZREVB
{
- // ZREVB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZREVB,
- fixedBits: 0x524a000,
- args: Zn_T__PgZ__Zd_T__4,
- },
// ZREVB <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZREVB,
fixedBits: 0x5248000,
args: Zn_T__PgM__Zd_T__4,
},
+ // ZREVB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZREVB,
+ fixedBits: 0x524a000,
+ args: Zn_T__PgZ__Zd_T__4,
+ },
},
// ZREVD
{
@@ -4055,17 +4490,35 @@ 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
+ },
+ // ZRSHRNB
+ {
+ // ZRSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
{
- goOp: AZREVW,
- fixedBits: 0x5e68000,
- args: Zn_D__PgM__Zd_D,
+ goOp: AZRSHRNB,
+ fixedBits: 0x45201800,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZRSHRNT
+ {
+ // ZRSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZRSHRNT,
+ fixedBits: 0x45201c00,
+ args: cconst__Zn_Tb__Zd_T__1,
},
},
// ZRSUBHNB
@@ -4241,29 +4694,23 @@ var insts = [][]instEncoder{
},
// ZSCVTF
{
- // ZSCVTF <Zn>.H, <Pg>/M, <Zd>.H
- {
- goOp: AZSCVTF,
- fixedBits: 0x6552a000,
- args: Zn_H__PgM__Zd_H,
- },
- // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.H
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.D
{
goOp: AZSCVTF,
- fixedBits: 0x6554a000,
- args: Zn_S__PgM__Zd_H,
+ fixedBits: 0x65d6a000,
+ args: Zn_D__PgM__Zd_D,
},
- // ZSCVTF <Zn>.<Tb>, <Zd>.<T>
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x650c3000,
- args: Zn_Tb__Zd_T__1,
+ fixedBits: 0x6556a000,
+ args: Zn_D__PgM__Zd_H,
},
- // ZSCVTF <Zn>.H, <Pg>/Z, <Zd>.H
+ // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZSCVTF,
- fixedBits: 0x645cc000,
- args: Zn_H__PgZ__Zd_H,
+ fixedBits: 0x65d4a000,
+ args: Zn_D__PgM__Zd_S,
},
// ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.D
{
@@ -4271,11 +4718,11 @@ var insts = [][]instEncoder{
fixedBits: 0x64ddc000,
args: Zn_D__PgZ__Zd_D,
},
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.D
+ // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x65d6a000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x645dc000,
+ args: Zn_D__PgZ__Zd_H,
},
// ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.S
{
@@ -4283,29 +4730,17 @@ var insts = [][]instEncoder{
fixedBits: 0x64dd8000,
args: Zn_D__PgZ__Zd_S,
},
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.S
- {
- goOp: AZSCVTF,
- fixedBits: 0x65d4a000,
- args: Zn_D__PgM__Zd_S,
- },
- // ZSCVTF <Zn>.D, <Pg>/Z, <Zd>.H
- {
- goOp: AZSCVTF,
- fixedBits: 0x645dc000,
- args: Zn_D__PgZ__Zd_H,
- },
- // ZSCVTF <Zn>.D, <Pg>/M, <Zd>.H
+ // ZSCVTF <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x6556a000,
- args: Zn_D__PgM__Zd_H,
+ fixedBits: 0x6552a000,
+ args: Zn_H__PgM__Zd_H,
},
- // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.D
+ // ZSCVTF <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x64dc8000,
- args: Zn_S__PgZ__Zd_D,
+ fixedBits: 0x645cc000,
+ args: Zn_H__PgZ__Zd_H,
},
// ZSCVTF <Zn>.S, <Pg>/M, <Zd>.D
{
@@ -4313,11 +4748,11 @@ var insts = [][]instEncoder{
fixedBits: 0x65d0a000,
args: Zn_S__PgM__Zd_D,
},
- // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZSCVTF <Zn>.S, <Pg>/M, <Zd>.H
{
goOp: AZSCVTF,
- fixedBits: 0x649d8000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x6554a000,
+ args: Zn_S__PgM__Zd_H,
},
// ZSCVTF <Zn>.S, <Pg>/M, <Zd>.S
{
@@ -4325,12 +4760,30 @@ var insts = [][]instEncoder{
fixedBits: 0x6594a000,
args: Zn_S__PgM__Zd_S,
},
+ // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.D
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x64dc8000,
+ args: Zn_S__PgZ__Zd_D,
+ },
// ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.H
{
goOp: AZSCVTF,
fixedBits: 0x645d8000,
args: Zn_S__PgZ__Zd_H,
},
+ // ZSCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x649d8000,
+ args: Zn_S__PgZ__Zd_S,
+ },
+ // ZSCVTF <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSCVTF,
+ fixedBits: 0x650c3000,
+ args: Zn_Tb__Zd_T__1,
+ },
},
// ZSCVTFLT
{
@@ -4367,17 +4820,11 @@ var insts = [][]instEncoder{
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
+ // ZSDOT <Zm>.H, <Zn>.H, <Zda>.S
{
goOp: AZSDOT,
- fixedBits: 0x4480c800,
- args: Zm_H_imm___Zn_H__Zda_S__4,
+ fixedBits: 0x4400c800,
+ args: Zm_H__Zn_H__Zda_S,
},
// ZSDOT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
@@ -4385,11 +4832,11 @@ var insts = [][]instEncoder{
fixedBits: 0x44800000,
args: Zm_Tb__Zn_Tb__Zda_T__2,
},
- // ZSDOT <Zm>.H, <Zn>.H, <Zda>.S
+ // ZSDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
{
goOp: AZSDOT,
- fixedBits: 0x4400c800,
- args: Zm_H__Zn_H__Zda_S,
+ fixedBits: 0x44200000,
+ args: Zm_B_imm___Zn_B__Zda_H__2,
},
// ZSDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
{
@@ -4403,6 +4850,12 @@ var insts = [][]instEncoder{
fixedBits: 0x44e00000,
args: Zm_H_imm___Zn_H__Zda_D,
},
+ // ZSDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
+ {
+ goOp: AZSDOT,
+ fixedBits: 0x4480c800,
+ args: Zm_H_imm___Zn_H__Zda_S__4,
+ },
},
// ZSEL
{
@@ -4422,6 +4875,24 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSHRNB
+ {
+ // ZSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSHRNB,
+ fixedBits: 0x45201000,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSHRNT
+ {
+ // ZSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSHRNT,
+ fixedBits: 0x45201400,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
// ZSHSUB
{
// ZSHSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -4440,6 +4911,15 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSLI
+ {
+ // ZSLI #<const>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZSLI,
+ fixedBits: 0x4500f400,
+ args: cconst__Zn_T__Zd_T__2,
+ },
+ },
// ZSM4E
{
// ZSM4E <Zm>.S, <Zdn>.S, <Zdn>.S
@@ -4466,6 +4946,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4080000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZSMAX #<imm>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSMAX,
+ fixedBits: 0x2528c000,
+ args: cimm__Zdn_T__Zdn_T__1,
+ },
},
// ZSMAXP
{
@@ -4529,6 +5015,12 @@ var insts = [][]instEncoder{
fixedBits: 0x40a0000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZSMIN #<imm>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSMIN,
+ fixedBits: 0x252ac000,
+ args: cimm__Zdn_T__Zdn_T__1,
+ },
},
// ZSMINP
{
@@ -4586,11 +5078,11 @@ var insts = [][]instEncoder{
},
// ZSMLALB
{
- // ZSMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ // ZSMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSMLALB,
- fixedBits: 0x44e08000,
- args: Zm_S_imm___Zn_S__Zda_D,
+ fixedBits: 0x44004000,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
},
// ZSMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
@@ -4598,11 +5090,11 @@ var insts = [][]instEncoder{
fixedBits: 0x44a08000,
args: Zm_H_imm___Zn_H__Zda_S__1,
},
- // ZSMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ // ZSMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
{
goOp: AZSMLALB,
- fixedBits: 0x44004000,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
+ fixedBits: 0x44e08000,
+ args: Zm_S_imm___Zn_S__Zda_D,
},
},
// ZSMLALT
@@ -4649,6 +5141,12 @@ var insts = [][]instEncoder{
},
// ZSMLSLT
{
+ // ZSMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZSMLSLT,
+ fixedBits: 0x44005400,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZSMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZSMLSLT,
@@ -4661,12 +5159,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0a400,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZSMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZSMLSLT,
- fixedBits: 0x44005400,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZSMMLA
{
@@ -4715,6 +5207,12 @@ var insts = [][]instEncoder{
},
// ZSMULLT
{
+ // ZSMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSMULLT,
+ fixedBits: 0x45007400,
+ args: Zm_Tb__Zn_Tb__Zd_T__1,
+ },
// ZSMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
{
goOp: AZSMULLT,
@@ -4727,12 +5225,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0c400,
args: Zm_S_imm___Zn_S__Zd_D,
},
- // ZSMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
- {
- goOp: AZSMULLT,
- fixedBits: 0x45007400,
- args: Zm_Tb__Zn_Tb__Zd_T__1,
- },
},
// ZSPLICE
{
@@ -4772,6 +5264,21 @@ var insts = [][]instEncoder{
fixedBits: 0x4201000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSQADD #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSQADD,
+ fixedBits: 0x2524c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
+ },
+ // ZSQCADD
+ {
+ // ZSQCADD <const>, <Zm>.<T>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSQCADD,
+ fixedBits: 0x4501d800,
+ args: const__Zm_T__Zdn_T__Zdn_T,
+ },
},
// ZSQDECP
{
@@ -4784,11 +5291,11 @@ var insts = [][]instEncoder{
},
// ZSQDMLALB
{
- // ZSQDMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
+ // ZSQDMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
{
goOp: AZSQDMLALB,
- fixedBits: 0x44e02000,
- args: Zm_S_imm___Zn_S__Zda_D,
+ fixedBits: 0x44006000,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
},
// ZSQDMLALB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
@@ -4796,11 +5303,11 @@ var insts = [][]instEncoder{
fixedBits: 0x44a02000,
args: Zm_H_imm___Zn_H__Zda_S__1,
},
- // ZSQDMLALB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ // ZSQDMLALB <Zm>.S[<imm>], <Zn>.S, <Zda>.D
{
goOp: AZSQDMLALB,
- fixedBits: 0x44006000,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
+ fixedBits: 0x44e02000,
+ args: Zm_S_imm___Zn_S__Zda_D,
},
},
// ZSQDMLALBT
@@ -4814,6 +5321,12 @@ var insts = [][]instEncoder{
},
// ZSQDMLALT
{
+ // ZSQDMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZSQDMLALT,
+ fixedBits: 0x44006400,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZSQDMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZSQDMLALT,
@@ -4826,15 +5339,15 @@ var insts = [][]instEncoder{
fixedBits: 0x44e02400,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZSQDMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZSQDMLALT,
- fixedBits: 0x44006400,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZSQDMLSLB
{
+ // ZSQDMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZSQDMLSLB,
+ fixedBits: 0x44006800,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZSQDMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZSQDMLSLB,
@@ -4847,12 +5360,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e03000,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZSQDMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZSQDMLSLB,
- fixedBits: 0x44006800,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZSQDMLSLBT
{
@@ -4886,30 +5393,30 @@ var insts = [][]instEncoder{
},
// 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,
},
+ // ZSQDMULH <Zm>.H[<imm>], <Zn>.H, <Zd>.H
+ {
+ goOp: AZSQDMULH,
+ fixedBits: 0x4420f000,
+ args: Zm_H_imm___Zn_H__Zd_H__1,
+ },
+ // ZSQDMULH <Zm>.S[<imm>], <Zn>.S, <Zd>.S
+ {
+ goOp: AZSQDMULH,
+ fixedBits: 0x44a0f000,
+ args: Zm_S_imm___Zn_S__Zd_S__1,
+ },
},
// ZSQDMULLB
{
@@ -4919,21 +5426,27 @@ 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,
},
+ // ZSQDMULLB <Zm>.S[<imm>], <Zn>.S, <Zd>.D
+ {
+ goOp: AZSQDMULLB,
+ fixedBits: 0x44e0e000,
+ args: Zm_S_imm___Zn_S__Zd_D,
+ },
},
// ZSQDMULLT
{
+ // ZSQDMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQDMULLT,
+ fixedBits: 0x45006400,
+ args: Zm_Tb__Zn_Tb__Zd_T__1,
+ },
// ZSQDMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
{
goOp: AZSQDMULLT,
@@ -4946,12 +5459,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0e400,
args: Zm_S_imm___Zn_S__Zd_D,
},
- // ZSQDMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
- {
- goOp: AZSQDMULLT,
- fixedBits: 0x45006400,
- args: Zm_Tb__Zn_Tb__Zd_T__1,
- },
},
// ZSQINCP
{
@@ -4977,19 +5484,34 @@ var insts = [][]instEncoder{
args: Zn_T__PgZ__Zd_T__2,
},
},
- // ZSQRDMLAH
+ // ZSQRDCMLAH
{
- // ZSQRDMLAH <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ // ZSQRDCMLAH <const>, <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
- goOp: AZSQRDMLAH,
- fixedBits: 0x44a01000,
- args: Zm_S_imm___Zn_S__Zda_S__1,
+ goOp: AZSQRDCMLAH,
+ fixedBits: 0x44a07000,
+ args: const__Zm_H_imm___Zn_H__Zda_H__1,
},
- // ZSQRDMLAH <Zm>.H[<imm>], <Zn>.H, <Zda>.H
+ // ZSQRDCMLAH <const>, <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZSQRDCMLAH,
+ fixedBits: 0x44e07000,
+ args: const__Zm_S_imm___Zn_S__Zda_S__1,
+ },
+ // ZSQRDCMLAH <const>, <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
+ {
+ goOp: AZSQRDCMLAH,
+ fixedBits: 0x44003000,
+ args: const__Zm_T__Zn_T__Zda_T,
+ },
+ },
+ // ZSQRDMLAH
+ {
+ // ZSQRDMLAH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
{
goOp: AZSQRDMLAH,
- fixedBits: 0x44201000,
- args: Zm_H_imm___Zn_H__Zda_H__1,
+ fixedBits: 0x44007000,
+ args: Zm_T__Zn_T__Zda_T__2,
},
// ZSQRDMLAH <Zm>.D[<imm>], <Zn>.D, <Zda>.D
{
@@ -4997,26 +5519,26 @@ var insts = [][]instEncoder{
fixedBits: 0x44e01000,
args: Zm_D_imm___Zn_D__Zda_D__1,
},
- // ZSQRDMLAH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
+ // ZSQRDMLAH <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZSQRDMLAH,
- fixedBits: 0x44007000,
- args: Zm_T__Zn_T__Zda_T__2,
+ fixedBits: 0x44201000,
+ args: Zm_H_imm___Zn_H__Zda_H__1,
+ },
+ // ZSQRDMLAH <Zm>.S[<imm>], <Zn>.S, <Zda>.S
+ {
+ goOp: AZSQRDMLAH,
+ fixedBits: 0x44a01000,
+ args: Zm_S_imm___Zn_S__Zda_S__1,
},
},
// 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
+ // ZSQRDMLSH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
{
goOp: AZSQRDMLSH,
- fixedBits: 0x44a01400,
- args: Zm_S_imm___Zn_S__Zda_S__1,
+ fixedBits: 0x44007400,
+ args: Zm_T__Zn_T__Zda_T__2,
},
// ZSQRDMLSH <Zm>.D[<imm>], <Zn>.D, <Zda>.D
{
@@ -5024,11 +5546,17 @@ var insts = [][]instEncoder{
fixedBits: 0x44e01400,
args: Zm_D_imm___Zn_D__Zda_D__1,
},
- // ZSQRDMLSH <Zm>.<T>, <Zn>.<T>, <Zda>.<T>
+ // ZSQRDMLSH <Zm>.H[<imm>], <Zn>.H, <Zda>.H
{
goOp: AZSQRDMLSH,
- fixedBits: 0x44007400,
- args: Zm_T__Zn_T__Zda_T__2,
+ 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,
},
},
// ZSQRDMULH
@@ -5039,6 +5567,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4207400,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSQRDMULH <Zm>.D[<imm>], <Zn>.D, <Zd>.D
+ {
+ goOp: AZSQRDMULH,
+ fixedBits: 0x44e0f400,
+ args: Zm_D_imm___Zn_D__Zd_D__1,
+ },
// ZSQRDMULH <Zm>.H[<imm>], <Zn>.H, <Zd>.H
{
goOp: AZSQRDMULH,
@@ -5051,12 +5585,6 @@ var insts = [][]instEncoder{
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
{
@@ -5076,6 +5604,42 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSQRSHRNB
+ {
+ // ZSQRSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQRSHRNB,
+ fixedBits: 0x45202800,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQRSHRNT
+ {
+ // ZSQRSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQRSHRNT,
+ fixedBits: 0x45202c00,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQRSHRUNB
+ {
+ // ZSQRSHRUNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQRSHRUNB,
+ fixedBits: 0x45200800,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQRSHRUNT
+ {
+ // ZSQRSHRUNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQRSHRUNT,
+ fixedBits: 0x45200c00,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
// ZSQSHL
{
// ZSQSHL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -5084,6 +5648,12 @@ var insts = [][]instEncoder{
fixedBits: 0x44088000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZSQSHL #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZSQSHL,
+ fixedBits: 0x4068000,
+ args: cconst__Zdn_T__PgM__Zdn_T__2,
+ },
},
// ZSQSHLR
{
@@ -5094,6 +5664,51 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSQSHLU
+ {
+ // ZSQSHLU #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZSQSHLU,
+ fixedBits: 0x40f8000,
+ args: cconst__Zdn_T__PgM__Zdn_T__2,
+ },
+ },
+ // ZSQSHRNB
+ {
+ // ZSQSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQSHRNB,
+ fixedBits: 0x45202000,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQSHRNT
+ {
+ // ZSQSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQSHRNT,
+ fixedBits: 0x45202400,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQSHRUNB
+ {
+ // ZSQSHRUNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQSHRUNB,
+ fixedBits: 0x45200000,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZSQSHRUNT
+ {
+ // ZSQSHRUNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSQSHRUNT,
+ fixedBits: 0x45200400,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
// ZSQSUB
{
// ZSQSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -5108,6 +5723,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4201800,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZSQSUB #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSQSUB,
+ fixedBits: 0x2526c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
},
// ZSQSUBR
{
@@ -5163,6 +5784,15 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSRI
+ {
+ // ZSRI #<const>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZSRI,
+ fixedBits: 0x4500f000,
+ args: cconst__Zn_T__Zd_T__1,
+ },
+ },
// ZSRSHL
{
// ZSRSHL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -5181,6 +5811,51 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZSRSHR
+ {
+ // ZSRSHR #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZSRSHR,
+ fixedBits: 0x40c8000,
+ args: cconst__Zdn_T__PgM__Zdn_T__1,
+ },
+ },
+ // ZSRSRA
+ {
+ // ZSRSRA #<const>, <Zn>.<T>, <Zda>.<T>
+ {
+ goOp: AZSRSRA,
+ fixedBits: 0x4500e800,
+ args: cconst__Zn_T__Zda_T,
+ },
+ },
+ // ZSSHLLB
+ {
+ // ZSSHLLB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSSHLLB,
+ fixedBits: 0x4500a000,
+ args: cconst__Zn_Tb__Zd_T__2,
+ },
+ },
+ // ZSSHLLT
+ {
+ // ZSSHLLT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZSSHLLT,
+ fixedBits: 0x4500a400,
+ args: cconst__Zn_Tb__Zd_T__2,
+ },
+ },
+ // ZSSRA
+ {
+ // ZSSRA #<const>, <Zn>.<T>, <Zda>.<T>
+ {
+ goOp: AZSSRA,
+ fixedBits: 0x4500e000,
+ args: cconst__Zn_T__Zda_T,
+ },
+ },
// ZSSUBLB
{
// ZSSUBLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
@@ -5237,17 +5912,23 @@ 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>
+ // ZSUB #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
{
goOp: AZSUB,
- fixedBits: 0x4010000,
- args: Zm_T__Zdn_T__PgM__Zdn_T__1,
+ fixedBits: 0x2521c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
},
},
// ZSUBHNB
@@ -5300,6 +5981,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4030000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZSUBR #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZSUBR,
+ fixedBits: 0x2523c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
},
// ZSUDOT
{
@@ -5402,33 +6089,33 @@ var insts = [][]instEncoder{
},
// ZTRN1
{
- // 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
- {
- // ZTRN2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ // ZTRN1 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
- goOp: AZTRN2,
- fixedBits: 0x5207400,
+ goOp: AZTRN1,
+ fixedBits: 0x5207000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ },
+ // ZTRN2
+ {
// ZTRN2 <Zm>.Q, <Zn>.Q, <Zd>.Q
{
goOp: AZTRN2,
fixedBits: 0x5a01c00,
args: Zm_Q__Zn_Q__Zd_Q,
},
+ // ZTRN2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZTRN2,
+ fixedBits: 0x5207400,
+ args: Zm_T__Zn_T__Zd_T__1,
+ },
},
// ZUABA
{
@@ -5558,53 +6245,53 @@ var insts = [][]instEncoder{
},
// ZUCVTF
{
- // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.H
+ // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.D
{
goOp: AZUCVTF,
- fixedBits: 0x6557a000,
- args: Zn_D__PgM__Zd_H,
+ fixedBits: 0x65d7a000,
+ args: Zn_D__PgM__Zd_D,
},
- // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.S
+ // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x649da000,
- args: Zn_S__PgZ__Zd_S,
+ fixedBits: 0x6557a000,
+ args: Zn_D__PgM__Zd_H,
},
- // ZUCVTF <Zn>.H, <Pg>/Z, <Zd>.H
+ // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x645ce000,
- args: Zn_H__PgZ__Zd_H,
+ fixedBits: 0x65d5a000,
+ args: Zn_D__PgM__Zd_S,
},
- // ZUCVTF <Zn>.H, <Pg>/M, <Zd>.H
+ // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.D
{
goOp: AZUCVTF,
- fixedBits: 0x6553a000,
- args: Zn_H__PgM__Zd_H,
+ fixedBits: 0x64dde000,
+ args: Zn_D__PgZ__Zd_D,
},
- // ZUCVTF <Zn>.<Tb>, <Zd>.<T>
+ // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x650c3400,
- args: Zn_Tb__Zd_T__1,
+ fixedBits: 0x645de000,
+ args: Zn_D__PgZ__Zd_H,
},
- // 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>.S, <Pg>/M, <Zd>.S
+ // ZUCVTF <Zn>.H, <Pg>/M, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x6595a000,
- args: Zn_S__PgM__Zd_S,
+ fixedBits: 0x6553a000,
+ args: Zn_H__PgM__Zd_H,
},
- // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.H
+ // ZUCVTF <Zn>.H, <Pg>/Z, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x6555a000,
- args: Zn_S__PgM__Zd_H,
+ fixedBits: 0x645ce000,
+ args: Zn_H__PgZ__Zd_H,
},
// ZUCVTF <Zn>.S, <Pg>/M, <Zd>.D
{
@@ -5612,41 +6299,41 @@ var insts = [][]instEncoder{
fixedBits: 0x65d1a000,
args: Zn_S__PgM__Zd_D,
},
- // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.D
+ // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.H
{
goOp: AZUCVTF,
- fixedBits: 0x64dca000,
- args: Zn_S__PgZ__Zd_D,
+ fixedBits: 0x6555a000,
+ args: Zn_S__PgM__Zd_H,
},
- // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.D
+ // ZUCVTF <Zn>.S, <Pg>/M, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x64dde000,
- args: Zn_D__PgZ__Zd_D,
+ fixedBits: 0x6595a000,
+ args: Zn_S__PgM__Zd_S,
},
- // ZUCVTF <Zn>.D, <Pg>/Z, <Zd>.H
+ // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.D
{
goOp: AZUCVTF,
- fixedBits: 0x645de000,
- args: Zn_D__PgZ__Zd_H,
+ fixedBits: 0x64dca000,
+ args: Zn_S__PgZ__Zd_D,
},
- // 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>.D, <Pg>/Z, <Zd>.S
+ // ZUCVTF <Zn>.S, <Pg>/Z, <Zd>.S
{
goOp: AZUCVTF,
- fixedBits: 0x64dda000,
- args: Zn_D__PgZ__Zd_S,
+ fixedBits: 0x649da000,
+ args: Zn_S__PgZ__Zd_S,
},
- // ZUCVTF <Zn>.D, <Pg>/M, <Zd>.D
+ // ZUCVTF <Zn>.<Tb>, <Zd>.<T>
{
goOp: AZUCVTF,
- fixedBits: 0x65d7a000,
- args: Zn_D__PgM__Zd_D,
+ fixedBits: 0x650c3400,
+ args: Zn_Tb__Zd_T__1,
},
},
// ZUCVTFLT
@@ -5678,18 +6365,6 @@ var insts = [][]instEncoder{
},
// ZUDOT
{
- // ZUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
- {
- goOp: AZUDOT,
- 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
{
goOp: AZUDOT,
@@ -5702,6 +6377,18 @@ var insts = [][]instEncoder{
fixedBits: 0x4400cc00,
args: Zm_H__Zn_H__Zda_S,
},
+ // ZUDOT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x44800400,
+ args: Zm_Tb__Zn_Tb__Zda_T__2,
+ },
+ // ZUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.H
+ {
+ goOp: AZUDOT,
+ fixedBits: 0x44200400,
+ args: Zm_B_imm___Zn_B__Zda_H__2,
+ },
// ZUDOT <Zm>.B[<imm>], <Zn>.B, <Zda>.S
{
goOp: AZUDOT,
@@ -5714,11 +6401,11 @@ var insts = [][]instEncoder{
fixedBits: 0x44e00400,
args: Zm_H_imm___Zn_H__Zda_D,
},
- // ZUDOT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ // ZUDOT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZUDOT,
- fixedBits: 0x44800400,
- args: Zm_Tb__Zn_Tb__Zda_T__2,
+ fixedBits: 0x4480cc00,
+ args: Zm_H_imm___Zn_H__Zda_S__4,
},
},
// ZUHADD
@@ -5756,6 +6443,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4090000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZUMAX #<imm>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZUMAX,
+ fixedBits: 0x2529c000,
+ args: cimm__Zdn_T__Zdn_T__2,
+ },
},
// ZUMAXP
{
@@ -5819,6 +6512,12 @@ var insts = [][]instEncoder{
fixedBits: 0x40b0000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZUMIN #<imm>, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZUMIN,
+ fixedBits: 0x252bc000,
+ args: cimm__Zdn_T__Zdn_T__2,
+ },
},
// ZUMINP
{
@@ -5897,6 +6596,12 @@ var insts = [][]instEncoder{
},
// ZUMLALT
{
+ // ZUMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZUMLALT,
+ fixedBits: 0x44004c00,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZUMLALT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZUMLALT,
@@ -5909,15 +6614,15 @@ var insts = [][]instEncoder{
fixedBits: 0x44e09400,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZUMLALT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZUMLALT,
- fixedBits: 0x44004c00,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZUMLSLB
{
+ // ZUMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZUMLSLB,
+ fixedBits: 0x44005800,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZUMLSLB <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZUMLSLB,
@@ -5930,15 +6635,15 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0b000,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZUMLSLB <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZUMLSLB,
- fixedBits: 0x44005800,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZUMLSLT
{
+ // ZUMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
+ {
+ goOp: AZUMLSLT,
+ fixedBits: 0x44005c00,
+ args: Zm_Tb__Zn_Tb__Zda_T__1,
+ },
// ZUMLSLT <Zm>.H[<imm>], <Zn>.H, <Zda>.S
{
goOp: AZUMLSLT,
@@ -5951,12 +6656,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0b400,
args: Zm_S_imm___Zn_S__Zda_D,
},
- // ZUMLSLT <Zm>.<Tb>, <Zn>.<Tb>, <Zda>.<T>
- {
- goOp: AZUMLSLT,
- fixedBits: 0x44005c00,
- args: Zm_Tb__Zn_Tb__Zda_T__1,
- },
},
// ZUMMLA
{
@@ -5984,6 +6683,12 @@ var insts = [][]instEncoder{
},
// ZUMULLB
{
+ // ZUMULLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUMULLB,
+ fixedBits: 0x45007800,
+ args: Zm_Tb__Zn_Tb__Zd_T__1,
+ },
// ZUMULLB <Zm>.H[<imm>], <Zn>.H, <Zd>.S
{
goOp: AZUMULLB,
@@ -5996,15 +6701,15 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0d000,
args: Zm_S_imm___Zn_S__Zd_D,
},
- // ZUMULLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
- {
- goOp: AZUMULLB,
- fixedBits: 0x45007800,
- args: Zm_Tb__Zn_Tb__Zd_T__1,
- },
},
// ZUMULLT
{
+ // ZUMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUMULLT,
+ fixedBits: 0x45007c00,
+ args: Zm_Tb__Zn_Tb__Zd_T__1,
+ },
// ZUMULLT <Zm>.H[<imm>], <Zn>.H, <Zd>.S
{
goOp: AZUMULLT,
@@ -6017,12 +6722,6 @@ var insts = [][]instEncoder{
fixedBits: 0x44e0d400,
args: Zm_S_imm___Zn_S__Zd_D,
},
- // ZUMULLT <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
- {
- goOp: AZUMULLT,
- fixedBits: 0x45007c00,
- args: Zm_Tb__Zn_Tb__Zd_T__1,
- },
},
// ZUQADD
{
@@ -6038,6 +6737,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4201400,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZUQADD #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZUQADD,
+ fixedBits: 0x2525c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
},
// ZUQDECP
{
@@ -6075,6 +6780,24 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZUQRSHRNB
+ {
+ // ZUQRSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUQRSHRNB,
+ fixedBits: 0x45203800,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZUQRSHRNT
+ {
+ // ZUQRSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUQRSHRNT,
+ fixedBits: 0x45203c00,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
// ZUQSHL
{
// ZUQSHL <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -6083,6 +6806,12 @@ var insts = [][]instEncoder{
fixedBits: 0x44098000,
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
+ // ZUQSHL #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZUQSHL,
+ fixedBits: 0x4078000,
+ args: cconst__Zdn_T__PgM__Zdn_T__2,
+ },
},
// ZUQSHLR
{
@@ -6093,6 +6822,24 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZUQSHRNB
+ {
+ // ZUQSHRNB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUQSHRNB,
+ fixedBits: 0x45203000,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
+ // ZUQSHRNT
+ {
+ // ZUQSHRNT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUQSHRNT,
+ fixedBits: 0x45203400,
+ args: cconst__Zn_Tb__Zd_T__1,
+ },
+ },
// ZUQSUB
{
// ZUQSUB <Zm>.<T>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
@@ -6107,6 +6854,12 @@ var insts = [][]instEncoder{
fixedBits: 0x4201c00,
args: Zm_T__Zn_T__Zd_T__1,
},
+ // ZUQSUB #<imm>{, <shift>}, <Zdn>.<T>, <Zdn>.<T>
+ {
+ goOp: AZUQSUB,
+ fixedBits: 0x2527c000,
+ args: cimm__shift__Zdn_T__Zdn_T,
+ },
},
// ZUQSUBR
{
@@ -6177,19 +6930,37 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZURSHR
+ {
+ // ZURSHR #<const>, <Zdn>.<T>, <Pg>/M, <Zdn>.<T>
+ {
+ goOp: AZURSHR,
+ fixedBits: 0x40d8000,
+ args: cconst__Zdn_T__PgM__Zdn_T__1,
+ },
+ },
// 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
+ },
+ // ZURSRA
+ {
+ // ZURSRA #<const>, <Zn>.<T>, <Zda>.<T>
{
- goOp: AZURSQRTE,
- fixedBits: 0x4481a000,
- args: Zn_S__PgM__Zd_S,
+ goOp: AZURSRA,
+ fixedBits: 0x4500ec00,
+ args: cconst__Zn_T__Zda_T,
},
},
// ZUSDOT
@@ -6207,6 +6978,24 @@ var insts = [][]instEncoder{
args: Zm_B_imm___Zn_B__Zda_S__2,
},
},
+ // ZUSHLLB
+ {
+ // ZUSHLLB #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUSHLLB,
+ fixedBits: 0x4500a800,
+ args: cconst__Zn_Tb__Zd_T__2,
+ },
+ },
+ // ZUSHLLT
+ {
+ // ZUSHLLT #<const>, <Zn>.<Tb>, <Zd>.<T>
+ {
+ goOp: AZUSHLLT,
+ fixedBits: 0x4500ac00,
+ args: cconst__Zn_Tb__Zd_T__2,
+ },
+ },
// ZUSMMLA
{
// ZUSMMLA <Zm>.B, <Zn>.B, <Zda>.S
@@ -6225,6 +7014,15 @@ var insts = [][]instEncoder{
args: Zm_T__Zdn_T__PgM__Zdn_T__1,
},
},
+ // ZUSRA
+ {
+ // ZUSRA #<const>, <Zn>.<T>, <Zda>.<T>
+ {
+ goOp: AZUSRA,
+ fixedBits: 0x4500e400,
+ args: cconst__Zn_T__Zda_T,
+ },
+ },
// ZUSUBLB
{
// ZUSUBLB <Zm>.<Tb>, <Zn>.<Tb>, <Zd>.<T>
@@ -6281,33 +7079,33 @@ var insts = [][]instEncoder{
},
// ZUXTB
{
- // 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,
},
+ // ZUXTB <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZUXTB,
+ fixedBits: 0x401a000,
+ args: Zn_T__PgZ__Zd_T__4,
+ },
},
// ZUXTH
{
- // ZUXTH <Zn>.<T>, <Pg>/Z, <Zd>.<T>
- {
- goOp: AZUXTH,
- fixedBits: 0x483a000,
- args: Zn_T__PgZ__Zd_T__5,
- },
// ZUXTH <Zn>.<T>, <Pg>/M, <Zd>.<T>
{
goOp: AZUXTH,
fixedBits: 0x493a000,
args: Zn_T__PgM__Zd_T__5,
},
+ // ZUXTH <Zn>.<T>, <Pg>/Z, <Zd>.<T>
+ {
+ goOp: AZUXTH,
+ fixedBits: 0x483a000,
+ args: Zn_T__PgZ__Zd_T__5,
+ },
},
// ZUXTW
{
@@ -6341,18 +7139,18 @@ var insts = [][]instEncoder{
},
// ZUZP2
{
- // ZUZP2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
- {
- goOp: AZUZP2,
- fixedBits: 0x5206c00,
- args: Zm_T__Zn_T__Zd_T__1,
- },
// ZUZP2 <Zm>.Q, <Zn>.Q, <Zd>.Q
{
goOp: AZUZP2,
fixedBits: 0x5a00c00,
args: Zm_Q__Zn_Q__Zd_Q,
},
+ // ZUZP2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZUZP2,
+ fixedBits: 0x5206c00,
+ args: Zm_T__Zn_T__Zd_T__1,
+ },
},
// ZUZPQ1
{
@@ -6372,35 +7170,44 @@ var insts = [][]instEncoder{
args: Zm_T__Zn_T__Zd_T__1,
},
},
- // ZZIP1
+ // ZXAR
{
- // ZZIP1 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ // ZXAR #<const>, <Zm>.<T>, <Zdn>.<T>, <Zdn>.<T>
{
- goOp: AZZIP1,
- fixedBits: 0x5206000,
- args: Zm_T__Zn_T__Zd_T__1,
+ goOp: AZXAR,
+ fixedBits: 0x4203400,
+ args: cconst__Zm_T__Zdn_T__Zdn_T,
},
+ },
+ // ZZIP1
+ {
// ZZIP1 <Zm>.Q, <Zn>.Q, <Zd>.Q
{
goOp: AZZIP1,
fixedBits: 0x5a00000,
args: Zm_Q__Zn_Q__Zd_Q,
},
- },
- // ZZIP2
- {
- // ZZIP2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ // ZZIP1 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
{
- goOp: AZZIP2,
- fixedBits: 0x5206400,
+ goOp: AZZIP1,
+ fixedBits: 0x5206000,
args: Zm_T__Zn_T__Zd_T__1,
},
+ },
+ // ZZIP2
+ {
// ZZIP2 <Zm>.Q, <Zn>.Q, <Zd>.Q
{
goOp: AZZIP2,
fixedBits: 0x5a00400,
args: Zm_Q__Zn_Q__Zd_Q,
},
+ // ZZIP2 <Zm>.<T>, <Zn>.<T>, <Zd>.<T>
+ {
+ goOp: AZZIP2,
+ fixedBits: 0x5206400,
+ args: Zm_T__Zn_T__Zd_T__1,
+ },
},
// ZZIPQ1
{
@@ -6502,70 +7309,102 @@ var a_ARNGIDX_Zm1620_DoublePrecision_ArngDCheck_I1_2021_DoublePrecision = operan
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I2_1921_8BitGroup = operand{
+var a_ARNGIDX_Zm_1619_Half_ArngHCheck_I2_1921_Half = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Half, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI2_1921_Half, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7V1_ArngHCheck_I2_1921_16bit = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V1, enc_Zm},
+ {encodeArngHCheck, enc_NIL},
+ {encodeI2_1921_16bit, enc_i2},
+ },
+}
+
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngBCheck_I2_1921_8BitGroup = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngBCheck, enc_NIL},
{encodeI2_1921_8BitGroup, enc_i2},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1119_Pair8Bit = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngBCheck_I3hI3l_1119_Pair8Bit = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngBCheck, enc_NIL},
{encodeI3hI3l_1119_Pair8Bit, enc_i3h_i3l},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I3hI3l_1923_8To16Bit = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngBCheck_I3hI3l_1923_8To16Bit = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngBCheck, enc_NIL},
{encodeI3hI3l_1923_8To16Bit, enc_i3h_i3l},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I4hI4l_1019 = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngBCheck_I4hI4l_1019 = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngBCheck, enc_NIL},
{encodeI4hI4l_1019, enc_i4h_i4l},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_16To32Bit = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I2_1921_16To32Bit = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngHCheck, enc_NIL},
{encodeI2_1921_16To32Bit, enc_i2},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I2_1921_Pair16Bit = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I2_1921_Pair16Bit = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngHCheck, enc_NIL},
{encodeI2_1921_Pair16Bit, enc_i2},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1119 = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I3hI3l_1119 = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngHCheck, enc_NIL},
{encodeI3hI3l_1119, enc_i3h_i3l},
},
}
-var a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922 = operand{
+var a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I3hI3l_1922 = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
- {encodeZm_1619_Range0_7, enc_Zm},
+ {encodeZm_1619_Range0_7V2, enc_Zm},
{encodeArngHCheck, enc_NIL},
{encodeI3hI3l_1922, enc_i3h_i3l},
},
}
+var a_ARNGIDX_Zm_1620_Range0_15_ArngSCheck_I1_2021_32bit = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1620_Range0_15, enc_Zm},
+ {encodeArngSCheck, enc_NIL},
+ {encodeI1_2021_32bit, enc_i1},
+ },
+}
+
+var a_ARNGIDX_Zm_1620_Single_ArngSCheck_I1_2021_Single = operand{
+ class: AC_ARNGIDX, elemEncoders: []elemEncoder{
+ {encodeZm_1620_Single, enc_Zm},
+ {encodeArngSCheck, enc_NIL},
+ {encodeI1_2021_Single, enc_i1},
+ },
+}
+
var a_ARNGIDX_Zn510Src_Tsz_1620_SizeSpecifier4_I1Tsz_Delegate = operand{
class: AC_ARNGIDX, elemEncoders: []elemEncoder{
{encodeZn510Src, enc_Zn},
@@ -6848,6 +7687,20 @@ var a_ARNG_Zd_SizeBHSD2224 = operand{
},
}
+var a_ARNG_Zd_SizeBhsTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeSizeBhsTsz1921, enc_tszh_tszl},
+ },
+}
+
+var a_ARNG_Zd_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zd_SizeByteMergeZero = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZd, enc_Zd},
@@ -6890,6 +7743,20 @@ var a_ARNG_Zd_SizeHSD2224No00 = operand{
},
}
+var a_ARNG_Zd_SizeHsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeSizeHsdTsz1921, enc_tszh_tszl},
+ },
+}
+
+var a_ARNG_Zd_SizeImm13NoOp = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZd, enc_Zd},
+ {encodeSizeImm13NoOp, enc_imm13},
+ },
+}
+
var a_ARNG_Zd_SzByteHalfword = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZd, enc_Zd},
@@ -6974,6 +7841,13 @@ var a_ARNG_Zda3RdSrcDst_SizeBHSD2224 = operand{
},
}
+var a_ARNG_Zda3RdSrcDst_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZda3RdSrcDst, enc_Zda},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zda3RdSrcDst_SizeHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZda3RdSrcDst, enc_Zda},
@@ -7051,6 +7925,13 @@ var a_ARNG_ZdnDest_SizeBHSD2224 = operand{
},
}
+var a_ARNG_ZdnDest_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZdnDest, enc_Zdn},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_ZdnDest_SizeHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZdnDest, enc_Zdn},
@@ -7079,6 +7960,13 @@ var a_ARNG_ZdnSrcDst_SizeBHSD2224 = operand{
},
}
+var a_ARNG_ZdnSrcDst_SizeBhsdTsz810 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZdnSrcDst, enc_Zdn},
+ {encodeSizeBhsdTsz810, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_ZdnSrcDst_SizeHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZdnSrcDst, enc_Zdn},
@@ -7086,6 +7974,13 @@ var a_ARNG_ZdnSrcDst_SizeHSD2224 = operand{
},
}
+var a_ARNG_ZdnSrcDst_SizeImm13NoOp = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZdnSrcDst, enc_Zdn},
+ {encodeSizeImm13NoOp, enc_imm13},
+ },
+}
+
var a_ARNG_Zk5103Rd_ArngDCheck = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZk5103Rd, enc_Zk},
@@ -7240,6 +8135,13 @@ var a_ARNG_Zm510V1_SizeBHSD2224 = operand{
},
}
+var a_ARNG_Zm510V1_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZm510V1, enc_Zm},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zm510V1_SizeHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZm510V1, enc_Zm},
@@ -7324,6 +8226,20 @@ var a_ARNG_Zn510Src_SizeBHSD2224 = operand{
},
}
+var a_ARNG_Zn510Src_SizeBhsTsz1921Unique = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeSizeBhsTsz1921Unique, enc_tszh_tszl},
+ },
+}
+
+var a_ARNG_Zn510Src_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zn510Src_SizeByteMergeZero = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZn510Src, enc_Zn},
@@ -7352,6 +8268,13 @@ var a_ARNG_Zn510Src_SizeHSD2224 = operand{
},
}
+var a_ARNG_Zn510Src_SizeHsdTsz1921Unique = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZn510Src, enc_Zn},
+ {encodeSizeHsdTsz1921Unique, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zn510Src_SizeTbBHS2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZn510Src, enc_Zn},
@@ -7478,6 +8401,13 @@ var a_ARNG_Zn510_SizeBHSD2224 = operand{
},
}
+var a_ARNG_Zn510_SizeBhsdTsz1921 = operand{
+ class: AC_ARNG, elemEncoders: []elemEncoder{
+ {encodeZn510, enc_Zn},
+ {encodeSizeBhsdTsz1921, enc_tszh_tszl},
+ },
+}
+
var a_ARNG_Zn510_SizeHSD2224 = operand{
class: AC_ARNG, elemEncoders: []elemEncoder{
{encodeZn510, enc_Zn},
@@ -7520,6 +8450,186 @@ var a_ARNG_Zn510_SzSD2223 = operand{
},
}
+var a_IMM_Fimm0_0_1_0_56 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeFimm0_0_1_0_56, enc_i1},
+ },
+}
+
+var a_IMM_Fimm0_0_56 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeFimm0_0_56, enc_NIL},
+ },
+}
+
+var a_IMM_Fimm0_5_1_0_56 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeFimm0_5_1_0_56, enc_i1},
+ },
+}
+
+var a_IMM_Fimm0_5_2_0_56 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeFimm0_5_2_0_56, enc_i1},
+ },
+}
+
+var a_IMM_Imm13_518 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm13_518, enc_imm13},
+ },
+}
+
+var a_IMM_Imm3Unsigned_1619 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm3Unsigned_1619, enc_imm3},
+ },
+}
+
+var a_IMM_Imm4Unsigned_1620 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm4Unsigned_1620, enc_imm4},
+ },
+}
+
+var a_IMM_Imm5Signed510Unique = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm5Signed510Unique, enc_imm5},
+ },
+}
+
+var a_IMM_Imm5Signed_1621V1 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm5Signed_1621V1, enc_imm5},
+ },
+}
+
+var a_IMM_Imm5Signed_1621V2 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm5Signed_1621V2, enc_imm5},
+ },
+}
+
+var a_IMM_Imm5Signed_510 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm5Signed_510, enc_imm5},
+ },
+}
+
+var a_IMM_Imm5bSigned_1621 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm5bSigned_1621, enc_imm5b},
+ },
+}
+
+var a_IMM_Imm6Signed_511 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm6Signed_511, enc_imm6},
+ },
+}
+
+var a_IMM_Imm7Unsigned_1421 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm7Unsigned_1421, enc_imm7},
+ },
+}
+
+var a_IMM_Imm8SignedLsl8 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8SignedLsl8, enc_imm8},
+ },
+}
+
+var a_IMM_Imm8Signed_513 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8Signed_513, enc_imm8},
+ },
+}
+
+var a_IMM_Imm8UnsignedLsl8 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8UnsignedLsl8, enc_imm8},
+ },
+}
+
+var a_IMM_Imm8Unsigned_513 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8Unsigned_513, enc_imm8},
+ },
+}
+
+var a_IMM_Imm8_513_Fimm = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8_513_Fimm, enc_imm8},
+ },
+}
+
+var a_IMM_Imm8hImm8l_Unsigned = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeImm8hImm8l_Unsigned, enc_imm8h_imm8l},
+ },
+}
+
+var a_IMM_Rot0_90_180_270_1012 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeRot0_90_180_270_1012, enc_rot},
+ },
+}
+
+var a_IMM_Rot0_90_180_270_1315 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeRot0_90_180_270_1315, enc_rot},
+ },
+}
+
+var a_IMM_Rot90_270_1011 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeRot90_270_1011, enc_rot},
+ },
+}
+
+var a_IMM_Rot90_270_1617 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeRot90_270_1617, enc_rot},
+ },
+}
+
+var a_IMM_ShiftTsz1619Range0V1 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz1619Range0V1, enc_tszh_tszl_imm3},
+ },
+}
+
+var a_IMM_ShiftTsz1619Range0V2 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz1619Range0V2, enc_tszh_tszl_imm3},
+ },
+}
+
+var a_IMM_ShiftTsz1619Range1V1 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz1619Range1V1, enc_tszh_tszl_imm3},
+ },
+}
+
+var a_IMM_ShiftTsz1619Range1V2 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz1619Range1V2, enc_tszh_tszl_imm3},
+ },
+}
+
+var a_IMM_ShiftTsz58Range0 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz58Range0, enc_tszh_tszl_imm3},
+ },
+}
+
+var a_IMM_ShiftTsz58Range1 = operand{
+ class: AC_IMM, elemEncoders: []elemEncoder{
+ {encodeShiftTsz58Range1, enc_tszh_tszl_imm3},
+ },
+}
+
var a_PREGIDX_PnN_58_Noop_Imm2_810 = operand{
class: AC_PREGIDX, elemEncoders: []elemEncoder{
{encodePnN_58, enc_PNn},
@@ -7563,6 +8673,20 @@ var a_PREGZM_Pg1014_ZeroPredCheck = operand{
},
}
+var a_PREGZM_Pg1620_MergePredCheck = operand{
+ class: AC_PREGZM, elemEncoders: []elemEncoder{
+ {encodePg1620, enc_Pg},
+ {encodeMergePredCheck, enc_NIL},
+ },
+}
+
+var a_PREGZM_Pg1620_ZeroPredCheck = operand{
+ class: AC_PREGZM, elemEncoders: []elemEncoder{
+ {encodePg1620, enc_Pg},
+ {encodeZeroPredCheck, enc_NIL},
+ },
+}
+
var a_PREGZM_Pg59_ZeroPredCheck = operand{
class: AC_PREGZM, elemEncoders: []elemEncoder{
{encodePg59, enc_Pg},
@@ -7689,6 +8813,20 @@ var a_SPZGREG_Noop_Xdn05 = operand{
},
}
+var a_SPZGREG_XCheck_Rd05_SPAllowed = operand{
+ class: AC_SPZGREG, elemEncoders: []elemEncoder{
+ {encodeXCheck, enc_NIL},
+ {encodeRd05_SPAllowed, enc_Rd},
+ },
+}
+
+var a_SPZGREG_XCheck_Rn1621_SPAllowed = operand{
+ class: AC_SPZGREG, elemEncoders: []elemEncoder{
+ {encodeXCheck, enc_NIL},
+ {encodeRn1621_SPAllowed, enc_Rn},
+ },
+}
+
var a_VREG_Noop_Vd05 = operand{
class: AC_VREG, elemEncoders: []elemEncoder{
{encodeNoop, enc_NIL},
@@ -7937,6 +9075,12 @@ var Rm__Zdn_T = []operand{
a_ARNG_ZdnSrcDst_SizeBHSD2224,
}
+var Rm__cimm__Zd_T = []operand{
+ a_SPZGREG_Noop_Rm1621ZR,
+ a_IMM_Imm5Signed510Unique,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
var RnSP__PgM__Zd_T = []operand{
a_SPZGREG_Noop_Rn510SP,
a_PREGZM_Pg1013_MergePredCheck,
@@ -8028,31 +9172,31 @@ var Zm_B__Zn_B__Zda_S = []operand{
}
var Zm_B_imm___Zn_B__Zda_H__1 = []operand{
- a_ARNGIDX_Zm_1619_Range0_7_ArngBCheck_I4hI4l_1019,
+ a_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_ArngBCheck_I2_1921_8BitGroup,
a_ARNG_Zn510_ArngBCheck,
a_ARNG_Zda3RdSrcDst_ArngSCheck,
}
@@ -8171,7 +9315,7 @@ var Zm_H_imm___Zn_H__Zd_H__1 = []operand{
}
var Zm_H_imm___Zn_H__Zd_H__2 = []operand{
- a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922,
+ a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I3hI3l_1922,
a_ARNG_Zn510_ArngHCheck,
a_ARNG_Zd_ArngHCheck,
}
@@ -8201,7 +9345,7 @@ var Zm_H_imm___Zn_H__Zda_H__1 = []operand{
}
var Zm_H_imm___Zn_H__Zda_H__2 = []operand{
- a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1922,
+ a_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I3hI3l_1922,
a_ARNG_Zn510_ArngHCheck,
a_ARNG_Zda3RdSrcDst_ArngHCheck,
}
@@ -8219,19 +9363,19 @@ var Zm_H_imm___Zn_H__Zda_S__1 = []operand{
}
var Zm_H_imm___Zn_H__Zda_S__2 = []operand{
- a_ARNGIDX_Zm_1619_Range0_7_ArngHCheck_I3hI3l_1119,
+ a_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_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_ARNGIDX_Zm_1619_Range0_7V2_ArngHCheck_I2_1921_16To32Bit,
a_ARNG_Zn510_ArngHCheck,
a_ARNG_Zda3RdSrcDst_ArngSCheck,
}
@@ -8798,4 +9942,277 @@ var Zn_imm___Pd_S = []operand{
a_ARNG_Pd_ArngSCheck,
}
+var c0_0__Zn_T__PgZ__Pd_T = []operand{
+ a_IMM_Fimm0_0_56,
+ a_ARNG_Zn510Src_SizeHSD2224,
+ a_PREGZM_Pg1013_ZeroPredCheck,
+ a_ARNG_Pd_SizeHSD2224,
+}
+
+var cconst__PgM__Zd_T = []operand{
+ a_IMM_Imm8_513_Fimm,
+ a_PREGZM_Pg1620_MergePredCheck,
+ a_ARNG_Zd_SizeHSD2224,
+}
+
+var cconst__Zd_T__1 = []operand{
+ a_IMM_Imm13_518,
+ a_ARNG_Zd_SizeImm13NoOp,
+}
+
+var cconst__Zd_T__2 = []operand{
+ a_IMM_Imm8_513_Fimm,
+ a_ARNG_Zd_SizeHSD2224,
+}
+
+var cconst__Zdn_T__PgM__Zdn_T__1 = []operand{
+ a_IMM_ShiftTsz58Range1,
+ a_ARNG_ZdnSrcDst_SizeBhsdTsz810,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnSrcDst_SizeBhsdTsz810,
+}
+
+var cconst__Zdn_T__PgM__Zdn_T__2 = []operand{
+ a_IMM_ShiftTsz58Range0,
+ a_ARNG_ZdnSrcDst_SizeBhsdTsz810,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnSrcDst_SizeBhsdTsz810,
+}
+
+var cconst__Zdn_T__Zdn_T = []operand{
+ a_IMM_Imm13_518,
+ a_ARNG_ZdnSrcDst_SizeImm13NoOp,
+ a_ARNG_ZdnSrcDst_SizeImm13NoOp,
+}
+
+var cconst__Zm_T__Zdn_T__Zdn_T = []operand{
+ a_IMM_ShiftTsz1619Range1V2,
+ a_ARNG_Zm510V1_SizeBhsdTsz1921,
+ a_ARNG_ZdnDest_SizeBhsdTsz1921,
+ a_ARNG_ZdnDest_SizeBhsdTsz1921,
+}
+
+var cconst__Zn_T__Zd_T__1 = []operand{
+ a_IMM_ShiftTsz1619Range1V2,
+ a_ARNG_Zn510Src_SizeBhsdTsz1921,
+ a_ARNG_Zd_SizeBhsdTsz1921,
+}
+
+var cconst__Zn_T__Zd_T__2 = []operand{
+ a_IMM_ShiftTsz1619Range0V2,
+ a_ARNG_Zn510Src_SizeBhsdTsz1921,
+ a_ARNG_Zd_SizeBhsdTsz1921,
+}
+
+var cconst__Zn_T__Zda_T = []operand{
+ a_IMM_ShiftTsz1619Range1V2,
+ a_ARNG_Zn510_SizeBhsdTsz1921,
+ a_ARNG_Zda3RdSrcDst_SizeBhsdTsz1921,
+}
+
+var cconst__Zn_Tb__Zd_T__1 = []operand{
+ a_IMM_ShiftTsz1619Range1V1,
+ a_ARNG_Zn510Src_SizeHsdTsz1921Unique,
+ a_ARNG_Zd_SizeBhsTsz1921,
+}
+
+var cconst__Zn_Tb__Zd_T__2 = []operand{
+ a_IMM_ShiftTsz1619Range0V1,
+ a_ARNG_Zn510Src_SizeBhsTsz1921Unique,
+ a_ARNG_Zd_SizeHsdTsz1921,
+}
+
+var cimm2__cimm1__Zd_T = []operand{
+ a_IMM_Imm5bSigned_1621,
+ a_IMM_Imm5Signed_510,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
+var cimm__Rn__Zd_T = []operand{
+ a_IMM_Imm5Signed_1621V1,
+ a_SPZGREG_Noop_Rn510ZR,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
+var cimm__Xd = []operand{
+ a_IMM_Imm6Signed_511,
+ a_SPZGREG_Noop_Rd05,
+}
+
+var cimm__XnSP__XdSP = []operand{
+ a_IMM_Imm6Signed_511,
+ a_SPZGREG_XCheck_Rn1621_SPAllowed,
+ a_SPZGREG_XCheck_Rd05_SPAllowed,
+}
+
+var cimm__Zdn_T__Zdn_T__1 = []operand{
+ a_IMM_Imm8Signed_513,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+}
+
+var cimm__Zdn_T__Zdn_T__2 = []operand{
+ a_IMM_Imm8Unsigned_513,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+}
+
+var cimm__Zm_B__Zdn_B__Zdn_B__1 = []operand{
+ a_IMM_Imm8hImm8l_Unsigned,
+ a_ARNG_Zm510V1_ArngBCheck,
+ a_ARNG_ZdnDest_ArngBCheck,
+ a_ARNG_ZdnDest_ArngBCheck,
+}
+
+var cimm__Zm_B__Zdn_B__Zdn_B__2 = []operand{
+ a_IMM_Imm4Unsigned_1620,
+ a_ARNG_Zm510V1_ArngBCheck,
+ a_ARNG_ZdnDest_ArngBCheck,
+ a_ARNG_ZdnDest_ArngBCheck,
+}
+
+var cimm__Zm_T__Zdn_T__Zdn_T = []operand{
+ a_IMM_Imm3Unsigned_1619,
+ a_ARNG_Zm510V1_SizeHSD2224,
+ a_ARNG_ZdnDest_SizeHSD2224,
+ a_ARNG_ZdnDest_SizeHSD2224,
+}
+
+var cimm__Zn_T__PgZ__Pd_T__1 = []operand{
+ a_IMM_Imm5Signed_1621V2,
+ a_ARNG_Zn510Src_SizeBHSD2224,
+ a_PREGZM_Pg1013_ZeroPredCheck,
+ a_ARNG_Pd_SizeBHSD2224,
+}
+
+var cimm__Zn_T__PgZ__Pd_T__2 = []operand{
+ a_IMM_Imm7Unsigned_1421,
+ a_ARNG_Zn510Src_SizeBHSD2224,
+ a_PREGZM_Pg1013_ZeroPredCheck,
+ a_ARNG_Pd_SizeBHSD2224,
+}
+
+var cimm__shift__PgM__Zd_T = []operand{
+ a_IMM_Imm8SignedLsl8,
+ a_PREGZM_Pg1620_MergePredCheck,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
+var cimm__shift__PgZ__Zd_T = []operand{
+ a_IMM_Imm8SignedLsl8,
+ a_PREGZM_Pg1620_ZeroPredCheck,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
+var cimm__shift__Zd_T = []operand{
+ a_IMM_Imm8SignedLsl8,
+ a_ARNG_Zd_SizeBHSD2224,
+}
+
+var cimm__shift__Zdn_T__Zdn_T = []operand{
+ a_IMM_Imm8UnsignedLsl8,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+ a_ARNG_ZdnSrcDst_SizeBHSD2224,
+}
+
+var const__Zdn_T__PgM__Zdn_T__1 = []operand{
+ a_IMM_Fimm0_0_1_0_56,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+}
+
+var const__Zdn_T__PgM__Zdn_T__2 = []operand{
+ a_IMM_Fimm0_5_1_0_56,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+}
+
+var const__Zdn_T__PgM__Zdn_T__3 = []operand{
+ a_IMM_Fimm0_5_2_0_56,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnSrcDst_SizeHSD2224,
+}
+
+var const__Zm_B_imm___Zn_B__Zda_S = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm1619_8To32Bit_ArngBCheck_I2_1921_8To32Bit,
+ a_ARNG_Zn510_ArngBCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var const__Zm_H_imm___Zn_H__Zda_D = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm1620_16To64Bit_ArngHCheck_I1_2021_16To64Bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngDCheck,
+}
+
+var const__Zm_H_imm___Zn_H__Zda_H__1 = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm_1619_Range0_7V1_ArngHCheck_I2_1921_16bit,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var const__Zm_H_imm___Zn_H__Zda_H__2 = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm_1619_Half_ArngHCheck_I2_1921_Half,
+ a_ARNG_Zn510_ArngHCheck,
+ a_ARNG_Zda3RdSrcDst_ArngHCheck,
+}
+
+var const__Zm_S_imm___Zn_S__Zda_S__1 = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm_1620_Range0_15_ArngSCheck_I1_2021_32bit,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var const__Zm_S_imm___Zn_S__Zda_S__2 = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNGIDX_Zm_1620_Single_ArngSCheck_I1_2021_Single,
+ a_ARNG_Zn510_ArngSCheck,
+ a_ARNG_Zda3RdSrcDst_ArngSCheck,
+}
+
+var const__Zm_T__Zdn_T__PgM__Zdn_T = []operand{
+ a_IMM_Rot90_270_1617,
+ a_ARNG_Zm510V1_SizeHSD2224,
+ a_ARNG_ZdnDest_SizeHSD2224,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_ZdnDest_SizeHSD2224,
+}
+
+var const__Zm_T__Zdn_T__Zdn_T = []operand{
+ a_IMM_Rot90_270_1011,
+ a_ARNG_Zm510V1_SizeBHSD2224,
+ a_ARNG_ZdnDest_SizeBHSD2224,
+ a_ARNG_ZdnDest_SizeBHSD2224,
+}
+
+var const__Zm_T__Zn_T__PgM__Zda_T = []operand{
+ a_IMM_Rot0_90_180_270_1315,
+ a_ARNG_Zm1621_SizeHSD2224,
+ a_ARNG_Zn510_SizeHSD2224,
+ a_PREGZM_Pg1013_MergePredCheck,
+ a_ARNG_Zda3RdSrcDst_SizeHSD2224,
+}
+
+var const__Zm_T__Zn_T__Zda_T = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNG_Zm1621_SizeBHSD2224,
+ a_ARNG_Zn510_SizeBHSD2224,
+ a_ARNG_Zda3RdSrcDst_SizeBHSD2224,
+}
+
+var const__Zm_Tb__Zn_Tb__Zda_T = []operand{
+ a_IMM_Rot0_90_180_270_1012,
+ a_ARNG_Zm1621_Size0TbBH2223,
+ a_ARNG_Zn510_Size0TbBH2223,
+ a_ARNG_Zda3RdSrcDst_Size0SD2223,
+}
+
var oc = []operand{}