summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go')
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go107
1 files changed, 107 insertions, 0 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go b/vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go
new file mode 100644
index 000000000..15b62ca8e
--- /dev/null
+++ b/vendor/github.com/tetratelabs/wazero/internal/engine/wazevo/ssa/cmp.go
@@ -0,0 +1,107 @@
+package ssa
+
+// IntegerCmpCond represents a condition for integer comparison.
+type IntegerCmpCond byte
+
+const (
+ // IntegerCmpCondInvalid represents an invalid condition.
+ IntegerCmpCondInvalid IntegerCmpCond = iota
+ // IntegerCmpCondEqual represents "==".
+ IntegerCmpCondEqual
+ // IntegerCmpCondNotEqual represents "!=".
+ IntegerCmpCondNotEqual
+ // IntegerCmpCondSignedLessThan represents Signed "<".
+ IntegerCmpCondSignedLessThan
+ // IntegerCmpCondSignedGreaterThanOrEqual represents Signed ">=".
+ IntegerCmpCondSignedGreaterThanOrEqual
+ // IntegerCmpCondSignedGreaterThan represents Signed ">".
+ IntegerCmpCondSignedGreaterThan
+ // IntegerCmpCondSignedLessThanOrEqual represents Signed "<=".
+ IntegerCmpCondSignedLessThanOrEqual
+ // IntegerCmpCondUnsignedLessThan represents Unsigned "<".
+ IntegerCmpCondUnsignedLessThan
+ // IntegerCmpCondUnsignedGreaterThanOrEqual represents Unsigned ">=".
+ IntegerCmpCondUnsignedGreaterThanOrEqual
+ // IntegerCmpCondUnsignedGreaterThan represents Unsigned ">".
+ IntegerCmpCondUnsignedGreaterThan
+ // IntegerCmpCondUnsignedLessThanOrEqual represents Unsigned "<=".
+ IntegerCmpCondUnsignedLessThanOrEqual
+)
+
+// String implements fmt.Stringer.
+func (i IntegerCmpCond) String() string {
+ switch i {
+ case IntegerCmpCondEqual:
+ return "eq"
+ case IntegerCmpCondNotEqual:
+ return "neq"
+ case IntegerCmpCondSignedLessThan:
+ return "lt_s"
+ case IntegerCmpCondSignedGreaterThanOrEqual:
+ return "ge_s"
+ case IntegerCmpCondSignedGreaterThan:
+ return "gt_s"
+ case IntegerCmpCondSignedLessThanOrEqual:
+ return "le_s"
+ case IntegerCmpCondUnsignedLessThan:
+ return "lt_u"
+ case IntegerCmpCondUnsignedGreaterThanOrEqual:
+ return "ge_u"
+ case IntegerCmpCondUnsignedGreaterThan:
+ return "gt_u"
+ case IntegerCmpCondUnsignedLessThanOrEqual:
+ return "le_u"
+ default:
+ panic("invalid integer comparison condition")
+ }
+}
+
+// Signed returns true if the condition is signed integer comparison.
+func (i IntegerCmpCond) Signed() bool {
+ switch i {
+ case IntegerCmpCondSignedLessThan, IntegerCmpCondSignedGreaterThanOrEqual,
+ IntegerCmpCondSignedGreaterThan, IntegerCmpCondSignedLessThanOrEqual:
+ return true
+ default:
+ return false
+ }
+}
+
+type FloatCmpCond byte
+
+const (
+ // FloatCmpCondInvalid represents an invalid condition.
+ FloatCmpCondInvalid FloatCmpCond = iota
+ // FloatCmpCondEqual represents "==".
+ FloatCmpCondEqual
+ // FloatCmpCondNotEqual represents "!=".
+ FloatCmpCondNotEqual
+ // FloatCmpCondLessThan represents "<".
+ FloatCmpCondLessThan
+ // FloatCmpCondLessThanOrEqual represents "<=".
+ FloatCmpCondLessThanOrEqual
+ // FloatCmpCondGreaterThan represents ">".
+ FloatCmpCondGreaterThan
+ // FloatCmpCondGreaterThanOrEqual represents ">=".
+ FloatCmpCondGreaterThanOrEqual
+)
+
+// String implements fmt.Stringer.
+func (f FloatCmpCond) String() string {
+ switch f {
+ case FloatCmpCondEqual:
+ return "eq"
+ case FloatCmpCondNotEqual:
+ return "neq"
+ case FloatCmpCondLessThan:
+ return "lt"
+ case FloatCmpCondLessThanOrEqual:
+ return "le"
+ case FloatCmpCondGreaterThan:
+ return "gt"
+ case FloatCmpCondGreaterThanOrEqual:
+ return "ge"
+ default:
+ panic("invalid float comparison condition")
+ }
+}