blob: 9ce04c14e93b9662f8cb78cf45f6449f015e7ff5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
|
(module
;; Import device functions from JavaScript.
(import "bedrock" "dget1" (func $dget1 (param $p i32) (result i32)))
(import "bedrock" "dset1" (func $dset1 (param $p i32) (param $v i32) (result i32)))
;; We instantiate and export two pages of memory (65536*2 bytes).
;; The first 65535 bytes are program memory, the next 256 bytes are the
;; working stack, and the following 256 bytes are the return stack.
;; Stacks will be downward-growing so that we can push and pop doubles
;; at a time with a single 16-bit instruction (access is little-endian).
(memory (export "memory") 2)
;; Cycle counter and pointer declarations. Stack pointers are downward-growing
;; and point to the highest byte on the stack, not to the next empty byte.
(global $cc (mut i64) (i64.const 0))
(global $ip (mut i32) (i32.const 0))
(global $wp (mut i32) (i32.const 0x10100))
(global $rp (mut i32) (i32.const 0x10200))
;; Memory offset constants.
(global $ip-base i32 (i32.const 0))
(global $wp-base i32 (i32.const 0x10100))
(global $rp-base i32 (i32.const 0x10200))
;; Signal constants.
(global $SIGNAL.BREAK i32 (i32.const 0))
(global $SIGNAL.HALT i32 (i32.const 1))
(global $SIGNAL.DB1 i32 (i32.const 2))
(global $SIGNAL.DB2 i32 (i32.const 3))
(global $SIGNAL.DB3 i32 (i32.const 4))
(global $SIGNAL.DB4 i32 (i32.const 5))
(global $SIGNAL.DB5 i32 (i32.const 6))
(global $SIGNAL.DB6 i32 (i32.const 7))
(global $SIGNAL.SLEEP i32 (i32.const 8))
(global $SIGNAL.RESET i32 (i32.const 9))
(global $SIGNAL.FORK i32 (i32.const 10))
;; Re-initialise pointers.
(func (export "reset")
(global.set $cc (i64.const 0))
(global.set $ip (global.get $ip-base))
(global.set $wp (global.get $wp-base))
(global.set $rp (global.get $rp-base)) )
;; Provide external access to normal pointer values.
(func (export "cc") (result i64) global.get $cc )
(func (export "ip") (result i32) global.get $ip )
(func (export "wp") (result i32) (i32.sub (global.get $wp-base) (global.get $wp)) )
(func (export "rp") (result i32) (i32.sub (global.get $rp-base) (global.get $rp)) )
;; Push value micro-instructions.
(func $wpsh1 (export "wpsh1") (param $v i32)
(global.set $wp (i32.sub (global.get $wp) (i32.const 1)))
(i32.store8 (global.get $wp) (local.get $v)) )
(func $wpsh2 (export "wpsh2") (param $v i32)
(global.set $wp (i32.sub (global.get $wp) (i32.const 2)))
(i32.store16 (global.get $wp) (local.get $v)) )
(func $rpsh1 (export "rpsh1") (param $v i32)
(global.set $rp (i32.sub (global.get $rp) (i32.const 1)))
(i32.store8 (global.get $rp) (local.get $v)) )
(func $rpsh2 (export "rpsh2") (param $v i32)
(global.set $rp (i32.sub (global.get $rp) (i32.const 2)))
(i32.store16 (global.get $rp) (local.get $v)) )
(func $wpshb (export "wpshb") (param $b i32)
(select (i32.const 0xFF) (i32.const 0) (local.get $b))
(call $wpsh1) )
(func $rpshb (export "rpshb") (param $b i32)
(select (i32.const 0xFF) (i32.const 0) (local.get $b))
(call $rpsh1) )
;; Pop value micro-instructions.
(func $wpop1 (export "wpop1") (result i32)
(i32.load8_u (global.get $wp))
(global.set $wp (i32.add (global.get $wp) (i32.const 1))) )
(func $wpop2 (export "wpop2") (result i32)
(i32.load16_u (global.get $wp))
(global.set $wp (i32.add (global.get $wp) (i32.const 2))) )
(func $rpop1 (export "rpop1") (result i32)
(i32.load8_u (global.get $rp))
(global.set $rp (i32.add (global.get $rp) (i32.const 1))) )
(func $rpop2 (export "rpop2") (result i32)
(i32.load16_u (global.get $rp))
(global.set $rp (i32.add (global.get $rp) (i32.const 2))) )
(func $mpop1 (export "mpop1") (result i32)
(i32.load8_u (global.get $ip))
(global.set $ip (i32.add (global.get $ip) (i32.const 1))) )
(func $mpop2 (export "mpop2") (result i32)
(i32.shl (i32.load8_u (global.get $ip)) (i32.const 8))
(i32.load8_u (i32.add (global.get $ip) (i32.const 1)))
(i32.or)
(global.set $ip (i32.add (global.get $ip) (i32.const 2))) )
;; Get value micro-instructions.
(func $wget1 (export "wget1") (result i32)
(i32.load8_u (global.get $wp)) )
(func $wget2 (export "wget2") (result i32)
(i32.load16_u (global.get $wp)) )
(func $rget1 (export "rget1") (result i32)
(i32.load8_u (global.get $rp)) )
(func $rget2 (export "rget2") (result i32)
(i32.load16_u (global.get $rp)) )
(func $mget1 (export "mget1") (param $a i32) (result i32)
(i32.load8_u (local.get $a)) )
(func $mget2 (export "mget2") (param $a i32) (result i32)
(i32.shl (i32.load8_u (local.get $a)) (i32.const 8))
(i32.load8_u (i32.add (local.get $a) (i32.const 1)))
(i32.or) )
(func $dget2 (export "dget2") (param $p i32) (result i32)
(i32.shl (call $dget1 (local.get $p)) (i32.const 8))
(call $dget1 (i32.add (local.get $p) (i32.const 1)))
(i32.or) )
;; Set value micro-instructions.
(func $mset1 (export "mset1") (param $a i32) (param $v i32)
(i32.store8 (local.get $a) (local.get $v)) )
(func $mset2 (export "mset2") (param $a i32) (param $v i32)
(i32.store8 (local.get $a) (i32.shr_u (local.get $v) (i32.const 8)))
(i32.store8 (i32.add (local.get $a) (i32.const 1)) (i32.and (local.get $v) (i32.const 0xFF))) )
(func $dset2 (export "dset2") (param $p i32) (param $v i32) (result i32)
(call $dset1 (local.get $p) (i32.shr_u (local.get $v) (i32.const 8)))
(call $dset1 (i32.add (local.get $p) (i32.const 1)) (i32.and (local.get $v) (i32.const 0xFF)))
(i32.or) ) ;; TODO: Signals are or'd together, at least one must be zero for this to work.
;; Pointer movement micro-instructions.
(func $ipmov (export "ipmov") (param $d i32)
(global.set $ip (i32.add (global.get $ip) (local.get $d))) )
(func $wpmov (export "wpmov") (param $d i32)
(global.set $wp (i32.sub (global.get $wp) (local.get $d))) )
(func $rpmov (export "rpmov") (param $d i32)
(global.set $rp (i32.sub (global.get $rp) (local.get $d))) )
;; Math operations
(func $rol1 (export "rol1") (param $v i32) (param $d i32) (result i32)
(local.set $d (i32.and (local.get $d) (i32.const 0x7)))
(i32.shl (local.get $v) (local.get $d))
(i32.shr_u (local.get $v) (i32.sub (i32.const 8) (local.get $d)))
(i32.or) )
(func $ror1 (export "ror1") (param $v i32) (param $d i32) (result i32)
(local.set $d (i32.and (local.get $d) (i32.const 0x7)))
(i32.shl (local.get $v) (i32.sub (i32.const 8) (local.get $d)))
(i32.shr_u (local.get $v) (local.get $d))
(i32.or) )
(func $rol2 (export "rol2") (param $v i32) (param $d i32) (result i32)
(local.set $d (i32.and (local.get $d) (i32.const 0xF)))
(i32.shl (local.get $v) (local.get $d))
(i32.shr_u (local.get $v) (i32.sub (i32.const 16) (local.get $d)))
(i32.or) )
(func $ror2 (export "ror2") (param $v i32) (param $d i32) (result i32)
(local.set $d (i32.and (local.get $d) (i32.const 0xF)))
(i32.shl (local.get $v) (i32.sub (i32.const 16) (local.get $d)))
(i32.shr_u (local.get $v) (local.get $d))
(i32.or) )
;; TODO: Add a max-cycles parameter, and also keep track of total cycles with an i64.
(func (export "eval") (param $c i32) (result i32)
;; Declare local variables.
(local $m i64) ;; end mark
(local $x i32) ;; register
(local.set $m (i64.add (global.get $cc) (i64.extend_i32_u (local.get $c))))
(loop $loop
(block $break
;; Increment the cycle counter if we haven't reached our mark.
(if (i64.eq (local.get $m) (global.get $cc)) (then (br $break)))
(global.set $cc (i64.add (global.get $cc) (i64.const 1)))
;; Switch statement for every instruction variant. The list is in reverse order.
(block $NOTr*: (block $ANDr*: (block $XORr*: (block $IORr*: (block $RORr*: (block $ROLr*: (block $SHRr*: (block $SHLr*:
(block $NQKr*: (block $EQUr*: (block $GTHr*: (block $LTHr*: (block $DECr*: (block $INCr*: (block $SUBr*: (block $ADDr*:
(block $STDr*: (block $LDDr*: (block $STAr*: (block $LDAr*: (block $JCSr*: (block $JCNr*: (block $JMSr*: (block $JMPr*:
(block $ROTr*: (block $SWPr*: (block $OVRr*: (block $DUPr*: (block $CPYr*: (block $POPr*: (block $PSHr*: (block $DB6
(block $NOTr* (block $ANDr* (block $XORr* (block $IORr* (block $RORr* (block $ROLr* (block $SHRr* (block $SHLr*
(block $NQKr* (block $EQUr* (block $GTHr* (block $LTHr* (block $DECr* (block $INCr* (block $SUBr* (block $ADDr*
(block $STDr* (block $LDDr* (block $STAr* (block $LDAr* (block $JCSr* (block $JCNr* (block $JMSr* (block $JMPr*
(block $ROTr* (block $SWPr* (block $OVRr* (block $DUPr* (block $CPYr* (block $POPr* (block $PSHr* (block $DB5
(block $NOTr: (block $ANDr: (block $XORr: (block $IORr: (block $RORr: (block $ROLr: (block $SHRr: (block $SHLr:
(block $NQKr: (block $EQUr: (block $GTHr: (block $LTHr: (block $DECr: (block $INCr: (block $SUBr: (block $ADDr:
(block $STDr: (block $LDDr: (block $STAr: (block $LDAr: (block $JCSr: (block $JCNr: (block $JMSr: (block $JMPr:
(block $ROTr: (block $SWPr: (block $OVRr: (block $DUPr: (block $CPYr: (block $POPr: (block $PSHr: (block $DB4
(block $NOTr (block $ANDr (block $XORr (block $IORr (block $RORr (block $ROLr (block $SHRr (block $SHLr
(block $NQKr (block $EQUr (block $GTHr (block $LTHr (block $DECr (block $INCr (block $SUBr (block $ADDr
(block $STDr (block $LDDr (block $STAr (block $LDAr (block $JCSr (block $JCNr (block $JMSr (block $JMPr
(block $ROTr (block $SWPr (block $OVRr (block $DUPr (block $CPYr (block $POPr (block $PSHr (block $DB3
(block $NOT*: (block $AND*: (block $XOR*: (block $IOR*: (block $ROR*: (block $ROL*: (block $SHR*: (block $SHL*:
(block $NQK*: (block $EQU*: (block $GTH*: (block $LTH*: (block $DEC*: (block $INC*: (block $SUB*: (block $ADD*:
(block $STD*: (block $LDD*: (block $STA*: (block $LDA*: (block $JCS*: (block $JCN*: (block $JMS*: (block $JMP*:
(block $ROT*: (block $SWP*: (block $OVR*: (block $DUP*: (block $CPY*: (block $POP*: (block $PSH*: (block $DB2
(block $NOT* (block $AND* (block $XOR* (block $IOR* (block $ROR* (block $ROL* (block $SHR* (block $SHL*
(block $NQK* (block $EQU* (block $GTH* (block $LTH* (block $DEC* (block $INC* (block $SUB* (block $ADD*
(block $STD* (block $LDD* (block $STA* (block $LDA* (block $JCS* (block $JCN* (block $JMS* (block $JMP*
(block $ROT* (block $SWP* (block $OVR* (block $DUP* (block $CPY* (block $POP* (block $PSH* (block $DB1
(block $NOT: (block $AND: (block $XOR: (block $IOR: (block $ROR: (block $ROL: (block $SHR: (block $SHL:
(block $NQK: (block $EQU: (block $GTH: (block $LTH: (block $DEC: (block $INC: (block $SUB: (block $ADD:
(block $STD: (block $LDD: (block $STA: (block $LDA: (block $JCS: (block $JCN: (block $JMS: (block $JMP:
(block $ROT: (block $SWP: (block $OVR: (block $DUP: (block $CPY: (block $POP: (block $PSH: (block $NOP
(block $NOT (block $AND (block $XOR (block $IOR (block $ROR (block $ROL (block $SHR (block $SHL
(block $NQK (block $EQU (block $GTH (block $LTH (block $DEC (block $INC (block $SUB (block $ADD
(block $STD (block $LDD (block $STA (block $LDA (block $JCS (block $JCN (block $JMS (block $JMP
(block $ROT (block $SWP (block $OVR (block $DUP (block $CPY (block $POP (block $PSH (block $HLT
;; Branch based on the instruction on the stack.
(br_table
$HLT $PSH $POP $CPY $DUP $OVR $SWP $ROT $JMP $JMS $JCN $JCS $LDA $STA $LDD $STD
$ADD $SUB $INC $DEC $LTH $GTH $EQU $NQK $SHL $SHR $ROL $ROR $IOR $XOR $AND $NOT
$NOP $PSH: $POP: $CPY: $DUP: $OVR: $SWP: $ROT: $JMP: $JMS: $JCN: $JCS: $LDA: $STA: $LDD: $STD:
$ADD: $SUB: $INC: $DEC: $LTH: $GTH: $EQU: $NQK: $SHL: $SHR: $ROL: $ROR: $IOR: $XOR: $AND: $NOT:
$DB1 $PSH* $POP* $CPY* $DUP* $OVR* $SWP* $ROT* $JMP* $JMS* $JCN* $JCS* $LDA* $STA* $LDD* $STD*
$ADD* $SUB* $INC* $DEC* $LTH* $GTH* $EQU* $NQK* $SHL* $SHR* $ROL* $ROR* $IOR* $XOR* $AND* $NOT*
$DB2 $PSH*: $POP*: $CPY*: $DUP*: $OVR*: $SWP*: $ROT*: $JMP*: $JMS*: $JCN*: $JCS*: $LDA*: $STA*: $LDD*: $STD*:
$ADD*: $SUB*: $INC*: $DEC*: $LTH*: $GTH*: $EQU*: $NQK*: $SHL*: $SHR*: $ROL*: $ROR*: $IOR*: $XOR*: $AND*: $NOT*:
$DB3 $PSHr $POPr $CPYr $DUPr $OVRr $SWPr $ROTr $JMPr $JMSr $JCNr $JCSr $LDAr $STAr $LDDr $STDr
$ADDr $SUBr $INCr $DECr $LTHr $GTHr $EQUr $NQKr $SHLr $SHRr $ROLr $RORr $IORr $XORr $ANDr $NOTr
$DB4 $PSHr: $POPr: $CPYr: $DUPr: $OVRr: $SWPr: $ROTr: $JMPr: $JMSr: $JCNr: $JCSr: $LDAr: $STAr: $LDDr: $STDr:
$ADDr: $SUBr: $INCr: $DECr: $LTHr: $GTHr: $EQUr: $NQKr: $SHLr: $SHRr: $ROLr: $RORr: $IORr: $XORr: $ANDr: $NOTr:
$DB5 $PSHr* $POPr* $CPYr* $DUPr* $OVRr* $SWPr* $ROTr* $JMPr* $JMSr* $JCNr* $JCSr* $LDAr* $STAr* $LDDr* $STDr*
$ADDr* $SUBr* $INCr* $DECr* $LTHr* $GTHr* $EQUr* $NQKr* $SHLr* $SHRr* $ROLr* $RORr* $IORr* $XORr* $ANDr* $NOTr*
$DB6 $PSHr*: $POPr*: $CPYr*: $DUPr*: $OVRr*: $SWPr*: $ROTr*: $JMPr*: $JMSr*: $JCNr*: $JCSr*: $LDAr*: $STAr*: $LDDr*: $STDr*:
$ADDr*: $SUBr*: $INCr*: $DECr*: $LTHr*: $GTHr*: $EQUr*: $NQKr*: $SHLr*: $SHRr*: $ROLr*: $RORr*: $IORr*: $XORr*: $ANDr*: $NOTr*:
;; Load an instruction from memory.
(call $mpop1) )
) (; HLT ;) (return (global.get $SIGNAL.HALT))
) (; PSH ;) (call $rpop1) (call $wpsh1) (br $loop)
) (; POP ;) (call $wpmov (i32.const -1)) (br $loop)
) (; CPY ;) (call $rget1) (call $wpsh1) (br $loop)
) (; DUP ;) (call $wget1) (call $wpsh1) (br $loop)
) (; OVR ;) (call $wpop1) (call $wget1) (local.set $x) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; SWP ;) (call $wpop1) (call $wpop1) (local.set $x) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; ROT ;) (call $wpop1) (call $wpop1) (call $wpop1) (local.set $x) (call $wpsh1) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; JMP ;) (call $wpop2) (global.set $ip) (br $loop)
) (; JMS ;) (call $wpop2) (global.get $ip) (call $rpsh2) (global.set $ip) (br $loop)
) (; JCN ;) (call $wpop2) (local.set $x) (if (call $wpop1) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCS ;) (call $wpop2) (local.set $x) (if (call $wpop1) (then (global.get $ip) (call $rpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDA ;) (call $wpop2) (call $mget1) (call $wpsh1) (br $loop)
) (; STA ;) (call $wpop2) (call $wpop1) (call $mset1) (br $loop)
) (; LDD ;) (call $wpop1) (call $dget1) (call $wpsh1) (br $loop)
) (; STD ;) (call $wpop1) (call $wpop1) (call $dset1) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADD ;) (call $wpop1) (call $wpop1) (i32.add) (call $wpsh1) (br $loop)
) (; SUB ;) (call $wpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.sub) (call $wpsh1) (br $loop)
) (; INC ;) (call $wpop1) (i32.add (i32.const 1)) (call $wpsh1) (br $loop)
) (; DEC ;) (call $wpop1) (i32.sub (i32.const 1)) (call $wpsh1) (br $loop)
) (; LTH ;) (call $wpop1) (call $wpop1) (i32.gt_u) (call $wpshb) (br $loop)
) (; GTH ;) (call $wpop1) (call $wpop1) (i32.lt_u) (call $wpshb) (br $loop)
) (; EQU ;) (call $wpop1) (call $wpop1) (i32.eq) (call $wpshb) (br $loop)
) (; NQK ;) (call $wpop1) (local.tee $x) (call $wget1) (local.get $x) (call $wpsh1) (i32.ne) (call $wpshb) (br $loop)
) (; SHL ;) (call $wpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.shl) (call $wpsh1) (br $loop)
) (; SHR ;) (call $wpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.shr_u) (call $wpsh1) (br $loop)
) (; ROL ;) (call $wpop1) (local.set $x) (call $wpop1) (local.get $x) (call $rol1) (call $wpsh1) (br $loop)
) (; ROR ;) (call $wpop1) (local.set $x) (call $wpop1) (local.get $x) (call $ror1) (call $wpsh1) (br $loop)
) (; IOR ;) (call $wpop1) (call $wpop1) (i32.or) (call $wpsh1) (br $loop)
) (; XOR ;) (call $wpop1) (call $wpop1) (i32.xor) (call $wpsh1) (br $loop)
) (; AND ;) (call $wpop1) (call $wpop1) (i32.and) (call $wpsh1) (br $loop)
) (; NOT ;) (call $wpop1) (i32.xor (i32.const 0xFF)) (call $wpsh1) (br $loop)
) (; NOP ;) (br $loop)
) (; PSH: ;) (call $mpop1) (call $wpsh1) (br $loop)
) (; POP: ;) (call $ipmov (i32.const 1)) (br $loop)
) (; CPY: ;) (call $mpop1) (local.tee $x) (call $wpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; DUP: ;) (call $mpop1) (local.tee $x) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; OVR: ;) (call $mpop1) (call $wget1) (local.set $x) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; SWP: ;) (call $mpop1) (call $wpop1) (local.set $x) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; ROT: ;) (call $mpop1) (call $wpop1) (call $wpop1) (local.set $x) (call $wpsh1) (call $wpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; JMP: ;) (call $mpop2) (global.set $ip) (br $loop)
) (; JMS: ;) (call $mpop2) (global.get $ip) (call $rpsh2) (global.set $ip) (br $loop)
) (; JCN: ;) (call $mpop2) (local.set $x) (if (call $wpop1) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCS: ;) (call $mpop2) (local.set $x) (if (call $wpop1) (then (global.get $ip) (call $rpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDA: ;) (call $mpop2) (call $mget1) (call $wpsh1) (br $loop)
) (; STA: ;) (call $mpop2) (call $wpop1) (call $mset1) (br $loop)
) (; LDD: ;) (call $mpop1) (call $dget1) (call $wpsh1) (br $loop)
) (; STD: ;) (call $mpop1) (call $wpop1) (call $dset1) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADD: ;) (call $mpop1) (call $wpop1) (i32.add) (call $wpsh1) (br $loop)
) (; SUB: ;) (call $mpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.sub) (call $wpsh1) (br $loop)
) (; INC: ;) (call $mpop1) (i32.add (i32.const 1)) (call $wpsh1) (br $loop)
) (; DEC: ;) (call $mpop1) (i32.sub (i32.const 1)) (call $wpsh1) (br $loop)
) (; LTH: ;) (call $mpop1) (call $wpop1) (i32.gt_u) (call $wpshb) (br $loop)
) (; GTH: ;) (call $mpop1) (call $wpop1) (i32.lt_u) (call $wpshb) (br $loop)
) (; EQU: ;) (call $mpop1) (call $wpop1) (i32.eq) (call $wpshb) (br $loop)
) (; NQK: ;) (call $mpop1) (local.tee $x) (call $wget1) (local.get $x) (call $wpsh1) (i32.ne) (call $wpshb) (br $loop)
) (; SHL: ;) (call $mpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.shl) (call $wpsh1) (br $loop)
) (; SHR: ;) (call $mpop1) (local.set $x) (call $wpop1) (local.get $x) (i32.shr_u) (call $wpsh1) (br $loop)
) (; ROL: ;) (call $mpop1) (local.set $x) (call $wpop1) (local.get $x) (call $rol1) (call $wpsh1) (br $loop)
) (; ROR: ;) (call $mpop1) (local.set $x) (call $wpop1) (local.get $x) (call $ror1) (call $wpsh1) (br $loop)
) (; IOR: ;) (call $mpop1) (call $wpop1) (i32.or) (call $wpsh1) (br $loop)
) (; XOR: ;) (call $mpop1) (call $wpop1) (i32.xor) (call $wpsh1) (br $loop)
) (; AND: ;) (call $mpop1) (call $wpop1) (i32.and) (call $wpsh1) (br $loop)
) (; NOT: ;) (call $mpop1) (i32.xor (i32.const 0xFF)) (call $wpsh1) (br $loop)
) (; DB1* ;) (return (global.get $SIGNAL.DB1))
) (; PSH* ;) (call $rpop2) (call $wpsh2) (br $loop)
) (; POP* ;) (call $wpmov (i32.const -2)) (br $loop)
) (; CPY* ;) (call $rget2) (call $wpsh2) (br $loop)
) (; DUP* ;) (call $wget2) (call $wpsh2) (br $loop)
) (; OVR* ;) (call $wpop2) (call $wget2) (local.set $x) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; SWP* ;) (call $wpop2) (call $wpop2) (local.set $x) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; ROT* ;) (call $wpop2) (call $wpop2) (call $wpop2) (local.set $x) (call $wpsh2) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; JMP* ;) (call $wpop2) (global.set $ip) (br $loop)
) (; JMS* ;) (call $wpop2) (global.get $ip) (call $rpsh2) (global.set $ip) (br $loop)
) (; JCN* ;) (call $wpop2) (local.set $x) (if (call $wpop2) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCS* ;) (call $wpop2) (local.set $x) (if (call $wpop2) (then (global.get $ip) (call $rpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDA* ;) (call $wpop2) (call $mget2) (call $wpsh2) (br $loop)
) (; STA* ;) (call $wpop2) (call $wpop2) (call $mset2) (br $loop)
) (; LDD* ;) (call $wpop1) (call $dget2) (call $wpsh2) (br $loop)
) (; STD* ;) (call $wpop1) (call $wpop2) (call $dset2) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADD* ;) (call $wpop2) (call $wpop2) (i32.add) (call $wpsh2) (br $loop)
) (; SUB* ;) (call $wpop2) (local.set $x) (call $wpop2) (local.get $x) (i32.sub) (call $wpsh2) (br $loop)
) (; INC* ;) (call $wpop2) (i32.add (i32.const 1)) (call $wpsh2) (br $loop)
) (; DEC* ;) (call $wpop2) (i32.sub (i32.const 1)) (call $wpsh2) (br $loop)
) (; LTH* ;) (call $wpop2) (call $wpop2) (i32.gt_u) (call $wpshb) (br $loop)
) (; GTH* ;) (call $wpop2) (call $wpop2) (i32.lt_u) (call $wpshb) (br $loop)
) (; EQU* ;) (call $wpop2) (call $wpop2) (i32.eq) (call $wpshb) (br $loop)
) (; NQK* ;) (call $wpop2) (local.tee $x) (call $wget2) (local.get $x) (call $wpsh2) (i32.ne) (call $wpshb) (br $loop)
) (; SHL* ;) (call $wpop1) (local.set $x) (call $wpop2) (local.get $x) (i32.shl) (call $wpsh2) (br $loop)
) (; SHR* ;) (call $wpop1) (local.set $x) (call $wpop2) (local.get $x) (i32.shr_u) (call $wpsh2) (br $loop)
) (; ROL* ;) (call $wpop1) (local.set $x) (call $wpop2) (local.get $x) (call $rol2) (call $wpsh2) (br $loop)
) (; ROR* ;) (call $wpop1) (local.set $x) (call $wpop2) (local.get $x) (call $ror2) (call $wpsh2) (br $loop)
) (; IOR* ;) (call $wpop2) (call $wpop2) (i32.or) (call $wpsh2) (br $loop)
) (; XOR* ;) (call $wpop2) (call $wpop2) (i32.xor) (call $wpsh2) (br $loop)
) (; AND* ;) (call $wpop2) (call $wpop2) (i32.and) (call $wpsh2) (br $loop)
) (; NOT* ;) (call $wpop2) (i32.xor (i32.const 0xFFFF)) (call $wpsh2) (br $loop)
) (; DB2 ;) (return (global.get $SIGNAL.DB2))
) (; PSH*: ;) (call $mpop2) (call $wpsh2) (br $loop)
) (; POP*: ;) (call $ipmov (i32.const 2)) (br $loop)
) (; CPY*: ;) (call $mpop2) (local.tee $x) (call $wpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; DUP*: ;) (call $mpop2) (local.tee $x) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; OVR*: ;) (call $mpop2) (call $wget2) (local.set $x) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; SWP*: ;) (call $mpop2) (call $wpop2) (local.set $x) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; ROT*: ;) (call $mpop2) (call $wpop2) (call $wpop2) (local.set $x) (call $wpsh2) (call $wpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; JMP*: ;) (call $mpop2) (global.set $ip) (br $loop)
) (; JMS*: ;) (call $mpop2) (global.get $ip) (call $rpsh2) (global.set $ip) (br $loop)
) (; JCN*: ;) (call $mpop2) (local.set $x) (if (call $wpop2) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCS*: ;) (call $mpop2) (local.set $x) (if (call $wpop2) (then (global.get $ip) (call $rpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDA*: ;) (call $mpop2) (call $mget2) (call $wpsh2) (br $loop)
) (; STA*: ;) (call $mpop2) (call $wpop2) (call $mset2) (br $loop)
) (; LDD*: ;) (call $mpop1) (call $dget2) (call $wpsh2) (br $loop)
) (; STD*: ;) (call $mpop1) (call $wpop2) (call $dset2) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADD*: ;) (call $mpop2) (call $wpop2) (i32.add) (call $wpsh2) (br $loop)
) (; SUB*: ;) (call $mpop2) (local.set $x) (call $wpop2) (local.get $x) (i32.sub) (call $wpsh2) (br $loop)
) (; INC*: ;) (call $mpop2) (i32.add (i32.const 1)) (call $wpsh2) (br $loop)
) (; DEC*: ;) (call $mpop2) (i32.sub (i32.const 1)) (call $wpsh2) (br $loop)
) (; LTH*: ;) (call $mpop2) (call $wpop2) (i32.gt_u) (call $wpshb) (br $loop)
) (; GTH*: ;) (call $mpop2) (call $wpop2) (i32.lt_u) (call $wpshb) (br $loop)
) (; EQU*: ;) (call $mpop2) (call $wpop2) (i32.eq) (call $wpshb) (br $loop)
) (; NQK*: ;) (call $mpop2) (local.tee $x) (call $wget2) (local.get $x) (call $wpsh2) (i32.ne) (call $wpshb) (br $loop)
) (; SHL*: ;) (call $mpop1) (local.set $x) (call $wpop2) (local.get $x) (i32.shl) (call $wpsh2) (br $loop)
) (; SHR*: ;) (call $mpop1) (local.set $x) (call $wpop2) (local.get $x) (i32.shr_u) (call $wpsh2) (br $loop)
) (; ROL*: ;) (call $mpop1) (local.set $x) (call $wpop2) (local.get $x) (call $rol2) (call $wpsh2) (br $loop)
) (; ROR*: ;) (call $mpop1) (local.set $x) (call $wpop2) (local.get $x) (call $ror2) (call $wpsh2) (br $loop)
) (; IOR*: ;) (call $mpop2) (call $wpop2) (i32.or) (call $wpsh2) (br $loop)
) (; XOR*: ;) (call $mpop2) (call $wpop2) (i32.xor) (call $wpsh2) (br $loop)
) (; AND*: ;) (call $mpop2) (call $wpop2) (i32.and) (call $wpsh2) (br $loop)
) (; NOT*: ;) (call $mpop2) (i32.xor (i32.const 0xFFFF)) (call $wpsh2) (br $loop)
) (; DB3 ;) (return (global.get $SIGNAL.DB3))
) (; PSHr ;) (call $wpop1) (call $rpsh1) (br $loop)
) (; POPr ;) (call $rpmov (i32.const -1)) (br $loop)
) (; CPYr ;) (call $wget1) (call $rpsh1) (br $loop)
) (; DUPr ;) (call $rget1) (call $rpsh1) (br $loop)
) (; OVRr ;) (call $rpop1) (call $rget1) (local.set $x) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; SWPr ;) (call $rpop1) (call $rpop1) (local.set $x) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; ROTr ;) (call $rpop1) (call $rpop1) (call $rpop1) (local.set $x) (call $rpsh1) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; JMPr ;) (call $rpop2) (global.set $ip) (br $loop)
) (; JMSr ;) (call $rpop2) (global.get $ip) (call $wpsh2) (global.set $ip) (br $loop)
) (; JCNr ;) (call $rpop2) (local.set $x) (if (call $rpop1) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCSr ;) (call $rpop2) (local.set $x) (if (call $rpop1) (then (global.get $ip) (call $wpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDAr ;) (call $rpop2) (call $mget1) (call $rpsh1) (br $loop)
) (; STAr ;) (call $rpop2) (call $rpop1) (call $mset1) (br $loop)
) (; LDDr ;) (call $rpop1) (call $dget1) (call $rpsh1) (br $loop)
) (; STDr ;) (call $rpop1) (call $rpop1) (call $dset1) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADDr ;) (call $rpop1) (call $rpop1) (i32.add) (call $rpsh1) (br $loop)
) (; SUBr ;) (call $rpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.sub) (call $rpsh1) (br $loop)
) (; INCr ;) (call $rpop1) (i32.add (i32.const 1)) (call $rpsh1) (br $loop)
) (; DECr ;) (call $rpop1) (i32.sub (i32.const 1)) (call $rpsh1) (br $loop)
) (; LTHr ;) (call $rpop1) (call $rpop1) (i32.gt_u) (call $rpshb) (br $loop)
) (; GTHr ;) (call $rpop1) (call $rpop1) (i32.lt_u) (call $rpshb) (br $loop)
) (; EQUr ;) (call $rpop1) (call $rpop1) (i32.eq) (call $rpshb) (br $loop)
) (; NQKr ;) (call $rpop1) (local.tee $x) (call $rget1) (local.get $x) (call $rpsh1) (i32.ne) (call $rpshb) (br $loop)
) (; SHLr ;) (call $rpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.shl) (call $rpsh1) (br $loop)
) (; SHRr ;) (call $rpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.shr_u) (call $rpsh1) (br $loop)
) (; ROLr ;) (call $rpop1) (local.set $x) (call $rpop1) (local.get $x) (call $rol1) (call $rpsh1) (br $loop)
) (; RORr ;) (call $rpop1) (local.set $x) (call $rpop1) (local.get $x) (call $ror1) (call $rpsh1) (br $loop)
) (; IORr ;) (call $rpop1) (call $rpop1) (i32.or) (call $rpsh1) (br $loop)
) (; XORr ;) (call $rpop1) (call $rpop1) (i32.xor) (call $rpsh1) (br $loop)
) (; ANDr ;) (call $rpop1) (call $rpop1) (i32.and) (call $rpsh1) (br $loop)
) (; NOTr ;) (call $rpop1) (i32.xor (i32.const 0xFF)) (call $rpsh1) (br $loop)
) (; DB4 ;) (return (global.get $SIGNAL.DB4))
) (; PSHr: ;) (call $mpop1) (call $rpsh1) (br $loop)
) (; POPr: ;) (call $ipmov (i32.const 1)) (br $loop)
) (; CPYr: ;) (call $mpop1) (local.tee $x) (call $rpsh1) (local.get $x) (call $wpsh1) (br $loop)
) (; DUPr: ;) (call $mpop1) (local.tee $x) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; OVRr: ;) (call $mpop1) (call $rget1) (local.set $x) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; SWPr: ;) (call $mpop1) (call $rpop1) (local.set $x) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; ROTr: ;) (call $mpop1) (call $rpop1) (call $rpop1) (local.set $x) (call $rpsh1) (call $rpsh1) (local.get $x) (call $rpsh1) (br $loop)
) (; JMPr: ;) (call $mpop2) (global.set $ip) (br $loop)
) (; JMSr: ;) (call $mpop2) (global.get $ip) (call $wpsh2) (global.set $ip) (br $loop)
) (; JCNr: ;) (call $mpop2) (local.set $x) (if (call $rpop1) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCSr: ;) (call $mpop2) (local.set $x) (if (call $rpop1) (then (global.get $ip) (call $wpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDAr: ;) (call $mpop2) (call $mget1) (call $rpsh1) (br $loop)
) (; STAr: ;) (call $mpop2) (call $rpop1) (call $mset1) (br $loop)
) (; LDDr: ;) (call $mpop1) (call $dget1) (call $rpsh1) (br $loop)
) (; STDr: ;) (call $mpop1) (call $rpop1) (call $dset1) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADDr: ;) (call $mpop1) (call $rpop1) (i32.add) (call $rpsh1) (br $loop)
) (; SUBr: ;) (call $mpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.sub) (call $rpsh1) (br $loop)
) (; INCr: ;) (call $mpop1) (i32.add (i32.const 1)) (call $rpsh1) (br $loop)
) (; DECr: ;) (call $mpop1) (i32.sub (i32.const 1)) (call $rpsh1) (br $loop)
) (; LTHr: ;) (call $mpop1) (call $rpop1) (i32.gt_u) (call $rpshb) (br $loop)
) (; GTHr: ;) (call $mpop1) (call $rpop1) (i32.lt_u) (call $rpshb) (br $loop)
) (; EQUr: ;) (call $mpop1) (call $rpop1) (i32.eq) (call $rpshb) (br $loop)
) (; NQKr: ;) (call $mpop1) (local.tee $x) (call $rget1) (local.get $x) (call $rpsh1) (i32.ne) (call $rpshb) (br $loop)
) (; SHLr: ;) (call $mpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.shl) (call $rpsh1) (br $loop)
) (; SHRr: ;) (call $mpop1) (local.set $x) (call $rpop1) (local.get $x) (i32.shr_u) (call $rpsh1) (br $loop)
) (; ROLr: ;) (call $mpop1) (local.set $x) (call $rpop1) (local.get $x) (call $rol1) (call $rpsh1) (br $loop)
) (; RORr: ;) (call $mpop1) (local.set $x) (call $rpop1) (local.get $x) (call $ror1) (call $rpsh1) (br $loop)
) (; IORr: ;) (call $mpop1) (call $rpop1) (i32.or) (call $rpsh1) (br $loop)
) (; XORr: ;) (call $mpop1) (call $rpop1) (i32.xor) (call $rpsh1) (br $loop)
) (; ANDr: ;) (call $mpop1) (call $rpop1) (i32.and) (call $rpsh1) (br $loop)
) (; NOTr: ;) (call $mpop1) (i32.xor (i32.const 0xFF)) (call $rpsh1) (br $loop)
) (; DB5 ;) (return (global.get $SIGNAL.DB5))
) (; PSHr* ;) (call $wpop2) (call $rpsh2) (br $loop)
) (; POPr* ;) (call $rpmov (i32.const -2)) (br $loop)
) (; CPYr* ;) (call $wget2) (call $rpsh2) (br $loop)
) (; DUPr* ;) (call $rget2) (call $rpsh2) (br $loop)
) (; OVRr* ;) (call $rpop2) (call $rget2) (local.set $x) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; SWPr* ;) (call $rpop2) (call $rpop2) (local.set $x) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; ROTr* ;) (call $rpop2) (call $rpop2) (call $rpop2) (local.set $x) (call $rpsh2) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; JMPr* ;) (call $rpop2) (global.set $ip) (br $loop)
) (; JMSr* ;) (call $rpop2) (global.get $ip) (call $wpsh2) (global.set $ip) (br $loop)
) (; JCNr* ;) (call $rpop2) (local.set $x) (if (call $rpop2) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCSr* ;) (call $rpop2) (local.set $x) (if (call $rpop2) (then (global.get $ip) (call $wpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDAr* ;) (call $rpop2) (call $mget2) (call $rpsh2) (br $loop)
) (; STAr* ;) (call $rpop2) (call $rpop2) (call $mset2) (br $loop)
) (; LDDr* ;) (call $rpop1) (call $dget2) (call $rpsh2) (br $loop)
) (; STDr* ;) (call $rpop1) (call $rpop2) (call $dset2) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADDr* ;) (call $rpop2) (call $rpop2) (i32.add) (call $rpsh2) (br $loop)
) (; SUBr* ;) (call $rpop2) (local.set $x) (call $rpop2) (local.get $x) (i32.sub) (call $rpsh2) (br $loop)
) (; INCr* ;) (call $rpop2) (i32.add (i32.const 1)) (call $rpsh2) (br $loop)
) (; DECr* ;) (call $rpop2) (i32.sub (i32.const 1)) (call $rpsh2) (br $loop)
) (; LTHr* ;) (call $rpop2) (call $rpop2) (i32.gt_u) (call $rpshb) (br $loop)
) (; GTHr* ;) (call $rpop2) (call $rpop2) (i32.lt_u) (call $rpshb) (br $loop)
) (; EQUr* ;) (call $rpop2) (call $rpop2) (i32.eq) (call $rpshb) (br $loop)
) (; NQKr* ;) (call $rpop2) (local.tee $x) (call $rget2) (local.get $x) (call $rpsh2) (i32.ne) (call $rpshb) (br $loop)
) (; SHLr* ;) (call $rpop1) (local.set $x) (call $rpop2) (local.get $x) (i32.shl) (call $rpsh2) (br $loop)
) (; SHRr* ;) (call $rpop1) (local.set $x) (call $rpop2) (local.get $x) (i32.shr_u) (call $rpsh2) (br $loop)
) (; ROLr* ;) (call $rpop1) (local.set $x) (call $rpop2) (local.get $x) (call $rol2) (call $rpsh2) (br $loop)
) (; RORr* ;) (call $rpop1) (local.set $x) (call $rpop2) (local.get $x) (call $ror2) (call $rpsh2) (br $loop)
) (; IORr* ;) (call $rpop2) (call $rpop2) (i32.or) (call $rpsh2) (br $loop)
) (; XORr* ;) (call $rpop2) (call $rpop2) (i32.xor) (call $rpsh2) (br $loop)
) (; ANDr* ;) (call $rpop2) (call $rpop2) (i32.and) (call $rpsh2) (br $loop)
) (; NOTr* ;) (call $rpop2) (i32.xor (i32.const 0xFFFF)) (call $rpsh2) (br $loop)
) (; DB6 ;) (return (global.get $SIGNAL.DB6))
) (; PSHr*: ;) (call $mpop2) (call $rpsh2) (br $loop)
) (; POPr*: ;) (call $ipmov (i32.const 2)) (br $loop)
) (; CPYr*: ;) (call $mpop2) (local.tee $x) (call $rpsh2) (local.get $x) (call $wpsh2) (br $loop)
) (; DUPr*: ;) (call $mpop2) (local.tee $x) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; OVRr*: ;) (call $mpop2) (call $rget2) (local.set $x) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; SWPr*: ;) (call $mpop2) (call $rpop2) (local.set $x) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; ROTr*: ;) (call $mpop2) (call $rpop2) (call $rpop2) (local.set $x) (call $rpsh2) (call $rpsh2) (local.get $x) (call $rpsh2) (br $loop)
) (; JMPr*: ;) (call $mpop2) (global.set $ip) (br $loop)
) (; JMSr*: ;) (call $mpop2) (global.get $ip) (call $wpsh2) (global.set $ip) (br $loop)
) (; JCNr*: ;) (call $mpop2) (local.set $x) (if (call $rpop2) (then (local.get $x) (global.set $ip))) (br $loop)
) (; JCSr*: ;) (call $mpop2) (local.set $x) (if (call $rpop2) (then (global.get $ip) (call $wpsh2) (local.get $x) (global.set $ip))) (br $loop)
) (; LDAr*: ;) (call $mpop2) (call $mget2) (call $rpsh2) (br $loop)
) (; STAr*: ;) (call $mpop2) (call $rpop2) (call $mset2) (br $loop)
) (; LDDr*: ;) (call $mpop1) (call $dget2) (call $rpsh2) (br $loop)
) (; STDr*: ;) (call $mpop1) (call $rpop2) (call $dset2) (local.set $x) (if (local.get $x) (then (return (local.get $x)))) (br $loop)
) (; ADDr*: ;) (call $mpop2) (call $rpop2) (i32.add) (call $rpsh2) (br $loop)
) (; SUBr*: ;) (call $mpop2) (local.set $x) (call $rpop2) (local.get $x) (i32.sub) (call $rpsh2) (br $loop)
) (; INCr*: ;) (call $mpop2) (i32.add (i32.const 1)) (call $rpsh2) (br $loop)
) (; DECr*: ;) (call $mpop2) (i32.sub (i32.const 1)) (call $rpsh2) (br $loop)
) (; LTHr*: ;) (call $mpop2) (call $rpop2) (i32.gt_u) (call $rpshb) (br $loop)
) (; GTHr*: ;) (call $mpop2) (call $rpop2) (i32.lt_u) (call $rpshb) (br $loop)
) (; EQUr*: ;) (call $mpop2) (call $rpop2) (i32.eq) (call $rpshb) (br $loop)
) (; NQKr*: ;) (call $mpop2) (local.tee $x) (call $rget2) (local.get $x) (call $rpsh2) (i32.ne) (call $rpshb) (br $loop)
) (; SHLr*: ;) (call $mpop1) (local.set $x) (call $rpop2) (local.get $x) (i32.shl) (call $rpsh2) (br $loop)
) (; SHRr*: ;) (call $mpop1) (local.set $x) (call $rpop2) (local.get $x) (i32.shr_u) (call $rpsh2) (br $loop)
) (; ROLr*: ;) (call $mpop1) (local.set $x) (call $rpop2) (local.get $x) (call $rol2) (call $rpsh2) (br $loop)
) (; RORr*: ;) (call $mpop1) (local.set $x) (call $rpop2) (local.get $x) (call $ror2) (call $rpsh2) (br $loop)
) (; IORr*: ;) (call $mpop2) (call $rpop2) (i32.or) (call $rpsh2) (br $loop)
) (; XORr*: ;) (call $mpop2) (call $rpop2) (i32.xor) (call $rpsh2) (br $loop)
) (; ANDr*: ;) (call $mpop2) (call $rpop2) (i32.and) (call $rpsh2) (br $loop)
) (; NOTr*: ;) (call $mpop2) (i32.xor (i32.const 0xFFFF)) (call $rpsh2) (br $loop)
)
) (; break ;)
;; Default return signal.
(return (global.get $SIGNAL.BREAK))
)
)
|