blob: c7429c23e2266d98f77ee3033390692c411d7a7e [file] [log] [blame]
Kaido Kertf309f9a2021-04-30 12:09:15 -07001// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef TEST_SIGNATURES_H
6#define TEST_SIGNATURES_H
7
8#include "src/codegen/signature.h"
9#include "src/wasm/value-type.h"
10#include "src/wasm/wasm-opcodes.h"
11
12namespace v8 {
13namespace internal {
14namespace wasm {
15
16// A helper class with many useful signatures in order to simplify tests.
17class TestSignatures {
18 public:
19 TestSignatures()
20 : sig_i_v(1, 0, kIntTypes4),
21 sig_i_i(1, 1, kIntTypes4),
22 sig_i_ii(1, 2, kIntTypes4),
23 sig_i_iii(1, 3, kIntTypes4),
24 sig_i_f(1, 1, kIntFloatTypes4),
25 sig_i_ff(1, 2, kIntFloatTypes4),
26 sig_i_d(1, 1, kIntDoubleTypes4),
27 sig_i_dd(1, 2, kIntDoubleTypes4),
28 sig_i_e(1, 1, kIntExternRefTypes4),
29 sig_i_ee(1, 2, kIntExternRefTypes4),
30 sig_i_c(1, 1, kIntFuncRefTypes4),
31 sig_i_s(1, 1, kIntSimd128Types4),
32 sig_l_v(1, 0, kLongTypes4),
33 sig_l_l(1, 1, kLongTypes4),
34 sig_l_ll(1, 2, kLongTypes4),
35 sig_i_ll(1, 2, kIntLongTypes4),
36 sig_f_f(1, 1, kFloatTypes4),
37 sig_f_ff(1, 2, kFloatTypes4),
38 sig_d_d(1, 1, kDoubleTypes4),
39 sig_d_dd(1, 2, kDoubleTypes4),
40 sig_e_v(1, 0, kExternRefTypes4),
41 sig_c_v(1, 0, kFuncTypes4),
42 sig_e_e(1, 1, kExternRefTypes4),
43 sig_c_c(1, 1, kFuncTypes4),
44 sig_v_v(0, 0, kIntTypes4),
45 sig_v_i(0, 1, kIntTypes4),
46 sig_v_ii(0, 2, kIntTypes4),
47 sig_v_iii(0, 3, kIntTypes4),
48 sig_v_e(0, 1, kExternRefTypes4),
49 sig_v_c(0, 1, kFuncTypes4),
50 sig_s_i(1, 1, kSimd128IntTypes4),
51 sig_s_s(1, 1, kSimd128Types4),
52 sig_s_ss(1, 2, kSimd128Types4),
53 sig_ii_v(2, 0, kIntTypes4),
54 sig_iii_v(3, 0, kIntTypes4) {
55 // I used C++ and you won't believe what happened next....
56 for (int i = 0; i < 4; i++) kIntTypes4[i] = kWasmI32;
57 for (int i = 0; i < 4; i++) kLongTypes4[i] = kWasmI64;
58 for (int i = 0; i < 4; i++) kFloatTypes4[i] = kWasmF32;
59 for (int i = 0; i < 4; i++) kDoubleTypes4[i] = kWasmF64;
60 for (int i = 0; i < 4; i++) kExternRefTypes4[i] = kWasmExternRef;
61 for (int i = 0; i < 4; i++) kFuncTypes4[i] = kWasmFuncRef;
62 for (int i = 1; i < 4; i++) kIntLongTypes4[i] = kWasmI64;
63 for (int i = 1; i < 4; i++) kIntFloatTypes4[i] = kWasmF32;
64 for (int i = 1; i < 4; i++) kIntDoubleTypes4[i] = kWasmF64;
65 for (int i = 1; i < 4; i++) kIntExternRefTypes4[i] = kWasmExternRef;
66 for (int i = 1; i < 4; i++) kIntFuncRefTypes4[i] = kWasmFuncRef;
67 for (int i = 0; i < 4; i++) kSimd128Types4[i] = kWasmS128;
68 for (int i = 1; i < 4; i++) kIntSimd128Types4[i] = kWasmS128;
69 for (int i = 0; i < 4; i++) kSimd128IntTypes4[i] = kWasmS128;
70 kIntLongTypes4[0] = kWasmI32;
71 kIntFloatTypes4[0] = kWasmI32;
72 kIntDoubleTypes4[0] = kWasmI32;
73 kIntExternRefTypes4[0] = kWasmI32;
74 kIntFuncRefTypes4[0] = kWasmI32;
75 kIntSimd128Types4[0] = kWasmI32;
76 kSimd128IntTypes4[1] = kWasmI32;
77 }
78
79 FunctionSig* i_v() { return &sig_i_v; }
80 FunctionSig* i_i() { return &sig_i_i; }
81 FunctionSig* i_ii() { return &sig_i_ii; }
82 FunctionSig* i_iii() { return &sig_i_iii; }
83
84 FunctionSig* i_f() { return &sig_i_f; }
85 FunctionSig* i_ff() { return &sig_i_ff; }
86 FunctionSig* i_d() { return &sig_i_d; }
87 FunctionSig* i_dd() { return &sig_i_dd; }
88
89 FunctionSig* l_v() { return &sig_l_v; }
90 FunctionSig* l_l() { return &sig_l_l; }
91 FunctionSig* l_ll() { return &sig_l_ll; }
92 FunctionSig* i_ll() { return &sig_i_ll; }
93 FunctionSig* i_e() { return &sig_i_e; }
94 FunctionSig* i_ee() { return &sig_i_ee; }
95 FunctionSig* i_c() { return &sig_i_c; }
96 FunctionSig* i_s() { return &sig_i_s; }
97
98 FunctionSig* f_f() { return &sig_f_f; }
99 FunctionSig* f_ff() { return &sig_f_ff; }
100 FunctionSig* d_d() { return &sig_d_d; }
101 FunctionSig* d_dd() { return &sig_d_dd; }
102
103 FunctionSig* e_v() { return &sig_e_v; }
104 FunctionSig* a_v() { return &sig_c_v; }
105 FunctionSig* e_e() { return &sig_e_e; }
106 FunctionSig* c_c() { return &sig_c_c; }
107
108 FunctionSig* v_v() { return &sig_v_v; }
109 FunctionSig* v_i() { return &sig_v_i; }
110 FunctionSig* v_ii() { return &sig_v_ii; }
111 FunctionSig* v_iii() { return &sig_v_iii; }
112 FunctionSig* v_e() { return &sig_v_e; }
113 FunctionSig* v_c() { return &sig_v_c; }
114 FunctionSig* s_i() { return &sig_s_i; }
115 FunctionSig* s_s() { return &sig_s_s; }
116 FunctionSig* s_ss() { return &sig_s_ss; }
117
118 FunctionSig* ii_v() { return &sig_ii_v; }
119 FunctionSig* iii_v() { return &sig_iii_v; }
120
121 FunctionSig* many(Zone* zone, ValueType ret, ValueType param, int count) {
122 FunctionSig::Builder builder(zone, ret == kWasmStmt ? 0 : 1, count);
123 if (ret != kWasmStmt) builder.AddReturn(ret);
124 for (int i = 0; i < count; i++) {
125 builder.AddParam(param);
126 }
127 return builder.Build();
128 }
129
130 private:
131 ValueType kIntTypes4[4];
132 ValueType kLongTypes4[4];
133 ValueType kFloatTypes4[4];
134 ValueType kDoubleTypes4[4];
135 ValueType kExternRefTypes4[4];
136 ValueType kFuncTypes4[4];
137 ValueType kIntLongTypes4[4];
138 ValueType kIntFloatTypes4[4];
139 ValueType kIntDoubleTypes4[4];
140 ValueType kIntExternRefTypes4[4];
141 ValueType kIntFuncRefTypes4[4];
142 ValueType kSimd128Types4[4];
143 ValueType kIntSimd128Types4[4];
144 ValueType kSimd128IntTypes4[4];
145
146 FunctionSig sig_i_v;
147 FunctionSig sig_i_i;
148 FunctionSig sig_i_ii;
149 FunctionSig sig_i_iii;
150
151 FunctionSig sig_i_f;
152 FunctionSig sig_i_ff;
153 FunctionSig sig_i_d;
154 FunctionSig sig_i_dd;
155 FunctionSig sig_i_e;
156 FunctionSig sig_i_ee;
157 FunctionSig sig_i_c;
158 FunctionSig sig_i_s;
159
160 FunctionSig sig_l_v;
161 FunctionSig sig_l_l;
162 FunctionSig sig_l_ll;
163 FunctionSig sig_i_ll;
164
165 FunctionSig sig_f_f;
166 FunctionSig sig_f_ff;
167 FunctionSig sig_d_d;
168 FunctionSig sig_d_dd;
169
170 FunctionSig sig_e_v;
171 FunctionSig sig_c_v;
172 FunctionSig sig_e_e;
173 FunctionSig sig_c_c;
174
175 FunctionSig sig_v_v;
176 FunctionSig sig_v_i;
177 FunctionSig sig_v_ii;
178 FunctionSig sig_v_iii;
179 FunctionSig sig_v_e;
180 FunctionSig sig_v_c;
181 FunctionSig sig_s_i;
182 FunctionSig sig_s_s;
183 FunctionSig sig_s_ss;
184
185 FunctionSig sig_ii_v;
186 FunctionSig sig_iii_v;
187};
188} // namespace wasm
189} // namespace internal
190} // namespace v8
191
192#endif // TEST_SIGNATURES_H