gen code:
const MM_CMPINT_NLT = operand.U8(5)
//go:generate go run gen.go -pkg main -out ../ge_amd64.s -stubs ../ge_amd64.go
func main() {
TEXT("ge", NOSPLIT, "func(a,b []uint64, r *uint8)")
Doc("r_bits[i] = a[i] >= b[i], a,b must have 8 elements")
aPtr := operand.Mem{Base: Load(Param("a").Base(), GP64())}
bPtr := operand.Mem{Base: Load(Param("b").Base(), GP64())}
rPtr := operand.Mem{Base: Load(Param("r"), GP64())}
k := K()
zmm := ZMM()
VMOVDQU64(bPtr, zmm)
VPCMPUQ(MM_CMPINT_NLT, aPtr, zmm, k)
KMOVB(k, rPtr)
RET()
Generate()
}
expect r_bits[i] = a[i] >= b[i],but all bits is reversed:
var r uint8
var a = []uint64{1, 2, 3, 4, 0, 0, 0, 0}
var b = []uint64{0, 3, 0, 0, 1, 1, 1, 1}
ge(a, b, &r)
fmt.Printf("%.8b \n", r)
// exp: 00001101
// act: 11110010
source code:
ge.zip
gen code:
expect
r_bits[i] = a[i] >= b[i],but all bits is reversed:source code:
ge.zip