]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - llint/LLIntData.h
JavaScriptCore-7600.1.4.16.1.tar.gz
[apple/javascriptcore.git] / llint / LLIntData.h
index ba8daedf1723c599848369eb6ad4e014a41102e6..7e7794b1445cd680c7d2b92ba28ceb51fb7838db 100644 (file)
 #ifndef LLIntData_h
 #define LLIntData_h
 
+#include "JSCJSValue.h"
 #include "Opcode.h"
-#include <wtf/Platform.h>
 
 namespace JSC {
 
-class JSGlobalData;
+class VM;
 struct Instruction;
 
+#if !ENABLE(JIT)
+typedef OpcodeID LLIntCode;
+#else
+typedef void (*LLIntCode)();
+#endif
+
 namespace LLInt {
 
-#if ENABLE(LLINT)
 class Data {
 public:
-    Data();
-    ~Data();
-    
-    void performAssertions(JSGlobalData&);
-    
-    Instruction* exceptionInstructions()
-    {
-        return m_exceptionInstructions;
-    }
-    
-    Opcode* opcodeMap()
-    {
-        return m_opcodeMap;
-    }
+    static void performAssertions(VM&);
+
 private:
-    Instruction* m_exceptionInstructions;
-    Opcode* m_opcodeMap;
-};
-#else // ENABLE(LLINT)
+    static Instruction* s_exceptionInstructions;
+    static Opcode s_opcodeMap[numOpcodeIDs];
 
-#if COMPILER(CLANG)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wmissing-noreturn"
-#endif
+    friend void initialize();
 
-class Data {
-public:
-    void performAssertions(JSGlobalData&) { }
+    friend Instruction* exceptionInstructions();
+    friend Opcode* opcodeMap();
+    friend Opcode getOpcode(OpcodeID);
+    friend void* getCodePtr(OpcodeID);
+};
 
-    Instruction* exceptionInstructions()
-    {
-        ASSERT_NOT_REACHED();
-        return 0;
-    }
+void initialize();
+
+inline Instruction* exceptionInstructions()
+{
+    return Data::s_exceptionInstructions;
+}
     
-    Opcode* opcodeMap()
-    {
-        ASSERT_NOT_REACHED();
-        return 0;
-    }
-};
+inline Opcode* opcodeMap()
+{
+    return Data::s_opcodeMap;
+}
 
-#if COMPILER(CLANG)
-#pragma clang diagnostic pop
+inline Opcode getOpcode(OpcodeID id)
+{
+#if ENABLE(COMPUTED_GOTO_OPCODES)
+    return Data::s_opcodeMap[id];
+#else
+    return static_cast<Opcode>(id);
 #endif
+}
+
+ALWAYS_INLINE void* getCodePtr(OpcodeID id)
+{
+    return reinterpret_cast<void*>(getOpcode(id));
+}
+
+#if ENABLE(JIT)
+ALWAYS_INLINE LLIntCode getCodeFunctionPtr(OpcodeID codeId)
+{
+    return reinterpret_cast<LLIntCode>(getCodePtr(codeId));
+}
+#endif
+
+ALWAYS_INLINE void* getCodePtr(JSC::EncodedJSValue glueHelper())
+{
+    return bitwise_cast<void*>(glueHelper);
+}
 
-#endif // ENABLE(LLINT)
 
 } } // namespace JSC::LLInt