From 0e44c692c2b39a071257e8be24fa971e6dc05f10 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Mon, 16 Mar 2020 03:29:19 +1100 Subject: [PATCH] cmd/compile: use NOT pseudo-instruction for riscv64 Slicemask Change-Id: Idefb6669d54929065f57e3bd767c91451dc3a375 Reviewed-on: https://go-review.googlesource.com/c/go/+/223562 Reviewed-by: Cherry Zhang Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/ssa/gen/RISCV64.rules | 2 +- src/cmd/compile/internal/ssa/rewriteRISCV64.go | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/ssa/gen/RISCV64.rules b/src/cmd/compile/internal/ssa/gen/RISCV64.rules index a4b141b4fb..fba431368b 100644 --- a/src/cmd/compile/internal/ssa/gen/RISCV64.rules +++ b/src/cmd/compile/internal/ssa/gen/RISCV64.rules @@ -143,7 +143,7 @@ // For positive x, bit 63 of x-1 is always 0, so the result is -1. // For zero x, bit 63 of x-1 is 1, so the result is 0. // -(Slicemask x) -> (XORI [-1] (SRAI [63] (ADDI [-1] x))) +(Slicemask x) -> (NOT (SRAI [63] (ADDI [-1] x))) // Truncations // We ignore the unused high parts of registers, so truncates are just copies. diff --git a/src/cmd/compile/internal/ssa/rewriteRISCV64.go b/src/cmd/compile/internal/ssa/rewriteRISCV64.go index 692cd92cc8..a7b0ba05b9 100644 --- a/src/cmd/compile/internal/ssa/rewriteRISCV64.go +++ b/src/cmd/compile/internal/ssa/rewriteRISCV64.go @@ -4309,12 +4309,11 @@ func rewriteValueRISCV64_OpSlicemask(v *Value) bool { v_0 := v.Args[0] b := v.Block // match: (Slicemask x) - // result: (XORI [-1] (SRAI [63] (ADDI [-1] x))) + // result: (NOT (SRAI [63] (ADDI [-1] x))) for { t := v.Type x := v_0 - v.reset(OpRISCV64XORI) - v.AuxInt = -1 + v.reset(OpRISCV64NOT) v0 := b.NewValue0(v.Pos, OpRISCV64SRAI, t) v0.AuxInt = 63 v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, t) -- 2.50.0