feat(asm): add EVEX/AVX-512 encoding and assemble the AVX-512 kernel byte-identically

Assisted-by: Qwen 3.8 Max Preview
This commit is contained in:
2026-07-10 13:20:49 +02:00
parent 56ecc39539
commit 458cfb626e
9 changed files with 903 additions and 77 deletions
+8 -8
View File
@@ -414,18 +414,18 @@ func operandFromAST(op *ast.Operand, size int, fi frameInfo, link *linkInfo) (Op
off := fi.spAdjust + a.Sym.Offset
return Mem{Base: spReg, Disp: off, HasBase: true, Size: size}, nil
}
// SB (global symbol): a static (file-local, <>) symbol becomes a
// RIP-relative reference resolved by the file-level layout; anything
// external needs object-file emission.
// SB (global symbol): a symbol defined in the same file (GLOBL) is
// encoded RIP-relative and resolved by the file-level layout;
// anything not defined here needs object-file emission.
if a.Sym != nil && a.Sym.Pseudo == "SB" {
if !a.Sym.Static {
return nil, fmt.Errorf("external symbol %q needs object-file emission", a.Sym.Name)
}
if link == nil || link.symbols == nil {
return nil, fmt.Errorf("static symbol %q needs file-level assembly (AssembleFile)", a.Sym.Name)
return nil, fmt.Errorf("symbol %q needs file-level assembly (AssembleFile)", a.Sym.Name)
}
if !link.symbols[a.Sym.Name] {
return nil, fmt.Errorf("undefined symbol %q", a.Sym.Name)
if a.Sym.Static {
return nil, fmt.Errorf("undefined symbol %q", a.Sym.Name)
}
return nil, fmt.Errorf("external symbol %q needs object-file emission", a.Sym.Name)
}
return sbMem{size: size, name: a.Sym.Name, addend: a.Sym.Offset}, nil
}