xref: /wasmtime-44.0.1/tests/disas/table-get.wat (revision 7e0331c2)
1;;! target = "x86_64"
2;;! test = "optimize"
3;;! flags = "-O opt-level=0"
4
5;; Test basic code generation for table WebAssembly instructions.
6;; Use optimization but with `opt-level=0` to legalize away table_addr instructions.
7
8(module
9  (table (export "table") 1 externref)
10  (func (export "table.get.const") (result externref)
11    i32.const 0
12    table.get 0)
13  (func (export "table.get.var") (param i32) (result externref)
14    local.get 0
15    table.get 0))
16
17;; function u0:0(i64 vmctx, i64) -> i32 tail {
18;;     gv0 = vmctx
19;;     gv1 = load.i64 notrap aligned readonly gv0+8
20;;     gv2 = load.i64 notrap aligned gv1+24
21;;     gv3 = vmctx
22;;     gv4 = load.i64 notrap aligned gv3+48
23;;     gv5 = load.i64 notrap aligned gv3+56
24;;     gv6 = load.i64 notrap aligned readonly can_move gv3+8
25;;     gv7 = load.i64 notrap aligned readonly can_move gv6+32
26;;     gv8 = load.i64 notrap aligned gv6+40
27;;     stack_limit = gv2
28;;
29;;                                 block0(v0: i64, v1: i64):
30;; @0051                               v3 = iconst.i32 0
31;; @0053                               v4 = load.i64 notrap aligned v0+56
32;; @0053                               v5 = ireduce.i32 v4
33;; @0053                               v6 = icmp uge v3, v5  ; v3 = 0
34;; @0053                               v7 = uextend.i64 v3  ; v3 = 0
35;; @0053                               v8 = load.i64 notrap aligned v0+48
36;;                                     v62 = iconst.i64 2
37;; @0053                               v9 = ishl v7, v62  ; v62 = 2
38;; @0053                               v10 = iadd v8, v9
39;; @0053                               v11 = iconst.i64 0
40;; @0053                               v12 = select_spectre_guard v6, v11, v10  ; v11 = 0
41;; @0053                               v13 = load.i32 user5 aligned table v12
42;;                                     v61 = iconst.i32 1
43;; @0053                               v14 = band v13, v61  ; v61 = 1
44;;                                     v60 = iconst.i32 0
45;; @0053                               v15 = icmp eq v13, v60  ; v60 = 0
46;; @0053                               v16 = uextend.i32 v15
47;; @0053                               v17 = bor v14, v16
48;; @0053                               brif v17, block4, block2
49;;
50;;                                 block2:
51;; @0053                               v18 = uextend.i64 v13
52;; @0053                               v58 = load.i64 notrap aligned readonly can_move v0+8
53;; @0053                               v19 = load.i64 notrap aligned readonly can_move v58+32
54;; @0053                               v20 = iadd v19, v18
55;; @0053                               v21 = load.i32 notrap aligned v20
56;; @0053                               v22 = iconst.i32 2
57;; @0053                               v23 = band v21, v22  ; v22 = 2
58;; @0053                               brif v23, block4, block3
59;;
60;;                                 block3:
61;; @0053                               v25 = load.i64 notrap aligned readonly v0+32
62;; @0053                               v26 = load.i32 notrap aligned v25
63;; @0053                               v27 = uextend.i64 v13
64;; @0053                               v56 = load.i64 notrap aligned readonly can_move v0+8
65;; @0053                               v28 = load.i64 notrap aligned readonly can_move v56+32
66;; @0053                               v29 = iadd v28, v27
67;; @0053                               v30 = iconst.i64 16
68;; @0053                               v31 = iadd v29, v30  ; v30 = 16
69;; @0053                               store notrap aligned v26, v31
70;; @0053                               v32 = iconst.i32 2
71;; @0053                               v33 = bor.i32 v21, v32  ; v32 = 2
72;; @0053                               v34 = uextend.i64 v13
73;; @0053                               v54 = load.i64 notrap aligned readonly can_move v0+8
74;; @0053                               v35 = load.i64 notrap aligned readonly can_move v54+32
75;; @0053                               v36 = iadd v35, v34
76;; @0053                               store notrap aligned v33, v36
77;; @0053                               v37 = uextend.i64 v13
78;; @0053                               v52 = load.i64 notrap aligned readonly can_move v0+8
79;; @0053                               v38 = load.i64 notrap aligned readonly can_move v52+32
80;; @0053                               v39 = iadd v38, v37
81;; @0053                               v40 = iconst.i64 8
82;; @0053                               v41 = iadd v39, v40  ; v40 = 8
83;; @0053                               v42 = load.i64 notrap aligned v41
84;;                                     v51 = iconst.i64 1
85;; @0053                               v43 = iadd v42, v51  ; v51 = 1
86;; @0053                               v44 = uextend.i64 v13
87;; @0053                               v49 = load.i64 notrap aligned readonly can_move v0+8
88;; @0053                               v45 = load.i64 notrap aligned readonly can_move v49+32
89;; @0053                               v46 = iadd v45, v44
90;; @0053                               v47 = iconst.i64 8
91;; @0053                               v48 = iadd v46, v47  ; v47 = 8
92;; @0053                               store notrap aligned v43, v48
93;; @0053                               store.i32 notrap aligned v13, v25
94;; @0053                               jump block4
95;;
96;;                                 block4:
97;; @0055                               jump block1
98;;
99;;                                 block1:
100;; @0055                               return v13
101;; }
102;;
103;; function u0:1(i64 vmctx, i64, i32) -> i32 tail {
104;;     gv0 = vmctx
105;;     gv1 = load.i64 notrap aligned readonly gv0+8
106;;     gv2 = load.i64 notrap aligned gv1+24
107;;     gv3 = vmctx
108;;     gv4 = load.i64 notrap aligned gv3+48
109;;     gv5 = load.i64 notrap aligned gv3+56
110;;     gv6 = load.i64 notrap aligned readonly can_move gv3+8
111;;     gv7 = load.i64 notrap aligned readonly can_move gv6+32
112;;     gv8 = load.i64 notrap aligned gv6+40
113;;     stack_limit = gv2
114;;
115;;                                 block0(v0: i64, v1: i64, v2: i32):
116;; @005a                               v4 = load.i64 notrap aligned v0+56
117;; @005a                               v5 = ireduce.i32 v4
118;; @005a                               v6 = icmp uge v2, v5
119;; @005a                               v7 = uextend.i64 v2
120;; @005a                               v8 = load.i64 notrap aligned v0+48
121;;                                     v62 = iconst.i64 2
122;; @005a                               v9 = ishl v7, v62  ; v62 = 2
123;; @005a                               v10 = iadd v8, v9
124;; @005a                               v11 = iconst.i64 0
125;; @005a                               v12 = select_spectre_guard v6, v11, v10  ; v11 = 0
126;; @005a                               v13 = load.i32 user5 aligned table v12
127;;                                     v61 = iconst.i32 1
128;; @005a                               v14 = band v13, v61  ; v61 = 1
129;;                                     v60 = iconst.i32 0
130;; @005a                               v15 = icmp eq v13, v60  ; v60 = 0
131;; @005a                               v16 = uextend.i32 v15
132;; @005a                               v17 = bor v14, v16
133;; @005a                               brif v17, block4, block2
134;;
135;;                                 block2:
136;; @005a                               v18 = uextend.i64 v13
137;; @005a                               v58 = load.i64 notrap aligned readonly can_move v0+8
138;; @005a                               v19 = load.i64 notrap aligned readonly can_move v58+32
139;; @005a                               v20 = iadd v19, v18
140;; @005a                               v21 = load.i32 notrap aligned v20
141;; @005a                               v22 = iconst.i32 2
142;; @005a                               v23 = band v21, v22  ; v22 = 2
143;; @005a                               brif v23, block4, block3
144;;
145;;                                 block3:
146;; @005a                               v25 = load.i64 notrap aligned readonly v0+32
147;; @005a                               v26 = load.i32 notrap aligned v25
148;; @005a                               v27 = uextend.i64 v13
149;; @005a                               v56 = load.i64 notrap aligned readonly can_move v0+8
150;; @005a                               v28 = load.i64 notrap aligned readonly can_move v56+32
151;; @005a                               v29 = iadd v28, v27
152;; @005a                               v30 = iconst.i64 16
153;; @005a                               v31 = iadd v29, v30  ; v30 = 16
154;; @005a                               store notrap aligned v26, v31
155;; @005a                               v32 = iconst.i32 2
156;; @005a                               v33 = bor.i32 v21, v32  ; v32 = 2
157;; @005a                               v34 = uextend.i64 v13
158;; @005a                               v54 = load.i64 notrap aligned readonly can_move v0+8
159;; @005a                               v35 = load.i64 notrap aligned readonly can_move v54+32
160;; @005a                               v36 = iadd v35, v34
161;; @005a                               store notrap aligned v33, v36
162;; @005a                               v37 = uextend.i64 v13
163;; @005a                               v52 = load.i64 notrap aligned readonly can_move v0+8
164;; @005a                               v38 = load.i64 notrap aligned readonly can_move v52+32
165;; @005a                               v39 = iadd v38, v37
166;; @005a                               v40 = iconst.i64 8
167;; @005a                               v41 = iadd v39, v40  ; v40 = 8
168;; @005a                               v42 = load.i64 notrap aligned v41
169;;                                     v51 = iconst.i64 1
170;; @005a                               v43 = iadd v42, v51  ; v51 = 1
171;; @005a                               v44 = uextend.i64 v13
172;; @005a                               v49 = load.i64 notrap aligned readonly can_move v0+8
173;; @005a                               v45 = load.i64 notrap aligned readonly can_move v49+32
174;; @005a                               v46 = iadd v45, v44
175;; @005a                               v47 = iconst.i64 8
176;; @005a                               v48 = iadd v46, v47  ; v47 = 8
177;; @005a                               store notrap aligned v43, v48
178;; @005a                               store.i32 notrap aligned v13, v25
179;; @005a                               jump block4
180;;
181;;                                 block4:
182;; @005c                               jump block1
183;;
184;;                                 block1:
185;; @005c                               return v13
186;; }
187