Rename WASM to Wasm
[WebKit-https.git] / Source / JavaScriptCore / wasm / WasmFormat.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  *
27  * Copyright (c) 2015 by the repository authors of
28  * WebAssembly/polyfill-prototype-1.
29  *
30  * Licensed under the Apache License, Version 2.0 (the "License");
31  * you may not use this file except in compliance with the License.
32  * You may obtain a copy of the License at
33  *
34  *     http://www.apache.org/licenses/LICENSE-2.0
35  *
36  * Unless required by applicable law or agreed to in writing, software
37  * distributed under the License is distributed on an "AS IS" BASIS,
38  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39  * See the License for the specific language governing permissions and
40  * limitations under the License.
41  */
42
43 #pragma once
44
45 #if ENABLE(WEBASSEMBLY)
46
47 #include "B3Compilation.h"
48 #include "B3Type.h"
49 #include "CodeLocation.h"
50 #include <wtf/Vector.h>
51 #include <wtf/text/WTFString.h>
52
53 namespace JSC {
54
55 class JSFunction;
56
57 namespace Wasm {
58
59 enum Type : uint8_t {
60     Void,
61     I32,
62     I64,
63     F32,
64     F64,
65     LastValueType = F64,
66 };
67
68 static_assert(I32 == 1, "Wasm needs I32 to have the value 1");
69 static_assert(I64 == 2, "Wasm needs I64 to have the value 2");
70 static_assert(F32 == 3, "Wasm needs F32 to have the value 3");
71 static_assert(F64 == 4, "Wasm needs F64 to have the value 4");
72
73 inline B3::Type toB3Type(Type type)
74 {
75     switch (type) {
76     case I32: return B3::Int32;
77     case I64: return B3::Int64;
78     case F32: return B3::Float;
79     case F64: return B3::Double;
80     case Void: return B3::Void;
81     default: break;
82     }
83     RELEASE_ASSERT_NOT_REACHED();
84 }
85
86 inline bool isValueType(Type type)
87 {
88     switch (type) {
89     case I32:
90     case I64:
91     case F32:
92     case F64:
93         return true;
94     default:
95         break;
96     }
97     return false;
98 }
99
100
101 struct Signature {
102     Type returnType;
103     Vector<Type> arguments;
104 };
105
106 struct FunctionImport {
107     String functionName;
108 };
109
110 struct FunctionImportSignature {
111     uint32_t signatureIndex;
112     uint32_t functionImportIndex;
113 };
114
115 struct FunctionDeclaration {
116     uint32_t signatureIndex;
117 };
118
119 struct FunctionPointerTable {
120     uint32_t signatureIndex;
121     Vector<uint32_t> functionIndices;
122     Vector<JSFunction*> functions;
123 };
124
125 struct FunctionInformation {
126     Signature* signature;
127     size_t start;
128     size_t end;
129 };
130
131 struct UnlinkedCall {
132     CodeLocationCall callLocation;
133     size_t functionIndex;
134 };
135
136 struct FunctionCompilation {
137     Vector<UnlinkedCall> unlinkedCalls;
138     std::unique_ptr<B3::Compilation> code;
139     std::unique_ptr<B3::Compilation> jsEntryPoint;
140 };
141
142 } } // namespace JSC::Wasm
143
144 #endif // ENABLE(WEBASSEMBLY)