Skip to content

Commit e6a185b

Browse files
committed
Add comparison, bitwise and ternary operators
1 parent 33bcf70 commit e6a185b

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

src/operators.wat

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
(module
22

3+
;; ARITHMETIC
4+
35
;; int add(int a, int b) {
46
;; return a + b;
57
;; }
@@ -39,4 +41,125 @@
3941
(i32.rem_s
4042
(get_local $a)
4143
(get_local $b)))
44+
45+
46+
;; COMPARISON
47+
48+
;; bool compareEqual(int a, int b) {
49+
;; return a == b;
50+
;; }
51+
(func $compareEqual (param $a i32) (param $b i32) (result i32)
52+
(i32.eq
53+
(get_local $a)
54+
(get_local $b)))
55+
56+
;; bool compareUnequal(int a, int b) {
57+
;; return a != b;
58+
;; }
59+
(func $compareUnequal (param $a i32) (param $b i32) (result i32)
60+
(i32.ne
61+
(get_local $a)
62+
(get_local $b)))
63+
64+
;; bool lessThan(int a, int b) {
65+
;; return a < b;
66+
;; }
67+
(func $lessThan (param $a i32) (param $b i32) (result i32)
68+
(i32.lt_s
69+
(get_local $a)
70+
(get_local $b)))
71+
72+
;; bool lessThanOrEqual(int a, int b) {
73+
;; return a <= b;
74+
;; }
75+
(func $lessThanOrEqual (param $a i32) (param $b i32) (result i32)
76+
(i32.le_s
77+
(get_local $a)
78+
(get_local $b)))
79+
80+
;; bool greaterThan(int a, int b) {
81+
;; return a > b;
82+
;; }
83+
(func $greaterThan (param $a i32) (param $b i32) (result i32)
84+
(i32.gt_s
85+
(get_local $a)
86+
(get_local $b)))
87+
88+
;; bool greaterThanOrEqual(int a, int b) {
89+
;; return a >= b;
90+
;; }
91+
(func $greaterThanOrEqual (param $a i32) (param $b i32) (result i32)
92+
(i32.ge_s
93+
(get_local $a)
94+
(get_local $b)))
95+
96+
;; bool compareEqualToZero(int a) {
97+
;; return a == 0;
98+
;; }
99+
(func $compareEqualToZero (param $a i32) (result i32)
100+
(i32.eqz
101+
(get_local $a)))
102+
103+
104+
;; BITWISE
105+
106+
;; int bitwiseAnd(int a, int b) {
107+
;; return a & b;
108+
;; }
109+
(func $bitwiseAnd (param $a i32) (param $b i32) (result i32)
110+
(i32.and
111+
(get_local $a)
112+
(get_local $b)))
113+
114+
;; int bitwiseInclusiveOr(int a, int b) {
115+
;; return a | b;
116+
;; }
117+
(func $bitwiseInclusiveOr (param $a i32) (param $b i32) (result i32)
118+
(i32.or
119+
(get_local $a)
120+
(get_local $b)))
121+
122+
;; int bitwiseExclusiveOr(int a, int b) {
123+
;; return a ^ b;
124+
;; }
125+
(func $bitwiseExclusiveOr (param $a i32) (param $b i32) (result i32)
126+
(i32.xor
127+
(get_local $a)
128+
(get_local $b)))
129+
130+
;; int bitwiseNot(int a) {
131+
;; return ~a;
132+
;; }
133+
(func $bitwiseNot (param $a i32) (result i32)
134+
(i32.xor
135+
(get_local $a)
136+
(i32.const -1)))
137+
138+
;; int shiftLeft(int a, int b) {
139+
;; return a << b;
140+
;; }
141+
(func $shiftLeft (param $a i32) (param $b i32) (result i32)
142+
(i32.shl
143+
(get_local $a)
144+
(get_local $b)))
145+
146+
;; int shiftRight(int a, int b) {
147+
;; return a >> b;
148+
;; }
149+
(func $shiftRight (param $a i32) (param $b i32) (result i32)
150+
(i32.shr_s
151+
(get_local $a)
152+
(get_local $b)))
153+
154+
155+
;; TERNARY
156+
157+
;; int ternaryOperator(bool a) {
158+
;; return a ? 3 : 4;
159+
;; }
160+
(func $ternaryOperator (param $a i32) (result i32)
161+
(select
162+
(i32.const 3)
163+
(i32.const 4)
164+
(get_local $a)))
42165
)

0 commit comments

Comments
 (0)