diff options
| author | Joel Sing <joel@sing.id.au> | 2025-11-29 03:27:05 +1100 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2026-03-10 05:06:25 -0700 |
| commit | dfd2e8027c77363d7b8fa7fb23e9979ba6c1b167 (patch) | |
| tree | d3e3d00980c3da7be4983a50945904759d5341d3 /src/cmd/asm/internal | |
| parent | 7f7e4942f1a83aa60c88e7536cfc4166a4c65c43 (diff) | |
| download | go-dfd2e8027c77363d7b8fa7fb23e9979ba6c1b167.tar.xz | |
cmd/internal/obj/riscv: materialise 32 bit unsigned constants
Currently, we only materialise 32 bit signed constants - a 32 unsigned
value that exceeds the 32 bit signed maximum value is loaded from rodata.
A 32 bit unsigned value can be materialized by loading and zero extending,
which requires four instructions on rva20u64 - on rva22u64 and above only
three instructions are required.
Change-Id: I874a457f329ac75c2a0fb59b453cf8ef17df2972
Reviewed-on: https://go-review.googlesource.com/c/go/+/748962
Reviewed-by: Mark Ryan <markdryan@meta.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd/asm/internal')
| -rw-r--r-- | src/cmd/asm/internal/asm/testdata/riscv64.s | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/riscv64.s b/src/cmd/asm/internal/asm/testdata/riscv64.s index 4615119af0..1b23680e26 100644 --- a/src/cmd/asm/internal/asm/testdata/riscv64.s +++ b/src/cmd/asm/internal/asm/testdata/riscv64.s @@ -1993,9 +1993,12 @@ start: // Converted to load and shift(s) MOV $0xffffffff, X5 // MOV $4294967295, X5 // 9302f0ff93d20202 + MOV $0x80000001, X5 // MOV $2147483649, X5 // b70200809b8212009392020293d20202 or b70200809b821200bb820208 MOV $0x100000000, X5 // MOV $4294967296, X5 // 9302100093920202 MOV $0xfffffffffffda, X5 // MOV $4503599627370458, X5 // 9302d0fe9392d20093d2c200 MOV $0xffffffffffffe, X5 // MOV $4503599627370494, X5 // 9302f0ff9392d20093d2c200 + MOV $0x0800000010000000, X5 // MOV $576460752571858944, X5 // b70200809b8212009392020293d24200 + MOV $0x0abcdabcd0000000, X5 // MOV $773733740479250432, X5 // b7b2cdab9b82d2bc9392020293d24200 MOV $0x7fffffff00000000, X5 // MOV $9223372032559808512, X5 // b70200809b82f2ff93920202 MOV $0x8000000100000000, X5 // MOV $-9223372032559808512, X5 // b70200809b82120093920202 MOV $0xffffffff00000000, X5 // MOV $-4294967296, X5 // 9302f0ff93920202 @@ -2003,11 +2006,8 @@ start: MOV $0x7fffffffffffffff, X5 // MOV $9223372036854775807, X5 // 9302f0ff93d21200 // Converted to load of symbol (AUIPC + LD) - MOV $0x80000001, X5 // MOV $2147483649, X5 // 9702000083b20200 MOV $0x100000001, X5 // MOV $4294967297, 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 $0xfff0000000ffffff, X5 // MOV $-4503599610593281, X5 // 9702000083b20200 |
