7dd90cbc5e280943283d630fad8bea9dfdafab35
[WebKit-https.git] / Source / JavaScriptCore / wasm / WASMFunctionLLVMIRGenerator.h
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WASMFunctionLLVMIRGenerator_h
27 #define WASMFunctionLLVMIRGenerator_h
28
29 #if ENABLE(WEBASSEMBLY) && ENABLE(FTL_JIT)
30
31 #include "FTLAbbreviatedTypes.h"
32
33 #define UNUSED 0
34
35 namespace JSC {
36
37 using FTL::LBasicBlock;
38 using FTL::LValue;
39
40 class WASMFunctionLLVMIRGenerator {
41 public:
42     typedef LValue Expression;
43     typedef int Statement;
44     typedef Vector<LValue> ExpressionList;
45     struct MemoryAddress {
46         MemoryAddress(void*) { }
47         MemoryAddress(LValue index, uint32_t offset)
48             : index(index)
49             , offset(offset)
50         {
51         }
52         LValue index;
53         uint32_t offset;
54     };
55     typedef LBasicBlock JumpTarget;
56     enum class JumpCondition { Zero, NonZero };
57
58     void startFunction(const Vector<WASMType>& arguments, uint32_t numberOfI32LocalVariables, uint32_t numberOfF32LocalVariables, uint32_t numberOfF64LocalVariables)
59     {
60         // FIXME: Implement this method.
61         UNUSED_PARAM(arguments);
62         UNUSED_PARAM(numberOfI32LocalVariables);
63         UNUSED_PARAM(numberOfF32LocalVariables);
64         UNUSED_PARAM(numberOfF64LocalVariables);
65     }
66
67     void endFunction()
68     {
69         // FIXME: Implement this method.
70     }
71
72     LValue buildSetLocal(WASMOpKind opKind, uint32_t localIndex, LValue value, WASMType type)
73     {
74         // FIXME: Implement this method.
75         UNUSED_PARAM(opKind);
76         UNUSED_PARAM(localIndex);
77         UNUSED_PARAM(value);
78         UNUSED_PARAM(type);
79         return UNUSED;
80     }
81
82     LValue buildSetGlobal(WASMOpKind opKind, uint32_t globalIndex, LValue value, WASMType type)
83     {
84         // FIXME: Implement this method.
85         UNUSED_PARAM(opKind);
86         UNUSED_PARAM(globalIndex);
87         UNUSED_PARAM(value);
88         UNUSED_PARAM(type);
89         return UNUSED;
90     }
91
92     void buildReturn(LValue value, WASMExpressionType returnType)
93     {
94         // FIXME: Implement this method.
95         UNUSED_PARAM(value);
96         UNUSED_PARAM(returnType);
97     }
98
99     LValue buildImmediateI32(uint32_t immediate)
100     {
101         // FIXME: Implement this method.
102         UNUSED_PARAM(immediate);
103         return UNUSED;
104     }
105
106     LValue buildImmediateF32(float immediate)
107     {
108         // FIXME: Implement this method.
109         UNUSED_PARAM(immediate);
110         return UNUSED;
111     }
112
113     LValue buildImmediateF64(double immediate)
114     {
115         // FIXME: Implement this method.
116         UNUSED_PARAM(immediate);
117         return UNUSED;
118     }
119
120     LValue buildGetLocal(uint32_t localIndex, WASMType type)
121     {
122         // FIXME: Implement this method.
123         UNUSED_PARAM(localIndex);
124         UNUSED_PARAM(type);
125         return UNUSED;
126     }
127
128     LValue buildGetGlobal(uint32_t globalIndex, WASMType type)
129     {
130         // FIXME: Implement this method.
131         UNUSED_PARAM(globalIndex);
132         UNUSED_PARAM(type);
133         return UNUSED;
134     }
135
136     LValue buildConvertType(LValue value, WASMExpressionType fromType, WASMExpressionType toType, WASMTypeConversion conversion)
137     {
138         // FIXME: Implement this method.
139         UNUSED_PARAM(value);
140         UNUSED_PARAM(fromType);
141         UNUSED_PARAM(toType);
142         UNUSED_PARAM(conversion);
143         return UNUSED;
144     }
145
146     LValue buildLoad(const MemoryAddress& memoryAddress, WASMExpressionType expressionType, WASMMemoryType memoryType, MemoryAccessConversion conversion)
147     {
148         // FIXME: Implement this method.
149         UNUSED_PARAM(memoryAddress);
150         UNUSED_PARAM(expressionType);
151         UNUSED_PARAM(memoryType);
152         UNUSED_PARAM(conversion);
153         return UNUSED;
154     }
155
156     LValue buildStore(WASMOpKind opKind, const MemoryAddress& memoryAddress, WASMExpressionType expressionType, WASMMemoryType memoryType, LValue value)
157     {
158         // FIXME: Implement this method.
159         UNUSED_PARAM(opKind);
160         UNUSED_PARAM(memoryAddress);
161         UNUSED_PARAM(expressionType);
162         UNUSED_PARAM(memoryType);
163         UNUSED_PARAM(value);
164         return UNUSED;
165     }
166
167     LValue buildUnaryI32(LValue value, WASMOpExpressionI32 op)
168     {
169         // FIXME: Implement this method.
170         UNUSED_PARAM(value);
171         UNUSED_PARAM(op);
172         return UNUSED;
173     }
174
175     LValue buildUnaryF32(LValue value, WASMOpExpressionF32 op)
176     {
177         // FIXME: Implement this method.
178         UNUSED_PARAM(value);
179         UNUSED_PARAM(op);
180         return UNUSED;
181     }
182
183     LValue buildUnaryF64(LValue value, WASMOpExpressionF64 op)
184     {
185         // FIXME: Implement this method.
186         UNUSED_PARAM(value);
187         UNUSED_PARAM(op);
188         return UNUSED;
189     }
190
191     LValue buildBinaryI32(LValue left, LValue right, WASMOpExpressionI32 op)
192     {
193         // FIXME: Implement this method.
194         UNUSED_PARAM(left);
195         UNUSED_PARAM(right);
196         UNUSED_PARAM(op);
197         return UNUSED;
198     }
199
200     LValue buildBinaryF32(LValue left, LValue right, WASMOpExpressionF32 op)
201     {
202         // FIXME: Implement this method.
203         UNUSED_PARAM(left);
204         UNUSED_PARAM(right);
205         UNUSED_PARAM(op);
206         return UNUSED;
207     }
208
209     LValue buildBinaryF64(LValue left, LValue right, WASMOpExpressionF64 op)
210     {
211         // FIXME: Implement this method.
212         UNUSED_PARAM(left);
213         UNUSED_PARAM(right);
214         UNUSED_PARAM(op);
215         return UNUSED;
216     }
217
218     LValue buildRelationalI32(LValue left, LValue right, WASMOpExpressionI32 op)
219     {
220         // FIXME: Implement this method.
221         UNUSED_PARAM(left);
222         UNUSED_PARAM(right);
223         UNUSED_PARAM(op);
224         return UNUSED;
225     }
226
227     LValue buildRelationalF32(LValue left, LValue right, WASMOpExpressionI32 op)
228     {
229         // FIXME: Implement this method.
230         UNUSED_PARAM(left);
231         UNUSED_PARAM(right);
232         UNUSED_PARAM(op);
233         return UNUSED;
234     }
235
236     LValue buildRelationalF64(LValue left, LValue right, WASMOpExpressionI32 op)
237     {
238         // FIXME: Implement this method.
239         UNUSED_PARAM(left);
240         UNUSED_PARAM(right);
241         UNUSED_PARAM(op);
242         return UNUSED;
243     }
244
245     LValue buildMinOrMaxI32(LValue left, LValue right, WASMOpExpressionI32 op)
246     {
247         // FIXME: Implement this method.
248         UNUSED_PARAM(left);
249         UNUSED_PARAM(right);
250         UNUSED_PARAM(op);
251         return UNUSED;
252     }
253
254     LValue buildMinOrMaxF64(LValue left, LValue right, WASMOpExpressionF64 op)
255     {
256         // FIXME: Implement this method.
257         UNUSED_PARAM(left);
258         UNUSED_PARAM(right);
259         UNUSED_PARAM(op);
260         return UNUSED;
261     }
262
263     LValue buildCallInternal(uint32_t functionIndex, const Vector<LValue>& argumentList, const WASMSignature& signature, WASMExpressionType returnType)
264     {
265         // FIXME: Implement this method.
266         UNUSED_PARAM(functionIndex);
267         UNUSED_PARAM(argumentList);
268         UNUSED_PARAM(signature);
269         UNUSED_PARAM(returnType);
270         return UNUSED;
271     }
272
273     LValue buildCallIndirect(uint32_t functionPointerTableIndex, LValue index, const Vector<LValue>& argumentList, const WASMSignature& signature, WASMExpressionType returnType)
274     {
275         // FIXME: Implement this method.
276         UNUSED_PARAM(functionPointerTableIndex);
277         UNUSED_PARAM(index);
278         UNUSED_PARAM(argumentList);
279         UNUSED_PARAM(signature);
280         UNUSED_PARAM(returnType);
281         return UNUSED;
282     }
283
284     LValue buildCallImport(uint32_t functionImportIndex, const Vector<LValue>& argumentList, const WASMSignature& signature, WASMExpressionType returnType)
285     {
286         // FIXME: Implement this method.
287         UNUSED_PARAM(functionImportIndex);
288         UNUSED_PARAM(argumentList);
289         UNUSED_PARAM(signature);
290         UNUSED_PARAM(returnType);
291         return UNUSED;
292     }
293
294     void appendExpressionList(Vector<LValue>& expressionList, LValue value)
295     {
296         // FIXME: Implement this method.
297         UNUSED_PARAM(expressionList);
298         UNUSED_PARAM(value);
299     }
300
301     void discard(LValue)
302     {
303     }
304
305     void linkTarget(LBasicBlock target)
306     {
307         // FIXME: Implement this method.
308         UNUSED_PARAM(target);
309     }
310
311     void jumpToTarget(LBasicBlock target)
312     {
313         // FIXME: Implement this method.
314         UNUSED_PARAM(target);
315     }
316
317     void jumpToTargetIf(JumpCondition, LValue value, LBasicBlock target)
318     {
319         // FIXME: Implement this method.
320         UNUSED_PARAM(value);
321         UNUSED_PARAM(target);
322     }
323
324     void startLoop()
325     {
326         // FIXME: Implement this method.
327     }
328
329     void endLoop()
330     {
331         // FIXME: Implement this method.
332     }
333
334     void startSwitch()
335     {
336         // FIXME: Implement this method.
337     }
338
339     void endSwitch()
340     {
341         // FIXME: Implement this method.
342     }
343
344     void startLabel()
345     {
346         // FIXME: Implement this method.
347     }
348
349     void endLabel()
350     {
351         // FIXME: Implement this method.
352     }
353
354     LBasicBlock breakTarget()
355     {
356         // FIXME: Implement this method.
357         return UNUSED;
358     }
359
360     LBasicBlock continueTarget()
361     {
362         // FIXME: Implement this method.
363         return UNUSED;
364     }
365
366     LBasicBlock breakLabelTarget(uint32_t labelIndex)
367     {
368         // FIXME: Implement this method.
369         UNUSED_PARAM(labelIndex);
370         return UNUSED;
371     }
372
373     LBasicBlock continueLabelTarget(uint32_t labelIndex)
374     {
375         // FIXME: Implement this method.
376         UNUSED_PARAM(labelIndex);
377         return UNUSED;
378     }
379
380     void buildSwitch(LValue value, const Vector<int64_t>& cases, const Vector<LBasicBlock>& targets, LBasicBlock defaultTarget)
381     {
382         // FIXME: Implement this method.
383         UNUSED_PARAM(value);
384         UNUSED_PARAM(cases);
385         UNUSED_PARAM(targets);
386         UNUSED_PARAM(defaultTarget);
387     }
388 };
389
390 } // namespace JSC
391
392 #endif // ENABLE(WEBASSEMBLY)
393
394 #endif // WASMFunctionLLVMIRGenerator_h