]> Cypherpunks repositories - gostls13.git/commitdiff
test/codegen: add combined conversion and shift tests
authorJoel Sing <joel@sing.id.au>
Mon, 9 Sep 2024 15:16:14 +0000 (01:16 +1000)
committerJoel Sing <joel@sing.id.au>
Tue, 25 Mar 2025 13:53:49 +0000 (06:53 -0700)
This adds tests for type conversion and shifts, detailing various
poor bad code generation that currently exists for riscv64. This
will be addressed in future CLs.

Change-Id: Ie1d366dfe878832df691600f8500ef383da92848
Reviewed-on: https://go-review.googlesource.com/c/go/+/615678
Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com>
Reviewed-by: Mark Ryan <markdryan@rivosinc.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
test/codegen/shift.go

index b7819d236fe9ebcb34ddcf51332b5fdb6c2f5e7c..98d621d35204c62f6e3a54cd22b4fe64f0e34b34 100644 (file)
@@ -592,3 +592,67 @@ func checkLeftShiftWithAddition(a int64, b int64) int64 {
        a = a + b<<3
        return a
 }
+
+//
+// Convert and shift.
+//
+
+func rsh64Uto32U(v uint64) uint32 {
+       x := uint32(v)
+       // riscv64:"MOVWU"
+       if x > 8 {
+               // riscv64:"SRLIW",-"MOVWU",-"SLLI"
+               x >>= 2
+       }
+       return x
+}
+
+func rsh64Uto16U(v uint64) uint16 {
+       x := uint16(v)
+       // riscv64:"MOVHU"
+       if x > 8 {
+               // riscv64:"SLLI","SRLI"
+               x >>= 2
+       }
+       return x
+}
+
+func rsh64Uto8U(v uint64) uint8 {
+       x := uint8(v)
+       // riscv64:"MOVBU"
+       if x > 8 {
+               // riscv64:"SLLI","SRLI"
+               x >>= 2
+       }
+       return x
+}
+
+func rsh64to32(v int64) int32 {
+       x := int32(v)
+       // riscv64:"MOVW"
+       if x > 8 {
+               // riscv64:"SRAIW",-"MOVW",-"SLLI"
+               x >>= 2
+       }
+       return x
+}
+
+func rsh64to16(v int64) int16 {
+       x := int16(v)
+       // riscv64:"MOVH"
+       if x > 8 {
+               // riscv64:"SLLI","SRAI"
+               x >>= 2
+       }
+       return x
+}
+
+func rsh64to8(v int64) int8 {
+       x := int8(v)
+       // riscv64:"MOVB"
+       if x > 8 {
+               // riscv64:"SLLI","SRAI"
+               x >>= 2
+       }
+       return x
+}