// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause package asm import "testing" // amd64SystemCorpus holds every line the Go toolchain's own // amd64enc.s carries for the system, flag, string and segment families, with the bytes go tool asm // emits for each: the differential ground truth the family is proven // against, line for line. var amd64SystemCorpus = []struct { line string want string }{ {"CBW", "66 98"}, {"CDQ", "99"}, {"CDQE", "48 98"}, {"CLAC", "0f 01 ca"}, {"CLC", "f8"}, {"CLFLUSH (BX)", "0f ae 3b"}, {"CLFLUSH (R11)", "41 0f ae 3b"}, {"CLFLUSHOPT (BX)", "66 0f ae 3b"}, {"CLFLUSHOPT (R11)", "66 41 0f ae 3b"}, {"CLI", "fa"}, {"CLTS", "0f 06"}, {"CMC", "f5"}, {"CMPSB", "a6"}, {"CMPSL", "a7"}, {"CMPSQ", "48 a7"}, {"CMPSW", "66 a7"}, {"CMPXCHG16B (BX)", "48 0f c7 0b"}, {"CMPXCHG16B (R11)", "49 0f c7 0b"}, {"CMPXCHG8B (BX)", "0f c7 0b"}, {"CMPXCHG8B (R11)", "41 0f c7 0b"}, {"CQO", "48 99"}, {"CWD", "66 99"}, {"CWDE", "98"}, {"HLT", "f4"}, {"ICEBP", "f1"}, {"INSB", "6c"}, {"INSL", "6d"}, {"INSW", "66 6d"}, {"INVD", "0f 08"}, {"INVLPG (BX)", "0f 01 3b"}, {"INVLPG (R11)", "41 0f 01 3b"}, {"IRETW", "66 cf"}, {"IRETL", "cf"}, {"IRETQ", "48 cf"}, {"LAHF", "9f"}, {"LARW (BX), DX", "66 0f 02 13"}, {"LARW (R11), DX", "66 41 0f 02 13"}, {"LARW DX, DX", "66 0f 02 d2"}, {"LARW R11, DX", "66 41 0f 02 d3"}, {"LARW (BX), R11", "66 44 0f 02 1b"}, {"LARW (R11), R11", "66 45 0f 02 1b"}, {"LARW DX, R11", "66 44 0f 02 da"}, {"LARW R11, R11", "66 45 0f 02 db"}, {"LARL (BX), DX", "0f 02 13"}, {"LARL (R11), DX", "41 0f 02 13"}, {"LARL DX, DX", "0f 02 d2"}, {"LARL R11, DX", "41 0f 02 d3"}, {"LARL (BX), R11", "44 0f 02 1b"}, {"LARL (R11), R11", "45 0f 02 1b"}, {"LARL DX, R11", "44 0f 02 da"}, {"LARL R11, R11", "45 0f 02 db"}, {"LARQ (BX), DX", "48 0f 02 13"}, {"LARQ (R11), DX", "49 0f 02 13"}, {"LARQ DX, DX", "48 0f 02 d2"}, {"LARQ R11, DX", "49 0f 02 d3"}, {"LARQ (BX), R11", "4c 0f 02 1b"}, {"LARQ (R11), R11", "4d 0f 02 1b"}, {"LARQ DX, R11", "4c 0f 02 da"}, {"LARQ R11, R11", "4d 0f 02 db"}, {"LFSW (BX), DX", "66 0f b4 13"}, {"LFSW (R11), DX", "66 41 0f b4 13"}, {"LFSW (BX), R11", "66 44 0f b4 1b"}, {"LFSW (R11), R11", "66 45 0f b4 1b"}, {"LFSL (BX), DX", "0f b4 13"}, {"LFSL (R11), DX", "41 0f b4 13"}, {"LFSL (BX), R11", "44 0f b4 1b"}, {"LFSL (R11), R11", "45 0f b4 1b"}, {"LFSQ (BX), DX", "48 0f b4 13"}, {"LFSQ (R11), DX", "49 0f b4 13"}, {"LFSQ (BX), R11", "4c 0f b4 1b"}, {"LFSQ (R11), R11", "4d 0f b4 1b"}, {"LGDT (BX)", "0f 01 13"}, {"LGDT (R11)", "41 0f 01 13"}, {"LGSW (BX), DX", "66 0f b5 13"}, {"LGSW (R11), DX", "66 41 0f b5 13"}, {"LGSW (BX), R11", "66 44 0f b5 1b"}, {"LGSW (R11), R11", "66 45 0f b5 1b"}, {"LGSL (BX), DX", "0f b5 13"}, {"LGSL (R11), DX", "41 0f b5 13"}, {"LGSL (BX), R11", "44 0f b5 1b"}, {"LGSL (R11), R11", "45 0f b5 1b"}, {"LGSQ (BX), DX", "48 0f b5 13"}, {"LGSQ (R11), DX", "49 0f b5 13"}, {"LGSQ (BX), R11", "4c 0f b5 1b"}, {"LGSQ (R11), R11", "4d 0f b5 1b"}, {"LIDT (BX)", "0f 01 1b"}, {"LIDT (R11)", "41 0f 01 1b"}, {"LLDT (BX)", "0f 00 13"}, {"LLDT (R11)", "41 0f 00 13"}, {"LLDT DX", "0f 00 d2"}, {"LLDT R11", "41 0f 00 d3"}, {"LMSW (BX)", "0f 01 33"}, {"LMSW (R11)", "41 0f 01 33"}, {"LMSW DX", "0f 01 f2"}, {"LMSW R11", "41 0f 01 f3"}, {"LODSB", "ac"}, {"LODSL", "ad"}, {"LODSQ", "48 ad"}, {"LODSW", "66 ad"}, {"LSLW (BX), DX", "66 0f 03 13"}, {"LSLW (R11), DX", "66 41 0f 03 13"}, {"LSLW DX, DX", "66 0f 03 d2"}, {"LSLW R11, DX", "66 41 0f 03 d3"}, {"LSLW (BX), R11", "66 44 0f 03 1b"}, {"LSLW (R11), R11", "66 45 0f 03 1b"}, {"LSLW DX, R11", "66 44 0f 03 da"}, {"LSLW R11, R11", "66 45 0f 03 db"}, {"LSLL (BX), DX", "0f 03 13"}, {"LSLL (R11), DX", "41 0f 03 13"}, {"LSLL DX, DX", "0f 03 d2"}, {"LSLL R11, DX", "41 0f 03 d3"}, {"LSLL (BX), R11", "44 0f 03 1b"}, {"LSLL (R11), R11", "45 0f 03 1b"}, {"LSLL DX, R11", "44 0f 03 da"}, {"LSLL R11, R11", "45 0f 03 db"}, {"LSLQ (BX), DX", "48 0f 03 13"}, {"LSLQ (R11), DX", "49 0f 03 13"}, {"LSLQ DX, DX", "48 0f 03 d2"}, {"LSLQ R11, DX", "49 0f 03 d3"}, {"LSLQ (BX), R11", "4c 0f 03 1b"}, {"LSLQ (R11), R11", "4d 0f 03 1b"}, {"LSLQ DX, R11", "4c 0f 03 da"}, {"LSLQ R11, R11", "4d 0f 03 db"}, {"LSSW (BX), DX", "66 0f b2 13"}, {"LSSW (R11), DX", "66 41 0f b2 13"}, {"LSSW (BX), R11", "66 44 0f b2 1b"}, {"LSSW (R11), R11", "66 45 0f b2 1b"}, {"LSSL (BX), DX", "0f b2 13"}, {"LSSL (R11), DX", "41 0f b2 13"}, {"LSSL (BX), R11", "44 0f b2 1b"}, {"LSSL (R11), R11", "45 0f b2 1b"}, {"LSSQ (BX), DX", "48 0f b2 13"}, {"LSSQ (R11), DX", "49 0f b2 13"}, {"LSSQ (BX), R11", "4c 0f b2 1b"}, {"LSSQ (R11), R11", "4d 0f b2 1b"}, {"LTR (BX)", "0f 00 1b"}, {"LTR (R11)", "41 0f 00 1b"}, {"LTR DX", "0f 00 da"}, {"LTR R11", "41 0f 00 db"}, {"MONITOR", "0f 01 c8"}, {"MOVBEW DX, (BX)", "66 0f 38 f1 13"}, {"MOVBEW R11, (BX)", "66 44 0f 38 f1 1b"}, {"MOVBEW DX, (R11)", "66 41 0f 38 f1 13"}, {"MOVBEW R11, (R11)", "66 45 0f 38 f1 1b"}, {"MOVBEW (BX), DX", "66 0f 38 f0 13"}, {"MOVBEW (R11), DX", "66 41 0f 38 f0 13"}, {"MOVBEW (BX), R11", "66 44 0f 38 f0 1b"}, {"MOVBEW (R11), R11", "66 45 0f 38 f0 1b"}, {"MOVBEL DX, (BX)", "0f 38 f1 13"}, {"MOVBEL R11, (BX)", "44 0f 38 f1 1b"}, {"MOVBEL DX, (R11)", "41 0f 38 f1 13"}, {"MOVBEL R11, (R11)", "45 0f 38 f1 1b"}, {"MOVBEL (BX), DX", "0f 38 f0 13"}, {"MOVBEL (R11), DX", "41 0f 38 f0 13"}, {"MOVBEL (BX), R11", "44 0f 38 f0 1b"}, {"MOVBEL (R11), R11", "45 0f 38 f0 1b"}, {"MOVBEQ DX, (BX)", "48 0f 38 f1 13"}, {"MOVBEQ R11, (BX)", "4c 0f 38 f1 1b"}, {"MOVBEQ DX, (R11)", "49 0f 38 f1 13"}, {"MOVBEQ R11, (R11)", "4d 0f 38 f1 1b"}, {"MOVBEQ (BX), DX", "48 0f 38 f0 13"}, {"MOVBEQ (R11), DX", "49 0f 38 f0 13"}, {"MOVBEQ (BX), R11", "4c 0f 38 f0 1b"}, {"MOVBEQ (R11), R11", "4d 0f 38 f0 1b"}, {"MWAIT", "0f 01 c9"}, {"NOPW (BX)", "66 0f 1f 03"}, {"NOPW (R11)", "66 41 0f 1f 03"}, {"NOPW DX", "66 0f 1f c2"}, {"NOPW R11", "66 41 0f 1f c3"}, {"NOPL (BX)", "0f 1f 03"}, {"NOPL (R11)", "41 0f 1f 03"}, {"NOPL DX", "0f 1f c2"}, {"NOPL R11", "41 0f 1f c3"}, {"OUTSB", "6e"}, {"OUTSL", "6f"}, {"OUTSW", "66 6f"}, {"POPFW", "66 9d"}, {"PUSHFW", "66 9c"}, {"RDFSBASEL DX", "f3 0f ae c2"}, {"RDFSBASEL R11", "f3 41 0f ae c3"}, {"RDGSBASEL DX", "f3 0f ae ca"}, {"RDGSBASEL R11", "f3 41 0f ae cb"}, {"RDFSBASEQ DX", "f3 48 0f ae c2"}, {"RDFSBASEQ R11", "f3 49 0f ae c3"}, {"RDGSBASEQ DX", "f3 48 0f ae ca"}, {"RDGSBASEQ R11", "f3 49 0f ae cb"}, {"RDMSR", "0f 32"}, {"RDPKRU", "0f 01 ee"}, {"RDPMC", "0f 33"}, {"RDRANDW DX", "66 0f c7 f2"}, {"RDRANDW R11", "66 41 0f c7 f3"}, {"RDRANDL DX", "0f c7 f2"}, {"RDRANDL R11", "41 0f c7 f3"}, {"RDRANDQ DX", "48 0f c7 f2"}, {"RDRANDQ R11", "49 0f c7 f3"}, {"RDSEEDW DX", "66 0f c7 fa"}, {"RDSEEDW R11", "66 41 0f c7 fb"}, {"RDSEEDL DX", "0f c7 fa"}, {"RDSEEDL R11", "41 0f c7 fb"}, {"RDSEEDQ DX", "48 0f c7 fa"}, {"RDSEEDQ R11", "49 0f c7 fb"}, {"RSM", "0f aa"}, {"SAHF", "9e"}, {"SCASB", "ae"}, {"SCASL", "af"}, {"SCASQ", "48 af"}, {"SCASW", "66 af"}, {"SGDT (BX)", "0f 01 03"}, {"SGDT (R11)", "41 0f 01 03"}, {"SIDT (BX)", "0f 01 0b"}, {"SIDT (R11)", "41 0f 01 0b"}, {"SLDTW (BX)", "66 0f 00 03"}, {"SLDTW (R11)", "66 41 0f 00 03"}, {"SLDTW DX", "66 0f 00 c2"}, {"SLDTW R11", "66 41 0f 00 c3"}, {"SLDTL (BX)", "0f 00 03"}, {"SLDTL (R11)", "41 0f 00 03"}, {"SLDTL DX", "0f 00 c2"}, {"SLDTL R11", "41 0f 00 c3"}, {"SLDTQ (BX)", "48 0f 00 03"}, {"SLDTQ (R11)", "49 0f 00 03"}, {"SLDTQ DX", "48 0f 00 c2"}, {"SLDTQ R11", "49 0f 00 c3"}, {"SMSWW (BX)", "66 0f 01 23"}, {"SMSWW (R11)", "66 41 0f 01 23"}, {"SMSWW DX", "66 0f 01 e2"}, {"SMSWW R11", "66 41 0f 01 e3"}, {"SMSWL (BX)", "0f 01 23"}, {"SMSWL (R11)", "41 0f 01 23"}, {"SMSWL DX", "0f 01 e2"}, {"SMSWL R11", "41 0f 01 e3"}, {"SMSWQ (BX)", "48 0f 01 23"}, {"SMSWQ (R11)", "49 0f 01 23"}, {"SMSWQ DX", "48 0f 01 e2"}, {"SMSWQ R11", "49 0f 01 e3"}, {"STAC", "0f 01 cb"}, {"STC", "f9"}, {"STI", "fb"}, {"STRW (BX)", "66 0f 00 0b"}, {"STRW (R11)", "66 41 0f 00 0b"}, {"STRW DX", "66 0f 00 ca"}, {"STRW R11", "66 41 0f 00 cb"}, {"STRL (BX)", "0f 00 0b"}, {"STRL (R11)", "41 0f 00 0b"}, {"STRL DX", "0f 00 ca"}, {"STRL R11", "41 0f 00 cb"}, {"STRQ (BX)", "48 0f 00 0b"}, {"STRQ (R11)", "49 0f 00 0b"}, {"STRQ DX", "48 0f 00 ca"}, {"STRQ R11", "49 0f 00 cb"}, {"SWAPGS", "0f 01 f8"}, {"SYSENTER", "0f 34"}, {"SYSENTER64", "48 0f 34"}, {"SYSEXIT", "0f 35"}, {"SYSEXIT64", "48 0f 35"}, {"SYSRET", "0f 07"}, {"UD1", "0f b9"}, {"UD2", "0f 0b"}, {"VERR (BX)", "0f 00 23"}, {"VERR (R11)", "41 0f 00 23"}, {"VERR DX", "0f 00 e2"}, {"VERR R11", "41 0f 00 e3"}, {"VERW (BX)", "0f 00 2b"}, {"VERW (R11)", "41 0f 00 2b"}, {"VERW DX", "0f 00 ea"}, {"VERW R11", "41 0f 00 eb"}, {"WBINVD", "0f 09"}, {"WRFSBASEL DX", "f3 0f ae d2"}, {"WRFSBASEL R11", "f3 41 0f ae d3"}, {"WRGSBASEL DX", "f3 0f ae da"}, {"WRGSBASEL R11", "f3 41 0f ae db"}, {"WRFSBASEQ DX", "f3 48 0f ae d2"}, {"WRFSBASEQ R11", "f3 49 0f ae d3"}, {"WRGSBASEQ DX", "f3 48 0f ae da"}, {"WRGSBASEQ R11", "f3 49 0f ae db"}, {"WRMSR", "0f 30"}, {"WRPKRU", "0f 01 ef"}, {"XLAT", "d7"}, {"XSETBV", "0f 01 d1"}, } // TestAmd64SystemCorpus assembles every corpus line and requires the same bytes // go tool asm emits for it. func TestAmd64SystemCorpus(t *testing.T) { for _, tc := range amd64SystemCorpus { fn := firstText(t, "TEXT ·p(SB), 4, $0\n\t"+tc.line+"\n") code, _, err := Assemble(fn) if err != nil { t.Errorf("%s: %v", tc.line, err) continue } if got := hexBytes(code); got != tc.want { t.Errorf("%s: got %s, want %s", tc.line, got, tc.want) } } }