feat(arch): add the remaining scalar FP16 memory forms to the extension layer
Assisted-by: GLM 5.3 Flash
This commit is contained in:
1 parent
454a21f5b7
commit
8d611bfdaf
2 files changed
+103
-24
No files matched your search
+45
-5
@@ -408,6 +408,43 @@ var amd64GoldenRows = []amd64GoldenRow{
|
||||
// list, both destinations being XMM, so the resolver cannot tell them
|
||||
// apart and the register row above pins the 128-bit template alone.
|
||||
|
||||
// The remaining scalar memory forms: the scale and exponent extracts,
|
||||
// the imm8-control group, and the integer converts, whose second
|
||||
// source the manual spells r/m32. The W1 integer converts take the
|
||||
// same operand list as the W0 ones, memory carrying no width to pick
|
||||
// between them, so the memory rows pin the W0 templates and the W1
|
||||
// entries rest on their register rows.
|
||||
{"vscalefsh memory source", "VSCALEFSH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"624615002d31", "62 46 15 00 2d 31 vscalefsh (%r9),%xmm29,%xmm30"},
|
||||
{"vgetexpsh memory source", "VGETEXPSH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"624615004331", "62 46 15 00 43 31 vgetexpsh (%r9),%xmm29,%xmm30"},
|
||||
{"vgetexpsh memory source disp8", "VGETEXPSH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(1, 127), ExtXmm(30)},
|
||||
"6266150043717f", "62 66 15 00 43 71 7f vgetexpsh 0xfe(%rcx),%xmm29,%xmm30 (Disp8(7f))"},
|
||||
{"vcmpsh memory source", "VCMPSH",
|
||||
[]ExtOperand{ExtImmediate(0x7b), ExtXmm(29), ExtMemory(9, 0), ExtMask(5)},
|
||||
"62d31600c2297b", "62 d3 16 00 c2 29 7b vcmpsh $0x7b,(%r9),%xmm29,%k5"},
|
||||
{"vcmpsh memory source disp8", "VCMPSH",
|
||||
[]ExtOperand{ExtImmediate(0x7b), ExtXmm(29), ExtMemory(1, 127), ExtMask(5)},
|
||||
"62f31600c2697f7b", "62 f3 16 00 c2 69 7f 7b vcmpsh $0x7b,0xfe(%rcx),%xmm29,%k5 (Disp8(7f))"},
|
||||
{"vgetmantsh memory source", "VGETMANTSH",
|
||||
[]ExtOperand{ExtImmediate(0x0b), ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"6243140027310b", "62 43 14 00 27 31 7b vgetmantsh $0x7b,(%r9),%xmm29,%xmm30 (opcode row only)"},
|
||||
{"vreducesh memory source", "VREDUCESH",
|
||||
[]ExtOperand{ExtImmediate(0x7b), ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"6243140057317b", "62 43 14 00 57 31 7b vreducesh $0x7b,(%r9),%xmm29,%xmm30"},
|
||||
{"vrndscalesh memory source", "VRNDSCALESH",
|
||||
[]ExtOperand{ExtImmediate(0x7b), ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"624314000a317b", "62 43 14 00 0a 31 7b vrndscalesh $0x7b,(%r9),%xmm29,%xmm30"},
|
||||
{"vcvtsi2sh memory source", "VCVTSI2SH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"624516002a31", "62 45 16 00 2a 31 vcvtsi2shl (%r9),%xmm29,%xmm30"},
|
||||
{"vcvtusi2sh memory source", "VCVTUSI2SH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"624516007b31", "62 45 16 00 7b 31 vcvtusi2shl (%r9),%xmm29,%xmm30"},
|
||||
|
||||
// High registers in a 512-bit form exercise the EVEX extension bits:
|
||||
// with both sources above 15 the B bar and X bar bits clear, while the
|
||||
// destination zmm23 keeps R bar set in byte one (derived from the
|
||||
@@ -619,11 +656,14 @@ func TestAmd64ExtRejects(t *testing.T) {
|
||||
{"memory in the arithmetic's destination", "VADDSH",
|
||||
[]ExtOperand{ExtXmm(28), ExtXmm(29), ExtMemory(9, 0)},
|
||||
"wants an XMM register"},
|
||||
{"memory where the general register belongs", "VCVTSI2SH",
|
||||
[]ExtOperand{ExtXmm(29), ExtMemory(9, 0), ExtXmm(30)},
|
||||
"wants a 32-bit general register"},
|
||||
{"memory as the compare's second source", "VCMPSH",
|
||||
[]ExtOperand{ExtImmediate(7), ExtXmm(28), ExtMemory(9, 0), ExtMask(5)},
|
||||
{"memory as the compare's mask destination", "VCMPSH",
|
||||
[]ExtOperand{ExtImmediate(7), ExtXmm(28), ExtXmm(29), ExtMemory(9, 0)},
|
||||
"wants an opmask register"},
|
||||
{"memory as the convert's first source", "VCVTSI2SH",
|
||||
[]ExtOperand{ExtMemory(9, 0), ExtGpr32(2), ExtXmm(30)},
|
||||
"wants an XMM register"},
|
||||
{"memory as the mantissa control's first source", "VGETMANTSH",
|
||||
[]ExtOperand{ExtImmediate(0x0b), ExtMemory(9, 0), ExtXmm(29), ExtXmm(30)},
|
||||
"wants an XMM register"},
|
||||
{"memory as the intersect source", "VP2INTERSECTD",
|
||||
[]ExtOperand{ExtZmm(2), ExtMemory(9, 0), ExtMask(0)},
|
||||
|
||||
Reference in new issue
Block a user