fix(asm): tighten the arm64 acceptance toward the toolchain
Assisted-by: GLM 5.3 Flash
This commit is contained in:
1 parent
82d741514a
commit
8ab99c9b0c
4 files changed
+250
-29
No files matched your search
+19
-23
@@ -565,16 +565,12 @@ func init() {
|
||||
a64InstrTable["BFXILW"] = a64Enc{format: a64FBitfieldAlias, op: 0<<31 | 1<<29 | 0x26<<23}
|
||||
a64InstrTable["SBFIZ"] = a64Enc{format: a64FBitfieldAlias, op: 0x93400000}
|
||||
a64InstrTable["SBFIZW"] = a64Enc{format: a64FBitfieldAlias, op: 0x13000000}
|
||||
a64InstrTable["UBFIZ"] = a64Enc{format: a64FBitfieldAlias, op: 0x53000000}
|
||||
a64InstrTable["UBFIZW"] = a64Enc{format: a64FBitfieldAlias, op: 0x33000000}
|
||||
a64InstrTable["UBFIZ"] = a64Enc{format: a64FBitfieldAlias, op: 0xd3400000}
|
||||
a64InstrTable["UBFIZW"] = a64Enc{format: a64FBitfieldAlias, op: 0x53000000}
|
||||
a64InstrTable["SBFM"] = a64Enc{format: a64FBitfield, op: 1<<31 | 0<<29 | 0x26<<23 | 1<<22}
|
||||
a64InstrTable["SBFMW"] = a64Enc{format: a64FBitfield, op: 0<<31 | 0<<29 | 0x26<<23 | 0<<22}
|
||||
a64InstrTable["UBFM"] = a64Enc{format: a64FBitfield, op: 1<<31 | 2<<29 | 0x26<<23 | 1<<22}
|
||||
a64InstrTable["UBFMW"] = a64Enc{format: a64FBitfield, op: 0<<31 | 2<<29 | 0x26<<23 | 0<<22}
|
||||
a64InstrTable["BFI"] = a64Enc{format: a64FBitfield, op: 1<<31 | 2<<29 | 0x26<<23 | 1<<22}
|
||||
a64InstrTable["BFIW"] = a64Enc{format: a64FBitfield, op: 0<<31 | 2<<29 | 0x26<<23 | 0<<22}
|
||||
a64InstrTable["BFXIL"] = a64Enc{format: a64FBitfield, op: 1<<31 | 1<<29 | 0x26<<23 | 1<<22}
|
||||
a64InstrTable["BFXILW"] = a64Enc{format: a64FBitfield, op: 0<<31 | 1<<29 | 0x26<<23 | 0<<22}
|
||||
|
||||
// ---- FP 3-operand (Rm, Rn, Rd): FADD, FSUB, FMUL, FDIV, FMAX, FMIN, FNMUL ----
|
||||
fp3 := map[string]uint32{
|
||||
@@ -1071,7 +1067,7 @@ func a64ElemLetter(s string) bool {
|
||||
// arrangement"). fpAcrossArrs bounds the across-vector reductions, which do
|
||||
// take the half width.
|
||||
var fpSimdArrs = uint16(1<<a64Arr2S | 1<<a64Arr4S | 1<<a64Arr2D)
|
||||
var fpAcrossArrs = uint16(1<<a64Arr4H | 1<<a64Arr8H | 1<<a64Arr2S | 1<<a64Arr4S)
|
||||
var fpAcrossArrs = uint16(1 << a64Arr4S)
|
||||
|
||||
// a64FPArrBits carries the bits an arrangement contributes to the FP SIMD
|
||||
// words: the FP size field is a single bit at bit 22 (0 for the S widths, 1
|
||||
@@ -1148,31 +1144,31 @@ var a64SimdVTable = map[string]a64SimdVSpec{
|
||||
// Saturating, halving, polynomial and pairwise arithmetic, the logical
|
||||
// VBIT/VBSL family and the FP pairwise forms: word-verified against go
|
||||
// tool asm.
|
||||
"VBIC": {0x0e601c00, 0x7f, false, false},
|
||||
"VBIF": {0x2ee01c00, 0x7f, false, false},
|
||||
"VBIT": {0x6ea01c00, 0x7f, false, false},
|
||||
"VBSL": {0x6e601c00, 0x7f, false, false},
|
||||
"VBIC": {0x0e601c00, 0x03, false, false}, // logical ops accept 8B and 16B only
|
||||
"VBIF": {0x2ee01c00, 0x03, false, false},
|
||||
"VBIT": {0x6ea01c00, 0x03, false, false},
|
||||
"VBSL": {0x6e601c00, 0x03, false, false},
|
||||
"VCMTST": {0x0e208c00, 0x7f, false, false},
|
||||
"VFADDP": {0x2e20d400, fpSimdArrs, false, true},
|
||||
"VFMAXP": {0x2e20f400, fpSimdArrs, false, true},
|
||||
"VFMINP": {0x6ea0f400, fpSimdArrs, false, true},
|
||||
"VFMAXNMP": {0x2e20c400, fpSimdArrs, false, true},
|
||||
"VFMINNMP": {0x6ea0c400, fpSimdArrs, false, true},
|
||||
"VMLA": {0x4ea09400, 0x7f, false, false},
|
||||
"VMLS": {0x6ea09400, 0x7f, false, false},
|
||||
"VORN": {0x4ee01c00, 0x7f, false, false},
|
||||
"VMLA": {0x4ea09400, 0x3f, false, false}, // no 2D: integer multiply stops at 4S
|
||||
"VMLS": {0x6ea09400, 0x3f, false, false},
|
||||
"VORN": {0x4ee01c00, 0x03, false, false},
|
||||
"VSHADD": {0x4ea00400, 0x7f, false, false},
|
||||
"VSRHADD": {0x4ea01400, 0x7f, false, false},
|
||||
"VUHADD": {0x6ea00400, 0x7f, false, false},
|
||||
"VURHADD": {0x6ea01400, 0x7f, false, false},
|
||||
"VSMAX": {0x4ea06400, 0x7f, false, false},
|
||||
"VSMIN": {0x4ea06c00, 0x7f, false, false},
|
||||
"VSMAXP": {0x4ea0a400, 0x7f, false, false},
|
||||
"VSMINP": {0x4ea0ac00, 0x7f, false, false},
|
||||
"VUMAX": {0x2e206400, 0x7f, false, false},
|
||||
"VUMIN": {0x2e206c00, 0x7f, false, false},
|
||||
"VUMAXP": {0x6ea0a400, 0x7f, false, false},
|
||||
"VUMINP": {0x6ea0ac00, 0x7f, false, false},
|
||||
"VSMAX": {0x4ea06400, 0x3f, false, false}, // no 2D: integer max stops at 4S
|
||||
"VSMIN": {0x4ea06c00, 0x3f, false, false},
|
||||
"VSMAXP": {0x4ea0a400, 0x3f, false, false},
|
||||
"VSMINP": {0x4ea0ac00, 0x3f, false, false},
|
||||
"VUMAX": {0x2e206400, 0x3f, false, false},
|
||||
"VUMIN": {0x2e206c00, 0x3f, false, false},
|
||||
"VUMAXP": {0x6ea0a400, 0x3f, false, false},
|
||||
"VUMINP": {0x6ea0ac00, 0x3f, false, false},
|
||||
"VSQADD": {0x4ea00c00, 0x7f, false, false},
|
||||
"VUQADD": {0x6ea00c00, 0x7f, false, false},
|
||||
"VSQSUB": {0x4ea02c00, 0x7f, false, false},
|
||||
@@ -1297,7 +1293,7 @@ var a64SimdV2Table = map[string]a64SimdVSpec{
|
||||
"VNOT": {0x2e205800, 0x7f, false, false},
|
||||
"VSQABS": {0x0e207800, 0x7f, false, false},
|
||||
"VSQNEG": {0x2e207800, 0x7f, false, false},
|
||||
"VRBIT": {0x2e605800, 0x7f, false, false},
|
||||
"VRBIT": {0x2e605800, 0x03, false, false}, // 8B and 16B only
|
||||
"VSCVTF": {0x4e21d800, fpSimdArrs, false, true},
|
||||
"VUCVTF": {0x6e21d800, fpSimdArrs, false, true},
|
||||
"VFCVTZS": {0x4ea1b800, fpSimdArrs, false, true},
|
||||
|
||||
Reference in new issue
Block a user