diff options
author | Paul E. Murphy <murp@ibm.com> | 2023-09-19 17:01:28 -0500 |
---|---|---|
committer | Paul Murphy <murp@ibm.com> | 2023-10-05 14:03:32 +0000 |
commit | dcd018b5c54cd23b36ef732473f0d99fbb57f6fc (patch) | |
tree | 7a2c6672ab117e40969e9d761e6ea3632b4175ef /test | |
parent | 26d07d80ca0093f87f37a02600eb1715ca0431a1 (diff) | |
download | go-dcd018b5c54cd23b36ef732473f0d99fbb57f6fc.tar.gz go-dcd018b5c54cd23b36ef732473f0d99fbb57f6fc.zip |
cmd/internal/obj/ppc64: generate MOVD mask constants in register
Add a new form of RLDC which maps directly to the ISA definition
of rldc: RLDC Rs, $sh, $mb, Ra. This is used to generate mask
constants described below.
Using MOVD $-1, Rx; RLDC Rx, $sh, $mb, Rx, any mask constant
can be generated. A mask is a contiguous series of 1 bits, which
may wrap.
Change-Id: Ifcaae1114080ad58b5fdaa3e5fc9019e2051f282
Reviewed-on: https://go-review.googlesource.com/c/go/+/531120
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
Run-TryBot: Paul Murphy <murp@ibm.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/codegen/constants.go | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/test/codegen/constants.go b/test/codegen/constants.go index 756aeda5f7..3ce17d0ad3 100644 --- a/test/codegen/constants.go +++ b/test/codegen/constants.go @@ -6,6 +6,7 @@ package codegen +// A uint16 or sint16 constant shifted left. func shifted16BitConstants(out [64]uint64) { // ppc64x: "MOVD\t[$]8193,", "SLD\t[$]27," out[0] = 0x0000010008000000 @@ -15,11 +16,18 @@ func shifted16BitConstants(out [64]uint64) { out[2] = 0xFFFF000000000000 // ppc64x: "MOVD\t[$]65535", "SLD\t[$]44," out[3] = 0x0FFFF00000000000 +} - // ppc64x: "MOVD\t[$]i64.fffff00000000001[(]SB[)]" - out[4] = 0xFFFFF00000000001 - // ppc64x: "MOVD\t[$]i64.fffff80000000001[(]SB[)]" - out[5] = 0xFFFFF80000000001 - // ppc64x: "MOVD\t[$]i64.0ffff80000000000[(]SB[)]" - out[6] = 0x0FFFF80000000000 +// A contiguous set of 1 bits, potentially wrapping. +func contiguousMaskConstants(out [64]uint64) { + // ppc64x: "MOVD\t[$]-1", "RLDC\tR[0-9]+, [$]44, [$]63," + out[0] = 0xFFFFF00000000001 + // ppc64x: "MOVD\t[$]-1", "RLDC\tR[0-9]+, [$]43, [$]63," + out[1] = 0xFFFFF80000000001 + // ppc64x: "MOVD\t[$]-1", "RLDC\tR[0-9]+, [$]43, [$]4," + out[2] = 0x0FFFF80000000000 + // ppc64x/power8: "MOVD\t[$]-1", "RLDC\tR[0-9]+, [$]33, [$]63," + // ppc64x/power9: "MOVD\t[$]-1", "RLDC\tR[0-9]+, [$]33, [$]63," + // ppc64x/power10: "MOVD\t[$]-8589934591," + out[3] = 0xFFFFFFFE00000001 } |