-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathSigCache.v3
173 lines (151 loc) · 6.52 KB
/
SigCache.v3
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
// Copyright 2020 Ben L. Titzer. All rights reserved.
// See LICENSE for details of Apache 2.0 license.
// Caches commonly-used signatures for convenience and to save memory.
// Type abbreviations:
// i=i32 l=i64 f=f32 d=f64 r=anyref e=externref g=funcref s=v128 h=i31ref
component SigCache {
// Arrays of value types are cached separately and used in different signatures.
def arr_v: Array<ValueType> = [];
def arr_ii: Array<ValueType> = [ValueType.I32, ValueType.I32];
def arr_iii: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I32];
def arr_iiii: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32];
def arr_iiiii: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32];
def arr_iiiiii: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32];
def arr_ili: Array<ValueType> = [ValueType.I32, ValueType.I64, ValueType.I32];
def arr_il: Array<ValueType> = [ValueType.I32, ValueType.I64];
def arr_llllll: Array<ValueType> = [ValueType.I64, ValueType.I64, ValueType.I64, ValueType.I64, ValueType.I64, ValueType.I64];
def arr_iiiiil: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I32, ValueType.I64];
def arr_iil: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I64];
def arr_illi: Array<ValueType> = [ValueType.I32, ValueType.I64, ValueType.I64, ValueType.I32];
def arr_liilli: Array<ValueType> = [ValueType.I64, ValueType.I32, ValueType.I32, ValueType.I64, ValueType.I64, ValueType.I32];
def arr_li: Array<ValueType> = [ValueType.I64, ValueType.I32];
def arr_illl: Array<ValueType> = [ValueType.I32, ValueType.I64, ValueType.I64, ValueType.I64];
def arr_iill: Array<ValueType> = [ValueType.I32, ValueType.I32, ValueType.I64, ValueType.I64];
def arr_ill: Array<ValueType> = [ValueType.I32, ValueType.I64, ValueType.I64];
def arr_if: Array<ValueType> = [ValueType.I32, ValueType.F32];
def arr_id: Array<ValueType> = [ValueType.I32, ValueType.F64];
def arr_is: Array<ValueType> = [ValueType.I32, ValueType.V128];
def arr_i: Array<ValueType> = [ValueType.I32];
def arr_e: Array<ValueType> = [ValueTypes.EXTERNREF];
def arr_rr: Array<ValueType> = [ValueTypes.ANYREF, ValueTypes.ANYREF];
def arr_rrr: Array<ValueType> = [ValueTypes.ANYREF, ValueTypes.ANYREF, ValueTypes.ANYREF];
def arr_r: Array<ValueType> = [ValueTypes.ANYREF];
def arr_g: Array<ValueType> = [ValueTypes.FUNCREF];
def arr_ll: Array<ValueType> = [ValueType.I64, ValueType.I64];
def arr_l: Array<ValueType> = [ValueType.I64];
def arr_ff: Array<ValueType> = [ValueType.F32, ValueType.F32];
def arr_f: Array<ValueType> = [ValueType.F32];
def arr_dd: Array<ValueType> = [ValueType.F64, ValueType.F64];
def arr_si: Array<ValueType> = [ValueType.V128, ValueType.I32];
def arr_sl: Array<ValueType> = [ValueType.V128, ValueType.I64];
def arr_sf: Array<ValueType> = [ValueType.V128, ValueType.F32];
def arr_sd: Array<ValueType> = [ValueType.V128, ValueType.F64];
def arr_d: Array<ValueType> = [ValueType.F64];
def arr_s: Array<ValueType> = [ValueType.V128];
def arr_ss: Array<ValueType> = [ValueType.V128, ValueType.V128];
def arr_sss: Array<ValueType> = [ValueType.V128, ValueType.V128, ValueType.V128];
def arr_ls: Array<ValueType> = [ValueType.I64, ValueType.V128];
def arr_fs: Array<ValueType> = [ValueType.F32, ValueType.V128];
def arr_ds: Array<ValueType> = [ValueType.F64, ValueType.V128];
def arr_h: Array<ValueType> = [ValueTypes.I31REF];
def arr_x: Array<ValueType> = [ValueTypes.EXNREF];
def arr_c: Array<ValueType> = [ValueTypes.CONTREF];
// Very commonly used signatures.
def v_v = S(arr_v, arr_v);
def i_v = S(arr_i, arr_v);
def l_v = S(arr_l, arr_v);
def v_i = S(arr_v, arr_i);
def v_l = S(arr_v, arr_l);
def v_f = S(arr_v, arr_f);
def v_d = S(arr_v, arr_d);
def i_i = S(arr_i, arr_i);
def i_l = S(arr_i, arr_l);
def i_f = S(arr_i, arr_f);
def i_d = S(arr_i, arr_d);
def ii_i = S(arr_ii, arr_i);
def iii_i = S(arr_iii, arr_i);
def iii_v = S(arr_iii, arr_v);
def iiii_v = S(arr_iiii, arr_v);
def iiii_i = S(arr_iiii, arr_i);
def iiii_l = S(arr_iiii, arr_l);
def iiiii_l = S(arr_iiiii, arr_l);
def iiiiii_l = S(arr_iiiiii, arr_l);
def ii_v = S(arr_ii, arr_v);
def il_v = S(arr_il, arr_v);
def if_v = S(arr_if, arr_v);
def id_v = S(arr_id, arr_v);
def ili_i = S(arr_ili, arr_i);
def il_l = S(arr_il, arr_l);
def illi_l = S(arr_illi, arr_l);
def llllll_l = S(arr_llllll, arr_l);
def iiiiil_l = S(arr_iiiiil, arr_l);
def ill_l = S(arr_ill, arr_l);
def iil_i = S(arr_iil, arr_i);
def iil_l = S(arr_iil, arr_l);
def liilli_l = S(arr_liilli, arr_l);
def li_l = S(arr_li, arr_l);
def illl_l = S(arr_illl, arr_l);
def iill_l = S(arr_illl, arr_l);
def ill_i = S(arr_ill, arr_i);
def ili_l = S(arr_ili, arr_l);
def ii_l = S(arr_ii, arr_l);
def iii_l = S(arr_iii, arr_l);
def l_l = S(arr_l, arr_l);
def l_i = S(arr_l, arr_i);
def l_f = S(arr_l, arr_f);
def l_d = S(arr_l, arr_d);
def ll_l = S(arr_ll, arr_l);
def ll_i = S(arr_ll, arr_i);
def f_i = S(arr_f, arr_i);
def f_l = S(arr_f, arr_l);
def f_f = S(arr_f, arr_f);
def f_d = S(arr_f, arr_d);
def ff_f = S(arr_ff, arr_f);
def ff_i = S(arr_ff, arr_i);
def d_i = S(arr_d, arr_i);
def d_l = S(arr_d, arr_l);
def d_f = S(arr_d, arr_f);
def d_d = S(arr_d, arr_d);
def dd_d = S(arr_dd, arr_d);
def dd_i = S(arr_dd, arr_i);
def v_e = S(arr_v, arr_e);
def v_g = S(arr_v, arr_g);
def e_v = S(arr_e, arr_v);
def g_v = S(arr_g, arr_v);
def e_i = S(arr_e, arr_i);
def g_i = S(arr_g, arr_i);
def i_g = S(arr_i, arr_g);
def r_i = S(arr_r, arr_i);
def r_r = S(arr_r, arr_r);
def rr_i = S(arr_rr, arr_i);
def v_r = S(arr_v, arr_r);
def v_s = S(arr_v, arr_s);
def v_h = S(arr_v, arr_h);
def s_s = S(arr_s, arr_s);
def ss_s = S(arr_ss, arr_s);
def sss_s = S(arr_sss, arr_s);
def s_i = S(arr_s, arr_i);
def s_l = S(arr_s, arr_l);
def s_f = S(arr_s, arr_f);
def s_d = S(arr_s, arr_d);
def i_s = S(arr_i, arr_s);
def l_s = S(arr_l, arr_s);
def f_s = S(arr_f, arr_s);
def d_s = S(arr_d, arr_s);
def is_s = S(arr_is, arr_s);
def ls_s = S(arr_ls, arr_s);
def fs_s = S(arr_fs, arr_s);
def ds_s = S(arr_ds, arr_s);
def si_s = S(arr_si, arr_s);
def sl_s = S(arr_sl, arr_s);
def sf_s = S(arr_sf, arr_s);
def sd_s = S(arr_sd, arr_s);
def is_v = S(arr_is, arr_v);
def x_v = S(arr_x, arr_v);
def v_x = S(arr_v, arr_x);
private def S(params: Array<ValueType>, results: Array<ValueType>) -> SigDecl {
var sig = SigDecl.new(true, ValueTypes.NO_HEAPTYPES, params, results);
Canon.globalCache.insert(sig);
return sig;
}
}