]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: use ellipses in S390X rules
authorJosh Bleecher Snyder <josharian@gmail.com>
Thu, 23 Jan 2020 22:06:00 +0000 (14:06 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 25 Feb 2020 00:34:52 +0000 (00:34 +0000)
Also, explicitly zero AuxInt in some ops (like Div),
to make it clear why they do not use an ellipsis.

Passes toolstash-check -all.

Change-Id: I47b4ed745196ed734927dbb5923edec33ce286da
Reviewed-on: https://go-review.googlesource.com/c/go/+/217013
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Munday <mike.munday@ibm.com>
src/cmd/compile/internal/ssa/gen/S390X.rules
src/cmd/compile/internal/ssa/rewriteS390X.go

index 9a8e0103c6b698ec829254539e808fb4ee855de3..7761ee3b1eb312d653510ffa3cef48ce51e4f673 100644 (file)
@@ -3,27 +3,27 @@
 // license that can be found in the LICENSE file.
 
 // Lowering arithmetic
-(Add(64|Ptr)  x y) -> (ADD  x y)
-(Add(32|16|8)  x y) -> (ADDW  x y)
-(Add32F x y) -> (FADDS x y)
-(Add64F x y) -> (FADD x y)
-
-(Sub(64|Ptr)  x y) -> (SUB  x y)
-(Sub(32|16|8)  x y) -> (SUBW  x y)
-(Sub32F x y) -> (FSUBS x y)
-(Sub64F x y) -> (FSUB x y)
-
-(Mul64  x y) -> (MULLD  x y)
-(Mul(32|16|8)  x y) -> (MULLW  x y)
-(Mul32F x y) -> (FMULS x y)
-(Mul64F x y) -> (FMUL x y)
-(Mul64uhilo x y) -> (MLGR x y)
-
-(Div32F x y) -> (FDIVS x y)
-(Div64F x y) -> (FDIV x y)
-
-(Div64  x y) -> (DIVD  x y)
-(Div64u x y) -> (DIVDU x y)
+(Add(64|Ptr) ...) -> (ADD ...)
+(Add(32|16|8) ...) -> (ADDW ...)
+(Add32F ...) -> (FADDS ...)
+(Add64F ...) -> (FADD ...)
+
+(Sub(64|Ptr) ...) -> (SUB ...)
+(Sub(32|16|8) ...) -> (SUBW ...)
+(Sub32F ...) -> (FSUBS ...)
+(Sub64F ...) -> (FSUB ...)
+
+(Mul64 ...) -> (MULLD ...)
+(Mul(32|16|8) ...) -> (MULLW ...)
+(Mul32F ...) -> (FMULS ...)
+(Mul64F ...) -> (FMUL ...)
+(Mul64uhilo ...) -> (MLGR ...)
+
+(Div32F ...) -> (FDIVS ...)
+(Div64F ...) -> (FDIV ...)
+
+(Div64 [a] x y) -> (DIVD x y)
+(Div64u ...) -> (DIVDU ...)
 // DIVW/DIVWU has a 64-bit dividend and a 32-bit divisor,
 // so a sign/zero extension of the dividend is required.
 (Div32  x y) -> (DIVW  (MOVWreg x) y)
 (Div8   x y) -> (DIVW  (MOVBreg x) (MOVBreg y))
 (Div8u  x y) -> (DIVWU (MOVBZreg x) (MOVBZreg y))
 
-(Hmul(64|64u)  x y) -> (MULH(D|DU)  x y)
+(Hmul(64|64u) ...) -> (MULH(D|DU) ...)
 (Hmul32  x y) -> (SRDconst [32] (MULLD (MOVWreg x) (MOVWreg y)))
 (Hmul32u x y) -> (SRDconst [32] (MULLD (MOVWZreg x) (MOVWZreg y)))
 
-(Mod(64|64u)  x y) -> (MOD(D|DU)  x y)
+(Mod64 [a] x y) -> (MODD x y)
+(Mod64u ...) -> (MODDU ...)
 // MODW/MODWU has a 64-bit dividend and a 32-bit divisor,
 // so a sign/zero extension of the dividend is required.
 (Mod32  x y) -> (MODW  (MOVWreg x) y)
 // (x + y) / 2 with x>=y -> (x - y) / 2 + y
 (Avg64u <t> x y) -> (ADD (SRDconst <t> (SUB <t> x y) [1]) y)
 
-(And64 x y) -> (AND x y)
-(And(32|16|8) x y) -> (ANDW x y)
+(And64 ...) -> (AND ...)
+(And(32|16|8) ...) -> (ANDW ...)
 
-(Or64 x y) -> (OR x y)
-(Or(32|16|8) x y) -> (ORW x y)
+(Or64 ...) -> (OR ...)
+(Or(32|16|8) ...) -> (ORW ...)
 
-(Xor64 x y) -> (XOR x y)
-(Xor(32|16|8) x y) -> (XORW x y)
+(Xor64 ...) -> (XOR ...)
+(Xor(32|16|8) ...) -> (XORW ...)
 
-(Neg64 x) -> (NEG x)
-(Neg(32|16|8) x) -> (NEGW x)
-(Neg32F x) -> (FNEGS x)
-(Neg64F x) -> (FNEG x)
+(Neg64 ...) -> (NEG ...)
+(Neg(32|16|8) ...) -> (NEGW ...)
+(Neg32F ...) -> (FNEGS ...)
+(Neg64F ...) -> (FNEG ...)
 
-(Com64 x) -> (NOT x)
-(Com(32|16|8) x) -> (NOTW x)
-(NOT x) && true -> (XOR (MOVDconst [-1]) x)
-(NOTW x) && true -> (XORWconst [-1] x)
+(Com64 ...) -> (NOT ...)
+(Com(32|16|8) ...) -> (NOTW ...)
+(NOT x) -> (XOR (MOVDconst [-1]) x)
+(NOTW x) -> (XORWconst [-1] x)
 
 // Lowering boolean ops
-(AndB x y) -> (ANDW x y)
-(OrB x y) -> (ORW x y)
+(AndB ...) -> (ANDW ...)
+(OrB ...) -> (ORW ...)
 (Not x) -> (XORWconst [1] x)
 
 // Lowering pointer arithmetic
@@ -80,8 +81,8 @@
 (OffPtr [off] ptr) -> (ADD (MOVDconst [off]) ptr)
 
 // TODO: optimize these cases?
-(Ctz64NonZero x) -> (Ctz64 x)
-(Ctz32NonZero x) -> (Ctz32 x)
+(Ctz64NonZero ...) -> (Ctz64 ...)
+(Ctz32NonZero ...) -> (Ctz32 ...)
 
 // Ctz(x) = 64 - findLeftmostOne((x-1)&^x)
 (Ctz64 <t> x) -> (SUB (MOVDconst [64]) (FLOGR (AND <t> (SUBconst <t> [1] x) (NOT <t> x))))
 (SumBytes4 x) -> (SumBytes2 (ADDW <typ.UInt16> (SRWconst <typ.UInt16> x [16]) x))
 (SumBytes8 x) -> (SumBytes4 (ADDW <typ.UInt32> (SRDconst <typ.UInt32> x [32]) x))
 
-(Bswap64 x) -> (MOVDBR x)
-(Bswap32 x) -> (MOVWBR x)
+(Bswap64 ...) -> (MOVDBR ...)
+(Bswap32 ...) -> (MOVWBR ...)
 
 // add with carry
 (Select0 (Add64carry x y c))
   -> (NEG (Select0 <typ.UInt64> (SUBE (MOVDconst [0]) (MOVDconst [0]) (Select1 <types.TypeFlags> (SUBE x y (Select1 <types.TypeFlags> (SUBC (MOVDconst [0]) c)))))))
 
 // math package intrinsics
-(Sqrt        x) -> (FSQRT x)
+(Sqrt      ...) -> (FSQRT ...)
 (Floor       x) -> (FIDBR [7] x)
 (Ceil        x) -> (FIDBR [6] x)
 (Trunc       x) -> (FIDBR [5] x)
 // The SYNC instruction (fast-BCR-serialization) prevents store-load
 // reordering. Other sequences of memory operations (load-load,
 // store-store and load-store) are already guaranteed not to be reordered.
-(AtomicLoad(8|32|Acq32|64|Ptr) ptr mem) -> (MOV(BZ|WZ|WZ|D|D)atomicload ptr mem)
+(AtomicLoad(8|32|Acq32|64|Ptr) ...) -> (MOV(BZ|WZ|WZ|D|D)atomicload ...)
 (AtomicStore(8|32|64|PtrNoWB) ptr val mem) -> (SYNC (MOV(B|W|D|D)atomicstore ptr val mem))
 
 // Store-release doesn't require store-load ordering.
-(AtomicStoreRel32 ptr val mem) -> (MOVWatomicstore ptr val mem)
+(AtomicStoreRel32 ...) -> (MOVWatomicstore ...)
 
 // Atomic adds.
 (AtomicAdd32 ptr val mem) -> (AddTupleFirst32 val (LAA ptr val mem))
 (Select1     (AddTupleFirst64   _ tuple)) -> (Select1 tuple)
 
 // Atomic exchanges.
-(AtomicExchange32 ptr val mem) -> (LoweredAtomicExchange32 ptr val mem)
-(AtomicExchange64 ptr val mem) -> (LoweredAtomicExchange64 ptr val mem)
+(AtomicExchange32 ...) -> (LoweredAtomicExchange32 ...)
+(AtomicExchange64 ...) -> (LoweredAtomicExchange64 ...)
 
 // Atomic compare and swap.
-(AtomicCompareAndSwap32 ptr old new_ mem) -> (LoweredAtomicCas32 ptr old new_ mem)
-(AtomicCompareAndSwap64 ptr old new_ mem) -> (LoweredAtomicCas64 ptr old new_ mem)
+(AtomicCompareAndSwap32 ...) -> (LoweredAtomicCas32 ...)
+(AtomicCompareAndSwap64 ...) -> (LoweredAtomicCas64 ...)
 
 // Atomic and: *(*uint8)(ptr) &= val
 //
 
 // Lowering extension
 // Note: we always extend to 64 bits even though some ops don't need that many result bits.
-(SignExt8to(16|32|64)  x) -> (MOVBreg x)
-(SignExt16to(32|64) x) -> (MOVHreg x)
-(SignExt32to64 x) -> (MOVWreg x)
+(SignExt8to(16|32|64) ...) -> (MOVBreg ...)
+(SignExt16to(32|64) ...) -> (MOVHreg ...)
+(SignExt32to64 ...) -> (MOVWreg ...)
 
-(ZeroExt8to(16|32|64)  x) -> (MOVBZreg x)
-(ZeroExt16to(32|64) x) -> (MOVHZreg x)
-(ZeroExt32to64 x) -> (MOVWZreg x)
+(ZeroExt8to(16|32|64) ...) -> (MOVBZreg ...)
+(ZeroExt16to(32|64) ...) -> (MOVHZreg ...)
+(ZeroExt32to64 ...) -> (MOVWZreg ...)
 
 (Slicemask <t> x) -> (SRADconst (NEG <t> x) [63])
 
 // Lowering truncation
 // Because we ignore high parts of registers, truncates are just copies.
-(Trunc(16|32|64)to8  x) -> x
-(Trunc(32|64)to16 x) -> x
-(Trunc64to32 x) -> x
+(Trunc(16|32|64)to8 ...) -> (Copy ...)
+(Trunc(32|64)to16 ...) -> (Copy ...)
+(Trunc64to32 ...) -> (Copy ...)
 
 // Lowering float <-> int
-(Cvt32to32F x) -> (CEFBRA x)
-(Cvt32to64F x) -> (CDFBRA x)
-(Cvt64to32F x) -> (CEGBRA x)
-(Cvt64to64F x) -> (CDGBRA x)
+(Cvt32to32F ...) -> (CEFBRA ...)
+(Cvt32to64F ...) -> (CDFBRA ...)
+(Cvt64to32F ...) -> (CEGBRA ...)
+(Cvt64to64F ...) -> (CDGBRA ...)
 
-(Cvt32Fto32 x) -> (CFEBRA x)
-(Cvt32Fto64 x) -> (CGEBRA x)
-(Cvt64Fto32 x) -> (CFDBRA x)
-(Cvt64Fto64 x) -> (CGDBRA x)
+(Cvt32Fto32 ...) -> (CFEBRA ...)
+(Cvt32Fto64 ...) -> (CGEBRA ...)
+(Cvt64Fto32 ...) -> (CFDBRA ...)
+(Cvt64Fto64 ...) -> (CGDBRA ...)
 
-(Cvt32Fto64F x) -> (LDEBR x)
-(Cvt64Fto32F x) -> (LEDBR x)
+(Cvt32Fto64F ...) -> (LDEBR ...)
+(Cvt64Fto32F ...) -> (LEDBR ...)
 
-(Round(32|64)F x) -> (LoweredRound(32|64)F x)
+(Round(32|64)F ...) -> (LoweredRound(32|64)F ...)
 
 // Lowering shifts
 
 // Lowering rotates
 (RotateLeft8 <t> x (MOVDconst [c])) -> (Or8 (Lsh8x64 <t> x (MOVDconst [c&7])) (Rsh8Ux64 <t> x (MOVDconst [-c&7])))
 (RotateLeft16 <t> x (MOVDconst [c])) -> (Or16 (Lsh16x64 <t> x (MOVDconst [c&15])) (Rsh16Ux64 <t> x (MOVDconst [-c&15])))
-(RotateLeft32 x y) -> (RLL  x y)
-(RotateLeft64 x y) -> (RLLG x y)
+(RotateLeft32 ...) -> (RLL  ...)
+(RotateLeft64 ...) -> (RLLG ...)
 
 // Lowering comparisons
 (Less64      x y) -> (LOCGR {s390x.Less} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))
        (LoweredZero [s%256] destptr (ADDconst <destptr.Type> destptr [(s/256)*256]) mem)
 
 // Lowering constants
