2
* Copyright (C) 2011 Apple Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
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.
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.
31
#include <wtf/Platform.h>
38
#if ENABLE(LLINT_C_LOOP)
39
typedef OpcodeID LLIntCode;
41
typedef void (*LLIntCode)();
50
static void performAssertions(JSGlobalData&);
53
static Instruction* s_exceptionInstructions;
54
static Opcode* s_opcodeMap;
56
friend void initialize();
58
friend Instruction* exceptionInstructions();
59
friend Opcode* opcodeMap();
60
friend Opcode getOpcode(OpcodeID);
61
friend void* getCodePtr(OpcodeID);
66
inline Instruction* exceptionInstructions()
68
return Data::s_exceptionInstructions;
71
inline Opcode* opcodeMap()
73
return Data::s_opcodeMap;
76
inline Opcode getOpcode(OpcodeID id)
78
#if ENABLE(COMPUTED_GOTO_OPCODES)
79
return Data::s_opcodeMap[id];
81
return static_cast<Opcode>(id);
85
ALWAYS_INLINE void* getCodePtr(OpcodeID id)
87
return reinterpret_cast<void*>(getOpcode(id));
90
#else // !ENABLE(LLINT)
93
#pragma clang diagnostic push
94
#pragma clang diagnostic ignored "-Wmissing-noreturn"
99
static void performAssertions(JSGlobalData&) { }
103
#pragma clang diagnostic pop
106
#endif // !ENABLE(LLINT)
108
ALWAYS_INLINE void* getOpcode(void llintOpcode())
110
return bitwise_cast<void*>(llintOpcode);
113
ALWAYS_INLINE void* getCodePtr(void glueHelper())
115
return bitwise_cast<void*>(glueHelper);
118
ALWAYS_INLINE void* getCodePtr(JSC::EncodedJSValue glueHelper())
120
return bitwise_cast<void*>(glueHelper);
124
} } // namespace JSC::LLInt
126
#endif // LLIntData_h