aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/arithmetic.go4
-rw-r--r--test/codegen/bits.go5
-rw-r--r--test/codegen/mathbits.go1
-rw-r--r--test/codegen/shift.go46
4 files changed, 53 insertions, 3 deletions
diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go
index dc3bab7be9..e474a10ba2 100644
--- a/test/codegen/arithmetic.go
+++ b/test/codegen/arithmetic.go
@@ -320,14 +320,14 @@ func Pow2DivisibleSigned(n1, n2 int) (bool, bool) {
// amd64:"TESTQ\t[$]63",-"DIVQ",-"SHRQ"
// arm:"AND\t[$]63",-".*udiv",-"SRA"
// arm64:"TST\t[$]63",-"UDIV",-"ASR",-"AND"
- // ppc64x:"RLDICL",-"SRAD"
+ // ppc64x:"ANDCC",-"RLDICL",-"SRAD",-"CMP"
a := n1%64 == 0 // signed divisible
// 386:"TESTL\t[$]63",-"DIVL",-"SHRL"
// amd64:"TESTQ\t[$]63",-"DIVQ",-"SHRQ"
// arm:"AND\t[$]63",-".*udiv",-"SRA"
// arm64:"TST\t[$]63",-"UDIV",-"ASR",-"AND"
- // ppc64x:"RLDICL",-"SRAD"
+ // ppc64x:"ANDCC",-"RLDICL",-"SRAD",-"CMP"
b := n2%64 != 0 // signed indivisible
return a, b
diff --git a/test/codegen/bits.go b/test/codegen/bits.go
index 4b6c8b94b8..554e363ef5 100644
--- a/test/codegen/bits.go
+++ b/test/codegen/bits.go
@@ -394,7 +394,7 @@ func zeroextendAndMask8to64(a int8, b int16) (x, y uint64) {
}
// Verify rotate and mask instructions, and further simplified instructions for small types
-func bitRotateAndMask(io64 [4]uint64, io32 [4]uint32, io16 [4]uint16, io8 [4]uint8) {
+func bitRotateAndMask(io64 [8]uint64, io32 [4]uint32, io16 [4]uint16, io8 [4]uint8) {
// ppc64x: "RLDICR\t[$]0, R[0-9]*, [$]47, R"
io64[0] = io64[0] & 0xFFFFFFFFFFFF0000
// ppc64x: "RLDICL\t[$]0, R[0-9]*, [$]16, R"
@@ -404,6 +404,9 @@ func bitRotateAndMask(io64 [4]uint64, io32 [4]uint32, io16 [4]uint16, io8 [4]uin
// ppc64x: -"SRD", -"AND", "RLDICL\t[$]36, R[0-9]*, [$]28, R"
io64[3] = (io64[3] >> 28) & 0x0000FFFFFFFFFFFF
+ // ppc64x: "MOVWZ", "RLWNM\t[$]1, R[0-9]*, [$]28, [$]3, R"
+ io64[4] = uint64(bits.RotateLeft32(io32[0], 1) & 0xF000000F)
+
// ppc64x: "RLWNM\t[$]0, R[0-9]*, [$]4, [$]19, R"
io32[0] = io32[0] & 0x0FFFF000
// ppc64x: "RLWNM\t[$]0, R[0-9]*, [$]20, [$]3, R"
diff --git a/test/codegen/mathbits.go b/test/codegen/mathbits.go
index 82a139acab..a743eaf3d3 100644
--- a/test/codegen/mathbits.go
+++ b/test/codegen/mathbits.go
@@ -827,6 +827,7 @@ func Mul(x, y uint) (hi, lo uint) {
// ppc64x:"MULHDU","MULLD"
// s390x:"MLGR"
// mips64: "MULVU"
+ // riscv64:"MULHU","MUL"
return bits.Mul(x, y)
}
diff --git a/test/codegen/shift.go b/test/codegen/shift.go
index 50d60426d0..6a2a6c40cd 100644
--- a/test/codegen/shift.go
+++ b/test/codegen/shift.go
@@ -453,6 +453,52 @@ func checkMergedShifts32(a [256]uint32, b [256]uint64, u uint32, v uint32) {
b[2] = b[v>>25]
}
+func checkMergedShifts64(a [256]uint32, b [256]uint64, c [256]byte, v uint64) {
+ // ppc64x: -"CLRLSLDI", "RLWNM\t[$]10, R[0-9]+, [$]22, [$]29, R[0-9]+"
+ a[0] = a[uint8(v>>24)]
+ // ppc64x: "SRD", "CLRLSLDI", -"RLWNM"
+ a[1] = a[uint8(v>>25)]
+ // ppc64x: -"CLRLSLDI", "RLWNM\t[$]9, R[0-9]+, [$]23, [$]29, R[0-9]+"
+ a[2] = a[v>>25&0x7F]
+ // ppc64x: -"CLRLSLDI", "RLWNM\t[$]3, R[0-9]+, [$]29, [$]29, R[0-9]+"
+ a[3] = a[(v>>31)&0x01]
+ // ppc64x: "SRD", "CLRLSLDI", -"RLWNM"
+ a[4] = a[(v>>30)&0x07]
+ // ppc64x: "SRD", "CLRLSLDI", -"RLWNM"
+ a[5] = a[(v>>32)&0x01]
+ // ppc64x: "SRD", "CLRLSLDI", -"RLWNM"
+ a[6] = a[(v>>34)&0x03]
+ // ppc64x: -"CLRLSLDI", "RLWNM\t[$]12, R[0-9]+, [$]21, [$]28, R[0-9]+"
+ b[0] = b[uint8(v>>23)]
+ // ppc64x: -"CLRLSLDI", "RLWNM\t[$]15, R[0-9]+, [$]21, [$]28, R[0-9]+"
+ b[1] = b[(v>>20)&0xFF]
+ // ppc64x: "RLWNM", -"SLD"
+ b[2] = b[((uint64((uint32(v) >> 21)) & 0x3f) << 4)]
+ // ppc64x: "RLWNM\t[$]11, R[0-9]+, [$]10, [$]15"
+ c[0] = c[((v>>5)&0x3F)<<16]
+ // ppc64x: "RLWNM\t[$]0, R[0-9]+, [$]19, [$]24"
+ c[1] = c[((v>>7)&0x3F)<<7]
+}
+
+func checkShiftMask(a uint32, b uint64, z []uint32, y []uint64) {
+ _ = y[128]
+ _ = z[128]
+ // ppc64x: -"MOVBZ", -"SRW", "RLWNM"
+ z[0] = uint32(uint8(a >> 5))
+ // ppc64x: -"MOVBZ", -"SRW", "RLWNM"
+ z[1] = uint32(uint8((a >> 4) & 0x7e))
+ // ppc64x: "RLWNM\t[$]25, R[0-9]+, [$]27, [$]29, R[0-9]+"
+ z[2] = uint32(uint8(a>>7)) & 0x1c
+ // ppc64x: -"MOVWZ"
+ y[0] = uint64((a >> 6) & 0x1c)
+ // ppc64x: -"MOVWZ"
+ y[1] = uint64(uint32(b)<<6) + 1
+ // ppc64x: -"MOVHZ", -"MOVWZ"
+ y[2] = uint64((uint16(a) >> 9) & 0x1F)
+ // ppc64x: -"MOVHZ", -"MOVWZ", -"ANDCC"
+ y[3] = uint64(((uint16(a) & 0xFF0) >> 9) & 0x1F)
+}
+
// 128 bit shifts
func check128bitShifts(x, y uint64, bits uint) (uint64, uint64) {