Skip to content

Commit

Permalink
test/codegen: port last stack and memcombining tests
Browse files Browse the repository at this point in the history
And delete them from asm_test.

Also delete an arm64 cmov test has been already ported to the new test
harness.

Change-Id: I4458721e1f512bc9ecbbe1c22a2c9c7109ad68fe
Reviewed-on: https://go-review.googlesource.com/106335
Run-TryBot: Alberto Donizetti <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Giovanni Bajo <[email protected]>
  • Loading branch information
ALTree committed Apr 11, 2018
1 parent e1040d7 commit 467eca6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 81 deletions.
80 changes: 0 additions & 80 deletions src/cmd/compile/internal/gc/asm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,93 +221,13 @@ func (ats *asmTests) runGo(t *testing.T, args ...string) string {
}

var allAsmTests = []*asmTests{
{
arch: "amd64",
os: "linux",
imports: []string{"runtime"},
tests: linuxAMD64Tests,
},
{
arch: "arm",
os: "linux",
imports: []string{"runtime"},
tests: linuxARMTests,
},
{
arch: "arm64",
os: "linux",
tests: linuxARM64Tests,
},
{
arch: "amd64",
os: "plan9",
tests: plan9AMD64Tests,
},
}

var linuxAMD64Tests = []*asmTest{
{
// make sure assembly output has matching offset and base register.
fn: `
func f72(a, b int) int {
runtime.GC() // use some frame
return b
}
`,
pos: []string{"b\\+24\\(SP\\)"},
},
// Make sure we don't put pointers in SSE registers across safe points.
{
fn: `
func $(p, q *[2]*int) {
a, b := p[0], p[1]
runtime.GC()
q[0], q[1] = a, b
}
`,
neg: []string{"MOVUPS"},
},
}

var linuxARMTests = []*asmTest{
{
// make sure assembly output has matching offset and base register.
fn: `
func f13(a, b int) int {
runtime.GC() // use some frame
return b
}
`,
pos: []string{"b\\+4\\(FP\\)"},
},
}

var linuxARM64Tests = []*asmTest{
// Load-combining tests.
{
fn: `
func $(s []byte) uint16 {
return uint16(s[0]) | uint16(s[1]) << 8
}
`,
pos: []string{"\tMOVHU\t\\(R[0-9]+\\)"},
neg: []string{"ORR\tR[0-9]+<<8\t"},
},
{
// make sure that CSEL is emitted for conditional moves
fn: `
func f37(c int) int {
x := c + 4
if c < 0 {
x = 182
}
return x
}
`,
pos: []string{"\tCSEL\t"},
},
}

var plan9AMD64Tests = []*asmTest{
// We should make sure that the compiler doesn't generate floating point
// instructions for non-float operations on Plan 9, because floating point
Expand Down
19 changes: 18 additions & 1 deletion test/codegen/memcombine.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@

package codegen

import "encoding/binary"
import (
"encoding/binary"
"runtime"
)

var sink64 uint64
var sink32 uint32
Expand Down Expand Up @@ -98,6 +101,11 @@ func load_be16_idx(b []byte, idx int) {
sink16 = binary.BigEndian.Uint16(b[idx:])
}

func load_byte2_uint16(s []byte) uint16 {
// arm64:`MOVHU\t\(R[0-9]+\)`,-`ORR\tR[0-9]+<<8`
return uint16(s[0]) | uint16(s[1])<<8
}

// Check load combining across function calls.

func fcall_byte(a, b byte) (byte, byte) {
Expand Down Expand Up @@ -132,6 +140,15 @@ func offsets_fold(_, a [20]byte) (b [20]byte) {
return
}

// Make sure we don't put pointers in SSE registers across safe
// points.

func safe_point(p, q *[2]*int) {
a, b := p[0], p[1] // amd64:-`MOVUPS`
runtime.GC()
q[0], q[1] = a, b // amd64:-`MOVUPS`
}

// ------------- //
// Storing //
// ------------- //
Expand Down
12 changes: 12 additions & 0 deletions test/codegen/stack.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

package codegen

import "runtime"

// This file contains code generation tests related to the use of the
// stack.

Expand All @@ -22,3 +24,13 @@ func StackStore() int {
var x int
return *(&x)
}

// Check that assembly output has matching offset and base register
// (Issue #21064).

// amd64:`.*b\+24\(SP\)`
// arm:`.*b\+4\(FP\)`
func check_asmout(a, b int) int {
runtime.GC() // use some frame
return b
}

0 comments on commit 467eca6

Please sign in to comment.