github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/engine/wazevo/ssa/cmp.go (about) 1 package ssa 2 3 // IntegerCmpCond represents a condition for integer comparison. 4 type IntegerCmpCond byte 5 6 const ( 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. 32 func (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. 60 func (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 70 type FloatCmpCond byte 71 72 const ( 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. 90 func (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 }