internal/load: support additional MOVQ forms

The Go assembler merges MOVD/MOVQ instruction forms. The logic in the
avo instruction loader was discarding the MOVD forms. This diff should
merge them correctly.

Updates #50
This commit is contained in:
Michael McLoughlin
2019-01-20 22:32:44 -08:00
parent 5dc9498dac
commit 220969f8c8
11 changed files with 280 additions and 1 deletions

View File

@@ -0,0 +1,21 @@
// +build ignore
package main
import (
. "github.com/mmcloughlin/avo/build"
)
func main() {
TEXT("Issue50", NOSPLIT, "func(x uint32) uint32")
Doc(
"Issue50 reported that MOVD/MOVQ was missing the r32, xmm form.",
"This function deliberately exercises this instruction form.",
)
x := Load(Param("x"), GP32())
xmm := XMM()
MOVQ(x, xmm)
Store(xmm, ReturnIndex(0))
RET()
Generate()
}

View File

View File

@@ -0,0 +1,15 @@
package issue50
import (
"testing"
"testing/quick"
)
//go:generate go run asm.go -out issue50.s -stubs stub.go
func TestIssue50(t *testing.T) {
expect := func(x uint32) uint32 { return x }
if err := quick.CheckEqual(Issue50, expect, nil); err != nil {
t.Fatal(err)
}
}

View File