blob: 4e3bd443f55b848e15c37c12fd6b05f9f2f13538 [file] [log] [blame]
/*
* Copyright (C) 2015 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* =========================================================================
*
* Copyright (c) 2015 by the repository authors of
* WebAssembly/polyfill-prototype-1.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef WASMConstants_h
#define WASMConstants_h
#if ENABLE(WEBASSEMBLY)
namespace JSC {
static const uint32_t wasmMagicNumber = 0x6d736177;
enum class WASMOpKind {
Statement,
Expression
};
enum class WASMOpStatement : uint8_t {
SetLocal,
SetGlobal,
I32Store8,
I32StoreWithOffset8,
I32Store16,
I32StoreWithOffset16,
I32Store32,
I32StoreWithOffset32,
F32Store,
F32StoreWithOffset,
F64Store,
F64StoreWithOffset,
CallInternal,
CallIndirect,
CallImport,
Return,
Block,
If,
IfElse,
While,
Do,
Label,
Break,
BreakLabel,
Continue,
ContinueLabel,
Switch,
NumberOfWASMOpStatements
};
enum class WASMOpStatementWithImmediate : uint8_t {
SetLocal,
SetGlobal,
NumberOfWASMOpStatementWithImmediates
};
enum class WASMOpExpressionI32 : uint8_t {
ConstantPoolIndex,
Immediate,
GetLocal,
GetGlobal,
SetLocal,
SetGlobal,
SLoad8,
SLoadWithOffset8,
ULoad8,
ULoadWithOffset8,
SLoad16,
SLoadWithOffset16,
ULoad16,
ULoadWithOffset16,
Load32,
LoadWithOffset32,
Store8,
StoreWithOffset8,
Store16,
StoreWithOffset16,
Store32,
StoreWithOffset32,
CallInternal,
CallIndirect,
CallImport,
Conditional,
Comma,
FromF32,
FromF64,
Negate,
Add,
Sub,
Mul,
SDiv,
UDiv,
SMod,
UMod,
BitNot,
BitOr,
BitAnd,
BitXor,
LeftShift,
ArithmeticRightShift,
LogicalRightShift,
CountLeadingZeros,
LogicalNot,
EqualI32,
EqualF32,
EqualF64,
NotEqualI32,
NotEqualF32,
NotEqualF64,
SLessThanI32,
ULessThanI32,
LessThanF32,
LessThanF64,
SLessThanOrEqualI32,
ULessThanOrEqualI32,
LessThanOrEqualF32,
LessThanOrEqualF64,
SGreaterThanI32,
UGreaterThanI32,
GreaterThanF32,
GreaterThanF64,
SGreaterThanOrEqualI32,
UGreaterThanOrEqualI32,
GreaterThanOrEqualF32,
GreaterThanOrEqualF64,
SMin,
UMin,
SMax,
UMax,
Abs,
NumberOfWASMOpExpressionI32s
};
enum class WASMOpExpressionI32WithImmediate : uint8_t {
ConstantPoolIndex,
Immediate,
GetLocal,
NumberOfWASMOpExpressionI32WithImmediates
};
enum class WASMOpExpressionF32 : uint8_t {
ConstantPoolIndex,
Immediate,
GetLocal,
GetGlobal,
SetLocal,
SetGlobal,
Load,
LoadWithOffset,
Store,
StoreWithOffset,
CallInternal,
CallIndirect,
Conditional,
Comma,
FromS32,
FromU32,
FromF64,
Negate,
Add,
Sub,
Mul,
Div,
Abs,
Ceil,
Floor,
Sqrt,
NumberOfWASMOpExpressionF32s
};
enum class WASMOpExpressionF32WithImmediate : uint8_t {
ConstantPoolIndex,
GetLocal,
NumberOfWASMOpExpressionF32WithImmediates
};
enum class WASMOpExpressionF64 : uint8_t {
ConstantPoolIndex,
Immediate,
GetLocal,
GetGlobal,
SetLocal,
SetGlobal,
Load,
LoadWithOffset,
Store,
StoreWithOffset,
CallInternal,
CallIndirect,
CallImport,
Conditional,
Comma,
FromS32,
FromU32,
FromF32,
Negate,
Add,
Sub,
Mul,
Div,
Mod,
Min,
Max,
Abs,
Ceil,
Floor,
Sqrt,
Cos,
Sin,
Tan,
ACos,
ASin,
ATan,
ATan2,
Exp,
Ln,
Pow,
NumberOfWASMOpExpressionF64s
};
enum class WASMOpExpressionF64WithImmediate : uint8_t {
ConstantPoolIndex,
GetLocal,
NumberOfWASMOpExpressionF64WithImmediates
};
enum class WASMOpExpressionVoid : uint8_t {
CallInternal,
CallIndirect,
CallImport,
NumberOfWASMOpExpressionVoids
};
enum class WASMVariableTypes : uint8_t {
I32 = 1 << 0,
F32 = 1 << 1,
F64 = 1 << 2,
NumberOfVariableTypes = 8
};
enum class WASMVariableTypesWithImmediate : uint8_t {
I32,
NumberOfVariableTypesWithImmediates
};
enum class WASMSwitchCase : uint8_t {
CaseWithNoStatements,
CaseWithStatement,
CaseWithBlockStatement,
DefaultWithNoStatements,
DefaultWithStatement,
DefaultWithBlockStatement,
NumberOfSwitchCases
};
enum class WASMExportFormat : uint8_t {
Default,
Record,
NumberOfExportFormats
};
enum class WASMTypeConversion {
ConvertSigned,
ConvertUnsigned,
Promote,
Demote,
};
enum class WASMMemoryType {
I8,
I16,
I32,
F32,
F64
};
enum class MemoryAccessOffsetMode { NoOffset, WithOffset };
enum class MemoryAccessConversion { NoConversion, SignExtend, ZeroExtend };
static const uint8_t hasImmediateInOpFlag = 0x80;
static const unsigned opWithImmediateBits = 2;
static const uint32_t opWithImmediateLimit = 1 << opWithImmediateBits;
static const unsigned immediateBits = 5;
static const uint32_t immediateLimit = 1 << immediateBits;
} // namespace JSC
#endif // ENABLE(WEBASSEMBLY)
#endif // WASMConstants_h