Skip to content

Commit

Permalink
test/codegen: port floats tests to codegen
Browse files Browse the repository at this point in the history
And delete them from asm_test.

Change-Id: Ibdaca3496eefc73c731b511ddb9636a1f3dff68c
Reviewed-on: https://go-review.googlesource.com/100915
Run-TryBot: Alberto Donizetti <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Keith Randall <[email protected]>
  • Loading branch information
ALTree committed Mar 15, 2018
1 parent 546bab8 commit cceee68
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 96 deletions.
95 changes: 0 additions & 95 deletions src/cmd/compile/internal/gc/asm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,35 +410,6 @@ var linuxAMD64Tests = []*asmTest{
}`,
pos: []string{"\tADDQ\t[A-Z]"},
},
// Floating-point strength reduction
{
fn: `
func f60(f float64) float64 {
return f * 2.0
}`,
pos: []string{"\tADDSD\t"},
},
{
fn: `
func f62(f float64) float64 {
return f / 16.0
}`,
pos: []string{"\tMULSD\t"},
},
{
fn: `
func f63(f float64) float64 {
return f / 0.125
}`,
pos: []string{"\tMULSD\t"},
},
{
fn: `
func f64(f float64) float64 {
return f / 0.5
}`,
pos: []string{"\tADDSD\t"},
},
// Check that compare to constant string uses 2/4/8 byte compares
{
fn: `
Expand Down Expand Up @@ -634,39 +605,6 @@ var linux386Tests = []*asmTest{
}

var linuxS390XTests = []*asmTest{
// Fused multiply-add/sub instructions.
{
fn: `
func f14(x, y, z float64) float64 {
return x * y + z
}
`,
pos: []string{"\tFMADD\t"},
},
{
fn: `
func f15(x, y, z float64) float64 {
return x * y - z
}
`,
pos: []string{"\tFMSUB\t"},
},
{
fn: `
func f16(x, y, z float32) float32 {
return x * y + z
}
`,
pos: []string{"\tFMADDS\t"},
},
{
fn: `
func f17(x, y, z float32) float32 {
return x * y - z
}
`,
pos: []string{"\tFMSUBS\t"},
},
{
// check that stack store is optimized away
fn: `
Expand Down Expand Up @@ -1113,39 +1051,6 @@ var linuxMIPS64Tests = []*asmTest{
}

var linuxPPC64LETests = []*asmTest{
// Fused multiply-add/sub instructions.
{
fn: `
func f0(x, y, z float64) float64 {
return x * y + z
}
`,
pos: []string{"\tFMADD\t"},
},
{
fn: `
func f1(x, y, z float64) float64 {
return x * y - z
}
`,
pos: []string{"\tFMSUB\t"},
},
{
fn: `
func f2(x, y, z float32) float32 {
return x * y + z
}
`,
pos: []string{"\tFMADDS\t"},
},
{
fn: `
func f3(x, y, z float32) float32 {
return x * y - z
}
`,
pos: []string{"\tFMSUBS\t"},
},
{
// check that stack store is optimized away
fn: `
Expand Down
3 changes: 2 additions & 1 deletion test/codegen/arithmetic.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
package codegen

// This file contains codegen tests related to arithmetic
// simplifications/optimizations.
// simplifications and optimizations on integer types.
// For codegen tests on float types, see floats.go.

// -------------------- //
// Multiplication //
Expand Down
73 changes: 73 additions & 0 deletions test/codegen/floats.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// asmcheck

// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package codegen

// This file contains codegen tests related to arithmetic
// simplifications and optimizations on float types.
// For codegen tests on integer types, see arithmetic.go.

// --------------------- //
// Strength-reduce //
// --------------------- //

func Mul2(f float64) float64 {
// 386:"ADDSD",-"MULSD"
// amd64:"ADDSD",-"MULSD"
// arm:"ADDD",-"MULD"
// arm64:"FADDD",-"FMULD"
return f * 2.0
}

func DivPow2(f1, f2, f3 float64) (float64, float64, float64) {
// 386:"MULSD",-"DIVSD"
// amd64:"MULSD",-"DIVSD"
// arm:"MULD",-"DIVD"
// arm64:"FMULD",-"FDIVD"
x := f1 / 16.0

// 386:"MULSD",-"DIVSD"
// amd64:"MULSD",-"DIVSD"
// arm:"MULD",-"DIVD"
// arm64:"FMULD",-"FDIVD"
y := f2 / 0.125

// 386:"ADDSD",-"DIVSD",-"MULSD"
// amd64:"ADDSD",-"DIVSD",-"MULSD"
// arm:"ADDD",-"MULD",-"DIVD"
// arm64:"FADDD",-"FMULD",-"FDIVD"
z := f3 / 0.5

return x, y, z
}

// ----------- //
// Fused //
// ----------- //

func FusedAdd32(x, y, z float32) float32 {
// s390x:"FMADDS\t"
// ppc64le:"FMADDS\t"
return x*y + z
}

func FusedSub32(x, y, z float32) float32 {
// s390x:"FMSUBS\t"
// ppc64le:"FMSUBS\t"
return x*y - z
}

func FusedAdd64(x, y, z float64) float64 {
// s390x:"FMADD\t"
// ppc64le:"FMADD\t"
return x*y + z
}

func FusedSub64(x, y, z float64) float64 {
// s390x:"FMSUB\t"
// ppc64le:"FMSUB\t"
return x*y - z
}

0 comments on commit cceee68

Please sign in to comment.