#ifndef FTLJITCode_h
#define FTLJITCode_h
#if ENABLE(FTL_JIT)
#include "DFGCommonData.h"
#include "FTLDataSection.h"
#include "FTLOSRExit.h"
#include "FTLStackMaps.h"
#include "FTLUnwindInfo.h"
#include "JITCode.h"
#include "LLVMAPI.h"
#include <wtf/RefCountedArray.h>
namespace JSC { namespace FTL {
class JITCode : public JSC::JITCode {
public:
JITCode();
~JITCode();
CodePtr addressForCall(VM&, ExecutableBase*, ArityCheckMode, RegisterPreservationMode) override;
void* executableAddressAtOffset(size_t offset) override;
void* dataAddressAtOffset(size_t offset) override;
unsigned offsetOf(void* pointerIntoCode) override;
size_t size() override;
bool contains(void*) override;
void initializeExitThunks(CodeRef);
void addHandle(PassRefPtr<ExecutableMemoryHandle>);
void addDataSection(PassRefPtr<DataSection>);
void initializeArityCheckEntrypoint(CodeRef);
void initializeAddressForCall(CodePtr);
const Vector<RefPtr<ExecutableMemoryHandle>>& handles() const { return m_handles; }
const Vector<RefPtr<DataSection>>& dataSections() const { return m_dataSections; }
CodePtr exitThunks();
JITCode* ftl();
DFG::CommonData* dfgCommon();
DFG::CommonData common;
SegmentedVector<OSRExit, 8> osrExit;
StackMaps stackmaps;
UnwindInfo unwindInfo;
private:
Vector<RefPtr<DataSection>> m_dataSections;
Vector<RefPtr<ExecutableMemoryHandle>> m_handles;
CodePtr m_addressForCall;
CodeRef m_arityCheckEntrypoint;
CodeRef m_exitThunks;
};
} }
#endif // ENABLE(FLT_JIT)
#endif // FTLJITCode_h