feat(disasm): name the CLDEMOTE encoding the decoder refuses
The hint NOP opcode 0F 1C /r with a memory operand is CLDEMOTE, a memory-only instruction the toolchain's own table carries; the decoder rejects the encoding instead of naming it. The rejected-encoding side of the supplementary table names it from the bytes, and the corpus row 0f1c03 pins the text in the unlisted fixture, round trip byte exact. Assisted-by: GLM 5.3 Flash
This commit is contained in:
1 parent
dd356b9e6a
commit
458d981f31
4 files changed
+36
-3
No files matched your search
@@ -76,6 +76,10 @@ func TestDegenerateNaming(t *testing.T) {
|
||||
// toolchain spelling.
|
||||
{[]byte{0xf3, 0x0f, 0x1e, 0xfa}, "ENDBR64"},
|
||||
{[]byte{0xf3, 0x0f, 0x1e, 0xfb}, "ENDBR32"},
|
||||
// amd64enc_extra.s: CLDEMOTE (BX) // 0f1c03. The decoder
|
||||
// rejects the encoding outright; the table names it from the
|
||||
// bytes.
|
||||
{[]byte{0x0f, 0x1c, 0x03}, "CLDEMOTE 0(BX)"},
|
||||
} {
|
||||
ins, err := Decode(arch.AMD64, tt.code, 0)
|
||||
if err != nil {
|
||||
@@ -102,12 +106,13 @@ func TestDegenerateNamingBoundaries(t *testing.T) {
|
||||
text string
|
||||
}{
|
||||
// Rejected outright: RDSEED without the operand-size override
|
||||
// (the bare 0F C7 /7 register form), MONITORX and MWAITX, the
|
||||
// hint NOP CLDEMOTE.
|
||||
// (the bare 0F C7 /7 register form), MONITORX and MWAITX, and
|
||||
// the register form of the hint NOP opcode, which the corpus
|
||||
// does not spell.
|
||||
{[]byte{0x0f, 0xc7, 0xfa}, "???"},
|
||||
{[]byte{0x0f, 0x01, 0xfa}, "???"},
|
||||
{[]byte{0x0f, 0x01, 0xfb}, "???"},
|
||||
{[]byte{0x0f, 0x1c, 0x03}, "???"},
|
||||
{[]byte{0x0f, 0x1c, 0xc3}, "???"},
|
||||
// Degenerate but outside the table's prefix gates: repne ADCX is
|
||||
// no instruction the corpus names.
|
||||
{[]byte{0xf2, 0x0f, 0x38, 0xf6, 0xd2}, "REPNE; Op(0)"},
|
||||
|
||||
Reference in new issue
Block a user