#pragma once
#if ENABLE(FTL_JIT)
#include "B3OpaqueByproducts.h"
#include "DFGCommonData.h"
#include "FTLLazySlowPath.h"
#include "FTLOSRExit.h"
#include "JITCode.h"
namespace JSC {
class TrackedReferences;
namespace FTL {
class JITCode : public JSC::JITCode {
public:
JITCode();
~JITCode();
CodePtr addressForCall(ArityCheckMode) 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 initializeB3Code(CodeRef);
void initializeB3Byproducts(std::unique_ptr<B3::OpaqueByproducts>);
void initializeAddressForCall(CodePtr);
void initializeArityCheckEntrypoint(CodeRef);
void validateReferences(const TrackedReferences&) override;
RegisterSet liveRegistersToPreserveAtExceptionHandlingCallSite(CodeBlock*, CallSiteIndex) override;
std::optional<CodeOrigin> findPC(CodeBlock*, void* pc) override;
CodeRef b3Code() const { return m_b3Code; }
JITCode* ftl() override;
DFG::CommonData* dfgCommon() override;
static ptrdiff_t commonDataOffset() { return OBJECT_OFFSETOF(JITCode, common); }
DFG::CommonData common;
SegmentedVector<OSRExit, 8> osrExit;
SegmentedVector<OSRExitDescriptor, 8> osrExitDescriptors;
Vector<std::unique_ptr<LazySlowPath>> lazySlowPaths;
private:
CodePtr m_addressForCall;
CodeRef m_b3Code;
std::unique_ptr<B3::OpaqueByproducts> m_b3Byproducts;
CodeRef m_arityCheckEntrypoint;
};
} }
#endif // ENABLE(FLT_JIT)