test for stdlib opcodes
This commit is contained in:
12
internal/inst/table.go
Normal file
12
internal/inst/table.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package inst
|
||||
|
||||
//go:generate avogen -data ../data -output ztable.go godata
|
||||
|
||||
func Lookup(opcode string) (Instruction, bool) {
|
||||
for _, i := range Instructions {
|
||||
if i.Opcode == opcode {
|
||||
return i, true
|
||||
}
|
||||
}
|
||||
return Instruction{}, false
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package inst_test
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/mmcloughlin/avo/internal/gen"
|
||||
@@ -49,3 +51,27 @@ func TestAssembles(t *testing.T) {
|
||||
}
|
||||
test.Assembles(t, b)
|
||||
}
|
||||
|
||||
func TestLookup(t *testing.T) {
|
||||
if _, found := inst.Lookup("CPUID"); !found {
|
||||
t.Fatalf("missing CPUID")
|
||||
}
|
||||
if _, found := inst.Lookup(strings.Repeat("XXX", 13)); found {
|
||||
t.Fatalf("lookup returns true on an absurd opcode")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStdLibOpcodes(t *testing.T) {
|
||||
t.Skip("currently does not pass")
|
||||
|
||||
b, err := ioutil.ReadFile("testdata/stdlibopcodes.txt")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
opcodes := strings.Fields(string(b))
|
||||
for _, opcode := range opcodes {
|
||||
if _, found := inst.Lookup(opcode); !found {
|
||||
t.Errorf("missing instruction %s (used in stdlib asm)", opcode)
|
||||
}
|
||||
}
|
||||
}
|
||||
202
internal/inst/testdata/stdlibopcodes.txt
vendored
Normal file
202
internal/inst/testdata/stdlibopcodes.txt
vendored
Normal file
@@ -0,0 +1,202 @@
|
||||
ADCQ
|
||||
ADCXQ
|
||||
ADDB
|
||||
ADDL
|
||||
ADDQ
|
||||
ADDSD
|
||||
ADOXQ
|
||||
AESDEC
|
||||
AESDECLAST
|
||||
AESENC
|
||||
AESENCLAST
|
||||
AESIMC
|
||||
AESKEYGENASSIST
|
||||
ANDB
|
||||
ANDL
|
||||
ANDNPD
|
||||
ANDPD
|
||||
ANDQ
|
||||
BSFL
|
||||
BSFQ
|
||||
BSRQ
|
||||
BSWAPL
|
||||
BSWAPQ
|
||||
BTQ
|
||||
BYTE
|
||||
CALL
|
||||
CMOVQCC
|
||||
CMOVQCS
|
||||
CMOVQEQ
|
||||
CMOVQGT
|
||||
CMOVQLT
|
||||
CMOVQNE
|
||||
CMPB
|
||||
CMPL
|
||||
CMPQ
|
||||
CMPSD
|
||||
CMPW
|
||||
CMPXCHGL
|
||||
CMPXCHGQ
|
||||
COMISD
|
||||
CRC32B
|
||||
CRC32L
|
||||
CRC32Q
|
||||
CRC32W
|
||||
CVTSD2SL
|
||||
CVTSL2SD
|
||||
CVTSQ2SD
|
||||
CVTTSD2SQ
|
||||
DECB
|
||||
DECQ
|
||||
DIVL
|
||||
DIVQ
|
||||
DIVSD
|
||||
FUNCDATA
|
||||
IMUL3Q
|
||||
IMULQ
|
||||
INCB
|
||||
INCQ
|
||||
INT
|
||||
JA
|
||||
JAE
|
||||
JB
|
||||
JBE
|
||||
JC
|
||||
JCC
|
||||
JE
|
||||
JEQ
|
||||
JG
|
||||
JGE
|
||||
JGT
|
||||
JHI
|
||||
JL
|
||||
JLE
|
||||
JLS
|
||||
JLT
|
||||
JMP
|
||||
JNC
|
||||
JNE
|
||||
JNZ
|
||||
JZ
|
||||
LDMXCSR
|
||||
LEAL
|
||||
LEAQ
|
||||
MAXSD
|
||||
MINSD
|
||||
MOVAPD
|
||||
MOVAPS
|
||||
MOVB
|
||||
MOVBLZX
|
||||
MOVBQZX
|
||||
MOVD
|
||||
MOVL
|
||||
MOVLQSX
|
||||
MOVLQZX
|
||||
MOVO
|
||||
MOVOA
|
||||
MOVOU
|
||||
MOVQ
|
||||
MOVSD
|
||||
MOVUPS
|
||||
MOVW
|
||||
MULL
|
||||
MULQ
|
||||
MULSD
|
||||
MULXQ
|
||||
NEGQ
|
||||
NOTL
|
||||
NOTQ
|
||||
ORB
|
||||
ORL
|
||||
ORPD
|
||||
ORQ
|
||||
PADDD
|
||||
PADDL
|
||||
PAND
|
||||
PANDN
|
||||
PCLMULQDQ
|
||||
PCMPEQB
|
||||
PCMPEQL
|
||||
PCMPESTRI
|
||||
PEXTRB
|
||||
PEXTRD
|
||||
PINSRB
|
||||
PINSRD
|
||||
PINSRQ
|
||||
PINSRW
|
||||
PMOVMSKB
|
||||
POPCNTL
|
||||
POPQ
|
||||
PREFETCHNTA
|
||||
PSHUFB
|
||||
PSHUFD
|
||||
PSHUFHW
|
||||
PSHUFL
|
||||
PSLLDQ
|
||||
PSLLL
|
||||
PSLLQ
|
||||
PSRAL
|
||||
PSRLDQ
|
||||
PSRLL
|
||||
PSRLQ
|
||||
PSUBL
|
||||
PUNPCKLBW
|
||||
PUSHQ
|
||||
PXOR
|
||||
RCRQ
|
||||
RORXL
|
||||
RORXQ
|
||||
SALQ
|
||||
SARQ
|
||||
SBBQ
|
||||
SETEQ
|
||||
SETGT
|
||||
SETHI
|
||||
SHLL
|
||||
SHLQ
|
||||
SHRL
|
||||
SHRQ
|
||||
SHUFPS
|
||||
SQRTSD
|
||||
STMXCSR
|
||||
SUBL
|
||||
SUBQ
|
||||
SUBSD
|
||||
TESTB
|
||||
TESTL
|
||||
TESTQ
|
||||
TESTW
|
||||
VADDSD
|
||||
VFMADD213SD
|
||||
VFNMADD231SD
|
||||
VMOVDQA
|
||||
VMOVDQU
|
||||
VMOVNTDQ
|
||||
VPADDD
|
||||
VPADDQ
|
||||
VPALIGNR
|
||||
VPAND
|
||||
VPBLENDD
|
||||
VPBROADCASTB
|
||||
VPCMPEQB
|
||||
VPERM2F128
|
||||
VPERM2I128
|
||||
VPMOVMSKB
|
||||
VPOR
|
||||
VPSHUFB
|
||||
VPSHUFD
|
||||
VPSLLD
|
||||
VPSLLQ
|
||||
VPSRLD
|
||||
VPSRLDQ
|
||||
VPSRLQ
|
||||
VPTEST
|
||||
VPXOR
|
||||
XADDL
|
||||
XADDQ
|
||||
XCHGL
|
||||
XCHGQ
|
||||
XORB
|
||||
XORL
|
||||
XORPS
|
||||
XORQ
|
||||
22
script/stdlibopcodes
Executable file
22
script/stdlibopcodes
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
eval $(go env)
|
||||
|
||||
workdir=$(mktemp -d)
|
||||
|
||||
# Provide stub "go_asm.h".
|
||||
include=${workdir}/include
|
||||
mkdir -p ${include}
|
||||
echo '#define get_tls ' > ${include}/go_asm.h
|
||||
|
||||
# Preprocess all assembly files.
|
||||
asm=${workdir}/all.s
|
||||
find ${GOROOT}/src -name '*_amd64.s' | while read s; do
|
||||
gcc -E -I${GOROOT}/pkg/include -I${include} ${s} >>${asm}
|
||||
done
|
||||
|
||||
# Extract instructions.
|
||||
awk '/^[[:space:]]+[A-Z0-9]+[[:space:]]+/ { print $1 }' ${asm} | sort | uniq
|
||||
|
||||
# Clean.
|
||||
rm -rf ${workdir}
|
||||
Reference in New Issue
Block a user