1 ;; Test alignment annotation rules
3 (module (memory i64 0) (func (drop (i32.load8_s align=1 (i64.const 0)))))
4 (module (memory i64 0) (func (drop (i32.load8_u align=1 (i64.const 0)))))
5 (module (memory i64 0) (func (drop (i32.load16_s align=2 (i64.const 0)))))
6 (module (memory i64 0) (func (drop (i32.load16_u align=2 (i64.const 0)))))
7 (module (memory i64 0) (func (drop (i32.load align=4 (i64.const 0)))))
8 (module (memory i64 0) (func (drop (i64.load8_s align=1 (i64.const 0)))))
9 (module (memory i64 0) (func (drop (i64.load8_u align=1 (i64.const 0)))))
10 (module (memory i64 0) (func (drop (i64.load16_s align=2 (i64.const 0)))))
11 (module (memory i64 0) (func (drop (i64.load16_u align=2 (i64.const 0)))))
12 (module (memory i64 0) (func (drop (i64.load32_s align=4 (i64.const 0)))))
13 (module (memory i64 0) (func (drop (i64.load32_u align=4 (i64.const 0)))))
14 (module (memory i64 0) (func (drop (i64.load align=8 (i64.const 0)))))
15 (module (memory i64 0) (func (drop (f32.load align=4 (i64.const 0)))))
16 (module (memory i64 0) (func (drop (f64.load align=8 (i64.const 0)))))
17 (module (memory i64 0) (func (i32.store8 align=1 (i64.const 0) (i32.const 1))))
18 (module (memory i64 0) (func (i32.store16 align=2 (i64.const 0) (i32.const 1))))
19 (module (memory i64 0) (func (i32.store align=4 (i64.const 0) (i32.const 1))))
20 (module (memory i64 0) (func (i64.store8 align=1 (i64.const 0) (i64.const 1))))
21 (module (memory i64 0) (func (i64.store16 align=2 (i64.const 0) (i64.const 1))))
22 (module (memory i64 0) (func (i64.store32 align=4 (i64.const 0) (i64.const 1))))
23 (module (memory i64 0) (func (i64.store align=8 (i64.const 0) (i64.const 1))))
24 (module (memory i64 0) (func (f32.store align=4 (i64.const 0) (f32.const 1.0))))
25 (module (memory i64 0) (func (f64.store align=8 (i64.const 0) (f64.const 1.0))))
29 "(module (memory i64 0) (func (drop (i32.load8_s align=0 (i64.const 0)))))"
35 "(module (memory i64 0) (func (drop (i32.load8_s align=7 (i64.const 0)))))"
41 "(module (memory i64 0) (func (drop (i32.load8_u align=0 (i64.const 0)))))"
47 "(module (memory i64 0) (func (drop (i32.load8_u align=7 (i64.const 0)))))"
53 "(module (memory i64 0) (func (drop (i32.load16_s align=0 (i64.const 0)))))"
59 "(module (memory i64 0) (func (drop (i32.load16_s align=7 (i64.const 0)))))"
65 "(module (memory i64 0) (func (drop (i32.load16_u align=0 (i64.const 0)))))"
71 "(module (memory i64 0) (func (drop (i32.load16_u align=7 (i64.const 0)))))"
77 "(module (memory i64 0) (func (drop (i32.load align=0 (i64.const 0)))))"
83 "(module (memory i64 0) (func (drop (i32.load align=7 (i64.const 0)))))"
89 "(module (memory i64 0) (func (drop (i64.load8_s align=0 (i64.const 0)))))"
95 "(module (memory i64 0) (func (drop (i64.load8_s align=7 (i64.const 0)))))"
101 "(module (memory i64 0) (func (drop (i64.load8_u align=0 (i64.const 0)))))"
107 "(module (memory i64 0) (func (drop (i64.load8_u align=7 (i64.const 0)))))"
113 "(module (memory i64 0) (func (drop (i64.load16_s align=0 (i64.const 0)))))"
119 "(module (memory i64 0) (func (drop (i64.load16_s align=7 (i64.const 0)))))"
125 "(module (memory i64 0) (func (drop (i64.load16_u align=0 (i64.const 0)))))"
131 "(module (memory i64 0) (func (drop (i64.load16_u align=7 (i64.const 0)))))"
137 "(module (memory i64 0) (func (drop (i64.load32_s align=0 (i64.const 0)))))"
143 "(module (memory i64 0) (func (drop (i64.load32_s align=7 (i64.const 0)))))"
149 "(module (memory i64 0) (func (drop (i64.load32_u align=0 (i64.const 0)))))"
155 "(module (memory i64 0) (func (drop (i64.load32_u align=7 (i64.const 0)))))"
161 "(module (memory i64 0) (func (drop (i64.load align=0 (i64.const 0)))))"
167 "(module (memory i64 0) (func (drop (i64.load align=7 (i64.const 0)))))"
173 "(module (memory i64 0) (func (drop (f32.load align=0 (i64.const 0)))))"
179 "(module (memory i64 0) (func (drop (f32.load align=7 (i64.const 0)))))"
185 "(module (memory i64 0) (func (drop (f64.load align=0 (i64.const 0)))))"
191 "(module (memory i64 0) (func (drop (f64.load align=7 (i64.const 0)))))"
198 "(module (memory i64 0) (func (i32.store8 align=0 (i64.const 0) (i32.const 0))))"
204 "(module (memory i64 0) (func (i32.store8 align=7 (i64.const 0) (i32.const 0))))"
210 "(module (memory i64 0) (func (i32.store16 align=0 (i64.const 0) (i32.const 0))))"
216 "(module (memory i64 0) (func (i32.store16 align=7 (i64.const 0) (i32.const 0))))"
222 "(module (memory i64 0) (func (i32.store align=0 (i64.const 0) (i32.const 0))))"
228 "(module (memory i64 0) (func (i32.store align=7 (i64.const 0) (i32.const 0))))"
234 "(module (memory i64 0) (func (i64.store8 align=0 (i64.const 0) (i64.const 0))))"
240 "(module (memory i64 0) (func (i64.store8 align=7 (i64.const 0) (i64.const 0))))"
246 "(module (memory i64 0) (func (i64.store16 align=0 (i64.const 0) (i64.const 0))))"
252 "(module (memory i64 0) (func (i64.store16 align=7 (i64.const 0) (i64.const 0))))"
258 "(module (memory i64 0) (func (i64.store32 align=0 (i64.const 0) (i64.const 0))))"
264 "(module (memory i64 0) (func (i64.store32 align=7 (i64.const 0) (i64.const 0))))"
270 "(module (memory i64 0) (func (i64.store align=0 (i64.const 0) (i64.const 0))))"
276 "(module (memory i64 0) (func (i64.store align=7 (i64.const 0) (i64.const 0))))"
282 "(module (memory i64 0) (func (f32.store align=0 (i64.const 0) (f32.const 0))))"
288 "(module (memory i64 0) (func (f32.store align=7 (i64.const 0) (f32.const 0))))"
294 "(module (memory i64 0) (func (f64.store align=0 (i64.const 0) (f32.const 0))))"
300 "(module (memory i64 0) (func (f64.store align=7 (i64.const 0) (f32.const 0))))"
306 (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0)))))
307 "alignment must not be larger than natural"
310 (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0)))))
311 "alignment must not be larger than natural"
314 (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0)))))
315 "alignment must not be larger than natural"
318 (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0)))))
319 "alignment must not be larger than natural"
322 (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0)))))
323 "alignment must not be larger than natural"
326 (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0)))))
327 "alignment must not be larger than natural"
330 (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0)))))
331 "alignment must not be larger than natural"
334 (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0)))))
335 "alignment must not be larger than natural"
338 (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0)))))
339 "alignment must not be larger than natural"
342 (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0)))))
343 "alignment must not be larger than natural"
346 (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0)))))
347 "alignment must not be larger than natural"
350 (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0)))))
351 "alignment must not be larger than natural"
354 (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0)))))
355 "alignment must not be larger than natural"
358 (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0)))))
359 "alignment must not be larger than natural"
363 (module (memory i64 0) (func (drop (i32.load8_s align=2 (i64.const 0)))))
364 "alignment must not be larger than natural"
367 (module (memory i64 0) (func (drop (i32.load8_u align=2 (i64.const 0)))))
368 "alignment must not be larger than natural"
371 (module (memory i64 0) (func (drop (i32.load16_s align=4 (i64.const 0)))))
372 "alignment must not be larger than natural"
375 (module (memory i64 0) (func (drop (i32.load16_u align=4 (i64.const 0)))))
376 "alignment must not be larger than natural"
379 (module (memory i64 0) (func (drop (i32.load align=8 (i64.const 0)))))
380 "alignment must not be larger than natural"
383 (module (memory i64 0) (func (drop (i64.load8_s align=2 (i64.const 0)))))
384 "alignment must not be larger than natural"
387 (module (memory i64 0) (func (drop (i64.load8_u align=2 (i64.const 0)))))
388 "alignment must not be larger than natural"
391 (module (memory i64 0) (func (drop (i64.load16_s align=4 (i64.const 0)))))
392 "alignment must not be larger than natural"
395 (module (memory i64 0) (func (drop (i64.load16_u align=4 (i64.const 0)))))
396 "alignment must not be larger than natural"
399 (module (memory i64 0) (func (drop (i64.load32_s align=8 (i64.const 0)))))
400 "alignment must not be larger than natural"
403 (module (memory i64 0) (func (drop (i64.load32_u align=8 (i64.const 0)))))
404 "alignment must not be larger than natural"
407 (module (memory i64 0) (func (drop (i64.load align=16 (i64.const 0)))))
408 "alignment must not be larger than natural"
411 (module (memory i64 0) (func (drop (f32.load align=8 (i64.const 0)))))
412 "alignment must not be larger than natural"
415 (module (memory i64 0) (func (drop (f64.load align=16 (i64.const 0)))))
416 "alignment must not be larger than natural"
420 (module (memory i64 0) (func (i32.store8 align=2 (i64.const 0) (i32.const 0))))
421 "alignment must not be larger than natural"
424 (module (memory i64 0) (func (i32.store16 align=4 (i64.const 0) (i32.const 0))))
425 "alignment must not be larger than natural"
428 (module (memory i64 0) (func (i32.store align=8 (i64.const 0) (i32.const 0))))
429 "alignment must not be larger than natural"
432 (module (memory i64 0) (func (i64.store8 align=2 (i64.const 0) (i64.const 0))))
433 "alignment must not be larger than natural"
436 (module (memory i64 0) (func (i64.store16 align=4 (i64.const 0) (i64.const 0))))
437 "alignment must not be larger than natural"
440 (module (memory i64 0) (func (i64.store32 align=8 (i64.const 0) (i64.const 0))))
441 "alignment must not be larger than natural"
444 (module (memory i64 0) (func (i64.store align=16 (i64.const 0) (i64.const 0))))
445 "alignment must not be larger than natural"
448 (module (memory i64 0) (func (f32.store align=8 (i64.const 0) (f32.const 0))))
449 "alignment must not be larger than natural"
452 (module (memory i64 0) (func (f64.store align=16 (i64.const 0) (f64.const 0))))
453 "alignment must not be larger than natural"
456 ;; Test aligned and unaligned read/write
461 ;; $default: natural alignment, $1: align=1, $2: align=2, $4: align=4, $8: align=8
463 (func (export "f32_align_switch") (param i32) (result f32)
465 (local.set 1 (f32.const 10.0))
471 (br_table $0 $default $1 $2 $4 (local.get 0))
473 (f32.store (i64.const 0) (local.get 1))
474 (local.set 2 (f32.load (i64.const 0)))
477 (f32.store align=1 (i64.const 0) (local.get 1))
478 (local.set 2 (f32.load align=1 (i64.const 0)))
481 (f32.store align=2 (i64.const 0) (local.get 1))
482 (local.set 2 (f32.load align=2 (i64.const 0)))
485 (f32.store align=4 (i64.const 0) (local.get 1))
486 (local.set 2 (f32.load align=4 (i64.const 0)))
491 (func (export "f64_align_switch") (param i32) (result f64)
493 (local.set 1 (f64.const 10.0))
500 (br_table $0 $default $1 $2 $4 $8 (local.get 0))
502 (f64.store (i64.const 0) (local.get 1))
503 (local.set 2 (f64.load (i64.const 0)))
506 (f64.store align=1 (i64.const 0) (local.get 1))
507 (local.set 2 (f64.load align=1 (i64.const 0)))
510 (f64.store align=2 (i64.const 0) (local.get 1))
511 (local.set 2 (f64.load align=2 (i64.const 0)))
514 (f64.store align=4 (i64.const 0) (local.get 1))
515 (local.set 2 (f64.load align=4 (i64.const 0)))
518 (f64.store align=8 (i64.const 0) (local.get 1))
519 (local.set 2 (f64.load align=8 (i64.const 0)))
524 ;; $8s: i32/i64.load8_s, $8u: i32/i64.load8_u, $16s: i32/i64.load16_s, $16u: i32/i64.load16_u, $32: i32.load
525 ;; $32s: i64.load32_s, $32u: i64.load32_u, $64: i64.load
527 (func (export "i32_align_switch") (param i32 i32) (result i32)
529 (local.set 2 (i32.const 10))
536 (br_table $0 $8s $8u $16s $16u $32 (local.get 0))
538 (if (i32.eq (local.get 1) (i32.const 0))
540 (i32.store8 (i64.const 0) (local.get 2))
541 (local.set 3 (i32.load8_s (i64.const 0)))
544 (if (i32.eq (local.get 1) (i32.const 1))
546 (i32.store8 align=1 (i64.const 0) (local.get 2))
547 (local.set 3 (i32.load8_s align=1 (i64.const 0)))
552 (if (i32.eq (local.get 1) (i32.const 0))
554 (i32.store8 (i64.const 0) (local.get 2))
555 (local.set 3 (i32.load8_u (i64.const 0)))
558 (if (i32.eq (local.get 1) (i32.const 1))
560 (i32.store8 align=1 (i64.const 0) (local.get 2))
561 (local.set 3 (i32.load8_u align=1 (i64.const 0)))
566 (if (i32.eq (local.get 1) (i32.const 0))
568 (i32.store16 (i64.const 0) (local.get 2))
569 (local.set 3 (i32.load16_s (i64.const 0)))
572 (if (i32.eq (local.get 1) (i32.const 1))
574 (i32.store16 align=1 (i64.const 0) (local.get 2))
575 (local.set 3 (i32.load16_s align=1 (i64.const 0)))
578 (if (i32.eq (local.get 1) (i32.const 2))
580 (i32.store16 align=2 (i64.const 0) (local.get 2))
581 (local.set 3 (i32.load16_s align=2 (i64.const 0)))
586 (if (i32.eq (local.get 1) (i32.const 0))
588 (i32.store16 (i64.const 0) (local.get 2))
589 (local.set 3 (i32.load16_u (i64.const 0)))
592 (if (i32.eq (local.get 1) (i32.const 1))
594 (i32.store16 align=1 (i64.const 0) (local.get 2))
595 (local.set 3 (i32.load16_u align=1 (i64.const 0)))
598 (if (i32.eq (local.get 1) (i32.const 2))
600 (i32.store16 align=2 (i64.const 0) (local.get 2))
601 (local.set 3 (i32.load16_u align=2 (i64.const 0)))
606 (if (i32.eq (local.get 1) (i32.const 0))
608 (i32.store (i64.const 0) (local.get 2))
609 (local.set 3 (i32.load (i64.const 0)))
612 (if (i32.eq (local.get 1) (i32.const 1))
614 (i32.store align=1 (i64.const 0) (local.get 2))
615 (local.set 3 (i32.load align=1 (i64.const 0)))
618 (if (i32.eq (local.get 1) (i32.const 2))
620 (i32.store align=2 (i64.const 0) (local.get 2))
621 (local.set 3 (i32.load align=2 (i64.const 0)))
624 (if (i32.eq (local.get 1) (i32.const 4))
626 (i32.store align=4 (i64.const 0) (local.get 2))
627 (local.set 3 (i32.load align=4 (i64.const 0)))
634 (func (export "i64_align_switch") (param i32 i32) (result i64)
636 (local.set 2 (i64.const 10))
645 (br_table $0 $8s $8u $16s $16u $32s $32u $64 (local.get 0))
647 (if (i32.eq (local.get 1) (i32.const 0))
649 (i64.store8 (i64.const 0) (local.get 2))
650 (local.set 3 (i64.load8_s (i64.const 0)))
653 (if (i32.eq (local.get 1) (i32.const 1))
655 (i64.store8 align=1 (i64.const 0) (local.get 2))
656 (local.set 3 (i64.load8_s align=1 (i64.const 0)))
661 (if (i32.eq (local.get 1) (i32.const 0))
663 (i64.store8 (i64.const 0) (local.get 2))
664 (local.set 3 (i64.load8_u (i64.const 0)))
667 (if (i32.eq (local.get 1) (i32.const 1))
669 (i64.store8 align=1 (i64.const 0) (local.get 2))
670 (local.set 3 (i64.load8_u align=1 (i64.const 0)))
675 (if (i32.eq (local.get 1) (i32.const 0))
677 (i64.store16 (i64.const 0) (local.get 2))
678 (local.set 3 (i64.load16_s (i64.const 0)))
681 (if (i32.eq (local.get 1) (i32.const 1))
683 (i64.store16 align=1 (i64.const 0) (local.get 2))
684 (local.set 3 (i64.load16_s align=1 (i64.const 0)))
687 (if (i32.eq (local.get 1) (i32.const 2))
689 (i64.store16 align=2 (i64.const 0) (local.get 2))
690 (local.set 3 (i64.load16_s align=2 (i64.const 0)))
695 (if (i32.eq (local.get 1) (i32.const 0))
697 (i64.store16 (i64.const 0) (local.get 2))
698 (local.set 3 (i64.load16_u (i64.const 0)))
701 (if (i32.eq (local.get 1) (i32.const 1))
703 (i64.store16 align=1 (i64.const 0) (local.get 2))
704 (local.set 3 (i64.load16_u align=1 (i64.const 0)))
707 (if (i32.eq (local.get 1) (i32.const 2))
709 (i64.store16 align=2 (i64.const 0) (local.get 2))
710 (local.set 3 (i64.load16_u align=2 (i64.const 0)))
715 (if (i32.eq (local.get 1) (i32.const 0))
717 (i64.store32 (i64.const 0) (local.get 2))
718 (local.set 3 (i64.load32_s (i64.const 0)))
721 (if (i32.eq (local.get 1) (i32.const 1))
723 (i64.store32 align=1 (i64.const 0) (local.get 2))
724 (local.set 3 (i64.load32_s align=1 (i64.const 0)))
727 (if (i32.eq (local.get 1) (i32.const 2))
729 (i64.store32 align=2 (i64.const 0) (local.get 2))
730 (local.set 3 (i64.load32_s align=2 (i64.const 0)))
733 (if (i32.eq (local.get 1) (i32.const 4))
735 (i64.store32 align=4 (i64.const 0) (local.get 2))
736 (local.set 3 (i64.load32_s align=4 (i64.const 0)))
741 (if (i32.eq (local.get 1) (i32.const 0))
743 (i64.store32 (i64.const 0) (local.get 2))
744 (local.set 3 (i64.load32_u (i64.const 0)))
747 (if (i32.eq (local.get 1) (i32.const 1))
749 (i64.store32 align=1 (i64.const 0) (local.get 2))
750 (local.set 3 (i64.load32_u align=1 (i64.const 0)))
753 (if (i32.eq (local.get 1) (i32.const 2))
755 (i64.store32 align=2 (i64.const 0) (local.get 2))
756 (local.set 3 (i64.load32_u align=2 (i64.const 0)))
759 (if (i32.eq (local.get 1) (i32.const 4))
761 (i64.store32 align=4 (i64.const 0) (local.get 2))
762 (local.set 3 (i64.load32_u align=4 (i64.const 0)))
767 (if (i32.eq (local.get 1) (i32.const 0))
769 (i64.store (i64.const 0) (local.get 2))
770 (local.set 3 (i64.load (i64.const 0)))
773 (if (i32.eq (local.get 1) (i32.const 1))
775 (i64.store align=1 (i64.const 0) (local.get 2))
776 (local.set 3 (i64.load align=1 (i64.const 0)))
779 (if (i32.eq (local.get 1) (i32.const 2))
781 (i64.store align=2 (i64.const 0) (local.get 2))
782 (local.set 3 (i64.load align=2 (i64.const 0)))
785 (if (i32.eq (local.get 1) (i32.const 4))
787 (i64.store align=4 (i64.const 0) (local.get 2))
788 (local.set 3 (i64.load align=4 (i64.const 0)))
791 (if (i32.eq (local.get 1) (i32.const 8))
793 (i64.store align=8 (i64.const 0) (local.get 2))
794 (local.set 3 (i64.load align=8 (i64.const 0)))
802 (assert_return (invoke "f32_align_switch" (i32.const 0)) (f32.const 10.0))
803 (assert_return (invoke "f32_align_switch" (i32.const 1)) (f32.const 10.0))
804 (assert_return (invoke "f32_align_switch" (i32.const 2)) (f32.const 10.0))
805 (assert_return (invoke "f32_align_switch" (i32.const 3)) (f32.const 10.0))
807 (assert_return (invoke "f64_align_switch" (i32.const 0)) (f64.const 10.0))
808 (assert_return (invoke "f64_align_switch" (i32.const 1)) (f64.const 10.0))
809 (assert_return (invoke "f64_align_switch" (i32.const 2)) (f64.const 10.0))
810 (assert_return (invoke "f64_align_switch" (i32.const 3)) (f64.const 10.0))
811 (assert_return (invoke "f64_align_switch" (i32.const 4)) (f64.const 10.0))
813 (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 0)) (i32.const 10))
814 (assert_return (invoke "i32_align_switch" (i32.const 0) (i32.const 1)) (i32.const 10))
815 (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 0)) (i32.const 10))
816 (assert_return (invoke "i32_align_switch" (i32.const 1) (i32.const 1)) (i32.const 10))
817 (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 0)) (i32.const 10))
818 (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 1)) (i32.const 10))
819 (assert_return (invoke "i32_align_switch" (i32.const 2) (i32.const 2)) (i32.const 10))
820 (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 0)) (i32.const 10))
821 (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 1)) (i32.const 10))
822 (assert_return (invoke "i32_align_switch" (i32.const 3) (i32.const 2)) (i32.const 10))
823 (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 0)) (i32.const 10))
824 (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 1)) (i32.const 10))
825 (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 2)) (i32.const 10))
826 (assert_return (invoke "i32_align_switch" (i32.const 4) (i32.const 4)) (i32.const 10))
828 (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 0)) (i64.const 10))
829 (assert_return (invoke "i64_align_switch" (i32.const 0) (i32.const 1)) (i64.const 10))
830 (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 0)) (i64.const 10))
831 (assert_return (invoke "i64_align_switch" (i32.const 1) (i32.const 1)) (i64.const 10))
832 (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 0)) (i64.const 10))
833 (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 1)) (i64.const 10))
834 (assert_return (invoke "i64_align_switch" (i32.const 2) (i32.const 2)) (i64.const 10))
835 (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 0)) (i64.const 10))
836 (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 1)) (i64.const 10))
837 (assert_return (invoke "i64_align_switch" (i32.const 3) (i32.const 2)) (i64.const 10))
838 (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 0)) (i64.const 10))
839 (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 1)) (i64.const 10))
840 (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 2)) (i64.const 10))
841 (assert_return (invoke "i64_align_switch" (i32.const 4) (i32.const 4)) (i64.const 10))
842 (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 0)) (i64.const 10))
843 (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 1)) (i64.const 10))
844 (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 2)) (i64.const 10))
845 (assert_return (invoke "i64_align_switch" (i32.const 5) (i32.const 4)) (i64.const 10))
846 (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 0)) (i64.const 10))
847 (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 1)) (i64.const 10))
848 (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 2)) (i64.const 10))
849 (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 4)) (i64.const 10))
850 (assert_return (invoke "i64_align_switch" (i32.const 6) (i32.const 8)) (i64.const 10))
852 ;; Test that an i64 store with 4-byte alignment that's 4 bytes out of bounds traps without storing anything
856 (func (export "store") (param i64 i64)
857 (i64.store align=4 (local.get 0) (local.get 1))
859 (func (export "load") (param i64) (result i32)
860 (i32.load (local.get 0))
864 (assert_trap (invoke "store" (i64.const 65532) (i64.const -1)) "out of bounds memory access")
865 ;; No memory was changed
866 (assert_return (invoke "load" (i64.const 65532)) (i32.const 0))