Refactor the JIT to use a newer, simpler macro assembler. (bug 5827, r=ann)
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
// vim: set ts=8 sw=2 sts=2 tw=99 et:
|
||||
#ifndef _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
|
||||
#define _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
|
||||
|
||||
#include <sp_vm_api.h>
|
||||
#include <ke_vector.h>
|
||||
#include "jit_shared.h"
|
||||
#include "sp_vm_function.h"
|
||||
|
||||
@@ -11,65 +13,93 @@ class JitFunction;
|
||||
class DebugInfo : public IPluginDebugInfo
|
||||
{
|
||||
public:
|
||||
DebugInfo(sp_plugin_t *plugin);
|
||||
DebugInfo(sp_plugin_t *plugin);
|
||||
public:
|
||||
int LookupFile(ucell_t addr, const char **filename);
|
||||
int LookupFunction(ucell_t addr, const char **name);
|
||||
int LookupLine(ucell_t addr, uint32_t *line);
|
||||
int LookupFile(ucell_t addr, const char **filename);
|
||||
int LookupFunction(ucell_t addr, const char **name);
|
||||
int LookupLine(ucell_t addr, uint32_t *line);
|
||||
private:
|
||||
sp_plugin_t *m_pPlugin;
|
||||
sp_plugin_t *m_pPlugin;
|
||||
};
|
||||
|
||||
struct floattbl_t
|
||||
{
|
||||
floattbl_t() {
|
||||
found = false;
|
||||
index = 0;
|
||||
}
|
||||
bool found;
|
||||
unsigned int index;
|
||||
};
|
||||
|
||||
/* Jit wants fast access to this so we expose things as public */
|
||||
class BaseRuntime : public SourcePawn::IPluginRuntime
|
||||
{
|
||||
public:
|
||||
BaseRuntime();
|
||||
~BaseRuntime();
|
||||
public:
|
||||
virtual int CreateBlank(uint32_t heastk);
|
||||
virtual int CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base);
|
||||
virtual bool IsDebugging();
|
||||
virtual IPluginDebugInfo *GetDebugInfo();
|
||||
virtual int FindNativeByName(const char *name, uint32_t *index);
|
||||
virtual int GetNativeByIndex(uint32_t index, sp_native_t **native);
|
||||
virtual uint32_t GetNativesNum();
|
||||
virtual int FindPublicByName(const char *name, uint32_t *index);
|
||||
virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr);
|
||||
virtual uint32_t GetPublicsNum();
|
||||
virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar);
|
||||
virtual int FindPubvarByName(const char *name, uint32_t *index);
|
||||
virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr);
|
||||
virtual uint32_t GetPubVarsNum();
|
||||
virtual IPluginFunction *GetFunctionByName(const char *public_name);
|
||||
virtual IPluginFunction *GetFunctionById(funcid_t func_id);
|
||||
virtual IPluginContext *GetDefaultContext();
|
||||
virtual int ApplyCompilationOptions(ICompilation *co);
|
||||
virtual void SetPauseState(bool paused);
|
||||
virtual bool IsPaused();
|
||||
virtual size_t GetMemUsage();
|
||||
virtual unsigned char *GetCodeHash();
|
||||
virtual unsigned char *GetDataHash();
|
||||
JitFunction *GetJittedFunction(uint32_t idx);
|
||||
uint32_t AddJittedFunction(JitFunction *fn);
|
||||
public:
|
||||
BaseContext *GetBaseContext();
|
||||
private:
|
||||
sp_plugin_t m_plugin;
|
||||
unsigned int m_NumFuncs;
|
||||
unsigned int m_MaxFuncs;
|
||||
JitFunction **m_FuncCache;
|
||||
public:
|
||||
DebugInfo m_Debug;
|
||||
sp_plugin_t *m_pPlugin;
|
||||
BaseContext *m_pCtx;
|
||||
CFunction **m_PubFuncs;
|
||||
JitFunction **m_PubJitFuncs;
|
||||
ICompilation *m_pCo;
|
||||
unsigned int m_CompSerial;
|
||||
|
||||
unsigned char m_CodeHash[16];
|
||||
unsigned char m_DataHash[16];
|
||||
public:
|
||||
BaseRuntime();
|
||||
~BaseRuntime();
|
||||
|
||||
public:
|
||||
virtual int CreateBlank(uint32_t heastk);
|
||||
virtual int CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base);
|
||||
virtual bool IsDebugging();
|
||||
virtual IPluginDebugInfo *GetDebugInfo();
|
||||
virtual int FindNativeByName(const char *name, uint32_t *index);
|
||||
virtual int GetNativeByIndex(uint32_t index, sp_native_t **native);
|
||||
virtual uint32_t GetNativesNum();
|
||||
virtual int FindPublicByName(const char *name, uint32_t *index);
|
||||
virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr);
|
||||
virtual uint32_t GetPublicsNum();
|
||||
virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar);
|
||||
virtual int FindPubvarByName(const char *name, uint32_t *index);
|
||||
virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr);
|
||||
virtual uint32_t GetPubVarsNum();
|
||||
virtual IPluginFunction *GetFunctionByName(const char *public_name);
|
||||
virtual IPluginFunction *GetFunctionById(funcid_t func_id);
|
||||
virtual IPluginContext *GetDefaultContext();
|
||||
virtual int ApplyCompilationOptions(ICompilation *co);
|
||||
virtual void SetPauseState(bool paused);
|
||||
virtual bool IsPaused();
|
||||
virtual size_t GetMemUsage();
|
||||
virtual unsigned char *GetCodeHash();
|
||||
virtual unsigned char *GetDataHash();
|
||||
JitFunction *GetJittedFunctionByOffset(cell_t pcode_offset);
|
||||
void AddJittedFunction(JitFunction *fn);
|
||||
void SetName(const char *name);
|
||||
unsigned GetNativeReplacement(size_t index);
|
||||
|
||||
BaseContext *GetBaseContext();
|
||||
const sp_plugin_t *plugin() const {
|
||||
return &m_plugin;
|
||||
}
|
||||
|
||||
private:
|
||||
void SetupFloatNativeRemapping();
|
||||
|
||||
private:
|
||||
sp_plugin_t m_plugin;
|
||||
uint8_t *alt_pcode_;
|
||||
unsigned int m_NumFuncs;
|
||||
unsigned int m_MaxFuncs;
|
||||
floattbl_t *float_table_;
|
||||
JitFunction **function_map_;
|
||||
size_t function_map_size_;
|
||||
ke::Vector<JitFunction *> m_JitFunctions;
|
||||
|
||||
public:
|
||||
DebugInfo m_Debug;
|
||||
BaseContext *m_pCtx;
|
||||
CFunction **m_PubFuncs;
|
||||
JitFunction **m_PubJitFuncs;
|
||||
|
||||
private:
|
||||
ICompilation *co_;
|
||||
|
||||
public:
|
||||
unsigned int m_CompSerial;
|
||||
|
||||
unsigned char m_CodeHash[16];
|
||||
unsigned char m_DataHash[16];
|
||||
};
|
||||
|
||||
#endif //_INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
|
||||
|
||||
Reference in New Issue
Block a user