From b60432df143475b575a9da1f2a179ac35c399ed0 Mon Sep 17 00:00:00 2001 From: Wayne Zuo Date: Wed, 24 Aug 2022 22:17:51 +0800 Subject: cmd/compile: deadcode for LoweredMuluhilo on riscv64 This is a follow up of CL 425101 on RISCV64. According to RISCV Volume 1, Unprivileged Spec v. 20191213 Chapter 7.1: If both the high and low bits of the same product are required, then the recommended code sequence is: MULH[[S]U] rdh, rs1, rs2; MUL rdl, rs1, rs2 (source register specifiers must be in same order and rdh cannot be the same as rs1 or rs2). Microarchitectures can then fuse these into a single multiply operation instead of performing two separate multiplies. So we should not split Muluhilo to separate instructions. Updates #54607 Change-Id: If47461f3aaaf00e27cd583a9990e144fb8bcdb17 Reviewed-on: https://go-review.googlesource.com/c/go/+/425203 Auto-Submit: Keith Randall TryBot-Result: Gopher Robot Run-TryBot: Wayne Zuo Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Cherry Mui --- test/codegen/mathbits.go | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/codegen') diff --git a/test/codegen/mathbits.go b/test/codegen/mathbits.go index 20c945fbc3..a507d32843 100644 --- a/test/codegen/mathbits.go +++ b/test/codegen/mathbits.go @@ -800,12 +800,14 @@ func Mul64(x, y uint64) (hi, lo uint64) { func Mul64HiOnly(x, y uint64) uint64 { // arm64:"UMULH",-"MUL" + // riscv64:"MULHU",-"MUL\t" hi, _ := bits.Mul64(x, y) return hi } func Mul64LoOnly(x, y uint64) uint64 { // arm64:"MUL",-"UMULH" + // riscv64:"MUL\t",-"MULHU" _, lo := bits.Mul64(x, y) return lo } -- cgit v1.3