| /* |
| * 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 |