diff options
author | Joel Sing <joel@sing.id.au> | 2020-02-26 04:01:29 +1100 |
---|---|---|
committer | Joel Sing <joel@sing.id.au> | 2020-02-26 18:00:53 +0000 |
commit | 025a4faf5fd70b8be4a77d19762eb2b4da8754b0 (patch) | |
tree | 1d9216724ceee9b848a44cceffb7dead05d028bd /src/cmd/compile/internal/ssa/rewriteRISCV64.go | |
parent | c27dd0c9e581edb71c834e161db6a920ca239997 (diff) | |
download | go-025a4faf5fd70b8be4a77d19762eb2b4da8754b0.tar.gz go-025a4faf5fd70b8be4a77d19762eb2b4da8754b0.zip |
cmd/compile: simplify Slicemask on riscv64
Slicemask can be performed with three immediate instructions, rather than the
six currently in use.
Change-Id: I3f8ca2d5affd1403db8fa79b356f248e6e9332c5
Reviewed-on: https://go-review.googlesource.com/c/go/+/220923
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewriteRISCV64.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/rewriteRISCV64.go | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/src/cmd/compile/internal/ssa/rewriteRISCV64.go b/src/cmd/compile/internal/ssa/rewriteRISCV64.go index 61da7a41bdb..3b8d42b035f 100644 --- a/src/cmd/compile/internal/ssa/rewriteRISCV64.go +++ b/src/cmd/compile/internal/ssa/rewriteRISCV64.go @@ -4230,27 +4230,20 @@ func rewriteValueRISCV64_OpSignExt8to64(v *Value) bool { func rewriteValueRISCV64_OpSlicemask(v *Value) bool { v_0 := v.Args[0] b := v.Block - typ := &b.Func.Config.Types // match: (Slicemask <t> x) - // result: (XOR (MOVDconst [-1]) (SRA <t> (SUB <t> x (MOVDconst [1])) (MOVDconst [63]))) + // result: (XORI [-1] (SRAI <t> [63] (ADDI <t> [-1] x))) for { t := v.Type x := v_0 - v.reset(OpRISCV64XOR) - v0 := b.NewValue0(v.Pos, OpRISCV64MOVDconst, typ.UInt64) - v0.AuxInt = -1 + v.reset(OpRISCV64XORI) + v.AuxInt = -1 + v0 := b.NewValue0(v.Pos, OpRISCV64SRAI, t) + v0.AuxInt = 63 + v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, t) + v1.AuxInt = -1 + v1.AddArg(x) + v0.AddArg(v1) v.AddArg(v0) - v1 := b.NewValue0(v.Pos, OpRISCV64SRA, t) - v2 := b.NewValue0(v.Pos, OpRISCV64SUB, t) - v2.AddArg(x) - v3 := b.NewValue0(v.Pos, OpRISCV64MOVDconst, typ.UInt64) - v3.AuxInt = 1 - v2.AddArg(v3) - v1.AddArg(v2) - v4 := b.NewValue0(v.Pos, OpRISCV64MOVDconst, typ.UInt64) - v4.AuxInt = 63 - v1.AddArg(v4) - v.AddArg(v1) return true } } |