-(Const(64|32|16|8)  [val]) -> (MOVDconst [val])
-(Const(32|64)F [val]) -> (FMOV(S|D)const [val])
+(Const(64|32|16|8) ...) -> (MOVDconst ...)
+(Const(32|64)F ...) -> (FMOV(S|D)const ...)
 (ConstNil) -> (MOVDconst [0])
-(ConstBool [b]) -> (MOVDconst [b])
+(ConstBool ...) -> (MOVDconst ...)
 
 // Lowering calls
-(StaticCall [argwid] {target} mem) -> (CALLstatic [argwid] {target} mem)
-(ClosureCall [argwid] entry closure mem) -> (CALLclosure [argwid] entry closure mem)
-(InterCall [argwid] entry mem) -> (CALLinter [argwid] entry mem)
+(StaticCall ...) -> (CALLstatic ...)
+(ClosureCall ...) -> (CALLclosure ...)
+(InterCall ...) -> (CALLinter ...)
 
 // Miscellaneous
 (IsNonNil p) -> (LOCGR {s390x.NotEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPconst p [0]))
 (IsInBounds idx len) -> (LOCGR {s390x.Less} (MOVDconst [0]) (MOVDconst [1]) (CMPU idx len))
 (IsSliceInBounds idx len) -> (LOCGR {s390x.LessOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPU idx len))
-(NilCheck ptr mem) -> (LoweredNilCheck ptr mem)
-(GetG mem) -> (LoweredGetG mem)
-(GetClosurePtr) -> (LoweredGetClosurePtr)
-(GetCallerSP) -> (LoweredGetCallerSP)
-(GetCallerPC) -> (LoweredGetCallerPC)
-(Addr {sym} base) -> (MOVDaddr {sym} base)
+(NilCheck ...) -> (LoweredNilCheck ...)
+(GetG ...) -> (LoweredGetG ...)
+(GetClosurePtr ...) -> (LoweredGetClosurePtr ...)
+(GetCallerSP ...) -> (LoweredGetCallerSP ...)
+(GetCallerPC ...) -> (LoweredGetCallerPC ...)
+(Addr ...) -> (MOVDaddr ...)
 (LocalAddr {sym} base _) -> (MOVDaddr {sym} base)
 (ITab (Load ptr mem)) -> (MOVDload ptr mem)
 
 (If cond yes no) -> (CLIJ {s390x.LessOrGreater} (MOVBZreg <typ.Bool> cond) [0] yes no)
 
 // Write barrier.
-(WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem)
+(WB ...) -> (LoweredWB ...)
 
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem)
 (PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem)
