diff options
| author | Joel Sing <joel@sing.id.au> | 2025-02-27 22:54:51 +1100 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2025-03-27 04:26:47 -0700 |
| commit | d37624881f60f79dfba4ef81661024bee9dfc2d3 (patch) | |
| tree | af83af8b36424b821faf933e2c3553ee09ce3b10 /src/cmd/asm | |
| parent | 1763ee199d33d2592332a29cfc3da7811718a4fd (diff) | |
| download | go-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.s | 12 |
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 |
