diff options
| author | Paul E. Murphy <murp@ibm.com> | 2021-01-05 16:44:43 -0600 |
|---|---|---|
| committer | Lynn Boger <laboger@linux.vnet.ibm.com> | 2021-03-09 20:35:41 +0000 |
| commit | 48ddf7012875014d3cab4a02002799a520b087a1 (patch) | |
| tree | 91e66413a8cd6f13f2bb48d619fe3b6fe3ed2d1f /test/codegen | |
| parent | 18510ae88ffcb9c4a914805fde3e613539f9b6dc (diff) | |
| download | go-48ddf7012875014d3cab4a02002799a520b087a1.tar.xz | |
cmd/asm,cmd/compile: support 5 operand RLWNM/RLWMI on ppc64
These instructions are actually 5 argument opcodes as specified
by the ISA. Prior to this patch, the MB and ME arguments were
merged into a single bitmask operand to workaround the limitations
of the ppc64 assembler backend.
This limitation no longer exists. Thus, we can pass operands for
these opcodes without having to merge the MB and ME arguments in
the assembler frontend or compiler backend.
Likewise, support for 4 operand variants is unchanged.
Change-Id: Ib086774f3581edeaadfd2190d652aaaa8a90daeb
Reviewed-on: https://go-review.googlesource.com/c/go/+/298750
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Carlos Eduardo Seo <carlos.seo@linaro.org>
Trust: Carlos Eduardo Seo <carlos.seo@linaro.org>
Diffstat (limited to 'test/codegen')
| -rw-r--r-- | test/codegen/rotate.go | 32 | ||||
| -rw-r--r-- | test/codegen/shift.go | 32 |
2 files changed, 32 insertions, 32 deletions
diff --git a/test/codegen/rotate.go b/test/codegen/rotate.go index e0bcd0abbc..bf4bcc4fc3 100644 --- a/test/codegen/rotate.go +++ b/test/codegen/rotate.go @@ -176,38 +176,38 @@ func f32(x uint32) uint32 { func checkMaskedRotate32(a []uint32, r int) { i := 0 - // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]16711680, R[0-9]+" - // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]16711680, R[0-9]+" + // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]8, [$]15, R[0-9]+" + // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]8, [$]15, R[0-9]+" a[i] = bits.RotateLeft32(a[i], 16) & 0xFF0000 i++ - // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]16711680, R[0-9]+" - // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]16711680, R[0-9]+" + // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]8, [$]15, R[0-9]+" + // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]8, [$]15, R[0-9]+" a[i] = bits.RotateLeft32(a[i]&0xFF, 16) i++ - // ppc64le: "RLWNM\t[$]4, R[0-9]+, [$]4080, R[0-9]+" - // ppc64: "RLWNM\t[$]4, R[0-9]+, [$]4080, R[0-9]+" + // ppc64le: "RLWNM\t[$]4, R[0-9]+, [$]20, [$]27, R[0-9]+" + // ppc64: "RLWNM\t[$]4, R[0-9]+, [$]20, [$]27, R[0-9]+" a[i] = bits.RotateLeft32(a[i], 4) & 0xFF0 i++ - // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]255, R[0-9]+" - // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]255, R[0-9]+" + // ppc64le: "RLWNM\t[$]16, R[0-9]+, [$]24, [$]31, R[0-9]+" + // ppc64: "RLWNM\t[$]16, R[0-9]+, [$]24, [$]31, R[0-9]+" a[i] = bits.RotateLeft32(a[i]&0xFF0000, 16) i++ - // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]16711680, R[0-9]+" - // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]16711680, R[0-9]+" + // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]8, [$]15, R[0-9]+" + // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]8, [$]15, R[0-9]+" a[i] = bits.RotateLeft32(a[i], r) & 0xFF0000 i++ - // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]65280, R[0-9]+" - // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]65280, R[0-9]+" + // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]16, [$]23, R[0-9]+" + // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]16, [$]23, R[0-9]+" a[i] = bits.RotateLeft32(a[3], r) & 0xFF00 i++ - // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]4293922815, R[0-9]+" - // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]4293922815, R[0-9]+" + // ppc64le: "RLWNM\tR[0-9]+, R[0-9]+, [$]20, [$]11, R[0-9]+" + // ppc64: "RLWNM\tR[0-9]+, R[0-9]+, [$]20, [$]11, R[0-9]+" a[i] = bits.RotateLeft32(a[3], r) & 0xFFF00FFF i++ - // ppc64le: "RLWNM\t[$]4, R[0-9]+, [$]4293922815, R[0-9]+" - // ppc64: "RLWNM\t[$]4, R[0-9]+, [$]4293922815, R[0-9]+" + // ppc64le: "RLWNM\t[$]4, R[0-9]+, [$]20, [$]11, R[0-9]+" + // ppc64: "RLWNM\t[$]4, R[0-9]+, [$]20, [$]11, R[0-9]+" a[i] = bits.RotateLeft32(a[3], 4) & 0xFFF00FFF i++ } diff --git a/test/codegen/shift.go b/test/codegen/shift.go index d19a1984c1..ab0ffc2e13 100644 --- a/test/codegen/shift.go +++ b/test/codegen/shift.go @@ -240,12 +240,12 @@ func checkWidenAfterShift(v int64, u uint64) (int64, uint64) { func checkShiftAndMask32(v []uint32) { i := 0 - // ppc64le: "RLWNM\t[$]24, R[0-9]+, [$]1044480, R[0-9]+" - // ppc64: "RLWNM\t[$]24, R[0-9]+, [$]1044480, R[0-9]+" + // ppc64le: "RLWNM\t[$]24, R[0-9]+, [$]12, [$]19, R[0-9]+" + // ppc64: "RLWNM\t[$]24, R[0-9]+, [$]12, [$]19, R[0-9]+" v[i] = (v[i] & 0xFF00000) >> 8 i++ - // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]1020, R[0-9]+" - // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]1020, R[0-9]+" + // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]22, [$]29, R[0-9]+" + // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]22, [$]29, R[0-9]+" v[i] = (v[i] & 0xFF00) >> 6 i++ // ppc64le: "MOVW\tR0" @@ -256,12 +256,12 @@ func checkShiftAndMask32(v []uint32) { // ppc64: "MOVW\tR0" v[i] = (v[i] & 0xF000000) >> 28 i++ - // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]255, R[0-9]+" - // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]255, R[0-9]+" + // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]24, [$]31, R[0-9]+" + // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]24, [$]31, R[0-9]+" v[i] = (v[i] >> 6) & 0xFF i++ - // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]1044480, R[0-9]+" - // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]1044480, R[0-9]+" + // ppc64le: "RLWNM\t[$]26, R[0-9]+, [$]12, [$]19, R[0-9]+" + // ppc64: "RLWNM\t[$]26, R[0-9]+, [$]12, [$]19, R[0-9]+" v[i] = (v[i] >> 6) & 0xFF000 i++ // ppc64le: "MOVW\tR0" @@ -275,16 +275,16 @@ func checkShiftAndMask32(v []uint32) { } func checkMergedShifts32(a [256]uint32, b [256]uint64, u uint32, v uint32) { - //ppc64le: -"CLRLSLDI", "RLWNM\t[$]10, R[0-9]+, [$]1020, R[0-9]+" - //ppc64: -"CLRLSLDI", "RLWNM\t[$]10, R[0-9]+, [$]1020, R[0-9]+" + //ppc64le: -"CLRLSLDI", "RLWNM\t[$]10, R[0-9]+, [$]22, [$]29, R[0-9]+" + //ppc64: -"CLRLSLDI", "RLWNM\t[$]10, R[0-9]+, [$]22, [$]29, R[0-9]+" a[0] = a[uint8(v>>24)] - //ppc64le: -"CLRLSLDI", "RLWNM\t[$]11, R[0-9]+, [$]2040, R[0-9]+" - //ppc64: -"CLRLSLDI", "RLWNM\t[$]11, R[0-9]+, [$]2040, R[0-9]+" + //ppc64le: -"CLRLSLDI", "RLWNM\t[$]11, R[0-9]+, [$]21, [$]28, R[0-9]+" + //ppc64: -"CLRLSLDI", "RLWNM\t[$]11, R[0-9]+, [$]21, [$]28, R[0-9]+" b[0] = b[uint8(v>>24)] - //ppc64le: -"CLRLSLDI", "RLWNM\t[$]15, R[0-9]+, [$]2040, R[0-9]+" - //ppc64: -"CLRLSLDI", "RLWNM\t[$]15, R[0-9]+, [$]2040, R[0-9]+" + //ppc64le: -"CLRLSLDI", "RLWNM\t[$]15, R[0-9]+, [$]21, [$]28, R[0-9]+" + //ppc64: -"CLRLSLDI", "RLWNM\t[$]15, R[0-9]+, [$]21, [$]28, R[0-9]+" b[1] = b[(v>>20)&0xFF] - //ppc64le: -"SLD", "RLWNM\t[$]10, R[0-9]+, [$]1016, R[0-9]+" - //ppc64: -"SLD", "RLWNM\t[$]10, R[0-9]+, [$]1016, R[0-9]+" + //ppc64le: -"SLD", "RLWNM\t[$]10, R[0-9]+, [$]22, [$]28, R[0-9]+" + //ppc64: -"SLD", "RLWNM\t[$]10, R[0-9]+, [$]22, [$]28, R[0-9]+" b[2] = b[v>>25] } |
