aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/asm
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2025-02-27 22:54:51 +1100
committerJoel Sing <joel@sing.id.au>2025-03-27 04:26:47 -0700
commitd37624881f60f79dfba4ef81661024bee9dfc2d3 (patch)
treeaf83af8b36424b821faf933e2c3553ee09ce3b10 /src/cmd/asm
parent1763ee199d33d2592332a29cfc3da7811718a4fd (diff)
downloadgo-d37624881f60f79dfba4ef81661024bee9dfc2d3.tar.xz
cmd/internal/obj/riscv: improve constant construction
Attempt to construct large constants that have a consecutive sequence of ones from a small negative constant, with a logical right and/or left shift. This allows for a large range of mask like constants to be constructed with only two or three instructions, avoiding the need to load from memory. Change-Id: I35a77fecdd2df0ed3f33b772d518f85119d4ff66 Reviewed-on: https://go-review.googlesource.com/c/go/+/652778 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Mark Ryan <markdryan@rivosinc.com> Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com>
Diffstat (limited to 'src/cmd/asm')
-rw-r--r--src/cmd/asm/internal/asm/testdata/riscv64.s12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/riscv64.s b/src/cmd/asm/internal/asm/testdata/riscv64.s
index 243fa590ef..df78659c83 100644
--- a/src/cmd/asm/internal/asm/testdata/riscv64.s
+++ b/src/cmd/asm/internal/asm/testdata/riscv64.s
@@ -572,24 +572,24 @@ start:
MOV $0x7fffffff, X5 // MOV $2147483647, X5 // b70200809b82f2ff
MOV $-0x7fffffff, X5 // MOV $-2147483647, X5 // b70200809b821200
- // Converted to load and shift (MOV + SLLI)
+ // Converted to load and shift(s)
+ MOV $0xffffffff, X5 // MOV $4294967295, X5 // 9302f0ff93d20202
MOV $0x100000000, X5 // MOV $4294967296, X5 // 9302100093920202
+ MOV $0xfffffffffffda, X5 // MOV $4503599627370458, X5 // 9302d0fe9392d20093d2c200
+ MOV $0xffffffffffffe, X5 // MOV $4503599627370494, X5 // 9302f0ff9392d20093d2c200
MOV $0x7fffffff00000000, X5 // MOV $9223372032559808512, X5 // b70200809b82f2ff93920202
MOV $0x8000000100000000, X5 // MOV $-9223372032559808512, X5 // b70200809b82120093920202
MOV $0xffffffff00000000, X5 // MOV $-4294967296, X5 // 9302f0ff93920202
+ MOV $0x1ffffffff0000000, X5 // MOV $2305843008945258496, X5 // 9302f0ff9392f20193d23200
+ MOV $0x7fffffffffffffff, X5 // MOV $9223372036854775807, X5 // 9302f0ff93d21200
// Converted to load of symbol (AUIPC + LD)
MOV $0x80000001, X5 // MOV $2147483649, X5 // 9702000083b20200
- MOV $0xffffffff, X5 // MOV $4294967295, X5 // 9702000083b20200
MOV $0x100000001, X5 // MOV $4294967297, X5 // 9702000083b20200
- MOV $0xfffffffffffda, X5 // MOV $4503599627370458, X5 // 9702000083b20200
- MOV $0xffffffffffffe, X5 // MOV $4503599627370494, X5 // 9702000083b20200
MOV $0x0800000010000000, X5 // MOV $576460752571858944, X5 // 9702000083b20200
MOV $0x8000000010000000, X5 // MOV $-9223372036586340352, X5 // 9702000083b20200
MOV $0x0abcdabcd0000000, X5 // MOV $773733740479250432, X5 // 9702000083b20200
MOV $0x8abcdabcd0000000, X5 // MOV $-8449638296375525376, X5 // 9702000083b20200
- MOV $0x1ffffffff0000000, X5 // MOV $2305843008945258496, X5 // 9702000083b20200
- MOV $0x7fffffffffffffff, X5 // MOV $9223372036854775807, X5 // 9702000083b20200
MOV $0xfff0000000ffffff, X5 // MOV $-4503599610593281, X5 // 9702000083b20200
MOV (X5), X6 // 03b30200