]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add mul by ±2ⁿ code-generation tests for arm/arm64
authorAlberto Donizetti <alb.donizetti@gmail.com>
Fri, 3 Nov 2017 10:11:27 +0000 (11:11 +0100)
committerAlberto Donizetti <alb.donizetti@gmail.com>
Sat, 4 Nov 2017 10:28:27 +0000 (10:28 +0000)
This change adds code generation tests for multiplication by ±2ⁿ for
arm and arm64, in preparation for a future CL which will remove the
relevant architecture-specific SSA rules (the reduction is already
performed by rules in generic.rules added in CL 36323).

Change-Id: Iebdd5c3bb2fc632c85888569ff0c49f78569a862
Reviewed-on: https://go-review.googlesource.com/75752
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/gc/asm_test.go

index 57853001fd5dd6409c5ba609fc49061ac8ca93b1..78c6c5e2b763bb47f715074309e4b1c1b82497a6 100644 (file)
@@ -1816,6 +1816,26 @@ var linuxS390XTests = []*asmTest{
 }
 
 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 {
@@ -1943,6 +1963,26 @@ var linuxARMTests = []*asmTest{
 }
 
 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 {