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:
21
tests/fixedbugs/issue50/asm.go
Normal file
21
tests/fixedbugs/issue50/asm.go
Normal 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()
|
||||
}
|
||||
0
tests/fixedbugs/issue50/issue50.s
Normal file
0
tests/fixedbugs/issue50/issue50.s
Normal file
15
tests/fixedbugs/issue50/issue50_test.go
Normal file
15
tests/fixedbugs/issue50/issue50_test.go
Normal 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)
|
||||
}
|
||||
}
|
||||
0
tests/fixedbugs/issue50/stub.go
Normal file
0
tests/fixedbugs/issue50/stub.go
Normal file
Reference in New Issue
Block a user