tests/fixedbugs: regression test for issue 100 (#129)
Adds a regression test based on klauspost/compress#186. This necessitated some related changes: * Mark "RET" as a terminal instruction * printer refactor to maintain compatibility with asmfmt * Tweaks to other regression tests to ensure they are run correctly in CI Updates #100 #65 #8
This commit is contained in:
committed by
GitHub
parent
5a144d9b53
commit
e089a6c93c
22
tests/fixedbugs/issue100/minrepro/asm.go
Normal file
22
tests/fixedbugs/issue100/minrepro/asm.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
. "github.com/mmcloughlin/avo/build"
|
||||
. "github.com/mmcloughlin/avo/operand"
|
||||
)
|
||||
|
||||
func main() {
|
||||
TEXT("Issue100", NOSPLIT, "func() uint64")
|
||||
x := GP64()
|
||||
XORQ(x, x)
|
||||
for i := 1; i <= 100; i++ {
|
||||
t := GP64()
|
||||
MOVQ(U32(i), t)
|
||||
ADDQ(t.As64(), x)
|
||||
}
|
||||
Store(x, ReturnIndex(0))
|
||||
RET()
|
||||
Generate()
|
||||
}
|
||||
2
tests/fixedbugs/issue100/minrepro/doc.go
Normal file
2
tests/fixedbugs/issue100/minrepro/doc.go
Normal file
@@ -0,0 +1,2 @@
|
||||
// Package minrepro contains a minimal reproducer for the aliased register allocation bug in issue 100.
|
||||
package minrepro
|
||||
209
tests/fixedbugs/issue100/minrepro/minrepro.s
Normal file
209
tests/fixedbugs/issue100/minrepro/minrepro.s
Normal file
@@ -0,0 +1,209 @@
|
||||
// Code generated by command: go run asm.go -out minrepro.s -stubs stub.go. DO NOT EDIT.
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
// func Issue100() uint64
|
||||
TEXT ·Issue100(SB), NOSPLIT, $0-8
|
||||
XORQ AX, AX
|
||||
MOVQ $0x00000001, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000002, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000003, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000004, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000005, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000006, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000007, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000008, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000009, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000000f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000010, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000011, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000012, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000013, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000014, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000015, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000016, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000017, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000018, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000019, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000001f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000020, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000021, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000022, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000023, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000024, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000025, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000026, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000027, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000028, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000029, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000002f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000030, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000031, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000032, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000033, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000034, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000035, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000036, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000037, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000038, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000039, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000003f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000040, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000041, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000042, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000043, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000044, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000045, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000046, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000047, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000048, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000049, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000004f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000050, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000051, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000052, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000053, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000054, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000055, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000056, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000057, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000058, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000059, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005a, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005b, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005c, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005d, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005e, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x0000005f, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000060, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000061, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000062, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000063, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ $0x00000064, CX
|
||||
ADDQ CX, AX
|
||||
MOVQ AX, ret+0(FP)
|
||||
RET
|
||||
15
tests/fixedbugs/issue100/minrepro/minrepro_test.go
Normal file
15
tests/fixedbugs/issue100/minrepro/minrepro_test.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package minrepro
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
//go:generate go run asm.go -out minrepro.s -stubs stub.go
|
||||
|
||||
func TestIssue100(t *testing.T) {
|
||||
n := uint64(100)
|
||||
expect := n * (n + 1) / 2
|
||||
if got := Issue100(); got != expect {
|
||||
t.Fatalf("Issue100() = %v; expect %v", got, expect)
|
||||
}
|
||||
}
|
||||
5
tests/fixedbugs/issue100/minrepro/stub.go
Normal file
5
tests/fixedbugs/issue100/minrepro/stub.go
Normal file
@@ -0,0 +1,5 @@
|
||||
// Code generated by command: go run asm.go -out minrepro.s -stubs stub.go. DO NOT EDIT.
|
||||
|
||||
package minrepro
|
||||
|
||||
func Issue100() uint64
|
||||
Reference in New Issue
Block a user