}
var linuxAMD64Tests = []*asmTest{
- // multiplication by powers of two
- {
- fn: `
- func $(n int) int {
- return n * 64
- }
- `,
- pos: []string{"\tSHLQ\t\\$6,"},
- neg: []string{"IMULQ"},
- },
- {
- fn: `
- func $(n int) int {
- return -128*n
- }
- `,
- pos: []string{"SHLQ"},
- neg: []string{"IMULQ"},
- },
-
{
fn: `
func $(x int) int {
}
var linux386Tests = []*asmTest{
- // multiplication by powers of two
- {
- fn: `
- func $(n int) int {
- return 32*n
- }
- `,
- pos: []string{"SHLL"},
- neg: []string{"IMULL"},
- },
- {
- fn: `
- func $(n int) int {
- return -64*n
- }
- `,
- pos: []string{"SHLL"},
- neg: []string{"IMULL"},
- },
-
// multiplication merging tests
{
fn: `
}
var linuxARMTests = []*asmTest{
- // multiplication by powers of two
- {
- fn: `
- func $(n int) int {
- return 16*n
- }
- `,
- pos: []string{"\tSLL\t[$]4"},
- neg: []string{"\tMUL\t"},
- },
- {
- fn: `
- func $(n int) int {
- return -32*n
- }
- `,
- pos: []string{"\tSLL\t[$]5"},
- neg: []string{"\tMUL\t"},
- },
-
{
fn: `
func f0(x uint32) uint32 {
}
var linuxARM64Tests = []*asmTest{
- // multiplication by powers of two
- {
- fn: `
- func $(n int) int {
- return 64*n
- }
- `,
- pos: []string{"\tLSL\t[$]6"},
- neg: []string{"\tMUL\t"},
- },
- {
- fn: `
- func $(n int) int {
- return -128*n
- }
- `,
- pos: []string{"\tLSL\t[$]7"},
- neg: []string{"\tMUL\t"},
- },
-
{
fn: `
func f0(x uint64) uint64 {
--- /dev/null
+// 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/optimizations.
+
+func Pow2Muls(n1, n2 int) (int, int) {
+ // amd64:"SHLQ\t[$]5",-"IMULQ"
+ // 386:"SHLL\t[$]5",-"IMULL"
+ // arm:"SLL\t[$]5",-"MUL"
+ // arm64:"LSL\t[$]5",-"MUL"
+ a := n1 * 32
+
+ // amd64:"SHLQ\t[$]6",-"IMULQ"
+ // 386:"SHLL\t[$]6",-"IMULL"
+ // arm:"SLL\t[$]6",-"MUL"
+ // arm64:"LSL\t[$]6",-"MUL"
+ b := -64 * n2
+
+ return a, b
+}