xref: /llvm-project/llvm/test/MC/WebAssembly/reference-types.s (revision a268bda0dafd8ffa048e6892c5501313d01d4a40)
1# RUN: llvm-mc -show-encoding -triple=wasm32-unknown-unknown -mattr=+reference-types < %s | FileCheck %s
2# RUN: llvm-mc -show-encoding -triple=wasm64-unknown-unknown -mattr=+reference-types < %s | FileCheck %s
3
4# CHECK-LABEL:ref_is_null:
5# CHECK: ref.is_null     # encoding: [0xd1]
6ref_is_null:
7  .functype ref_is_null () -> (i32, i32, i32)
8  ref.null_extern
9  ref.is_null
10  ref.null_func
11  ref.is_null
12  ref.null_exn
13  ref.is_null
14  end_function
15
16# CHECK-LABEL: ref_null_test:
17# CHECK: ref.null_func   # encoding: [0xd0,0x70]
18# CHECK: ref.null_extern # encoding: [0xd0,0x6f]
19# CHECK: ref.null_exn    # encoding: [0xd0,0x69]
20ref_null_test:
21  .functype ref_null_test () -> ()
22  ref.null_func
23  drop
24  ref.null_extern
25  drop
26  ref.null_exn
27  drop
28  end_function
29
30# CHECK-LABEL: ref_sig_test_funcref:
31# CHECK-NEXT: .functype ref_sig_test_funcref (funcref) -> (funcref)
32ref_sig_test_funcref:
33  .functype ref_sig_test_funcref (funcref) -> (funcref)
34  local.get 0
35  end_function
36
37# CHECK-LABEL: ref_sig_test_externref:
38# CHECK-NEXT: .functype ref_sig_test_externref (externref) -> (externref)
39ref_sig_test_externref:
40  .functype ref_sig_test_externref (externref) -> (externref)
41  local.get 0
42  end_function
43
44# CHECK-LABEL: ref_sig_test_exnref:
45# CHECK-NEXT: .functype ref_sig_test_exnref (exnref) -> (exnref)
46ref_sig_test_exnref:
47  .functype ref_sig_test_exnref (exnref) -> (exnref)
48  local.get 0
49  end_function
50
51# CHECK-LABEL: ref_select_test:
52# CHECK: funcref.select   # encoding: [0x1b]
53# CHECK: externref.select # encoding: [0x1b]
54# CHECK: exnref.select    # encoding: [0x1b]
55ref_select_test:
56  .functype ref_select_test () -> ()
57  ref.null_func
58  ref.null_func
59  i32.const 0
60  funcref.select
61  drop
62  ref.null_extern
63  ref.null_extern
64  i32.const 0
65  externref.select
66  drop
67  ref.null_exn
68  ref.null_exn
69  i32.const 0
70  exnref.select
71  drop
72  end_function
73
74# CHECK-LABEL: ref_block_test:
75# CHECK: block funcref
76# CHECK: block externref
77# CHECK: block exnref
78ref_block_test:
79  .functype ref_block_test () -> ()
80  block funcref
81  block externref
82  block exnref
83  ref.null_exn
84  end_block
85  drop
86  ref.null_extern
87  end_block
88  drop
89  ref.null_func
90  end_block
91  drop
92  end_function
93