index f396babee3bf7f7f2deba54d0d57f72bce29f928..d9262305e86b07c0a80aa354f04deb9825341bb5 100644 (file)
@@ -9,31 +9,44 @@ import "cmd/internal/obj/s390x"
 func rewriteValueS390X(v *Value) bool {
        switch v.Op {
        case OpAdd16:
-               return rewriteValueS390X_OpAdd16(v)
+               v.Op = OpS390XADDW
+               return true
        case OpAdd32:
-               return rewriteValueS390X_OpAdd32(v)
+               v.Op = OpS390XADDW
+               return true
        case OpAdd32F:
-               return rewriteValueS390X_OpAdd32F(v)
+               v.Op = OpS390XFADDS
+               return true
        case OpAdd64:
-               return rewriteValueS390X_OpAdd64(v)
+               v.Op = OpS390XADD
+               return true
        case OpAdd64F:
-               return rewriteValueS390X_OpAdd64F(v)
+               v.Op = OpS390XFADD
+               return true
        case OpAdd8:
-               return rewriteValueS390X_OpAdd8(v)
+               v.Op = OpS390XADDW
+               return true
        case OpAddPtr:
-               return rewriteValueS390X_OpAddPtr(v)
+               v.Op = OpS390XADD
+               return true
        case OpAddr:
-               return rewriteValueS390X_OpAddr(v)
+               v.Op = OpS390XMOVDaddr
+               return true
        case OpAnd16:
-               return rewriteValueS390X_OpAnd16(v)
+               v.Op = OpS390XANDW
+               return true
        case OpAnd32:
-               return rewriteValueS390X_OpAnd32(v)
+               v.Op = OpS390XANDW
+               return true
        case OpAnd64:
-               return rewriteValueS390X_OpAnd64(v)
+               v.Op = OpS390XAND
+               return true
        case OpAnd8:
-               return rewriteValueS390X_OpAnd8(v)
+               v.Op = OpS390XANDW
+               return true
        case OpAndB:
-               return rewriteValueS390X_OpAndB(v)
+               v.Op = OpS390XANDW
+               return true
        case OpAtomicAdd32:
                return rewriteValueS390X_OpAtomicAdd32(v)
        case OpAtomicAdd64:
@@ -41,23 +54,32 @@ func rewriteValueS390X(v *Value) bool {
        case OpAtomicAnd8:
                return rewriteValueS390X_OpAtomicAnd8(v)
        case OpAtomicCompareAndSwap32:
-               return rewriteValueS390X_OpAtomicCompareAndSwap32(v)
+               v.Op = OpS390XLoweredAtomicCas32
+               return true
        case OpAtomicCompareAndSwap64:
-               return rewriteValueS390X_OpAtomicCompareAndSwap64(v)
+               v.Op = OpS390XLoweredAtomicCas64
+               return true
        case OpAtomicExchange32:
-               return rewriteValueS390X_OpAtomicExchange32(v)
+               v.Op = OpS390XLoweredAtomicExchange32
+               return true
        case OpAtomicExchange64:
-               return rewriteValueS390X_OpAtomicExchange64(v)
+               v.Op = OpS390XLoweredAtomicExchange64
+               return true
        case OpAtomicLoad32:
-               return rewriteValueS390X_OpAtomicLoad32(v)
+               v.Op = OpS390XMOVWZatomicload
+               return true
        case OpAtomicLoad64:
-               return rewriteValueS390X_OpAtomicLoad64(v)
+               v.Op = OpS390XMOVDatomicload
+               return true
        case OpAtomicLoad8:
-               return rewriteValueS390X_OpAtomicLoad8(v)
+               v.Op = OpS390XMOVBZatomicload
+               return true
        case OpAtomicLoadAcq32:
-               return rewriteValueS390X_OpAtomicLoadAcq32(v)
+               v.Op = OpS390XMOVWZatomicload
+               return true
        case OpAtomicLoadPtr:
-               return rewriteValueS390X_OpAtomicLoadPtr(v)
+               v.Op = OpS390XMOVDatomicload
+               return true
        case OpAtomicOr8:
                return rewriteValueS390X_OpAtomicOr8(v)
        case OpAtomicStore32:
@@ -69,71 +91,98 @@ func rewriteValueS390X(v *Value) bool {
        case OpAtomicStorePtrNoWB:
                return rewriteValueS390X_OpAtomicStorePtrNoWB(v)
        case OpAtomicStoreRel32:
-               return rewriteValueS390X_OpAtomicStoreRel32(v)
+               v.Op = OpS390XMOVWatomicstore
+               return true
        case OpAvg64u:
                return rewriteValueS390X_OpAvg64u(v)
        case OpBitLen64:
                return rewriteValueS390X_OpBitLen64(v)
        case OpBswap32:
-               return rewriteValueS390X_OpBswap32(v)
+               v.Op = OpS390XMOVWBR
+               return true
        case OpBswap64:
-               return rewriteValueS390X_OpBswap64(v)
+               v.Op = OpS390XMOVDBR
+               return true
        case OpCeil:
                return rewriteValueS390X_OpCeil(v)
        case OpClosureCall:
-               return rewriteValueS390X_OpClosureCall(v)
+               v.Op = OpS390XCALLclosure
+               return true
        case OpCom16:
-               return rewriteValueS390X_OpCom16(v)
+               v.Op = OpS390XNOTW
+               return true
        case OpCom32:
-               return rewriteValueS390X_OpCom32(v)
+               v.Op = OpS390XNOTW
+               return true
        case OpCom64:
-               return rewriteValueS390X_OpCom64(v)
+               v.Op = OpS390XNOT
+               return true
        case OpCom8:
-               return rewriteValueS390X_OpCom8(v)
+               v.Op = OpS390XNOTW
+               return true
        case OpConst16:
-               return rewriteValueS390X_OpConst16(v)
+               v.Op = OpS390XMOVDconst
+               return true
        case OpConst32:
-               return rewriteValueS390X_OpConst32(v)
+               v.Op = OpS390XMOVDconst
+               return true
        case OpConst32F:
-               return rewriteValueS390X_OpConst32F(v)
+               v.Op = OpS390XFMOVSconst
+               return true
        case OpConst64:
-               return rewriteValueS390X_OpConst64(v)
+               v.Op = OpS390XMOVDconst
+               return true
        case OpConst64F:
-               return rewriteValueS390X_OpConst64F(v)
+               v.Op = OpS390XFMOVDconst
+               return true
        case OpConst8:
-               return rewriteValueS390X_OpConst8(v)
+               v.Op = OpS390XMOVDconst
+               return true
        case OpConstBool:
-               return rewriteValueS390X_OpConstBool(v)
+               v.Op = OpS390XMOVDconst
+               return true
        case OpConstNil:
                return rewriteValueS390X_OpConstNil(v)
        case OpCtz32:
                return rewriteValueS390X_OpCtz32(v)
        case OpCtz32NonZero:
-               return rewriteValueS390X_OpCtz32NonZero(v)
+               v.Op = OpCtz32
+               return true
        case OpCtz64:
                return rewriteValueS390X_OpCtz64(v)
        case OpCtz64NonZero:
-               return rewriteValueS390X_OpCtz64NonZero(v)
+               v.Op = OpCtz64
+               return true
        case OpCvt32Fto32:
-               return rewriteValueS390X_OpCvt32Fto32(v)
+               v.Op = OpS390XCFEBRA
+               return true
        case OpCvt32Fto64:
-               return rewriteValueS390X_OpCvt32Fto64(v)
+               v.Op = OpS390XCGEBRA
+               return true
        case OpCvt32Fto64F:
-               return rewriteValueS390X_OpCvt32Fto64F(v)
+               v.Op = OpS390XLDEBR
+               return true
        case OpCvt32to32F:
-               return rewriteValueS390X_OpCvt32to32F(v)
+               v.Op = OpS390XCEFBRA
+               return true
        case OpCvt32to64F:
-               return rewriteValueS390X_OpCvt32to64F(v)
+               v.Op = OpS390XCDFBRA
+               return true
        case OpCvt64Fto32:
-               return rewriteValueS390X_OpCvt64Fto32(v)
+               v.Op = OpS390XCFDBRA
+               return true
        case OpCvt64Fto32F:
-               return rewriteValueS390X_OpCvt64Fto32F(v)
+               v.Op = OpS390XLEDBR
+               return true
        case OpCvt64Fto64:
-               return rewriteValueS390X_OpCvt64Fto64(v)
+               v.Op = OpS390XCGDBRA
+               return true
        case OpCvt64to32F:
-               return rewriteValueS390X_OpCvt64to32F(v)
+               v.Op = OpS390XCEGBRA
+               return true
        case OpCvt64to64F:
-               return rewriteValueS390X_OpCvt64to64F(v)
+               v.Op = OpS390XCDGBRA
+               return true
        case OpDiv16:
                return rewriteValueS390X_OpDiv16(v)
        case OpDiv16u:
@@ -141,15 +190,18 @@ func rewriteValueS390X(v *Value) bool {
        case OpDiv32:
                return rewriteValueS390X_OpDiv32(v)
        case OpDiv32F:
-               return rewriteValueS390X_OpDiv32F(v)
+               v.Op = OpS390XFDIVS
+               return true
        case OpDiv32u:
                return rewriteValueS390X_OpDiv32u(v)
        case OpDiv64:
                return rewriteValueS390X_OpDiv64(v)
        case OpDiv64F:
-               return rewriteValueS390X_OpDiv64F(v)
+               v.Op = OpS390XFDIV
+               return true
        case OpDiv64u:
-               return rewriteValueS390X_OpDiv64u(v)
+               v.Op = OpS390XDIVDU
+               return true
        case OpDiv8:
                return rewriteValueS390X_OpDiv8(v)
        case OpDiv8u:
@@ -195,13 +247,17 @@ func rewriteValueS390X(v *Value) bool {
        case OpGeq8U:
                return rewriteValueS390X_OpGeq8U(v)
        case OpGetCallerPC:
-               return rewriteValueS390X_OpGetCallerPC(v)
+               v.Op = OpS390XLoweredGetCallerPC
+               return true
        case OpGetCallerSP:
-               return rewriteValueS390X_OpGetCallerSP(v)
+               v.Op = OpS390XLoweredGetCallerSP
+               return true
        case OpGetClosurePtr:
-               return rewriteValueS390X_OpGetClosurePtr(v)
+               v.Op = OpS390XLoweredGetClosurePtr
+               return true
        case OpGetG:
-               return rewriteValueS390X_OpGetG(v)
+               v.Op = OpS390XLoweredGetG
+               return true
        case OpGreater16:
                return rewriteValueS390X_OpGreater16(v)
        case OpGreater16U:
@@ -227,13 +283,16 @@ func rewriteValueS390X(v *Value) bool {
        case OpHmul32u:
                return rewriteValueS390X_OpHmul32u(v)
        case OpHmul64:
-               return rewriteValueS390X_OpHmul64(v)
+               v.Op = OpS390XMULHD
+               return true
        case OpHmul64u:
-               return rewriteValueS390X_OpHmul64u(v)
+               v.Op = OpS390XMULHDU
+               return true
        case OpITab:
                return rewriteValueS390X_OpITab(v)
        case OpInterCall:
-               return rewriteValueS390X_OpInterCall(v)
+               v.Op = OpS390XCALLinter
+               return true
        case OpIsInBounds:
                return rewriteValueS390X_OpIsInBounds(v)
        case OpIsNonNil:
@@ -327,7 +386,8 @@ func rewriteValueS390X(v *Value) bool {
        case OpMod64:
                return rewriteValueS390X_OpMod64(v)
        case OpMod64u:
-               return rewriteValueS390X_OpMod64u(v)
+               v.Op = OpS390XMODDU
+               return true
        case OpMod8:
                return rewriteValueS390X_OpMod8(v)
        case OpMod8u:
@@ -335,31 +395,44 @@ func rewriteValueS390X(v *Value) bool {
        case OpMove:
                return rewriteValueS390X_OpMove(v)
        case OpMul16:
-               return rewriteValueS390X_OpMul16(v)
+               v.Op = OpS390XMULLW
+               return true
        case OpMul32:
-               return rewriteValueS390X_OpMul32(v)
+               v.Op = OpS390XMULLW
+               return true
        case OpMul32F:
-               return rewriteValueS390X_OpMul32F(v)
+               v.Op = OpS390XFMULS
+               return true
        case OpMul64:
-               return rewriteValueS390X_OpMul64(v)
+               v.Op = OpS390XMULLD
+               return true
        case OpMul64F:
-               return rewriteValueS390X_OpMul64F(v)
+               v.Op = OpS390XFMUL
+               return true
        case OpMul64uhilo:
-               return rewriteValueS390X_OpMul64uhilo(v)
+               v.Op = OpS390XMLGR
+               return true
        case OpMul8:
-               return rewriteValueS390X_OpMul8(v)
+               v.Op = OpS390XMULLW
+               return true
        case OpNeg16:
-               return rewriteValueS390X_OpNeg16(v)
+               v.Op = OpS390XNEGW
+               return true
        case OpNeg32:
-               return rewriteValueS390X_OpNeg32(v)
+               v.Op = OpS390XNEGW
+               return true
        case OpNeg32F:
-               return rewriteValueS390X_OpNeg32F(v)
+               v.Op = OpS390XFNEGS
+               return true
        case OpNeg64:
-               return rewriteValueS390X_OpNeg64(v)
+               v.Op = OpS390XNEG
+               return true
        case OpNeg64F:
-               return rewriteValueS390X_OpNeg64F(v)
+               v.Op = OpS390XFNEG
+               return true
        case OpNeg8:
-               return rewriteValueS390X_OpNeg8(v)
+               v.Op = OpS390XNEGW
+               return true
        case OpNeq16:
                return rewriteValueS390X_OpNeq16(v)
        case OpNeq32:
@@ -377,21 +450,27 @@ func rewriteValueS390X(v *Value) bool {
        case OpNeqPtr:
                return rewriteValueS390X_OpNeqPtr(v)
        case OpNilCheck:
-               return rewriteValueS390X_OpNilCheck(v)
+               v.Op = OpS390XLoweredNilCheck
+               return true
        case OpNot:
                return rewriteValueS390X_OpNot(v)
        case OpOffPtr:
                return rewriteValueS390X_OpOffPtr(v)
        case OpOr16:
-               return rewriteValueS390X_OpOr16(v)
+               v.Op = OpS390XORW
+               return true
        case OpOr32:
-               return rewriteValueS390X_OpOr32(v)
+               v.Op = OpS390XORW
+               return true
        case OpOr64:
-               return rewriteValueS390X_OpOr64(v)
+               v.Op = OpS390XOR
+               return true
        case OpOr8:
-               return rewriteValueS390X_OpOr8(v)
+               v.Op = OpS390XORW
+               return true
        case OpOrB:
-               return rewriteValueS390X_OpOrB(v)
+               v.Op = OpS390XORW
+               return true
        case OpPanicBounds:
                return rewriteValueS390X_OpPanicBounds(v)
        case OpPopCount16:
@@ -405,17 +484,21 @@ func rewriteValueS390X(v *Value) bool {
        case OpRotateLeft16:
                return rewriteValueS390X_OpRotateLeft16(v)
        case OpRotateLeft32:
-               return rewriteValueS390X_OpRotateLeft32(v)
+               v.Op = OpS390XRLL
+               return true
        case OpRotateLeft64:
-               return rewriteValueS390X_OpRotateLeft64(v)
+               v.Op = OpS390XRLLG
+               return true
        case OpRotateLeft8:
                return rewriteValueS390X_OpRotateLeft8(v)
        case OpRound:
                return rewriteValueS390X_OpRound(v)
        case OpRound32F:
-               return rewriteValueS390X_OpRound32F(v)
+               v.Op = OpS390XLoweredRound32F
+               return true
        case OpRound64F:
-               return rewriteValueS390X_OpRound64F(v)
+               v.Op = OpS390XLoweredRound64F
+               return true
        case OpRoundToEven:
                return rewriteValueS390X_OpRoundToEven(v)
        case OpRsh16Ux16:
@@ -737,260 +820,111 @@ func rewriteValueS390X(v *Value) bool {
        case OpSelect1:
                return rewriteValueS390X_OpSelect1(v)
        case OpSignExt16to32:
-               return rewriteValueS390X_OpSignExt16to32(v)
+               v.Op = OpS390XMOVHreg
+               return true
        case OpSignExt16to64:
-               return rewriteValueS390X_OpSignExt16to64(v)
+               v.Op = OpS390XMOVHreg
+               return true
        case OpSignExt32to64:
-               return rewriteValueS390X_OpSignExt32to64(v)
+               v.Op = OpS390XMOVWreg
+               return true
        case OpSignExt8to16:
-               return rewriteValueS390X_OpSignExt8to16(v)
+               v.Op = OpS390XMOVBreg
+               return true
        case OpSignExt8to32:
-               return rewriteValueS390X_OpSignExt8to32(v)
+               v.Op = OpS390XMOVBreg
+               return true
        case OpSignExt8to64:
-               return rewriteValueS390X_OpSignExt8to64(v)
+               v.Op = OpS390XMOVBreg
+               return true
        case OpSlicemask:
                return rewriteValueS390X_OpSlicemask(v)
        case OpSqrt:
-               return rewriteValueS390X_OpSqrt(v)
+               v.Op = OpS390XFSQRT
+               return true
        case OpStaticCall:
-               return rewriteValueS390X_OpStaticCall(v)
+               v.Op = OpS390XCALLstatic
+               return true
        case OpStore:
                return rewriteValueS390X_OpStore(v)
        case OpSub16:
-               return rewriteValueS390X_OpSub16(v)
+               v.Op = OpS390XSUBW
+               return true
        case OpSub32:
-               return rewriteValueS390X_OpSub32(v)
+               v.Op = OpS390XSUBW
+               return true
        case OpSub32F:
-               return rewriteValueS390X_OpSub32F(v)
+               v.Op = OpS390XFSUBS
+               return true
        case OpSub64:
-               return rewriteValueS390X_OpSub64(v)
+               v.Op = OpS390XSUB
+               return true
        case OpSub64F:
-               return rewriteValueS390X_OpSub64F(v)
+               v.Op = OpS390XFSUB
+               return true
        case OpSub8:
-               return rewriteValueS390X_OpSub8(v)
+               v.Op = OpS390XSUBW
+               return true
        case OpSubPtr:
-               return rewriteValueS390X_OpSubPtr(v)
+               v.Op = OpS390XSUB
+               return true
        case OpTrunc:
                return rewriteValueS390X_OpTrunc(v)
        case OpTrunc16to8:
-               return rewriteValueS390X_OpTrunc16to8(v)
+               v.Op = OpCopy
+               return true
        case OpTrunc32to16:
-               return rewriteValueS390X_OpTrunc32to16(v)
+               v.Op = OpCopy
+               return true
        case OpTrunc32to8:
-               return rewriteValueS390X_OpTrunc32to8(v)
+               v.Op = OpCopy
+               return true
        case OpTrunc64to16:
-               return rewriteValueS390X_OpTrunc64to16(v)
+               v.Op = OpCopy
+               return true
        case OpTrunc64to32:
-               return rewriteValueS390X_OpTrunc64to32(v)
+               v.Op = OpCopy
+               return true
        case OpTrunc64to8:
-               return rewriteValueS390X_OpTrunc64to8(v)
+               v.Op = OpCopy
+               return true
        case OpWB:
-               return rewriteValueS390X_OpWB(v)
+               v.Op = OpS390XLoweredWB
+               return true
        case OpXor16:
-               return rewriteValueS390X_OpXor16(v)
+               v.Op = OpS390XXORW
+               return true
        case OpXor32:
-               return rewriteValueS390X_OpXor32(v)
+               v.Op = OpS390XXORW
+               return true
        case OpXor64:
-               return rewriteValueS390X_OpXor64(v)
+               v.Op = OpS390XXOR
+               return true
        case OpXor8:
-               return rewriteValueS390X_OpXor8(v)
+               v.Op = OpS390XXORW
+               return true
        case OpZero:
                return rewriteValueS390X_OpZero(v)
        case OpZeroExt16to32:
-               return rewriteValueS390X_OpZeroExt16to32(v)
-       case OpZeroExt16to64:
-               return rewriteValueS390X_OpZeroExt16to64(v)
-       case OpZeroExt32to64:
-               return rewriteValueS390X_OpZeroExt32to64(v)
-       case OpZeroExt8to16:
-               return rewriteValueS390X_OpZeroExt8to16(v)
-       case OpZeroExt8to32:
-               return rewriteValueS390X_OpZeroExt8to32(v)
-       case OpZeroExt8to64:
-               return rewriteValueS390X_OpZeroExt8to64(v)
-       }
-       return false
-}
-func rewriteValueS390X_OpAdd16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add16 x y)
-       // result: (ADDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XADDW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAdd32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add32 x y)
-       // result: (ADDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XADDW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAdd32F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add32F x y)
-       // result: (FADDS x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFADDS)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAdd64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add64 x y)
-       // result: (ADD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XADD)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAdd64F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add64F x y)
-       // result: (FADD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFADD)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAdd8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Add8 x y)
-       // result: (ADDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XADDW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAddPtr(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AddPtr x y)
-       // result: (ADD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XADD)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpAddr(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Addr {sym} base)
-       // result: (MOVDaddr {sym} base)
-       for {
-               sym := v.Aux
-               base := v_0
-               v.reset(OpS390XMOVDaddr)
-               v.Aux = sym
-               v.AddArg(base)
+               v.Op = OpS390XMOVHZreg
                return true
-       }
-}
-func rewriteValueS390X_OpAnd16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (And16 x y)
-       // result: (ANDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XANDW)
-               v.AddArg(x)
-               v.AddArg(y)
+       case OpZeroExt16to64:
+               v.Op = OpS390XMOVHZreg
                return true
-       }
-}
-func rewriteValueS390X_OpAnd32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (And32 x y)
-       // result: (ANDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XANDW)
-               v.AddArg(x)
-               v.AddArg(y)
+       case OpZeroExt32to64:
+               v.Op = OpS390XMOVWZreg
                return true
-       }
-}
-func rewriteValueS390X_OpAnd64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (And64 x y)
-       // result: (AND x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XAND)
-               v.AddArg(x)
-               v.AddArg(y)
+       case OpZeroExt8to16:
+               v.Op = OpS390XMOVBZreg
                return true
-       }
-}
-func rewriteValueS390X_OpAnd8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (And8 x y)
-       // result: (ANDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XANDW)
-               v.AddArg(x)
-               v.AddArg(y)
+       case OpZeroExt8to32:
+               v.Op = OpS390XMOVBZreg
                return true
-       }
-}
-func rewriteValueS390X_OpAndB(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AndB x y)
-       // result: (ANDW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XANDW)
-               v.AddArg(x)
-               v.AddArg(y)
+       case OpZeroExt8to64:
+               v.Op = OpS390XMOVBZreg
                return true
        }
