Skip to content

why the result is reversed ? #399

@lysShub

Description

@lysShub

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions