cmp.go

  1package ssa
  2
  3// IntegerCmpCond represents a condition for integer comparison.
  4type IntegerCmpCond byte
  5
  6const (
  7	// IntegerCmpCondInvalid represents an invalid condition.
  8	IntegerCmpCondInvalid IntegerCmpCond = iota
  9	// IntegerCmpCondEqual represents "==".
 10	IntegerCmpCondEqual
 11	// IntegerCmpCondNotEqual represents "!=".
 12	IntegerCmpCondNotEqual
 13	// IntegerCmpCondSignedLessThan represents Signed "<".
 14	IntegerCmpCondSignedLessThan
 15	// IntegerCmpCondSignedGreaterThanOrEqual represents Signed ">=".
 16	IntegerCmpCondSignedGreaterThanOrEqual
 17	// IntegerCmpCondSignedGreaterThan represents Signed ">".
 18	IntegerCmpCondSignedGreaterThan
 19	// IntegerCmpCondSignedLessThanOrEqual represents Signed "<=".
 20	IntegerCmpCondSignedLessThanOrEqual
 21	// IntegerCmpCondUnsignedLessThan represents Unsigned "<".
 22	IntegerCmpCondUnsignedLessThan
 23	// IntegerCmpCondUnsignedGreaterThanOrEqual represents Unsigned ">=".
 24	IntegerCmpCondUnsignedGreaterThanOrEqual
 25	// IntegerCmpCondUnsignedGreaterThan represents Unsigned ">".
 26	IntegerCmpCondUnsignedGreaterThan
 27	// IntegerCmpCondUnsignedLessThanOrEqual represents Unsigned "<=".
 28	IntegerCmpCondUnsignedLessThanOrEqual
 29)
 30
 31// String implements fmt.Stringer.
 32func (i IntegerCmpCond) String() string {
 33	switch i {
 34	case IntegerCmpCondEqual:
 35		return "eq"
 36	case IntegerCmpCondNotEqual:
 37		return "neq"
 38	case IntegerCmpCondSignedLessThan:
 39		return "lt_s"
 40	case IntegerCmpCondSignedGreaterThanOrEqual:
 41		return "ge_s"
 42	case IntegerCmpCondSignedGreaterThan:
 43		return "gt_s"
 44	case IntegerCmpCondSignedLessThanOrEqual:
 45		return "le_s"
 46	case IntegerCmpCondUnsignedLessThan:
 47		return "lt_u"
 48	case IntegerCmpCondUnsignedGreaterThanOrEqual:
 49		return "ge_u"
 50	case IntegerCmpCondUnsignedGreaterThan:
 51		return "gt_u"
 52	case IntegerCmpCondUnsignedLessThanOrEqual:
 53		return "le_u"
 54	default:
 55		panic("invalid integer comparison condition")
 56	}
 57}
 58
 59// Signed returns true if the condition is signed integer comparison.
 60func (i IntegerCmpCond) Signed() bool {
 61	switch i {
 62	case IntegerCmpCondSignedLessThan, IntegerCmpCondSignedGreaterThanOrEqual,
 63		IntegerCmpCondSignedGreaterThan, IntegerCmpCondSignedLessThanOrEqual:
 64		return true
 65	default:
 66		return false
 67	}
 68}
 69
 70type FloatCmpCond byte
 71
 72const (
 73	// FloatCmpCondInvalid represents an invalid condition.
 74	FloatCmpCondInvalid FloatCmpCond = iota
 75	// FloatCmpCondEqual represents "==".
 76	FloatCmpCondEqual
 77	// FloatCmpCondNotEqual represents "!=".
 78	FloatCmpCondNotEqual
 79	// FloatCmpCondLessThan represents "<".
 80	FloatCmpCondLessThan
 81	// FloatCmpCondLessThanOrEqual represents "<=".
 82	FloatCmpCondLessThanOrEqual
 83	// FloatCmpCondGreaterThan represents ">".
 84	FloatCmpCondGreaterThan
 85	// FloatCmpCondGreaterThanOrEqual represents ">=".
 86	FloatCmpCondGreaterThanOrEqual
 87)
 88
 89// String implements fmt.Stringer.
 90func (f FloatCmpCond) String() string {
 91	switch f {
 92	case FloatCmpCondEqual:
 93		return "eq"
 94	case FloatCmpCondNotEqual:
 95		return "neq"
 96	case FloatCmpCondLessThan:
 97		return "lt"
 98	case FloatCmpCondLessThanOrEqual:
 99		return "le"
100	case FloatCmpCondGreaterThan:
101		return "gt"
102	case FloatCmpCondGreaterThanOrEqual:
103		return "ge"
104	default:
105		panic("invalid float comparison condition")
106	}
107}