Line data Source code
1 : // 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/signature.h"
9 : #include "src/wasm/value-type.h"
10 : #include "src/wasm/wasm-opcodes.h"
11 :
12 : namespace v8 {
13 : namespace internal {
14 : namespace wasm {
15 :
16 : // A helper class with many useful signatures in order to simplify tests.
17 : class TestSignatures {
18 : public:
19 1038 : 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_r(1, 1, kIntRefTypes4),
29 : sig_i_rr(1, 2, kIntRefTypes4),
30 : sig_l_v(1, 0, kLongTypes4),
31 : sig_l_l(1, 1, kLongTypes4),
32 : sig_l_ll(1, 2, kLongTypes4),
33 : sig_i_ll(1, 2, kIntLongTypes4),
34 : sig_f_f(1, 1, kFloatTypes4),
35 : sig_f_ff(1, 2, kFloatTypes4),
36 : sig_d_d(1, 1, kDoubleTypes4),
37 : sig_d_dd(1, 2, kDoubleTypes4),
38 : sig_r_v(1, 0, kRefTypes4),
39 : sig_v_v(0, 0, kIntTypes4),
40 : sig_v_i(0, 1, kIntTypes4),
41 : sig_v_ii(0, 2, kIntTypes4),
42 : sig_v_iii(0, 3, kIntTypes4),
43 : sig_s_i(1, 1, kSimd128IntTypes4),
44 : sig_ii_v(2, 0, kIntTypes4),
45 10380 : sig_iii_v(3, 0, kIntTypes4) {
46 : // I used C++ and you won't believe what happened next....
47 5190 : for (int i = 0; i < 4; i++) kIntTypes4[i] = kWasmI32;
48 5190 : for (int i = 0; i < 4; i++) kLongTypes4[i] = kWasmI64;
49 5190 : for (int i = 0; i < 4; i++) kFloatTypes4[i] = kWasmF32;
50 5190 : for (int i = 0; i < 4; i++) kDoubleTypes4[i] = kWasmF64;
51 5190 : for (int i = 0; i < 4; i++) kRefTypes4[i] = kWasmAnyRef;
52 5190 : for (int i = 0; i < 4; i++) kIntLongTypes4[i] = kWasmI64;
53 5190 : for (int i = 0; i < 4; i++) kIntFloatTypes4[i] = kWasmF32;
54 5190 : for (int i = 0; i < 4; i++) kIntDoubleTypes4[i] = kWasmF64;
55 5190 : for (int i = 0; i < 4; i++) kIntRefTypes4[i] = kWasmAnyRef;
56 5190 : for (int i = 0; i < 4; i++) kSimd128IntTypes4[i] = kWasmS128;
57 1038 : kIntLongTypes4[0] = kWasmI32;
58 1038 : kIntFloatTypes4[0] = kWasmI32;
59 1038 : kIntDoubleTypes4[0] = kWasmI32;
60 1038 : kIntRefTypes4[0] = kWasmI32;
61 1038 : kSimd128IntTypes4[1] = kWasmI32;
62 1038 : }
63 :
64 48 : FunctionSig* i_v() { return &sig_i_v; }
65 1309 : FunctionSig* i_i() { return &sig_i_i; }
66 22 : FunctionSig* i_ii() { return &sig_i_ii; }
67 1 : FunctionSig* i_iii() { return &sig_i_iii; }
68 :
69 16 : FunctionSig* i_f() { return &sig_i_f; }
70 1 : FunctionSig* i_ff() { return &sig_i_ff; }
71 14 : FunctionSig* i_d() { return &sig_i_d; }
72 1 : FunctionSig* i_dd() { return &sig_i_dd; }
73 :
74 28 : FunctionSig* l_v() { return &sig_l_v; }
75 963 : FunctionSig* l_l() { return &sig_l_l; }
76 4 : FunctionSig* l_ll() { return &sig_l_ll; }
77 1 : FunctionSig* i_ll() { return &sig_i_ll; }
78 : FunctionSig* i_r() { return &sig_i_r; }
79 : FunctionSig* i_rr() { return &sig_i_rr; }
80 :
81 3 : FunctionSig* f_f() { return &sig_f_f; }
82 52 : FunctionSig* f_ff() { return &sig_f_ff; }
83 3 : FunctionSig* d_d() { return &sig_d_d; }
84 46 : FunctionSig* d_dd() { return &sig_d_dd; }
85 :
86 1 : FunctionSig* r_v() { return &sig_r_v; }
87 :
88 1037 : FunctionSig* v_v() { return &sig_v_v; }
89 329 : FunctionSig* v_i() { return &sig_v_i; }
90 1 : FunctionSig* v_ii() { return &sig_v_ii; }
91 : FunctionSig* v_iii() { return &sig_v_iii; }
92 : FunctionSig* s_i() { return &sig_s_i; }
93 :
94 5 : FunctionSig* ii_v() { return &sig_ii_v; }
95 : FunctionSig* iii_v() { return &sig_iii_v; }
96 :
97 1440 : FunctionSig* many(Zone* zone, ValueType ret, ValueType param, int count) {
98 1440 : FunctionSig::Builder builder(zone, ret == kWasmStmt ? 0 : 1, count);
99 1440 : if (ret != kWasmStmt) builder.AddReturn(ret);
100 57600 : for (int i = 0; i < count; i++) {
101 : builder.AddParam(param);
102 : }
103 1440 : return builder.Build();
104 : }
105 :
106 : private:
107 : ValueType kIntTypes4[4];
108 : ValueType kLongTypes4[4];
109 : ValueType kFloatTypes4[4];
110 : ValueType kDoubleTypes4[4];
111 : ValueType kRefTypes4[4];
112 : ValueType kIntLongTypes4[4];
113 : ValueType kIntFloatTypes4[4];
114 : ValueType kIntDoubleTypes4[4];
115 : ValueType kIntRefTypes4[4];
116 : ValueType kSimd128IntTypes4[4];
117 :
118 : FunctionSig sig_i_v;
119 : FunctionSig sig_i_i;
120 : FunctionSig sig_i_ii;
121 : FunctionSig sig_i_iii;
122 :
123 : FunctionSig sig_i_f;
124 : FunctionSig sig_i_ff;
125 : FunctionSig sig_i_d;
126 : FunctionSig sig_i_dd;
127 : FunctionSig sig_i_r;
128 : FunctionSig sig_i_rr;
129 :
130 : FunctionSig sig_l_v;
131 : FunctionSig sig_l_l;
132 : FunctionSig sig_l_ll;
133 : FunctionSig sig_i_ll;
134 :
135 : FunctionSig sig_f_f;
136 : FunctionSig sig_f_ff;
137 : FunctionSig sig_d_d;
138 : FunctionSig sig_d_dd;
139 :
140 : FunctionSig sig_r_v;
141 :
142 : FunctionSig sig_v_v;
143 : FunctionSig sig_v_i;
144 : FunctionSig sig_v_ii;
145 : FunctionSig sig_v_iii;
146 : FunctionSig sig_s_i;
147 :
148 : FunctionSig sig_ii_v;
149 : FunctionSig sig_iii_v;
150 : };
151 : } // namespace wasm
152 : } // namespace internal
153 : } // namespace v8
154 :
155 : #endif // TEST_SIGNATURES_H
|