3 // Copyright 2017 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
7 // This file tests the splitting of constants into
8 // multiple immediates on arm.
15 const c64 = 0xaa00dd55000066
18 func add32(x uint32) uint32 {
23 func sub32(x uint32) uint32 {
28 func or32(x uint32) uint32 {
33 func xor32(x uint32) uint32 {
38 func subr32(x uint32) uint32 {
43 func add64(x uint64) uint64 {
48 func sub64(x uint64) uint64 {
53 func or64(x uint64) uint64 {
58 func xor64(x uint64) uint64 {
63 func subr64(x uint64) uint64 {
67 // Note: x-c gets rewritten to x+(-c), so SUB and SBC are not directly testable.
68 // I disabled that rewrite rule before running this test.
76 var a uint32 = 0x11111111
78 if want, got = a+c32, add32(a); got != want {
79 panic(fmt.Sprintf("add32(%x) = %x, want %x", a, got, want))
81 if want, got = a-c32, sub32(a); got != want {
82 panic(fmt.Sprintf("sub32(%x) = %x, want %x", a, got, want))
84 if want, got = a|c32, or32(a); got != want {
85 panic(fmt.Sprintf("or32(%x) = %x, want %x", a, got, want))
87 if want, got = a^c32, xor32(a); got != want {
88 panic(fmt.Sprintf("xor32(%x) = %x, want %x", a, got, want))
90 if want, got = c32-a, subr32(a); got != want {
91 panic(fmt.Sprintf("subr32(%x) = %x, want %x", a, got, want))
96 var a uint64 = 0x1111111111111111
98 if want, got = a+c64, add64(a); got != want {
99 panic(fmt.Sprintf("add64(%x) = %x, want %x", a, got, want))
101 if want, got = a-c64, sub64(a); got != want {
102 panic(fmt.Sprintf("sub64(%x) = %x, want %x", a, got, want))
104 if want, got = a|c64, or64(a); got != want {
105 panic(fmt.Sprintf("or64(%x) = %x, want %x", a, got, want))
107 if want, got = a^c64, xor64(a); got != want {
108 panic(fmt.Sprintf("xor64(%x) = %x, want %x", a, got, want))
110 if want, got = c64-a, subr64(a); got != want {
111 panic(fmt.Sprintf("subr64(%x) = %x, want %x", a, got, want))