opAndType{OLT, TFLOAT64}: ssa.OpLess64F,
opAndType{OLT, TFLOAT32}: ssa.OpLess32F,
- opAndType{OGT, TINT8}: ssa.OpGreater8,
- opAndType{OGT, TUINT8}: ssa.OpGreater8U,
- opAndType{OGT, TINT16}: ssa.OpGreater16,
- opAndType{OGT, TUINT16}: ssa.OpGreater16U,
- opAndType{OGT, TINT32}: ssa.OpGreater32,
- opAndType{OGT, TUINT32}: ssa.OpGreater32U,
- opAndType{OGT, TINT64}: ssa.OpGreater64,
- opAndType{OGT, TUINT64}: ssa.OpGreater64U,
opAndType{OGT, TFLOAT64}: ssa.OpGreater64F,
opAndType{OGT, TFLOAT32}: ssa.OpGreater32F,
opAndType{OLE, TFLOAT64}: ssa.OpLeq64F,
opAndType{OLE, TFLOAT32}: ssa.OpLeq32F,
- opAndType{OGE, TINT8}: ssa.OpGeq8,
- opAndType{OGE, TUINT8}: ssa.OpGeq8U,
- opAndType{OGE, TINT16}: ssa.OpGeq16,
- opAndType{OGE, TUINT16}: ssa.OpGeq16U,
- opAndType{OGE, TINT32}: ssa.OpGeq32,
- opAndType{OGE, TUINT32}: ssa.OpGeq32U,
- opAndType{OGE, TINT64}: ssa.OpGeq64,
- opAndType{OGE, TUINT64}: ssa.OpGeq64U,
opAndType{OGE, TFLOAT64}: ssa.OpGeq64F,
opAndType{OGE, TFLOAT32}: ssa.OpGeq32F,
}
if n.Left.Type.IsFloat() {
return s.newValueOrSfCall2(s.ssaOp(n.Op, n.Left.Type), types.Types[TBOOL], a, b)
}
- return s.newValue2(s.ssaOp(n.Op, n.Left.Type), types.Types[TBOOL], a, b)
+
+ // Integer: convert OGE and OGT into OLE and OLT.
+ op := n.Op
+ switch op {
+ case OGE:
+ op, a, b = OLE, b, a
+ case OGT:
+ op, a, b = OLT, b, a
+ }
+ return s.newValue2(s.ssaOp(op, n.Left.Type), types.Types[TBOOL], a, b)
case OMUL:
a := s.expr(n.Left)
b := s.expr(n.Right)
b := s.expr(n.Right)
bt := b.Type
if bt.IsSigned() {
- cmp := s.newValue2(s.ssaOp(OGE, bt), types.Types[TBOOL], b, s.zeroVal(bt))
+ cmp := s.newValue2(s.ssaOp(OLE, bt), types.Types[TBOOL], s.zeroVal(bt), b)
s.check(cmp, panicshift)
bt = bt.ToUnsigned()
}
c := s.newValue1(ssa.OpSliceCap, types.Types[TINT], slice)
nl := s.newValue2(s.ssaOp(OADD, types.Types[TINT]), types.Types[TINT], l, s.constInt(types.Types[TINT], nargs))
- cmp := s.newValue2(s.ssaOp(OGT, types.Types[TUINT]), types.Types[TBOOL], nl, c)
+ cmp := s.newValue2(s.ssaOp(OLT, types.Types[TUINT]), types.Types[TBOOL], c, nl)
s.vars[&ptrVar] = p
if !inplace {
}
type u642fcvtTab struct {
- geq, cvt2F, and, rsh, or, add ssa.Op
+ leq, cvt2F, and, rsh, or, add ssa.Op
one func(*state, *types.Type, int64) *ssa.Value
}
var u64_f64 = u642fcvtTab{
- geq: ssa.OpGeq64,
+ leq: ssa.OpLeq64,
cvt2F: ssa.OpCvt64to64F,
and: ssa.OpAnd64,
rsh: ssa.OpRsh64Ux64,
}
var u64_f32 = u642fcvtTab{
- geq: ssa.OpGeq64,
+ leq: ssa.OpLeq64,
cvt2F: ssa.OpCvt64to32F,
and: ssa.OpAnd64,
rsh: ssa.OpRsh64Ux64,
// equal to 10000000001; that rounds up, and the 1 cannot
// be lost else it would round down if the LSB of the
// candidate mantissa is 0.
- cmp := s.newValue2(cvttab.geq, types.Types[TBOOL], x, s.zeroVal(ft))
+ cmp := s.newValue2(cvttab.leq, types.Types[TBOOL], s.zeroVal(ft), x)
b := s.endBlock()
b.Kind = ssa.BlockIf
b.SetControl(cmp)
// } else {
// result = floatY(float64(x) + (1<<32))
// }
- cmp := s.newValue2(ssa.OpGeq32, types.Types[TBOOL], x, s.zeroVal(ft))
+ cmp := s.newValue2(ssa.OpLeq32, types.Types[TBOOL], s.zeroVal(ft), x)
b := s.endBlock()
b.Kind = ssa.BlockIf
b.SetControl(cmp)
(Leq64F x y) -> (SETGEF (UCOMISD y x))
(Leq32F x y) -> (SETGEF (UCOMISS y x))
-(Greater32 x y) -> (SETG (CMPL x y))
-(Greater16 x y) -> (SETG (CMPW x y))
-(Greater8 x y) -> (SETG (CMPB x y))
-(Greater32U x y) -> (SETA (CMPL x y))
-(Greater16U x y) -> (SETA (CMPW x y))
-(Greater8U x y) -> (SETA (CMPB x y))
// Note Go assembler gets UCOMISx operand order wrong, but it is right here
// Bug is accommodated at generation of assembly language.
(Greater64F x y) -> (SETGF (UCOMISD x y))
(Greater32F x y) -> (SETGF (UCOMISS x y))
-(Geq32 x y) -> (SETGE (CMPL x y))
-(Geq16 x y) -> (SETGE (CMPW x y))
-(Geq8 x y) -> (SETGE (CMPB x y))
-(Geq32U x y) -> (SETAE (CMPL x y))
-(Geq16U x y) -> (SETAE (CMPW x y))
-(Geq8U x y) -> (SETAE (CMPB x y))
// Note Go assembler gets UCOMISx operand order wrong, but it is right here
// Bug is accommodated at generation of assembly language.
(Geq64F x y) -> (SETGEF (UCOMISD x y))
// Use SETGEF with reversed operands to dodge NaN case
(Leq(32|64)F x y) -> (SETGEF (UCOMIS(S|D) y x))
-(Greater(64|32|16|8) x y) -> (SETG (CMP(Q|L|W|B) x y))
-(Greater(64|32|16|8)U x y) -> (SETA (CMP(Q|L|W|B) x y))
// Note Go assembler gets UCOMISx operand order wrong, but it is right here
// Bug is accommodated at generation of assembly language.
(Greater(32|64)F x y) -> (SETGF (UCOMIS(S|D) x y))
-(Geq(64|32|16|8) x y) -> (SETGE (CMP(Q|L|W|B) x y))
-(Geq(64|32|16|8)U x y) -> (SETAE (CMP(Q|L|W|B) x y))
// Note Go assembler gets UCOMISx operand order wrong, but it is right here
// Bug is accommodated at generation of assembly language.
(Geq(32|64)F x y) -> (SETGEF (UCOMIS(S|D) x y))
(Leq16U x y) -> (LessEqualU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y)))
(Leq32U x y) -> (LessEqualU (CMP x y))
-(Greater8 x y) -> (GreaterThan (CMP (SignExt8to32 x) (SignExt8to32 y)))
-(Greater16 x y) -> (GreaterThan (CMP (SignExt16to32 x) (SignExt16to32 y)))
-(Greater32 x y) -> (GreaterThan (CMP x y))
(Greater(32|64)F x y) -> (GreaterThan (CMP(F|D) x y))
-(Greater8U x y) -> (GreaterThanU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Greater16U x y) -> (GreaterThanU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Greater32U x y) -> (GreaterThanU (CMP x y))
-
-(Geq8 x y) -> (GreaterEqual (CMP (SignExt8to32 x) (SignExt8to32 y)))
-(Geq16 x y) -> (GreaterEqual (CMP (SignExt16to32 x) (SignExt16to32 y)))
-(Geq32 x y) -> (GreaterEqual (CMP x y))
(Geq(32|64)F x y) -> (GreaterEqual (CMP(F|D) x y))
-(Geq8U x y) -> (GreaterEqualU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Geq16U x y) -> (GreaterEqualU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Geq32U x y) -> (GreaterEqualU (CMP x y))
-
(OffPtr [off] ptr:(SP)) -> (MOVWaddr [off] ptr)
(OffPtr [off] ptr) -> (ADDconst [off] ptr)
(Leq32U x y) -> (LessEqualU (CMPW x y))
(Leq64U x y) -> (LessEqualU (CMP x y))
-(Greater8 x y) -> (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y)))
-(Greater16 x y) -> (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y)))
-(Greater32 x y) -> (GreaterThan (CMPW x y))
-(Greater64 x y) -> (GreaterThan (CMP x y))
(Greater32F x y) -> (GreaterThanF (FCMPS x y))
(Greater64F x y) -> (GreaterThanF (FCMPD x y))
-(Greater8U x y) -> (GreaterThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Greater16U x y) -> (GreaterThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Greater32U x y) -> (GreaterThanU (CMPW x y))
-(Greater64U x y) -> (GreaterThanU (CMP x y))
-
-(Geq8 x y) -> (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y)))
-(Geq16 x y) -> (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y)))
-(Geq32 x y) -> (GreaterEqual (CMPW x y))
-(Geq64 x y) -> (GreaterEqual (CMP x y))
(Geq32F x y) -> (GreaterEqualF (FCMPS x y))
(Geq64F x y) -> (GreaterEqualF (FCMPD x y))
-(Geq8U x y) -> (GreaterEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Geq16U x y) -> (GreaterEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Geq32U x y) -> (GreaterEqualU (CMPW x y))
-(Geq64U x y) -> (GreaterEqualU (CMP x y))
-
// Optimize comparison between a floating-point value and 0.0 with "FCMP $(0.0), Fn"
(FCMPS x (FMOVSconst [0])) -> (FCMPS0 x)
(FCMPS (FMOVSconst [0]) x) -> (InvertFlags (FCMPS0 x))
(Leq16U x y) -> (XORconst [1] (SGTU (ZeroExt16to32 x) (ZeroExt16to32 y)))
(Leq32U x y) -> (XORconst [1] (SGTU x y))
-(Greater8 x y) -> (SGT (SignExt8to32 x) (SignExt8to32 y))
-(Greater16 x y) -> (SGT (SignExt16to32 x) (SignExt16to32 y))
-(Greater32 ...) -> (SGT ...)
(Greater(32|64)F x y) -> (FPFlagTrue (CMPGT(F|D) x y))
-
-(Greater8U x y) -> (SGTU (ZeroExt8to32 x) (ZeroExt8to32 y))
-(Greater16U x y) -> (SGTU (ZeroExt16to32 x) (ZeroExt16to32 y))
-(Greater32U ...) -> (SGTU ...)
-
-(Geq8 x y) -> (XORconst [1] (SGT (SignExt8to32 y) (SignExt8to32 x)))
-(Geq16 x y) -> (XORconst [1] (SGT (SignExt16to32 y) (SignExt16to32 x)))
-(Geq32 x y) -> (XORconst [1] (SGT y x))
-(Geq(32|64)F x y) -> (FPFlagTrue (CMPGE(F|D) x y))
-
-(Geq8U x y) -> (XORconst [1] (SGTU (ZeroExt8to32 y) (ZeroExt8to32 x)))
-(Geq16U x y) -> (XORconst [1] (SGTU (ZeroExt16to32 y) (ZeroExt16to32 x)))
-(Geq32U x y) -> (XORconst [1] (SGTU y x))
+(Geq(32|64)F x y) -> (FPFlagTrue (CMPGE(F|D) x y))
(OffPtr [off] ptr:(SP)) -> (MOVWaddr [off] ptr)
(OffPtr [off] ptr) -> (ADDconst [off] ptr)
(Leq32U x y) -> (XOR (MOVVconst [1]) (SGTU (ZeroExt32to64 x) (ZeroExt32to64 y)))
(Leq64U x y) -> (XOR (MOVVconst [1]) (SGTU x y))
-(Greater8 x y) -> (SGT (SignExt8to64 x) (SignExt8to64 y))
-(Greater16 x y) -> (SGT (SignExt16to64 x) (SignExt16to64 y))
-(Greater32 x y) -> (SGT (SignExt32to64 x) (SignExt32to64 y))
-(Greater64 ...) -> (SGT ...)
(Greater(32|64)F x y) -> (FPFlagTrue (CMPGT(F|D) x y))
-
-(Greater8U x y) -> (SGTU (ZeroExt8to64 x) (ZeroExt8to64 y))
-(Greater16U x y) -> (SGTU (ZeroExt16to64 x) (ZeroExt16to64 y))
-(Greater32U x y) -> (SGTU (ZeroExt32to64 x) (ZeroExt32to64 y))
-(Greater64U ...) -> (SGTU ...)
-
-(Geq8 x y) -> (XOR (MOVVconst [1]) (SGT (SignExt8to64 y) (SignExt8to64 x)))
-(Geq16 x y) -> (XOR (MOVVconst [1]) (SGT (SignExt16to64 y) (SignExt16to64 x)))
-(Geq32 x y) -> (XOR (MOVVconst [1]) (SGT (SignExt32to64 y) (SignExt32to64 x)))
-(Geq64 x y) -> (XOR (MOVVconst [1]) (SGT y x))
-(Geq(32|64)F x y) -> (FPFlagTrue (CMPGE(F|D) x y))
-
-(Geq8U x y) -> (XOR (MOVVconst [1]) (SGTU (ZeroExt8to64 y) (ZeroExt8to64 x)))
-(Geq16U x y) -> (XOR (MOVVconst [1]) (SGTU (ZeroExt16to64 y) (ZeroExt16to64 x)))
-(Geq32U x y) -> (XOR (MOVVconst [1]) (SGTU (ZeroExt32to64 y) (ZeroExt32to64 x)))
-(Geq64U x y) -> (XOR (MOVVconst [1]) (SGTU y x))
+(Geq(32|64)F x y) -> (FPFlagTrue (CMPGE(F|D) x y))
(OffPtr [off] ptr:(SP)) -> (MOVVaddr [off] ptr)
(OffPtr [off] ptr) -> (ADDVconst [off] ptr)
(Leq32U x y) -> (LessEqual (CMPWU x y))
(Leq64U x y) -> (LessEqual (CMPU x y))
-(Greater8 x y) -> (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y)))
-(Greater16 x y) -> (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y)))
-(Greater32 x y) -> (GreaterThan (CMPW x y))
-(Greater64 x y) -> (GreaterThan (CMP x y))
(Greater(32|64)F x y) -> (FGreaterThan (FCMPU x y))
-(Greater8U x y) -> (GreaterThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Greater16U x y) -> (GreaterThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Greater32U x y) -> (GreaterThan (CMPWU x y))
-(Greater64U x y) -> (GreaterThan (CMPU x y))
-
-(Geq8 x y) -> (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y)))
-(Geq16 x y) -> (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y)))
-(Geq32 x y) -> (GreaterEqual (CMPW x y))
-(Geq64 x y) -> (GreaterEqual (CMP x y))
(Geq(32|64)F x y) -> (FGreaterEqual (FCMPU x y))
-(Geq8U x y) -> (GreaterEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y)))
-(Geq16U x y) -> (GreaterEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y)))
-(Geq32U x y) -> (GreaterEqual (CMPWU x y))
-(Geq64U x y) -> (GreaterEqual (CMPU x y))
-
// Absorb pseudo-ops into blocks.
(If (Equal cc) yes no) -> (EQ cc yes no)
(If (NotEqual cc) yes no) -> (NE cc yes no)
(Leq32F ...) -> (FLES ...)
// Convert x > y to y < x.
-(Greater64 x y) -> (Less64 y x)
-(Greater32 x y) -> (Less32 y x)
-(Greater16 x y) -> (Less16 y x)
-(Greater8 x y) -> (Less8 y x)
-(Greater64U x y) -> (Less64U y x)
-(Greater32U x y) -> (Less32U y x)
-(Greater16U x y) -> (Less16U y x)
-(Greater8U x y) -> (Less8U y x)
(Greater64F x y) -> (FLTD y x)
(Greater32F x y) -> (FLTS y x)
// Convert x >= y to !(x < y)
-(Geq64 x y) -> (Not (Less64 x y))
-(Geq32 x y) -> (Not (Less32 x y))
-(Geq16 x y) -> (Not (Less16 x y))
-(Geq8 x y) -> (Not (Less8 x y))
-(Geq64U x y) -> (Not (Less64U x y))
-(Geq32U x y) -> (Not (Less32U x y))
-(Geq16U x y) -> (Not (Less16U x y))
-(Geq8U x y) -> (Not (Less8U x y))
(Geq64F x y) -> (FLED y x)
(Geq32F x y) -> (FLES y x)
(Leq64F x y) -> (LOCGR {s390x.LessOrEqual} (MOVDconst [0]) (MOVDconst [1]) (FCMP x y))
(Leq32F x y) -> (LOCGR {s390x.LessOrEqual} (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y))
-(Greater64 x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))
-(Greater32 x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPW x y))
-(Greater(16|8) x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOV(H|B)reg x) (MOV(H|B)reg y)))
-(Greater64U x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPU x y))
-(Greater32U x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y))
-(Greater(16|8)U x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOV(H|B)Zreg x) (MOV(H|B)Zreg y)))
(Greater64F x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (FCMP x y))
(Greater32F x y) -> (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y))
-(Geq64 x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))
-(Geq32 x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPW x y))
-(Geq(16|8) x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOV(H|B)reg x) (MOV(H|B)reg y)))
-(Geq64U x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPU x y))
-(Geq32U x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y))
-(Geq(16|8)U x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOV(H|B)Zreg x) (MOV(H|B)Zreg y)))
(Geq64F x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (FCMP x y))
(Geq32F x y) -> (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y))
(Leq8U x y) -> (I64LeU (ZeroExt8to64 x) (ZeroExt8to64 y))
(Leq(64|32)F ...) -> (F(64|32)Le ...)
-(Greater64 ...) -> (I64GtS ...)
-(Greater32 x y) -> (I64GtS (SignExt32to64 x) (SignExt32to64 y))
-(Greater16 x y) -> (I64GtS (SignExt16to64 x) (SignExt16to64 y))
-(Greater8 x y) -> (I64GtS (SignExt8to64 x) (SignExt8to64 y))
-(Greater64U ...) -> (I64GtU ...)
-(Greater32U x y) -> (I64GtU (ZeroExt32to64 x) (ZeroExt32to64 y))
-(Greater16U x y) -> (I64GtU (ZeroExt16to64 x) (ZeroExt16to64 y))
-(Greater8U x y) -> (I64GtU (ZeroExt8to64 x) (ZeroExt8to64 y))
(Greater(64|32)F ...) -> (F(64|32)Gt ...)
-
-(Geq64 ...) -> (I64GeS ...)
-(Geq32 x y) -> (I64GeS (SignExt32to64 x) (SignExt32to64 y))
-(Geq16 x y) -> (I64GeS (SignExt16to64 x) (SignExt16to64 y))
-(Geq8 x y) -> (I64GeS (SignExt8to64 x) (SignExt8to64 y))
-(Geq64U ...) -> (I64GeU ...)
-(Geq32U x y) -> (I64GeU (ZeroExt32to64 x) (ZeroExt32to64 y))
-(Geq16U x y) -> (I64GeU (ZeroExt16to64 x) (ZeroExt16to64 y))
-(Geq8U x y) -> (I64GeU (ZeroExt8to64 x) (ZeroExt8to64 y))
-(Geq(64|32)F ...) -> (F(64|32)Ge ...)
+(Geq(64|32)F ...) -> (F(64|32)Ge ...)
(Eq64 ...) -> (I64Eq ...)
(Eq32 x y) -> (I64Eq (ZeroExt32to64 x) (ZeroExt32to64 y))
(Eq32 (Int64Hi x) (Int64Hi y))
(Leq32U (Int64Lo x) (Int64Lo y))))
-(Greater64U x y) ->
- (OrB
- (Greater32U (Int64Hi x) (Int64Hi y))
- (AndB
- (Eq32 (Int64Hi x) (Int64Hi y))
- (Greater32U (Int64Lo x) (Int64Lo y))))
-
-(Geq64U x y) ->
- (OrB
- (Greater32U (Int64Hi x) (Int64Hi y))
- (AndB
- (Eq32 (Int64Hi x) (Int64Hi y))
- (Geq32U (Int64Lo x) (Int64Lo y))))
-
(Less64 x y) ->
(OrB
(Less32 (Int64Hi x) (Int64Hi y))
(AndB
(Eq32 (Int64Hi x) (Int64Hi y))
(Leq32U (Int64Lo x) (Int64Lo y))))
-
-(Greater64 x y) ->
- (OrB
- (Greater32 (Int64Hi x) (Int64Hi y))
- (AndB
- (Eq32 (Int64Hi x) (Int64Hi y))
- (Greater32U (Int64Lo x) (Int64Lo y))))
-
-(Geq64 x y) ->
- (OrB
- (Greater32 (Int64Hi x) (Int64Hi y))
- (AndB
- (Eq32 (Int64Hi x) (Int64Hi y))
- (Geq32U (Int64Lo x) (Int64Lo y))))
(Not (Eq(64|32|16|8|B|Ptr|64F|32F) x y)) -> (Neq(64|32|16|8|B|Ptr|64F|32F) x y)
(Not (Neq(64|32|16|8|B|Ptr|64F|32F) x y)) -> (Eq(64|32|16|8|B|Ptr|64F|32F) x y)
-(Not (Greater(64|32|16|8) x y)) -> (Leq(64|32|16|8) x y)
-(Not (Greater(64|32|16|8)U x y)) -> (Leq(64|32|16|8)U x y)
-(Not (Geq(64|32|16|8) x y)) -> (Less(64|32|16|8) x y)
-(Not (Geq(64|32|16|8)U x y)) -> (Less(64|32|16|8)U x y)
-
-(Not (Less(64|32|16|8) x y)) -> (Geq(64|32|16|8) x y)
-(Not (Less(64|32|16|8)U x y)) -> (Geq(64|32|16|8)U x y)
-(Not (Leq(64|32|16|8) x y)) -> (Greater(64|32|16|8) x y)
-(Not (Leq(64|32|16|8)U x y)) -> (Greater(64|32|16|8)U x y)
+(Not (Less(64|32|16|8) x y)) -> (Leq(64|32|16|8) y x)
+(Not (Less(64|32|16|8)U x y)) -> (Leq(64|32|16|8)U y x)
+(Not (Leq(64|32|16|8) x y)) -> (Less(64|32|16|8) y x)
+(Not (Leq(64|32|16|8)U x y)) -> (Less(64|32|16|8)U y x)
// Distribute multiplication c * (d+x) -> c*d + c*x. Useful for:
// a[i].b = ...; a[i+1].b = ...
// constant comparisons
(Eq(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c == d)])
(Neq(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c != d)])
-(Greater(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c > d)])
-(Geq(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c >= d)])
(Less(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c < d)])
(Leq(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c <= d)])
-(Geq8 (And8 _ (Const8 [c])) (Const8 [0])) && int8(c) >= 0 -> (ConstBool [1])
-(Geq16 (And16 _ (Const16 [c])) (Const16 [0])) && int16(c) >= 0 -> (ConstBool [1])
-(Geq32 (And32 _ (Const32 [c])) (Const32 [0])) && int32(c) >= 0 -> (ConstBool [1])
-(Geq64 (And64 _ (Const64 [c])) (Const64 [0])) && int64(c) >= 0 -> (ConstBool [1])
-
-(Geq64 (Rsh64Ux64 _ (Const64 [c])) (Const64 [0])) && c > 0 -> (ConstBool [1])
-
-(Greater64U (Const64 [c]) (Const64 [d])) -> (ConstBool [b2i(uint64(c) > uint64(d))])
-(Greater32U (Const32 [c]) (Const32 [d])) -> (ConstBool [b2i(uint32(c) > uint32(d))])
-(Greater16U (Const16 [c]) (Const16 [d])) -> (ConstBool [b2i(uint16(c) > uint16(d))])
-(Greater8U (Const8 [c]) (Const8 [d])) -> (ConstBool [b2i(uint8(c) > uint8(d))])
-
-(Geq64U (Const64 [c]) (Const64 [d])) -> (ConstBool [b2i(uint64(c) >= uint64(d))])
-(Geq32U (Const32 [c]) (Const32 [d])) -> (ConstBool [b2i(uint32(c) >= uint32(d))])
-(Geq16U (Const16 [c]) (Const16 [d])) -> (ConstBool [b2i(uint16(c) >= uint16(d))])
-(Geq8U (Const8 [c]) (Const8 [d])) -> (ConstBool [b2i(uint8(c) >= uint8(d))])
-
(Less64U (Const64 [c]) (Const64 [d])) -> (ConstBool [b2i(uint64(c) < uint64(d))])
(Less32U (Const32 [c]) (Const32 [d])) -> (ConstBool [b2i(uint32(c) < uint32(d))])
(Less16U (Const16 [c]) (Const16 [d])) -> (ConstBool [b2i(uint16(c) < uint16(d))])
(Leq16U (Const16 [c]) (Const16 [d])) -> (ConstBool [b2i(uint16(c) <= uint16(d))])
(Leq8U (Const8 [c]) (Const8 [d])) -> (ConstBool [b2i(uint8(c) <= uint8(d))])
+(Leq8 (Const8 [0]) (And8 _ (Const8 [c]))) && int8(c) >= 0 -> (ConstBool [1])
+(Leq16 (Const16 [0]) (And16 _ (Const16 [c]))) && int16(c) >= 0 -> (ConstBool [1])
+(Leq32 (Const32 [0]) (And32 _ (Const32 [c]))) && int32(c) >= 0 -> (ConstBool [1])
+(Leq64 (Const64 [0]) (And64 _ (Const64 [c]))) && int64(c) >= 0 -> (ConstBool [1])
+
+(Leq8 (Const8 [0]) (Rsh8Ux64 _ (Const64 [c]))) && c > 0 -> (ConstBool [1])
+(Leq16 (Const16 [0]) (Rsh16Ux64 _ (Const64 [c]))) && c > 0 -> (ConstBool [1])
+(Leq32 (Const32 [0]) (Rsh32Ux64 _ (Const64 [c]))) && c > 0 -> (ConstBool [1])
+(Leq64 (Const64 [0]) (Rsh64Ux64 _ (Const64 [c]))) && c > 0 -> (ConstBool [1])
+
// constant floating point comparisons
(Eq32F (Const32F [c]) (Const32F [d])) -> (ConstBool [b2i(auxTo32F(c) == auxTo32F(d))])
(Eq64F (Const64F [c]) (Const64F [d])) -> (ConstBool [b2i(auxTo64F(c) == auxTo64F(d))])
{name: "Leq32F", argLength: 2, typ: "Bool"},
{name: "Leq64F", argLength: 2, typ: "Bool"},
- {name: "Greater8", argLength: 2, typ: "Bool"}, // arg0 > arg1, signed
- {name: "Greater8U", argLength: 2, typ: "Bool"}, // arg0 > arg1, unsigned
- {name: "Greater16", argLength: 2, typ: "Bool"},
- {name: "Greater16U", argLength: 2, typ: "Bool"},
- {name: "Greater32", argLength: 2, typ: "Bool"},
- {name: "Greater32U", argLength: 2, typ: "Bool"},
- {name: "Greater64", argLength: 2, typ: "Bool"},
- {name: "Greater64U", argLength: 2, typ: "Bool"},
{name: "Greater32F", argLength: 2, typ: "Bool"},
{name: "Greater64F", argLength: 2, typ: "Bool"},
- {name: "Geq8", argLength: 2, typ: "Bool"}, // arg0 <= arg1, signed
- {name: "Geq8U", argLength: 2, typ: "Bool"}, // arg0 <= arg1, unsigned
- {name: "Geq16", argLength: 2, typ: "Bool"},
- {name: "Geq16U", argLength: 2, typ: "Bool"},
- {name: "Geq32", argLength: 2, typ: "Bool"},
- {name: "Geq32U", argLength: 2, typ: "Bool"},
- {name: "Geq64", argLength: 2, typ: "Bool"},
- {name: "Geq64U", argLength: 2, typ: "Bool"},
{name: "Geq32F", argLength: 2, typ: "Bool"},
{name: "Geq64F", argLength: 2, typ: "Bool"},
fallthrough
case OpLess64:
ind, max = c.Args[0], c.Args[1]
- case OpGeq64:
- flags |= indVarMaxInc
- fallthrough
- case OpGreater64:
- ind, max = c.Args[1], c.Args[0]
default:
continue
}
OpLeq64U
OpLeq32F
OpLeq64F
- OpGreater8
- OpGreater8U
- OpGreater16
- OpGreater16U
- OpGreater32
- OpGreater32U
- OpGreater64
- OpGreater64U
OpGreater32F
OpGreater64F
- OpGeq8
- OpGeq8U
- OpGeq16
- OpGeq16U
- OpGeq32
- OpGeq32U
- OpGeq64
- OpGeq64U
OpGeq32F
OpGeq64F
OpCondSelect
argLen: 2,
generic: true,
},
- {
- name: "Greater8",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater8U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater16",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater16U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater32",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater32U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater64",
- argLen: 2,
- generic: true,
- },
- {
- name: "Greater64U",
- argLen: 2,
- generic: true,
- },
{
name: "Greater32F",
argLen: 2,
argLen: 2,
generic: true,
},
- {
- name: "Geq8",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq8U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq16",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq16U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq32",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq32U",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq64",
- argLen: 2,
- generic: true,
- },
- {
- name: "Geq64U",
- argLen: 2,
- generic: true,
- },
{
name: "Geq32F",
argLen: 2,
OpLeq64: {signed, lt | eq},
OpLeq64U: {unsigned, lt | eq},
- OpGeq8: {signed, eq | gt},
- OpGeq8U: {unsigned, eq | gt},
- OpGeq16: {signed, eq | gt},
- OpGeq16U: {unsigned, eq | gt},
- OpGeq32: {signed, eq | gt},
- OpGeq32U: {unsigned, eq | gt},
- OpGeq64: {signed, eq | gt},
- OpGeq64U: {unsigned, eq | gt},
-
- OpGreater8: {signed, gt},
- OpGreater8U: {unsigned, gt},
- OpGreater16: {signed, gt},
- OpGreater16U: {unsigned, gt},
- OpGreater32: {signed, gt},
- OpGreater32U: {unsigned, gt},
- OpGreater64: {signed, gt},
- OpGreater64U: {unsigned, gt},
-
// For these ops, the negative branch is different: we can only
// prove signed/GE (signed/GT) if we can prove that arg0 is non-negative.
// See the special case in addBranchRestrictions.
return rewriteValue386_OpEqB(v)
case OpEqPtr:
return rewriteValue386_OpEqPtr(v)
- case OpGeq16:
- return rewriteValue386_OpGeq16(v)
- case OpGeq16U:
- return rewriteValue386_OpGeq16U(v)
- case OpGeq32:
- return rewriteValue386_OpGeq32(v)
case OpGeq32F:
return rewriteValue386_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValue386_OpGeq32U(v)
case OpGeq64F:
return rewriteValue386_OpGeq64F(v)
- case OpGeq8:
- return rewriteValue386_OpGeq8(v)
- case OpGeq8U:
- return rewriteValue386_OpGeq8U(v)
case OpGetCallerPC:
v.Op = Op386LoweredGetCallerPC
return true
case OpGetG:
v.Op = Op386LoweredGetG
return true
- case OpGreater16:
- return rewriteValue386_OpGreater16(v)
- case OpGreater16U:
- return rewriteValue386_OpGreater16U(v)
- case OpGreater32:
- return rewriteValue386_OpGreater32(v)
case OpGreater32F:
return rewriteValue386_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValue386_OpGreater32U(v)
case OpGreater64F:
return rewriteValue386_OpGreater64F(v)
- case OpGreater8:
- return rewriteValue386_OpGreater8(v)
- case OpGreater8U:
- return rewriteValue386_OpGreater8U(v)
case OpHmul32:
v.Op = Op386HMULL
return true
return true
}
}
-func rewriteValue386_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq16 x y)
- // result: (SETGE (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETGE)
- v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq16U x y)
- // result: (SETAE (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETAE)
- v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32 x y)
- // result: (SETGE (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETGE)
- v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValue386_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValue386_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32U x y)
- // result: (SETAE (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETAE)
- v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValue386_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValue386_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq8 x y)
- // result: (SETGE (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETGE)
- v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq8U x y)
- // result: (SETAE (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETAE)
- v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater16 x y)
- // result: (SETG (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETG)
- v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater16U x y)
- // result: (SETA (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETA)
- v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32 x y)
- // result: (SETG (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETG)
- v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValue386_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValue386_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32U x y)
- // result: (SETA (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETA)
- v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValue386_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValue386_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater8 x y)
- // result: (SETG (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETG)
- v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValue386_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater8U x y)
- // result: (SETA (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(Op386SETA)
- v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValue386_OpIsInBounds(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueAMD64_OpFMA(v)
case OpFloor:
return rewriteValueAMD64_OpFloor(v)
- case OpGeq16:
- return rewriteValueAMD64_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueAMD64_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueAMD64_OpGeq32(v)
case OpGeq32F:
return rewriteValueAMD64_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueAMD64_OpGeq32U(v)
- case OpGeq64:
- return rewriteValueAMD64_OpGeq64(v)
case OpGeq64F:
return rewriteValueAMD64_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValueAMD64_OpGeq64U(v)
- case OpGeq8:
- return rewriteValueAMD64_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueAMD64_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpAMD64LoweredGetCallerPC
return true
case OpGetG:
v.Op = OpAMD64LoweredGetG
return true
- case OpGreater16:
- return rewriteValueAMD64_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueAMD64_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueAMD64_OpGreater32(v)
case OpGreater32F:
return rewriteValueAMD64_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueAMD64_OpGreater32U(v)
- case OpGreater64:
- return rewriteValueAMD64_OpGreater64(v)
case OpGreater64F:
return rewriteValueAMD64_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValueAMD64_OpGreater64U(v)
- case OpGreater8:
- return rewriteValueAMD64_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueAMD64_OpGreater8U(v)
case OpHmul32:
v.Op = OpAMD64HMULL
return true
return true
}
}
-func rewriteValueAMD64_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq16 x y)
- // result: (SETGE (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETGE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq16U x y)
- // result: (SETAE (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETAE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32 x y)
- // result: (SETGE (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETGE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueAMD64_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueAMD64_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32U x y)
- // result: (SETAE (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETAE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64 x y)
- // result: (SETGE (CMPQ x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETGE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueAMD64_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueAMD64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64U x y)
- // result: (SETAE (CMPQ x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETAE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq8 x y)
- // result: (SETGE (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETGE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq8U x y)
- // result: (SETAE (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETAE)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater16 x y)
- // result: (SETG (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETG)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater16U x y)
- // result: (SETA (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETA)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32 x y)
- // result: (SETG (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETG)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueAMD64_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueAMD64_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32U x y)
- // result: (SETA (CMPL x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETA)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64 x y)
- // result: (SETG (CMPQ x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETG)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueAMD64_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueAMD64_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64U x y)
- // result: (SETA (CMPQ x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETA)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater8 x y)
- // result: (SETG (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETG)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueAMD64_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater8U x y)
- // result: (SETA (CMPB x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpAMD64SETA)
- v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueAMD64_OpIsInBounds(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueARM_OpEqPtr(v)
case OpFMA:
return rewriteValueARM_OpFMA(v)
- case OpGeq16:
- return rewriteValueARM_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueARM_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueARM_OpGeq32(v)
case OpGeq32F:
return rewriteValueARM_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueARM_OpGeq32U(v)
case OpGeq64F:
return rewriteValueARM_OpGeq64F(v)
- case OpGeq8:
- return rewriteValueARM_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueARM_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpARMLoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpARMLoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueARM_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueARM_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueARM_OpGreater32(v)
case OpGreater32F:
return rewriteValueARM_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueARM_OpGreater32U(v)
case OpGreater64F:
return rewriteValueARM_OpGreater64F(v)
- case OpGreater8:
- return rewriteValueARM_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueARM_OpGreater8U(v)
case OpHmul32:
v.Op = OpARMHMUL
return true
return true
}
}
-func rewriteValueARM_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (GreaterEqual (CMP (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (GreaterEqualU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32 x y)
- // result: (GreaterEqual (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32U x y)
- // result: (GreaterEqualU (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (GreaterEqual (CMP (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (GreaterEqualU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (GreaterThan (CMP (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThan)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (GreaterThanU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32 x y)
- // result: (GreaterThan (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThan)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32U x y)
- // result: (GreaterThanU (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (GreaterThan (CMP (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThan)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (GreaterThanU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARMGreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM_OpIsInBounds(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
case OpFloor:
v.Op = OpARM64FRINTMD
return true
- case OpGeq16:
- return rewriteValueARM64_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueARM64_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueARM64_OpGeq32(v)
case OpGeq32F:
return rewriteValueARM64_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueARM64_OpGeq32U(v)
- case OpGeq64:
- return rewriteValueARM64_OpGeq64(v)
case OpGeq64F:
return rewriteValueARM64_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValueARM64_OpGeq64U(v)
- case OpGeq8:
- return rewriteValueARM64_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueARM64_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpARM64LoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpARM64LoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueARM64_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueARM64_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueARM64_OpGreater32(v)
case OpGreater32F:
return rewriteValueARM64_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueARM64_OpGreater32U(v)
- case OpGreater64:
- return rewriteValueARM64_OpGreater64(v)
case OpGreater64F:
return rewriteValueARM64_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValueARM64_OpGreater64U(v)
- case OpGreater8:
- return rewriteValueARM64_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueARM64_OpGreater8U(v)
case OpHmul32:
return rewriteValueARM64_OpHmul32(v)
case OpHmul32u:
return true
}
}
-func rewriteValueARM64_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (GreaterEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32 x y)
- // result: (GreaterEqual (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM64_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM64_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32U x y)
- // result: (GreaterEqualU (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64 x y)
- // result: (GreaterEqual (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM64_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64U x y)
- // result: (GreaterEqualU (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (GreaterEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterEqualU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (GreaterThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32 x y)
- // result: (GreaterThan (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM64_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM64_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32U x y)
- // result: (GreaterThanU (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64 x y)
- // result: (GreaterThan (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM64_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueARM64_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64U x y)
- // result: (GreaterThanU (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueARM64_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (GreaterThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpARM64GreaterThanU)
- v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueARM64_OpHmul32(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueMIPS_OpEqB(v)
case OpEqPtr:
return rewriteValueMIPS_OpEqPtr(v)
- case OpGeq16:
- return rewriteValueMIPS_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueMIPS_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueMIPS_OpGeq32(v)
case OpGeq32F:
return rewriteValueMIPS_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueMIPS_OpGeq32U(v)
case OpGeq64F:
return rewriteValueMIPS_OpGeq64F(v)
- case OpGeq8:
- return rewriteValueMIPS_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueMIPS_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpMIPSLoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpMIPSLoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueMIPS_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueMIPS_OpGreater16U(v)
- case OpGreater32:
- v.Op = OpMIPSSGT
- return true
case OpGreater32F:
return rewriteValueMIPS_OpGreater32F(v)
- case OpGreater32U:
- v.Op = OpMIPSSGTU
- return true
case OpGreater64F:
return rewriteValueMIPS_OpGreater64F(v)
- case OpGreater8:
- return rewriteValueMIPS_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueMIPS_OpGreater8U(v)
case OpHmul32:
return rewriteValueMIPS_OpHmul32(v)
case OpHmul32u:
return true
}
}
-func rewriteValueMIPS_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (XORconst [1] (SGT (SignExt16to32 y) (SignExt16to32 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(y)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(x)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueMIPS_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (XORconst [1] (SGTU (ZeroExt16to32 y) (ZeroExt16to32 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(y)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(x)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueMIPS_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32 x y)
- // result: (XORconst [1] (SGT y x))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool)
- v0.AddArg(y)
- v0.AddArg(x)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueMIPS_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32U x y)
- // result: (XORconst [1] (SGTU y x))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool)
- v0.AddArg(y)
- v0.AddArg(x)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueMIPS_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (XORconst [1] (SGT (SignExt8to32 y) (SignExt8to32 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(y)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(x)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueMIPS_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (XORconst [1] (SGTU (ZeroExt8to32 y) (ZeroExt8to32 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSXORconst)
- v.AuxInt = 1
- v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(y)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(x)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueMIPS_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (SGT (SignExt16to32 x) (SignExt16to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSSGT)
- v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (SGTU (ZeroExt16to32 x) (ZeroExt16to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSSGTU)
- v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (SGT (SignExt8to32 x) (SignExt8to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSSGT)
- v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (SGTU (ZeroExt8to32 x) (ZeroExt8to32 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPSSGTU)
- v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS_OpHmul32(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueMIPS64_OpEqB(v)
case OpEqPtr:
return rewriteValueMIPS64_OpEqPtr(v)
- case OpGeq16:
- return rewriteValueMIPS64_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueMIPS64_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueMIPS64_OpGeq32(v)
case OpGeq32F:
return rewriteValueMIPS64_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueMIPS64_OpGeq32U(v)
- case OpGeq64:
- return rewriteValueMIPS64_OpGeq64(v)
case OpGeq64F:
return rewriteValueMIPS64_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValueMIPS64_OpGeq64U(v)
- case OpGeq8:
- return rewriteValueMIPS64_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueMIPS64_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpMIPS64LoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpMIPS64LoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueMIPS64_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueMIPS64_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueMIPS64_OpGreater32(v)
case OpGreater32F:
return rewriteValueMIPS64_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueMIPS64_OpGreater32U(v)
- case OpGreater64:
- v.Op = OpMIPS64SGT
- return true
case OpGreater64F:
return rewriteValueMIPS64_OpGreater64F(v)
- case OpGreater64U:
- v.Op = OpMIPS64SGTU
- return true
- case OpGreater8:
- return rewriteValueMIPS64_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueMIPS64_OpGreater8U(v)
case OpHmul32:
return rewriteValueMIPS64_OpHmul32(v)
case OpHmul32u:
return true
}
}
-func rewriteValueMIPS64_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (XOR (MOVVconst [1]) (SGT (SignExt16to64 y) (SignExt16to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGT, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt16to64 y) (ZeroExt16to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32 x y)
- // result: (XOR (MOVVconst [1]) (SGT (SignExt32to64 y) (SignExt32to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGT, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS64_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS64_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32U x y)
- // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt32to64 y) (ZeroExt32to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64 x y)
- // result: (XOR (MOVVconst [1]) (SGT y x))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGT, typ.Bool)
- v1.AddArg(y)
- v1.AddArg(x)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS64_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64U x y)
- // result: (XOR (MOVVconst [1]) (SGTU y x))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool)
- v1.AddArg(y)
- v1.AddArg(x)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (XOR (MOVVconst [1]) (SGT (SignExt8to64 y) (SignExt8to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGT, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt8to64 y) (ZeroExt8to64 x)))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64XOR)
- v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64)
- v0.AuxInt = 1
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v2.AddArg(y)
- v1.AddArg(v2)
- v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v3.AddArg(x)
- v1.AddArg(v3)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (SGT (SignExt16to64 x) (SignExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGT)
- v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (SGTU (ZeroExt16to64 x) (ZeroExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGTU)
- v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32 x y)
- // result: (SGT (SignExt32to64 x) (SignExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGT)
- v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS64_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS64_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32U x y)
- // result: (SGTU (ZeroExt32to64 x) (ZeroExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGTU)
- v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS64_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueMIPS64_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (SGT (SignExt8to64 x) (SignExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGT)
- v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueMIPS64_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (SGTU (ZeroExt8to64 x) (ZeroExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpMIPS64SGTU)
- v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueMIPS64_OpHmul32(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
case OpFloor:
v.Op = OpPPC64FFLOOR
return true
- case OpGeq16:
- return rewriteValuePPC64_OpGeq16(v)
- case OpGeq16U:
- return rewriteValuePPC64_OpGeq16U(v)
- case OpGeq32:
- return rewriteValuePPC64_OpGeq32(v)
case OpGeq32F:
return rewriteValuePPC64_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValuePPC64_OpGeq32U(v)
- case OpGeq64:
- return rewriteValuePPC64_OpGeq64(v)
case OpGeq64F:
return rewriteValuePPC64_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValuePPC64_OpGeq64U(v)
- case OpGeq8:
- return rewriteValuePPC64_OpGeq8(v)
- case OpGeq8U:
- return rewriteValuePPC64_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpPPC64LoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpPPC64LoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValuePPC64_OpGreater16(v)
- case OpGreater16U:
- return rewriteValuePPC64_OpGreater16U(v)
- case OpGreater32:
- return rewriteValuePPC64_OpGreater32(v)
case OpGreater32F:
return rewriteValuePPC64_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValuePPC64_OpGreater32U(v)
- case OpGreater64:
- return rewriteValuePPC64_OpGreater64(v)
case OpGreater64F:
return rewriteValuePPC64_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValuePPC64_OpGreater64U(v)
- case OpGreater8:
- return rewriteValuePPC64_OpGreater8(v)
- case OpGreater8U:
- return rewriteValuePPC64_OpGreater8U(v)
case OpHmul32:
v.Op = OpPPC64MULHW
return true
return true
}
}
-func rewriteValuePPC64_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (GreaterEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32 x y)
- // result: (GreaterEqual (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValuePPC64_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValuePPC64_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq32U x y)
- // result: (GreaterEqual (CMPWU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64 x y)
- // result: (GreaterEqual (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValuePPC64_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValuePPC64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Geq64U x y)
- // result: (GreaterEqual (CMPU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (GreaterEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterEqual)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (GreaterThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32 x y)
- // result: (GreaterThan (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValuePPC64_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValuePPC64_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater32U x y)
- // result: (GreaterThan (CMPWU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64 x y)
- // result: (GreaterThan (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValuePPC64_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValuePPC64_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- // match: (Greater64U x y)
- // result: (GreaterThan (CMPU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValuePPC64_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (GreaterThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpPPC64GreaterThan)
- v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValuePPC64_OpIsInBounds(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueRISCV64_OpEqB(v)
case OpEqPtr:
return rewriteValueRISCV64_OpEqPtr(v)
- case OpGeq16:
- return rewriteValueRISCV64_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueRISCV64_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueRISCV64_OpGeq32(v)
case OpGeq32F:
return rewriteValueRISCV64_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueRISCV64_OpGeq32U(v)
- case OpGeq64:
- return rewriteValueRISCV64_OpGeq64(v)
case OpGeq64F:
return rewriteValueRISCV64_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValueRISCV64_OpGeq64U(v)
- case OpGeq8:
- return rewriteValueRISCV64_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueRISCV64_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpRISCV64LoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpRISCV64LoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueRISCV64_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueRISCV64_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueRISCV64_OpGreater32(v)
case OpGreater32F:
return rewriteValueRISCV64_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueRISCV64_OpGreater32U(v)
- case OpGreater64:
- return rewriteValueRISCV64_OpGreater64(v)
case OpGreater64F:
return rewriteValueRISCV64_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValueRISCV64_OpGreater64U(v)
- case OpGreater8:
- return rewriteValueRISCV64_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueRISCV64_OpGreater8U(v)
case OpHmul32:
return rewriteValueRISCV64_OpHmul32(v)
case OpHmul32u:
return true
}
}
-func rewriteValueRISCV64_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (Not (Less16 x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess16, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (Not (Less16U x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess16U, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32 x y)
- // result: (Not (Less32 x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess32, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueRISCV64_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueRISCV64_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32U x y)
- // result: (Not (Less32U x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess32U, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64 x y)
- // result: (Not (Less64 x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess64, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
func rewriteValueRISCV64_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueRISCV64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64U x y)
- // result: (Not (Less64U x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess64U, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (Not (Less8 x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess8, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (Not (Less8U x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpNot)
- v0 := b.NewValue0(v.Pos, OpLess8U, typ.Bool)
- v0.AddArg(x)
- v0.AddArg(y)
- v.AddArg(v0)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater16 x y)
- // result: (Less16 y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess16)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater16U x y)
- // result: (Less16U y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess16U)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater32 x y)
- // result: (Less32 y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess32)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
func rewriteValueRISCV64_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueRISCV64_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater32U x y)
- // result: (Less32U y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess32U)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater64 x y)
- // result: (Less64 y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess64)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
func rewriteValueRISCV64_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueRISCV64_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater64U x y)
- // result: (Less64U y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess64U)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater8 x y)
- // result: (Less8 y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess8)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
-func rewriteValueRISCV64_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater8U x y)
- // result: (Less8U y x)
- for {
- x := v_0
- y := v_1
- v.reset(OpLess8U)
- v.AddArg(y)
- v.AddArg(x)
- return true
- }
-}
func rewriteValueRISCV64_OpHmul32(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return rewriteValueS390X_OpFMA(v)
case OpFloor:
return rewriteValueS390X_OpFloor(v)
- case OpGeq16:
- return rewriteValueS390X_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueS390X_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueS390X_OpGeq32(v)
case OpGeq32F:
return rewriteValueS390X_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValueS390X_OpGeq32U(v)
- case OpGeq64:
- return rewriteValueS390X_OpGeq64(v)
case OpGeq64F:
return rewriteValueS390X_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValueS390X_OpGeq64U(v)
- case OpGeq8:
- return rewriteValueS390X_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueS390X_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpS390XLoweredGetCallerPC
return true
case OpGetG:
v.Op = OpS390XLoweredGetG
return true
- case OpGreater16:
- return rewriteValueS390X_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueS390X_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueS390X_OpGreater32(v)
case OpGreater32F:
return rewriteValueS390X_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValueS390X_OpGreater32U(v)
- case OpGreater64:
- return rewriteValueS390X_OpGreater64(v)
case OpGreater64F:
return rewriteValueS390X_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValueS390X_OpGreater64U(v)
- case OpGreater8:
- return rewriteValueS390X_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueS390X_OpGreater8U(v)
case OpHmul32:
return rewriteValueS390X_OpHmul32(v)
case OpHmul32u:
return true
}
}
-func rewriteValueS390X_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32 x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
func rewriteValueS390X_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueS390X_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32U x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64 x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMP, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
func rewriteValueS390X_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueS390X_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64U x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPU, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (LOCGR {s390x.GreaterOrEqual} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.GreaterOrEqual
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32 x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPW x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
func rewriteValueS390X_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueS390X_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32U x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater64 x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMP x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMP, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
func rewriteValueS390X_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
return true
}
}
-func rewriteValueS390X_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater64U x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPU x y))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPU, types.TypeFlags)
- v2.AddArg(x)
- v2.AddArg(y)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPW, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
-func rewriteValueS390X_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (LOCGR {s390x.Greater} (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y)))
- for {
- x := v_0
- y := v_1
- v.reset(OpS390XLOCGR)
- v.Aux = s390x.Greater
- v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v0.AuxInt = 0
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64)
- v1.AuxInt = 1
- v.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpS390XCMPWU, types.TypeFlags)
- v3 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64)
- v3.AddArg(x)
- v2.AddArg(v3)
- v4 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64)
- v4.AddArg(y)
- v2.AddArg(v4)
- v.AddArg(v2)
- return true
- }
-}
func rewriteValueS390X_OpHmul32(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
case OpFloor:
v.Op = OpWasmF64Floor
return true
- case OpGeq16:
- return rewriteValueWasm_OpGeq16(v)
- case OpGeq16U:
- return rewriteValueWasm_OpGeq16U(v)
- case OpGeq32:
- return rewriteValueWasm_OpGeq32(v)
case OpGeq32F:
v.Op = OpWasmF32Ge
return true
- case OpGeq32U:
- return rewriteValueWasm_OpGeq32U(v)
- case OpGeq64:
- v.Op = OpWasmI64GeS
- return true
case OpGeq64F:
v.Op = OpWasmF64Ge
return true
- case OpGeq64U:
- v.Op = OpWasmI64GeU
- return true
- case OpGeq8:
- return rewriteValueWasm_OpGeq8(v)
- case OpGeq8U:
- return rewriteValueWasm_OpGeq8U(v)
case OpGetCallerPC:
v.Op = OpWasmLoweredGetCallerPC
return true
case OpGetClosurePtr:
v.Op = OpWasmLoweredGetClosurePtr
return true
- case OpGreater16:
- return rewriteValueWasm_OpGreater16(v)
- case OpGreater16U:
- return rewriteValueWasm_OpGreater16U(v)
- case OpGreater32:
- return rewriteValueWasm_OpGreater32(v)
case OpGreater32F:
v.Op = OpWasmF32Gt
return true
- case OpGreater32U:
- return rewriteValueWasm_OpGreater32U(v)
- case OpGreater64:
- v.Op = OpWasmI64GtS
- return true
case OpGreater64F:
v.Op = OpWasmF64Gt
return true
- case OpGreater64U:
- v.Op = OpWasmI64GtU
- return true
- case OpGreater8:
- return rewriteValueWasm_OpGreater8(v)
- case OpGreater8U:
- return rewriteValueWasm_OpGreater8U(v)
case OpInterCall:
v.Op = OpWasmLoweredInterCall
return true
return true
}
}
-func rewriteValueWasm_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16 x y)
- // result: (I64GeS (SignExt16to64 x) (SignExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeS)
- v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq16U x y)
- // result: (I64GeU (ZeroExt16to64 x) (ZeroExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeU)
- v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32 x y)
- // result: (I64GeS (SignExt32to64 x) (SignExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeS)
- v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq32U x y)
- // result: (I64GeU (ZeroExt32to64 x) (ZeroExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeU)
- v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8 x y)
- // result: (I64GeS (SignExt8to64 x) (SignExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeS)
- v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq8U x y)
- // result: (I64GeU (ZeroExt8to64 x) (ZeroExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GeU)
- v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16 x y)
- // result: (I64GtS (SignExt16to64 x) (SignExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtS)
- v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater16U x y)
- // result: (I64GtU (ZeroExt16to64 x) (ZeroExt16to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtU)
- v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32 x y)
- // result: (I64GtS (SignExt32to64 x) (SignExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtS)
- v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater32U x y)
- // result: (I64GtU (ZeroExt32to64 x) (ZeroExt32to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtU)
- v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8 x y)
- // result: (I64GtS (SignExt8to64 x) (SignExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtS)
- v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
-func rewriteValueWasm_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater8U x y)
- // result: (I64GtU (ZeroExt8to64 x) (ZeroExt8to64 y))
- for {
- x := v_0
- y := v_1
- v.reset(OpWasmI64GtU)
- v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v0.AddArg(x)
- v.AddArg(v0)
- v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64)
- v1.AddArg(y)
- v.AddArg(v1)
- return true
- }
-}
func rewriteValueWasm_OpIsNonNil(v *Value) bool {
v_0 := v.Args[0]
b := v.Block
return true
case OpEq64:
return rewriteValuedec64_OpEq64(v)
- case OpGeq64:
- return rewriteValuedec64_OpGeq64(v)
- case OpGeq64U:
- return rewriteValuedec64_OpGeq64U(v)
- case OpGreater64:
- return rewriteValuedec64_OpGreater64(v)
- case OpGreater64U:
- return rewriteValuedec64_OpGreater64U(v)
case OpInt64Hi:
return rewriteValuedec64_OpInt64Hi(v)
case OpInt64Lo:
return true
}
}
-func rewriteValuedec64_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64 x y)
- // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y))))
- for {
- x := v_0
- y := v_1
- v.reset(OpOrB)
- v0 := b.NewValue0(v.Pos, OpGreater32, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- v3 := b.NewValue0(v.Pos, OpAndB, typ.Bool)
- v4 := b.NewValue0(v.Pos, OpEq32, typ.Bool)
- v5 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v5.AddArg(x)
- v4.AddArg(v5)
- v6 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v6.AddArg(y)
- v4.AddArg(v6)
- v3.AddArg(v4)
- v7 := b.NewValue0(v.Pos, OpGeq32U, typ.Bool)
- v8 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v8.AddArg(x)
- v7.AddArg(v8)
- v9 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v9.AddArg(y)
- v7.AddArg(v9)
- v3.AddArg(v7)
- v.AddArg(v3)
- return true
- }
-}
-func rewriteValuedec64_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Geq64U x y)
- // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y))))
- for {
- x := v_0
- y := v_1
- v.reset(OpOrB)
- v0 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- v3 := b.NewValue0(v.Pos, OpAndB, typ.Bool)
- v4 := b.NewValue0(v.Pos, OpEq32, typ.Bool)
- v5 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v5.AddArg(x)
- v4.AddArg(v5)
- v6 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v6.AddArg(y)
- v4.AddArg(v6)
- v3.AddArg(v4)
- v7 := b.NewValue0(v.Pos, OpGeq32U, typ.Bool)
- v8 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v8.AddArg(x)
- v7.AddArg(v8)
- v9 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v9.AddArg(y)
- v7.AddArg(v9)
- v3.AddArg(v7)
- v.AddArg(v3)
- return true
- }
-}
-func rewriteValuedec64_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater64 x y)
- // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y))))
- for {
- x := v_0
- y := v_1
- v.reset(OpOrB)
- v0 := b.NewValue0(v.Pos, OpGreater32, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- v3 := b.NewValue0(v.Pos, OpAndB, typ.Bool)
- v4 := b.NewValue0(v.Pos, OpEq32, typ.Bool)
- v5 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v5.AddArg(x)
- v4.AddArg(v5)
- v6 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v6.AddArg(y)
- v4.AddArg(v6)
- v3.AddArg(v4)
- v7 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool)
- v8 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v8.AddArg(x)
- v7.AddArg(v8)
- v9 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v9.AddArg(y)
- v7.AddArg(v9)
- v3.AddArg(v7)
- v.AddArg(v3)
- return true
- }
-}
-func rewriteValuedec64_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- b := v.Block
- typ := &b.Func.Config.Types
- // match: (Greater64U x y)
- // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y))))
- for {
- x := v_0
- y := v_1
- v.reset(OpOrB)
- v0 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool)
- v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v1.AddArg(x)
- v0.AddArg(v1)
- v2 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v2.AddArg(y)
- v0.AddArg(v2)
- v.AddArg(v0)
- v3 := b.NewValue0(v.Pos, OpAndB, typ.Bool)
- v4 := b.NewValue0(v.Pos, OpEq32, typ.Bool)
- v5 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v5.AddArg(x)
- v4.AddArg(v5)
- v6 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32)
- v6.AddArg(y)
- v4.AddArg(v6)
- v3.AddArg(v4)
- v7 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool)
- v8 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v8.AddArg(x)
- v7.AddArg(v8)
- v9 := b.NewValue0(v.Pos, OpInt64Lo, typ.UInt32)
- v9.AddArg(y)
- v7.AddArg(v9)
- v3.AddArg(v7)
- v.AddArg(v3)
- return true
- }
-}
func rewriteValuedec64_OpInt64Hi(v *Value) bool {
v_0 := v.Args[0]
// match: (Int64Hi (Int64Make hi _))
return rewriteValuegeneric_OpEqPtr(v)
case OpEqSlice:
return rewriteValuegeneric_OpEqSlice(v)
- case OpGeq16:
- return rewriteValuegeneric_OpGeq16(v)
- case OpGeq16U:
- return rewriteValuegeneric_OpGeq16U(v)
- case OpGeq32:
- return rewriteValuegeneric_OpGeq32(v)
case OpGeq32F:
return rewriteValuegeneric_OpGeq32F(v)
- case OpGeq32U:
- return rewriteValuegeneric_OpGeq32U(v)
- case OpGeq64:
- return rewriteValuegeneric_OpGeq64(v)
case OpGeq64F:
return rewriteValuegeneric_OpGeq64F(v)
- case OpGeq64U:
- return rewriteValuegeneric_OpGeq64U(v)
- case OpGeq8:
- return rewriteValuegeneric_OpGeq8(v)
- case OpGeq8U:
- return rewriteValuegeneric_OpGeq8U(v)
- case OpGreater16:
- return rewriteValuegeneric_OpGreater16(v)
- case OpGreater16U:
- return rewriteValuegeneric_OpGreater16U(v)
- case OpGreater32:
- return rewriteValuegeneric_OpGreater32(v)
case OpGreater32F:
return rewriteValuegeneric_OpGreater32F(v)
- case OpGreater32U:
- return rewriteValuegeneric_OpGreater32U(v)
- case OpGreater64:
- return rewriteValuegeneric_OpGreater64(v)
case OpGreater64F:
return rewriteValuegeneric_OpGreater64F(v)
- case OpGreater64U:
- return rewriteValuegeneric_OpGreater64U(v)
- case OpGreater8:
- return rewriteValuegeneric_OpGreater8(v)
- case OpGreater8U:
- return rewriteValuegeneric_OpGreater8U(v)
case OpIMake:
return rewriteValuegeneric_OpIMake(v)
case OpInterCall:
return true
}
}
-func rewriteValuegeneric_OpGeq16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq16 (Const16 [c]) (Const16 [d]))
- // result: (ConstBool [b2i(c >= d)])
- for {
- if v_0.Op != OpConst16 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst16 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c >= d)
- return true
- }
- // match: (Geq16 (And16 _ (Const16 [c])) (Const16 [0]))
- // cond: int16(c) >= 0
- // result: (ConstBool [1])
- for {
- if v_0.Op != OpAnd16 {
- break
- }
- _ = v_0.Args[1]
- v_0_0 := v_0.Args[0]
- v_0_1 := v_0.Args[1]
- for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
- if v_0_1.Op != OpConst16 {
- continue
- }
- c := v_0_1.AuxInt
- if v_1.Op != OpConst16 || v_1.AuxInt != 0 || !(int16(c) >= 0) {
- continue
- }
- v.reset(OpConstBool)
- v.AuxInt = 1
- return true
- }
- break
- }
- return false
-}
-func rewriteValuegeneric_OpGeq16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq16U (Const16 [c]) (Const16 [d]))
- // result: (ConstBool [b2i(uint16(c) >= uint16(d))])
- for {
- if v_0.Op != OpConst16 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst16 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint16(c) >= uint16(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGeq32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq32 (Const32 [c]) (Const32 [d]))
- // result: (ConstBool [b2i(c >= d)])
- for {
- if v_0.Op != OpConst32 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst32 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c >= d)
- return true
- }
- // match: (Geq32 (And32 _ (Const32 [c])) (Const32 [0]))
- // cond: int32(c) >= 0
- // result: (ConstBool [1])
- for {
- if v_0.Op != OpAnd32 {
- break
- }
- _ = v_0.Args[1]
- v_0_0 := v_0.Args[0]
- v_0_1 := v_0.Args[1]
- for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
- if v_0_1.Op != OpConst32 {
- continue
- }
- c := v_0_1.AuxInt
- if v_1.Op != OpConst32 || v_1.AuxInt != 0 || !(int32(c) >= 0) {
- continue
- }
- v.reset(OpConstBool)
- v.AuxInt = 1
- return true
- }
- break
- }
- return false
-}
func rewriteValuegeneric_OpGeq32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
}
return false
}
-func rewriteValuegeneric_OpGeq32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq32U (Const32 [c]) (Const32 [d]))
- // result: (ConstBool [b2i(uint32(c) >= uint32(d))])
- for {
- if v_0.Op != OpConst32 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst32 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint32(c) >= uint32(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGeq64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq64 (Const64 [c]) (Const64 [d]))
- // result: (ConstBool [b2i(c >= d)])
- for {
- if v_0.Op != OpConst64 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst64 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c >= d)
- return true
- }
- // match: (Geq64 (And64 _ (Const64 [c])) (Const64 [0]))
- // cond: int64(c) >= 0
- // result: (ConstBool [1])
- for {
- if v_0.Op != OpAnd64 {
- break
- }
- _ = v_0.Args[1]
- v_0_0 := v_0.Args[0]
- v_0_1 := v_0.Args[1]
- for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
- if v_0_1.Op != OpConst64 {
- continue
- }
- c := v_0_1.AuxInt
- if v_1.Op != OpConst64 || v_1.AuxInt != 0 || !(int64(c) >= 0) {
- continue
- }
- v.reset(OpConstBool)
- v.AuxInt = 1
- return true
- }
- break
- }
- // match: (Geq64 (Rsh64Ux64 _ (Const64 [c])) (Const64 [0]))
- // cond: c > 0
- // result: (ConstBool [1])
- for {
- if v_0.Op != OpRsh64Ux64 {
- break
- }
- _ = v_0.Args[1]
- v_0_1 := v_0.Args[1]
- if v_0_1.Op != OpConst64 {
- break
- }
- c := v_0_1.AuxInt
- if v_1.Op != OpConst64 || v_1.AuxInt != 0 || !(c > 0) {
- break
- }
- v.reset(OpConstBool)
- v.AuxInt = 1
- return true
- }
- return false
-}
func rewriteValuegeneric_OpGeq64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
}
return false
}
-func rewriteValuegeneric_OpGeq64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq64U (Const64 [c]) (Const64 [d]))
- // result: (ConstBool [b2i(uint64(c) >= uint64(d))])
- for {
- if v_0.Op != OpConst64 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst64 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint64(c) >= uint64(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGeq8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq8 (Const8 [c]) (Const8 [d]))
- // result: (ConstBool [b2i(c >= d)])
- for {
- if v_0.Op != OpConst8 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst8 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c >= d)
- return true
- }
- // match: (Geq8 (And8 _ (Const8 [c])) (Const8 [0]))
- // cond: int8(c) >= 0
- // result: (ConstBool [1])
- for {
- if v_0.Op != OpAnd8 {
- break
- }
- _ = v_0.Args[1]
- v_0_0 := v_0.Args[0]
- v_0_1 := v_0.Args[1]
- for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
- if v_0_1.Op != OpConst8 {
- continue
- }
- c := v_0_1.AuxInt
- if v_1.Op != OpConst8 || v_1.AuxInt != 0 || !(int8(c) >= 0) {
- continue
- }
- v.reset(OpConstBool)
- v.AuxInt = 1
- return true
- }
- break
- }
- return false
-}
-func rewriteValuegeneric_OpGeq8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Geq8U (Const8 [c]) (Const8 [d]))
- // result: (ConstBool [b2i(uint8(c) >= uint8(d))])
- for {
- if v_0.Op != OpConst8 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst8 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint8(c) >= uint8(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater16(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater16 (Const16 [c]) (Const16 [d]))
- // result: (ConstBool [b2i(c > d)])
- for {
- if v_0.Op != OpConst16 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst16 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c > d)
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater16U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater16U (Const16 [c]) (Const16 [d]))
- // result: (ConstBool [b2i(uint16(c) > uint16(d))])
- for {
- if v_0.Op != OpConst16 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst16 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint16(c) > uint16(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater32(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater32 (Const32 [c]) (Const32 [d]))
- // result: (ConstBool [b2i(c > d)])
- for {
- if v_0.Op != OpConst32 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst32 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c > d)
- return true
- }
- return false
-}
func rewriteValuegeneric_OpGreater32F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
}
return false
}
-func rewriteValuegeneric_OpGreater32U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater32U (Const32 [c]) (Const32 [d]))
- // result: (ConstBool [b2i(uint32(c) > uint32(d))])
- for {
- if v_0.Op != OpConst32 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst32 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint32(c) > uint32(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater64(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater64 (Const64 [c]) (Const64 [d]))
- // result: (ConstBool [b2i(c > d)])
- for {
- if v_0.Op != OpConst64 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst64 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c > d)
- return true
- }
- return false
-}
func rewriteValuegeneric_OpGreater64F(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
}
return false
}
-func rewriteValuegeneric_OpGreater64U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater64U (Const64 [c]) (Const64 [d]))
- // result: (ConstBool [b2i(uint64(c) > uint64(d))])
- for {
- if v_0.Op != OpConst64 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst64 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint64(c) > uint64(d))
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater8(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater8 (Const8 [c]) (Const8 [d]))
- // result: (ConstBool [b2i(c > d)])
- for {
- if v_0.Op != OpConst8 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst8 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(c > d)
- return true
- }
- return false
-}
-func rewriteValuegeneric_OpGreater8U(v *Value) bool {
- v_1 := v.Args[1]
- v_0 := v.Args[0]
- // match: (Greater8U (Const8 [c]) (Const8 [d]))
- // result: (ConstBool [b2i(uint8(c) > uint8(d))])
- for {
- if v_0.Op != OpConst8 {
- break
- }
- c := v_0.AuxInt
- if v_1.Op != OpConst8 {
- break
- }
- d := v_1.AuxInt
- v.reset(OpConstBool)
- v.AuxInt = b2i(uint8(c) > uint8(d))
- return true
- }
- return false
-}
func rewriteValuegeneric_OpIMake(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
v.AuxInt = b2i(c <= d)
return true
}
+ // match: (Leq16 (Const16 [0]) (And16 _ (Const16 [c])))
+ // cond: int16(c) >= 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst16 || v_0.AuxInt != 0 || v_1.Op != OpAnd16 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_0 := v_1.Args[0]
+ v_1_1 := v_1.Args[1]
+ for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
+ if v_1_1.Op != OpConst16 {
+ continue
+ }
+ c := v_1_1.AuxInt
+ if !(int16(c) >= 0) {
+ continue
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
+ break
+ }
+ // match: (Leq16 (Const16 [0]) (Rsh16Ux64 _ (Const64 [c])))
+ // cond: c > 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst16 || v_0.AuxInt != 0 || v_1.Op != OpRsh16Ux64 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_1 := v_1.Args[1]
+ if v_1_1.Op != OpConst64 {
+ break
+ }
+ c := v_1_1.AuxInt
+ if !(c > 0) {
+ break
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
return false
}
func rewriteValuegeneric_OpLeq16U(v *Value) bool {
v.AuxInt = b2i(c <= d)
return true
}
+ // match: (Leq32 (Const32 [0]) (And32 _ (Const32 [c])))
+ // cond: int32(c) >= 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst32 || v_0.AuxInt != 0 || v_1.Op != OpAnd32 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_0 := v_1.Args[0]
+ v_1_1 := v_1.Args[1]
+ for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
+ if v_1_1.Op != OpConst32 {
+ continue
+ }
+ c := v_1_1.AuxInt
+ if !(int32(c) >= 0) {
+ continue
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
+ break
+ }
+ // match: (Leq32 (Const32 [0]) (Rsh32Ux64 _ (Const64 [c])))
+ // cond: c > 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst32 || v_0.AuxInt != 0 || v_1.Op != OpRsh32Ux64 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_1 := v_1.Args[1]
+ if v_1_1.Op != OpConst64 {
+ break
+ }
+ c := v_1_1.AuxInt
+ if !(c > 0) {
+ break
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
return false
}
func rewriteValuegeneric_OpLeq32F(v *Value) bool {
// match: (Leq64 (Const64 [c]) (Const64 [d]))
// result: (ConstBool [b2i(c <= d)])
for {
- if v_0.Op != OpConst64 {
+ if v_0.Op != OpConst64 {
+ break
+ }
+ c := v_0.AuxInt
+ if v_1.Op != OpConst64 {
+ break
+ }
+ d := v_1.AuxInt
+ v.reset(OpConstBool)
+ v.AuxInt = b2i(c <= d)
+ return true
+ }
+ // match: (Leq64 (Const64 [0]) (And64 _ (Const64 [c])))
+ // cond: int64(c) >= 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst64 || v_0.AuxInt != 0 || v_1.Op != OpAnd64 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_0 := v_1.Args[0]
+ v_1_1 := v_1.Args[1]
+ for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
+ if v_1_1.Op != OpConst64 {
+ continue
+ }
+ c := v_1_1.AuxInt
+ if !(int64(c) >= 0) {
+ continue
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
+ break
+ }
+ // match: (Leq64 (Const64 [0]) (Rsh64Ux64 _ (Const64 [c])))
+ // cond: c > 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst64 || v_0.AuxInt != 0 || v_1.Op != OpRsh64Ux64 {
break
}
- c := v_0.AuxInt
- if v_1.Op != OpConst64 {
+ _ = v_1.Args[1]
+ v_1_1 := v_1.Args[1]
+ if v_1_1.Op != OpConst64 {
+ break
+ }
+ c := v_1_1.AuxInt
+ if !(c > 0) {
break
}
- d := v_1.AuxInt
v.reset(OpConstBool)
- v.AuxInt = b2i(c <= d)
+ v.AuxInt = 1
return true
}
return false
v.AuxInt = b2i(c <= d)
return true
}
+ // match: (Leq8 (Const8 [0]) (And8 _ (Const8 [c])))
+ // cond: int8(c) >= 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst8 || v_0.AuxInt != 0 || v_1.Op != OpAnd8 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_0 := v_1.Args[0]
+ v_1_1 := v_1.Args[1]
+ for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
+ if v_1_1.Op != OpConst8 {
+ continue
+ }
+ c := v_1_1.AuxInt
+ if !(int8(c) >= 0) {
+ continue
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
+ break
+ }
+ // match: (Leq8 (Const8 [0]) (Rsh8Ux64 _ (Const64 [c])))
+ // cond: c > 0
+ // result: (ConstBool [1])
+ for {
+ if v_0.Op != OpConst8 || v_0.AuxInt != 0 || v_1.Op != OpRsh8Ux64 {
+ break
+ }
+ _ = v_1.Args[1]
+ v_1_1 := v_1.Args[1]
+ if v_1_1.Op != OpConst64 {
+ break
+ }
+ c := v_1_1.AuxInt
+ if !(c > 0) {
+ break
+ }
+ v.reset(OpConstBool)
+ v.AuxInt = 1
+ return true
+ }
return false
}
func rewriteValuegeneric_OpLeq8U(v *Value) bool {
v.AddArg(y)
return true
}
- // match: (Not (Greater64 x y))
- // result: (Leq64 x y)
- for {
- if v_0.Op != OpGreater64 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq64)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater32 x y))
- // result: (Leq32 x y)
- for {
- if v_0.Op != OpGreater32 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq32)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater16 x y))
- // result: (Leq16 x y)
- for {
- if v_0.Op != OpGreater16 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq16)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater8 x y))
- // result: (Leq8 x y)
- for {
- if v_0.Op != OpGreater8 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq8)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater64U x y))
- // result: (Leq64U x y)
- for {
- if v_0.Op != OpGreater64U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq64U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater32U x y))
- // result: (Leq32U x y)
- for {
- if v_0.Op != OpGreater32U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq32U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater16U x y))
- // result: (Leq16U x y)
- for {
- if v_0.Op != OpGreater16U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq16U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Greater8U x y))
- // result: (Leq8U x y)
- for {
- if v_0.Op != OpGreater8U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLeq8U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq64 x y))
- // result: (Less64 x y)
- for {
- if v_0.Op != OpGeq64 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess64)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq32 x y))
- // result: (Less32 x y)
- for {
- if v_0.Op != OpGeq32 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess32)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq16 x y))
- // result: (Less16 x y)
- for {
- if v_0.Op != OpGeq16 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess16)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq8 x y))
- // result: (Less8 x y)
- for {
- if v_0.Op != OpGeq8 {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess8)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq64U x y))
- // result: (Less64U x y)
- for {
- if v_0.Op != OpGeq64U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess64U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq32U x y))
- // result: (Less32U x y)
- for {
- if v_0.Op != OpGeq32U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess32U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq16U x y))
- // result: (Less16U x y)
- for {
- if v_0.Op != OpGeq16U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess16U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
- // match: (Not (Geq8U x y))
- // result: (Less8U x y)
- for {
- if v_0.Op != OpGeq8U {
- break
- }
- y := v_0.Args[1]
- x := v_0.Args[0]
- v.reset(OpLess8U)
- v.AddArg(x)
- v.AddArg(y)
- return true
- }
// match: (Not (Less64 x y))
- // result: (Geq64 x y)
+ // result: (Leq64 y x)
for {
if v_0.Op != OpLess64 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq64)
- v.AddArg(x)
+ v.reset(OpLeq64)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less32 x y))
- // result: (Geq32 x y)
+ // result: (Leq32 y x)
for {
if v_0.Op != OpLess32 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq32)
- v.AddArg(x)
+ v.reset(OpLeq32)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less16 x y))
- // result: (Geq16 x y)
+ // result: (Leq16 y x)
for {
if v_0.Op != OpLess16 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq16)
- v.AddArg(x)
+ v.reset(OpLeq16)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less8 x y))
- // result: (Geq8 x y)
+ // result: (Leq8 y x)
for {
if v_0.Op != OpLess8 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq8)
- v.AddArg(x)
+ v.reset(OpLeq8)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less64U x y))
- // result: (Geq64U x y)
+ // result: (Leq64U y x)
for {
if v_0.Op != OpLess64U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq64U)
- v.AddArg(x)
+ v.reset(OpLeq64U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less32U x y))
- // result: (Geq32U x y)
+ // result: (Leq32U y x)
for {
if v_0.Op != OpLess32U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq32U)
- v.AddArg(x)
+ v.reset(OpLeq32U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less16U x y))
- // result: (Geq16U x y)
+ // result: (Leq16U y x)
for {
if v_0.Op != OpLess16U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq16U)
- v.AddArg(x)
+ v.reset(OpLeq16U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Less8U x y))
- // result: (Geq8U x y)
+ // result: (Leq8U y x)
for {
if v_0.Op != OpLess8U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGeq8U)
- v.AddArg(x)
+ v.reset(OpLeq8U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq64 x y))
- // result: (Greater64 x y)
+ // result: (Less64 y x)
for {
if v_0.Op != OpLeq64 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater64)
- v.AddArg(x)
+ v.reset(OpLess64)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq32 x y))
- // result: (Greater32 x y)
+ // result: (Less32 y x)
for {
if v_0.Op != OpLeq32 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater32)
- v.AddArg(x)
+ v.reset(OpLess32)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq16 x y))
- // result: (Greater16 x y)
+ // result: (Less16 y x)
for {
if v_0.Op != OpLeq16 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater16)
- v.AddArg(x)
+ v.reset(OpLess16)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq8 x y))
- // result: (Greater8 x y)
+ // result: (Less8 y x)
for {
if v_0.Op != OpLeq8 {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater8)
- v.AddArg(x)
+ v.reset(OpLess8)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq64U x y))
- // result: (Greater64U x y)
+ // result: (Less64U y x)
for {
if v_0.Op != OpLeq64U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater64U)
- v.AddArg(x)
+ v.reset(OpLess64U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq32U x y))
- // result: (Greater32U x y)
+ // result: (Less32U y x)
for {
if v_0.Op != OpLeq32U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater32U)
- v.AddArg(x)
+ v.reset(OpLess32U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq16U x y))
- // result: (Greater16U x y)
+ // result: (Less16U y x)
for {
if v_0.Op != OpLeq16U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater16U)
- v.AddArg(x)
+ v.reset(OpLess16U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
// match: (Not (Leq8U x y))
- // result: (Greater8U x y)
+ // result: (Less8U y x)
for {
if v_0.Op != OpLeq8U {
break
}
y := v_0.Args[1]
x := v_0.Args[0]
- v.reset(OpGreater8U)
- v.AddArg(x)
+ v.reset(OpLess8U)
v.AddArg(y)
+ v.AddArg(x)
return true
}
return false
if a == b { // ERROR "Disproved Eq64$"
return 47
}
- if a > b { // ERROR "Disproved Greater64$"
+ if a > b { // ERROR "Disproved Less64$"
return 50
}
if a < b { // ERROR "Proved Less64$"
func f4e(a, b, c int) int {
if a < b {
- if b > a { // ERROR "Proved Greater64$"
+ if b > a { // ERROR "Proved Less64$"
return 101
}
return 103
}
return 114
}
- if b >= a { // ERROR "Proved Geq64$"
+ if b >= a { // ERROR "Proved Leq64$"
if b == a { // ERROR "Proved Eq64$"
return 118
}
}
func f6x(a uint8) int {
- if a > a { // ERROR "Disproved Greater8U$"
+ if a > a { // ERROR "Disproved Less8U$"
return 143
}
return 151
}
func f6e(a uint8) int {
- if a >= a { // ERROR "Proved Geq8U$"
+ if a >= a { // ERROR "Proved Leq8U$"
return 149
}
return 151
}
}
if x {
- if a >= 12 { // ERROR "Proved Geq64$"
+ if a >= 12 { // ERROR "Proved Leq64$"
return 4
}
}
if x {
- if a > 12 { // ERROR "Proved Greater64$"
+ if a > 12 { // ERROR "Proved Less64$"
return 5
}
}
}
}
if x {
- if a >= -9 { // ERROR "Proved Geq64$"
+ if a >= -9 { // ERROR "Proved Leq64$"
return 10
}
}
if x {
- if a > -9 { // ERROR "Disproved Greater64$"
+ if a > -9 { // ERROR "Disproved Less64$"
return 11
}
}
}
}
if x {
- if a >= 90 { // ERROR "Disproved Geq64$"
+ if a >= 90 { // ERROR "Disproved Leq64$"
return 16
}
}
if x {
- if a > 90 { // ERROR "Disproved Greater64$"
+ if a > 90 { // ERROR "Disproved Less64$"
return 17
}
}
func f13e(a int) int {
if a > 9 {
- if a > 5 { // ERROR "Proved Greater64$"
+ if a > 5 { // ERROR "Proved Less64$"
return 1
}
}
if a == 0 {
return 1
}
- if a > 0 { // ERROR "Proved Greater64U$"
+ if a > 0 { // ERROR "Proved Less64U$"
return 2
}
return 3
_ = b[x]
_ = b[y]
- if x > len(b) { // ERROR "Disproved Greater64$"
+ if x > len(b) { // ERROR "Disproved Less64$"
return
}
- if y > uint(len(b)) { // ERROR "Disproved Greater64U$"
+ if y > uint(len(b)) { // ERROR "Disproved Less64U$"
return
}
- if int(y) > len(b) { // ERROR "Disproved Greater64$"
+ if int(y) > len(b) { // ERROR "Disproved Less64$"
return
}
}
}
last := len(stack) - 1
e = stack[last]
- // Buggy compiler prints "Disproved Geq64" for the next line.
+ // Buggy compiler prints "Disproved Leq64" for the next line.
stack = stack[:last] // ERROR "Proved IsSliceInBounds"
return e, nil
}
func lim1(x, y, z int) {
// Test relations between signed and unsigned limits.
if x > 5 {
- if uint(x) > 5 { // ERROR "Proved Greater64U$"
+ if uint(x) > 5 { // ERROR "Proved Less64U$"
return
}
}
if y >= 0 && y < 4 {
- if uint(y) > 4 { // ERROR "Disproved Greater64U$"
+ if uint(y) > 4 { // ERROR "Disproved Less64U$"
return
}
if uint(y) < 5 { // ERROR "Proved Less64U$"
}
if len(b) < cap(b) {
// This eliminates the growslice path.
- b = append(b, 1) // ERROR "Disproved Greater64U$"
+ b = append(b, 1) // ERROR "Disproved Less64U$"
}
}
func fence2(x, y int) {
if x-1 < y {
- if x > y { // ERROR "Disproved Greater64$"
+ if x > y { // ERROR "Disproved Less64$"
return
}
}
func trans1(x, y int64) {
if x > 5 {
if y > x {
- if y > 2 { // ERROR "Proved Greater64$"
+ if y > 2 { // ERROR "Proved Less64$"
return
}
} else if y == x {
- if y > 5 { // ERROR "Proved Greater64$"
+ if y > 5 { // ERROR "Proved Less64$"
return
}
}
}
if x >= 10 {
if y > x {
- if y > 10 { // ERROR "Proved Greater64$"
+ if y > 10 { // ERROR "Proved Less64$"
return
}
}
if i < len(b) { // ERROR "Proved Less64$"
println("x")
}
- if i >= 0 { // ERROR "Proved Geq64$"
+ if i >= 0 { // ERROR "Proved Leq64$"
println("x")
}
}
if i < len(b) { // ERROR "Proved Less64$"
println("x")
}
- if i >= 0 { // ERROR "Proved Geq64$"
+ if i >= 0 { // ERROR "Proved Leq64$"
println("x")
}
}