+       return false
 }
 func rewriteValueS390X_OpAtomicAdd32(v *Value) bool {
        v_2 := v.Args[2]
@@ -1067,151 +1001,7 @@ func rewriteValueS390X_OpAtomicAnd8(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpAtomicCompareAndSwap32(v *Value) bool {
-       v_3 := v.Args[3]
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicCompareAndSwap32 ptr old new_ mem)
-       // result: (LoweredAtomicCas32 ptr old new_ mem)
-       for {
-               ptr := v_0
-               old := v_1
-               new_ := v_2
-               mem := v_3
-               v.reset(OpS390XLoweredAtomicCas32)
-               v.AddArg(ptr)
-               v.AddArg(old)
-               v.AddArg(new_)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicCompareAndSwap64(v *Value) bool {
-       v_3 := v.Args[3]
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicCompareAndSwap64 ptr old new_ mem)
-       // result: (LoweredAtomicCas64 ptr old new_ mem)
-       for {
-               ptr := v_0
-               old := v_1
-               new_ := v_2
-               mem := v_3
-               v.reset(OpS390XLoweredAtomicCas64)
-               v.AddArg(ptr)
-               v.AddArg(old)
-               v.AddArg(new_)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicExchange32(v *Value) bool {
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicExchange32 ptr val mem)
-       // result: (LoweredAtomicExchange32 ptr val mem)
-       for {
-               ptr := v_0
-               val := v_1
-               mem := v_2
-               v.reset(OpS390XLoweredAtomicExchange32)
-               v.AddArg(ptr)
-               v.AddArg(val)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicExchange64(v *Value) bool {
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicExchange64 ptr val mem)
-       // result: (LoweredAtomicExchange64 ptr val mem)
-       for {
-               ptr := v_0
-               val := v_1
-               mem := v_2
-               v.reset(OpS390XLoweredAtomicExchange64)
-               v.AddArg(ptr)
-               v.AddArg(val)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicLoad32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicLoad32 ptr mem)
-       // result: (MOVWZatomicload ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XMOVWZatomicload)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicLoad64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicLoad64 ptr mem)
-       // result: (MOVDatomicload ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XMOVDatomicload)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicLoad8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicLoad8 ptr mem)
-       // result: (MOVBZatomicload ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XMOVBZatomicload)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicLoadAcq32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicLoadAcq32 ptr mem)
-       // result: (MOVWZatomicload ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XMOVWZatomicload)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicLoadPtr(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicLoadPtr ptr mem)
-       // result: (MOVDatomicload ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XMOVDatomicload)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpAtomicOr8(v *Value) bool {
+func rewriteValueS390X_OpAtomicOr8(v *Value) bool {
        v_2 := v.Args[2]
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -1321,23 +1111,6 @@ func rewriteValueS390X_OpAtomicStorePtrNoWB(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpAtomicStoreRel32(v *Value) bool {
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (AtomicStoreRel32 ptr val mem)
-       // result: (MOVWatomicstore ptr val mem)
-       for {
-               ptr := v_0
-               val := v_1
-               mem := v_2
-               v.reset(OpS390XMOVWatomicstore)
-               v.AddArg(ptr)
-               v.AddArg(val)
-               v.AddArg(mem)
-               return true
-       }
-}
 func rewriteValueS390X_OpAvg64u(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -1378,28 +1151,6 @@ func rewriteValueS390X_OpBitLen64(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpBswap32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Bswap32 x)
-       // result: (MOVWBR x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVWBR)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpBswap64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Bswap64 x)
-       // result: (MOVDBR x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVDBR)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueS390X_OpCeil(v *Value) bool {
        v_0 := v.Args[0]
        // match: (Ceil x)
@@ -1412,139 +1163,6 @@ func rewriteValueS390X_OpCeil(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpClosureCall(v *Value) bool {
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (ClosureCall [argwid] entry closure mem)
-       // result: (CALLclosure [argwid] entry closure mem)
-       for {
-               argwid := v.AuxInt
-               entry := v_0
-               closure := v_1
-               mem := v_2
-               v.reset(OpS390XCALLclosure)
-               v.AuxInt = argwid
-               v.AddArg(entry)
-               v.AddArg(closure)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpCom16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Com16 x)
-       // result: (NOTW x)
-       for {
-               x := v_0
-               v.reset(OpS390XNOTW)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCom32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Com32 x)
-       // result: (NOTW x)
-       for {
-               x := v_0
-               v.reset(OpS390XNOTW)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCom64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Com64 x)
-       // result: (NOT x)
-       for {
-               x := v_0
-               v.reset(OpS390XNOT)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCom8(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Com8 x)
-       // result: (NOTW x)
-       for {
-               x := v_0
-               v.reset(OpS390XNOTW)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpConst16(v *Value) bool {
-       // match: (Const16 [val])
-       // result: (MOVDconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XMOVDconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConst32(v *Value) bool {
-       // match: (Const32 [val])
-       // result: (MOVDconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XMOVDconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConst32F(v *Value) bool {
-       // match: (Const32F [val])
-       // result: (FMOVSconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XFMOVSconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConst64(v *Value) bool {
-       // match: (Const64 [val])
-       // result: (MOVDconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XMOVDconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConst64F(v *Value) bool {
-       // match: (Const64F [val])
-       // result: (FMOVDconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XFMOVDconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConst8(v *Value) bool {
-       // match: (Const8 [val])
-       // result: (MOVDconst [val])
-       for {
-               val := v.AuxInt
-               v.reset(OpS390XMOVDconst)
-               v.AuxInt = val
-               return true
-       }
-}
-func rewriteValueS390X_OpConstBool(v *Value) bool {
-       // match: (ConstBool [b])
-       // result: (MOVDconst [b])
-       for {
-               b := v.AuxInt
-               v.reset(OpS390XMOVDconst)
-               v.AuxInt = b
-               return true
-       }
-}
 func rewriteValueS390X_OpConstNil(v *Value) bool {
        // match: (ConstNil)
        // result: (MOVDconst [0])
@@ -1583,17 +1201,6 @@ func rewriteValueS390X_OpCtz32(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpCtz32NonZero(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Ctz32NonZero x)
-       // result: (Ctz32 x)
-       for {
-               x := v_0
-               v.reset(OpCtz32)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueS390X_OpCtz64(v *Value) bool {
        v_0 := v.Args[0]
        b := v.Block
@@ -1621,127 +1228,6 @@ func rewriteValueS390X_OpCtz64(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpCtz64NonZero(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Ctz64NonZero x)
-       // result: (Ctz64 x)
-       for {
-               x := v_0
-               v.reset(OpCtz64)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt32Fto32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt32Fto32 x)
-       // result: (CFEBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCFEBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt32Fto64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt32Fto64 x)
-       // result: (CGEBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCGEBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt32Fto64F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt32Fto64F x)
-       // result: (LDEBR x)
-       for {
-               x := v_0
-               v.reset(OpS390XLDEBR)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt32to32F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt32to32F x)
-       // result: (CEFBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCEFBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt32to64F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt32to64F x)
-       // result: (CDFBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCDFBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt64Fto32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt64Fto32 x)
-       // result: (CFDBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCFDBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt64Fto32F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt64Fto32F x)
-       // result: (LEDBR x)
-       for {
-               x := v_0
-               v.reset(OpS390XLEDBR)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt64Fto64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt64Fto64 x)
-       // result: (CGDBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCGDBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt64to32F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt64to32F x)
-       // result: (CEGBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCEGBRA)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpCvt64to64F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Cvt64to64F x)
-       // result: (CDGBRA x)
-       for {
-               x := v_0
-               v.reset(OpS390XCDGBRA)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueS390X_OpDiv16(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -1792,83 +1278,41 @@ func rewriteValueS390X_OpDiv32(v *Value) bool {
        for {
                x := v_0
                y := v_1
-               v.reset(OpS390XDIVW)
-               v0 := b.NewValue0(v.Pos, OpS390XMOVWreg, typ.Int64)
-               v0.AddArg(x)
-               v.AddArg(v0)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpDiv32F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Div32F x y)
-       // result: (FDIVS x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFDIVS)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpDiv32u(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       b := v.Block
-       typ := &b.Func.Config.Types
-       // match: (Div32u x y)
-       // result: (DIVWU (MOVWZreg x) y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XDIVWU)
-               v0 := b.NewValue0(v.Pos, OpS390XMOVWZreg, typ.UInt64)
-               v0.AddArg(x)
-               v.AddArg(v0)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpDiv64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Div64 x y)
-       // result: (DIVD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XDIVD)
-               v.AddArg(x)
+               v.reset(OpS390XDIVW)
+               v0 := b.NewValue0(v.Pos, OpS390XMOVWreg, typ.Int64)
+               v0.AddArg(x)
+               v.AddArg(v0)
                v.AddArg(y)
                return true
        }
 }
-func rewriteValueS390X_OpDiv64F(v *Value) bool {
+func rewriteValueS390X_OpDiv32u(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
-       // match: (Div64F x y)
-       // result: (FDIV x y)
+       b := v.Block
+       typ := &b.Func.Config.Types
+       // match: (Div32u x y)
+       // result: (DIVWU (MOVWZreg x) y)
        for {
                x := v_0
                y := v_1
-               v.reset(OpS390XFDIV)
-               v.AddArg(x)
+               v.reset(OpS390XDIVWU)
+               v0 := b.NewValue0(v.Pos, OpS390XMOVWZreg, typ.UInt64)
+               v0.AddArg(x)
+               v.AddArg(v0)
                v.AddArg(y)
                return true
        }
 }
-func rewriteValueS390X_OpDiv64u(v *Value) bool {
+func rewriteValueS390X_OpDiv64(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
-       // match: (Div64u x y)
-       // result: (DIVDU x y)
+       // match: (Div64 [a] x y)
+       // result: (DIVD x y)
        for {
                x := v_0
                y := v_1
-               v.reset(OpS390XDIVDU)
+               v.reset(OpS390XDIVD)
                v.AddArg(x)
                v.AddArg(y)
                return true
@@ -2421,41 +1865,6 @@ func rewriteValueS390X_OpGeq8U(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpGetCallerPC(v *Value) bool {
-       // match: (GetCallerPC)
-       // result: (LoweredGetCallerPC)
-       for {
-               v.reset(OpS390XLoweredGetCallerPC)
-               return true
-       }
-}
-func rewriteValueS390X_OpGetCallerSP(v *Value) bool {
-       // match: (GetCallerSP)
-       // result: (LoweredGetCallerSP)
-       for {
-               v.reset(OpS390XLoweredGetCallerSP)
-               return true
-       }
-}
-func rewriteValueS390X_OpGetClosurePtr(v *Value) bool {
-       // match: (GetClosurePtr)
-       // result: (LoweredGetClosurePtr)
-       for {
-               v.reset(OpS390XLoweredGetClosurePtr)
-               return true
-       }
-}
-func rewriteValueS390X_OpGetG(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (GetG mem)
-       // result: (LoweredGetG mem)
-       for {
-               mem := v_0
-               v.reset(OpS390XLoweredGetG)
-               v.AddArg(mem)
-               return true
-       }
-}
 func rewriteValueS390X_OpGreater16(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -2768,34 +2177,6 @@ func rewriteValueS390X_OpHmul32u(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpHmul64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Hmul64 x y)
-       // result: (MULHD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULHD)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpHmul64u(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Hmul64u x y)
-       // result: (MULHDU x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULHDU)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpITab(v *Value) bool {
        v_0 := v.Args[0]
        // match: (ITab (Load ptr mem))
@@ -2813,22 +2194,6 @@ func rewriteValueS390X_OpITab(v *Value) bool {
        }
        return false
 }
-func rewriteValueS390X_OpInterCall(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (InterCall [argwid] entry mem)
-       // result: (CALLinter [argwid] entry mem)
-       for {
-               argwid := v.AuxInt
-               entry := v_0
-               mem := v_1
-               v.reset(OpS390XCALLinter)
-               v.AuxInt = argwid
-               v.AddArg(entry)
-               v.AddArg(mem)
-               return true
-       }
-}
 func rewriteValueS390X_OpIsInBounds(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -4354,7 +3719,7 @@ func rewriteValueS390X_OpMod32u(v *Value) bool {
 func rewriteValueS390X_OpMod64(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
-       // match: (Mod64 x y)
+       // match: (Mod64 [a] x y)
        // result: (MODD x y)
        for {
                x := v_0
@@ -4365,20 +3730,6 @@ func rewriteValueS390X_OpMod64(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpMod64u(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mod64u x y)
-       // result: (MODDU x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMODDU)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpMod8(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -4738,248 +4089,84 @@ func rewriteValueS390X_OpMove(v *Value) bool {
                dst := v_0
                src := v_1
                mem := v_2
-               if !(s > 512 && s <= 768) {
-                       break
-               }
-               v.reset(OpS390XMVC)
-               v.AuxInt = makeValAndOff(s-512, 512)
-               v.AddArg(dst)
-               v.AddArg(src)
-               v0 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
-               v0.AuxInt = makeValAndOff(256, 256)
-               v0.AddArg(dst)
-               v0.AddArg(src)
-               v1 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
-               v1.AuxInt = makeValAndOff(256, 0)
-               v1.AddArg(dst)
-               v1.AddArg(src)
-               v1.AddArg(mem)
-               v0.AddArg(v1)
-               v.AddArg(v0)
-               return true
-       }
-       // match: (Move [s] dst src mem)
-       // cond: s > 768 && s <= 1024
-       // result: (MVC [makeValAndOff(s-768, 768)] dst src (MVC [makeValAndOff(256, 512)] dst src (MVC [makeValAndOff(256, 256)] dst src (MVC [makeValAndOff(256, 0)] dst src mem))))
-       for {
-               s := v.AuxInt
-               dst := v_0
-               src := v_1
-               mem := v_2
-               if !(s > 768 && s <= 1024) {
-                       break
-               }
-               v.reset(OpS390XMVC)
-               v.AuxInt = makeValAndOff(s-768, 768)
-               v.AddArg(dst)
-               v.AddArg(src)
-               v0 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
-               v0.AuxInt = makeValAndOff(256, 512)
-               v0.AddArg(dst)
-               v0.AddArg(src)
-               v1 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
-               v1.AuxInt = makeValAndOff(256, 256)
-               v1.AddArg(dst)
-               v1.AddArg(src)
-               v2 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
-               v2.AuxInt = makeValAndOff(256, 0)
-               v2.AddArg(dst)
-               v2.AddArg(src)
-               v2.AddArg(mem)
-               v1.AddArg(v2)
-               v0.AddArg(v1)
-               v.AddArg(v0)
-               return true
-       }
-       // match: (Move [s] dst src mem)
-       // cond: s > 1024
-       // result: (LoweredMove [s%256] dst src (ADD <src.Type> src (MOVDconst [(s/256)*256])) mem)
-       for {
-               s := v.AuxInt
-               dst := v_0
-               src := v_1
-               mem := v_2
-               if !(s > 1024) {
-                       break
-               }
-               v.reset(OpS390XLoweredMove)
-               v.AuxInt = s % 256
-               v.AddArg(dst)
-               v.AddArg(src)
-               v0 := b.NewValue0(v.Pos, OpS390XADD, src.Type)
-               v0.AddArg(src)
-               v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
-               v1.AuxInt = (s / 256) * 256
-               v0.AddArg(v1)
-               v.AddArg(v0)
-               v.AddArg(mem)
-               return true
-       }
-       return false
-}
-func rewriteValueS390X_OpMul16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul16 x y)
-       // result: (MULLW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULLW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul32 x y)
-       // result: (MULLW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULLW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul32F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul32F x y)
-       // result: (FMULS x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFMULS)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul64 x y)
-       // result: (MULLD x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULLD)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul64F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul64F x y)
-       // result: (FMUL x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFMUL)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul64uhilo(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul64uhilo x y)
-       // result: (MLGR x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMLGR)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpMul8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Mul8 x y)
-       // result: (MULLW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XMULLW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpNeg16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg16 x)
-       // result: (NEGW x)
-       for {
-               x := v_0
-               v.reset(OpS390XNEGW)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpNeg32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg32 x)
-       // result: (NEGW x)
-       for {
-               x := v_0
-               v.reset(OpS390XNEGW)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpNeg32F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg32F x)
-       // result: (FNEGS x)
-       for {
-               x := v_0
-               v.reset(OpS390XFNEGS)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpNeg64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg64 x)
-       // result: (NEG x)
-       for {
-               x := v_0
-               v.reset(OpS390XNEG)
-               v.AddArg(x)
+               if !(s > 512 && s <= 768) {
+                       break
+               }
+               v.reset(OpS390XMVC)
+               v.AuxInt = makeValAndOff(s-512, 512)
+               v.AddArg(dst)
+               v.AddArg(src)
+               v0 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
+               v0.AuxInt = makeValAndOff(256, 256)
+               v0.AddArg(dst)
+               v0.AddArg(src)
+               v1 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
+               v1.AuxInt = makeValAndOff(256, 0)
+               v1.AddArg(dst)
+               v1.AddArg(src)
+               v1.AddArg(mem)
+               v0.AddArg(v1)
+               v.AddArg(v0)
                return true
        }
-}
-func rewriteValueS390X_OpNeg64F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg64F x)
-       // result: (FNEG x)
+       // match: (Move [s] dst src mem)
+       // cond: s > 768 && s <= 1024
+       // result: (MVC [makeValAndOff(s-768, 768)] dst src (MVC [makeValAndOff(256, 512)] dst src (MVC [makeValAndOff(256, 256)] dst src (MVC [makeValAndOff(256, 0)] dst src mem))))
        for {
-               x := v_0
-               v.reset(OpS390XFNEG)
-               v.AddArg(x)
+               s := v.AuxInt
+               dst := v_0
+               src := v_1
+               mem := v_2
+               if !(s > 768 && s <= 1024) {
+                       break
+               }
+               v.reset(OpS390XMVC)
+               v.AuxInt = makeValAndOff(s-768, 768)
+               v.AddArg(dst)
+               v.AddArg(src)
+               v0 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
+               v0.AuxInt = makeValAndOff(256, 512)
+               v0.AddArg(dst)
+               v0.AddArg(src)
+               v1 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
+               v1.AuxInt = makeValAndOff(256, 256)
+               v1.AddArg(dst)
+               v1.AddArg(src)
+               v2 := b.NewValue0(v.Pos, OpS390XMVC, types.TypeMem)
+               v2.AuxInt = makeValAndOff(256, 0)
+               v2.AddArg(dst)
+               v2.AddArg(src)
+               v2.AddArg(mem)
+               v1.AddArg(v2)
+               v0.AddArg(v1)
+               v.AddArg(v0)
                return true
        }
-}
-func rewriteValueS390X_OpNeg8(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Neg8 x)
-       // result: (NEGW x)
+       // match: (Move [s] dst src mem)
+       // cond: s > 1024
+       // result: (LoweredMove [s%256] dst src (ADD <src.Type> src (MOVDconst [(s/256)*256])) mem)
        for {
-               x := v_0
-               v.reset(OpS390XNEGW)
-               v.AddArg(x)
+               s := v.AuxInt
+               dst := v_0
+               src := v_1
+               mem := v_2
+               if !(s > 1024) {
+                       break
+               }
+               v.reset(OpS390XLoweredMove)
+               v.AuxInt = s % 256
+               v.AddArg(dst)
+               v.AddArg(src)
+               v0 := b.NewValue0(v.Pos, OpS390XADD, src.Type)
+               v0.AddArg(src)
+               v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
+               v1.AuxInt = (s / 256) * 256
+               v0.AddArg(v1)
+               v.AddArg(v0)
+               v.AddArg(mem)
                return true
        }
+       return false
 }
 func rewriteValueS390X_OpNeq16(v *Value) bool {
        v_1 := v.Args[1]
@@ -5193,20 +4380,6 @@ func rewriteValueS390X_OpNeqPtr(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpNilCheck(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (NilCheck ptr mem)
-       // result: (LoweredNilCheck ptr mem)
-       for {
-               ptr := v_0
-               mem := v_1
-               v.reset(OpS390XLoweredNilCheck)
-               v.AddArg(ptr)
-               v.AddArg(mem)
-               return true
-       }
-}
 func rewriteValueS390X_OpNot(v *Value) bool {
        v_0 := v.Args[0]
        // match: (Not x)
@@ -5263,76 +4436,6 @@ func rewriteValueS390X_OpOffPtr(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpOr16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Or16 x y)
-       // result: (ORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpOr32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Or32 x y)
-       // result: (ORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpOr64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Or64 x y)
-       // result: (OR x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XOR)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpOr8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Or8 x y)
-       // result: (ORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpOrB(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (OrB x y)
-       // result: (ORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpPanicBounds(v *Value) bool {
        v_2 := v.Args[2]
        v_1 := v.Args[1]
@@ -5490,34 +4593,6 @@ func rewriteValueS390X_OpRotateLeft16(v *Value) bool {
        }
        return false
 }
-func rewriteValueS390X_OpRotateLeft32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (RotateLeft32 x y)
-       // result: (RLL x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XRLL)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpRotateLeft64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (RotateLeft64 x y)
-       // result: (RLLG x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XRLLG)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpRotateLeft8(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -5561,28 +4636,6 @@ func rewriteValueS390X_OpRound(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpRound32F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Round32F x)
-       // result: (LoweredRound32F x)
-       for {
-               x := v_0
-               v.reset(OpS390XLoweredRound32F)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpRound64F(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Round64F x)
-       // result: (LoweredRound64F x)
-       for {
-               x := v_0
-               v.reset(OpS390XLoweredRound64F)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueS390X_OpRoundToEven(v *Value) bool {
        v_0 := v.Args[0]
        // match: (RoundToEven x)
@@ -16596,13 +15649,9 @@ func rewriteValueS390X_OpS390XNOT(v *Value) bool {
        b := v.Block
        typ := &b.Func.Config.Types
        // match: (NOT x)
-       // cond: true
        // result: (XOR (MOVDconst [-1]) x)
        for {
                x := v_0
-               if !(true) {
-                       break
-               }
                v.reset(OpS390XXOR)
                v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
                v0.AuxInt = -1
@@ -16610,24 +15659,18 @@ func rewriteValueS390X_OpS390XNOT(v *Value) bool {
                v.AddArg(x)
                return true
        }
-       return false
 }
 func rewriteValueS390X_OpS390XNOTW(v *Value) bool {
        v_0 := v.Args[0]
        // match: (NOTW x)
-       // cond: true
        // result: (XORWconst [-1] x)
        for {
                x := v_0
-               if !(true) {
-                       break
-               }
                v.reset(OpS390XXORWconst)
                v.AuxInt = -1
                v.AddArg(x)
                return true
        }
-       return false
 }
 func rewriteValueS390X_OpS390XOR(v *Value) bool {
        v_1 := v.Args[1]
@@ -21385,111 +20428,19 @@ func rewriteValueS390X_OpSelect1(v *Value) bool {
        }
        return false
 }
-func rewriteValueS390X_OpSignExt16to32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt16to32 x)
-       // result: (MOVHreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVHreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpSignExt16to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt16to64 x)
-       // result: (MOVHreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVHreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpSignExt32to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt32to64 x)
-       // result: (MOVWreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVWreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpSignExt8to16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt8to16 x)
-       // result: (MOVBreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpSignExt8to32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt8to32 x)
-       // result: (MOVBreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpSignExt8to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (SignExt8to64 x)
-       // result: (MOVBreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBreg)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteValueS390X_OpSlicemask(v *Value) bool {
        v_0 := v.Args[0]
        b := v.Block
-       // match: (Slicemask <t> x)
-       // result: (SRADconst (NEG <t> x) [63])
-       for {
-               t := v.Type
-               x := v_0
-               v.reset(OpS390XSRADconst)
-               v.AuxInt = 63
-               v0 := b.NewValue0(v.Pos, OpS390XNEG, t)
-               v0.AddArg(x)
-               v.AddArg(v0)
-               return true
-       }
-}
-func rewriteValueS390X_OpSqrt(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Sqrt x)
-       // result: (FSQRT x)
-       for {
-               x := v_0
-               v.reset(OpS390XFSQRT)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpStaticCall(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (StaticCall [argwid] {target} mem)
-       // result: (CALLstatic [argwid] {target} mem)
+       // match: (Slicemask <t> x)
+       // result: (SRADconst (NEG <t> x) [63])
        for {
-               argwid := v.AuxInt
-               target := v.Aux
-               mem := v_0
-               v.reset(OpS390XCALLstatic)
-               v.AuxInt = argwid
-               v.Aux = target
-               v.AddArg(mem)
+               t := v.Type
+               x := v_0
+               v.reset(OpS390XSRADconst)
+               v.AuxInt = 63
+               v0 := b.NewValue0(v.Pos, OpS390XNEG, t)
+               v0.AddArg(x)
+               v.AddArg(v0)
                return true
        }
 }
@@ -21601,104 +20552,6 @@ func rewriteValueS390X_OpStore(v *Value) bool {
        }
        return false
 }
-func rewriteValueS390X_OpSub16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub16 x y)
-       // result: (SUBW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XSUBW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSub32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub32 x y)
-       // result: (SUBW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XSUBW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSub32F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub32F x y)
-       // result: (FSUBS x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFSUBS)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSub64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub64 x y)
-       // result: (SUB x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XSUB)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSub64F(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub64F x y)
-       // result: (FSUB x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XFSUB)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSub8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Sub8 x y)
-       // result: (SUBW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XSUBW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpSubPtr(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (SubPtr x y)
-       // result: (SUB x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XSUB)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpTrunc(v *Value) bool {
        v_0 := v.Args[0]
        // match: (Trunc x)
@@ -21711,153 +20564,6 @@ func rewriteValueS390X_OpTrunc(v *Value) bool {
                return true
        }
 }
-func rewriteValueS390X_OpTrunc16to8(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc16to8 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpTrunc32to16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc32to16 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpTrunc32to8(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc32to8 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpTrunc64to16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc64to16 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpTrunc64to32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc64to32 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpTrunc64to8(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (Trunc64to8 x)
-       // result: x
-       for {
-               x := v_0
-               v.reset(OpCopy)
-               v.Type = x.Type
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpWB(v *Value) bool {
-       v_2 := v.Args[2]
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (WB {fn} destptr srcptr mem)
-       // result: (LoweredWB {fn} destptr srcptr mem)
-       for {
-               fn := v.Aux
-               destptr := v_0
-               srcptr := v_1
-               mem := v_2
-               v.reset(OpS390XLoweredWB)
-               v.Aux = fn
-               v.AddArg(destptr)
-               v.AddArg(srcptr)
-               v.AddArg(mem)
-               return true
-       }
-}
-func rewriteValueS390X_OpXor16(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Xor16 x y)
-       // result: (XORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XXORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpXor32(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Xor32 x y)
-       // result: (XORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XXORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpXor64(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Xor64 x y)
-       // result: (XOR x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XXOR)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
-func rewriteValueS390X_OpXor8(v *Value) bool {
-       v_1 := v.Args[1]
-       v_0 := v.Args[0]
-       // match: (Xor8 x y)
-       // result: (XORW x y)
-       for {
-               x := v_0
-               y := v_1
-               v.reset(OpS390XXORW)
-               v.AddArg(x)
-               v.AddArg(y)
-               return true
-       }
-}
 func rewriteValueS390X_OpZero(v *Value) bool {
        v_1 := v.Args[1]
        v_0 := v.Args[0]
@@ -22040,72 +20746,6 @@ func rewriteValueS390X_OpZero(v *Value) bool {
        }
        return false
 }
-func rewriteValueS390X_OpZeroExt16to32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt16to32 x)
-       // result: (MOVHZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVHZreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpZeroExt16to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt16to64 x)
-       // result: (MOVHZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVHZreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpZeroExt32to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt32to64 x)
-       // result: (MOVWZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVWZreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpZeroExt8to16(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt8to16 x)
-       // result: (MOVBZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBZreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpZeroExt8to32(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt8to32 x)
-       // result: (MOVBZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBZreg)
-               v.AddArg(x)
-               return true
-       }
-}
-func rewriteValueS390X_OpZeroExt8to64(v *Value) bool {
-       v_0 := v.Args[0]
-       // match: (ZeroExt8to64 x)
-       // result: (MOVBZreg x)
-       for {
-               x := v_0
-               v.reset(OpS390XMOVBZreg)
-               v.AddArg(x)
-               return true
-       }
-}
 func rewriteBlockS390X(b *Block) bool {
        typ := &b.Func.Config.Types
        switch b.Kind {