aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/gen/S390X.rules
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/ssa/gen/S390X.rules')
-rw-r--r--src/cmd/compile/internal/ssa/gen/S390X.rules12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/gen/S390X.rules b/src/cmd/compile/internal/ssa/gen/S390X.rules
index c3421da0a2..e4a1cd6981 100644
--- a/src/cmd/compile/internal/ssa/gen/S390X.rules
+++ b/src/cmd/compile/internal/ssa/gen/S390X.rules
@@ -142,6 +142,8 @@
(Round x) => (FIDBR [1] x)
(FMA x y z) => (FMADD z x y)
+(Sqrt32 ...) => (FSQRTS ...)
+
// Atomic loads and stores.
// The SYNC instruction (fast-BCR-serialization) prevents store-load
// reordering. Other sequences of memory operations (load-load,
@@ -1420,6 +1422,16 @@
&& clobber(x)
=> (MOVDBRstore [i-4] {s} p w0 mem)
+(MOVBstore [7] p1 (SRDconst w)
+ x1:(MOVHBRstore [5] p1 (SRDconst w)
+ x2:(MOVWBRstore [1] p1 (SRDconst w)
+ x3:(MOVBstore p1 w mem))))
+ && x1.Uses == 1
+ && x2.Uses == 1
+ && x3.Uses == 1
+ && clobber(x1, x2, x3)
+ => (MOVDBRstore p1 w mem)
+
// Combining byte loads into larger (unaligned) loads.
// Big-endian loads