1.1 --- a/sourcepawn/jit/BaseRuntime.h Thu Aug 08 09:40:23 2013 -0700
1.2 +++ b/sourcepawn/jit/BaseRuntime.h Thu Aug 08 09:41:24 2013 -0700
1.3 @@ -1,7 +1,9 @@
1.4 +// vim: set ts=8 sw=2 sts=2 tw=99 et:
1.5 #ifndef _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
1.6 #define _INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_
1.7
1.8 #include <sp_vm_api.h>
1.9 +#include <ke_vector.h>
1.10 #include "jit_shared.h"
1.11 #include "sp_vm_function.h"
1.12
1.13 @@ -11,65 +13,93 @@
1.14 class DebugInfo : public IPluginDebugInfo
1.15 {
1.16 public:
1.17 - DebugInfo(sp_plugin_t *plugin);
1.18 + DebugInfo(sp_plugin_t *plugin);
1.19 public:
1.20 - int LookupFile(ucell_t addr, const char **filename);
1.21 - int LookupFunction(ucell_t addr, const char **name);
1.22 - int LookupLine(ucell_t addr, uint32_t *line);
1.23 + int LookupFile(ucell_t addr, const char **filename);
1.24 + int LookupFunction(ucell_t addr, const char **name);
1.25 + int LookupLine(ucell_t addr, uint32_t *line);
1.26 private:
1.27 - sp_plugin_t *m_pPlugin;
1.28 + sp_plugin_t *m_pPlugin;
1.29 +};
1.30 +
1.31 +struct floattbl_t
1.32 +{
1.33 + floattbl_t() {
1.34 + found = false;
1.35 + index = 0;
1.36 + }
1.37 + bool found;
1.38 + unsigned int index;
1.39 };
1.40
1.41 /* Jit wants fast access to this so we expose things as public */
1.42 class BaseRuntime : public SourcePawn::IPluginRuntime
1.43 {
1.44 -public:
1.45 - BaseRuntime();
1.46 - ~BaseRuntime();
1.47 -public:
1.48 - virtual int CreateBlank(uint32_t heastk);
1.49 - virtual int CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base);
1.50 - virtual bool IsDebugging();
1.51 - virtual IPluginDebugInfo *GetDebugInfo();
1.52 - virtual int FindNativeByName(const char *name, uint32_t *index);
1.53 - virtual int GetNativeByIndex(uint32_t index, sp_native_t **native);
1.54 - virtual uint32_t GetNativesNum();
1.55 - virtual int FindPublicByName(const char *name, uint32_t *index);
1.56 - virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr);
1.57 - virtual uint32_t GetPublicsNum();
1.58 - virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar);
1.59 - virtual int FindPubvarByName(const char *name, uint32_t *index);
1.60 - virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr);
1.61 - virtual uint32_t GetPubVarsNum();
1.62 - virtual IPluginFunction *GetFunctionByName(const char *public_name);
1.63 - virtual IPluginFunction *GetFunctionById(funcid_t func_id);
1.64 - virtual IPluginContext *GetDefaultContext();
1.65 - virtual int ApplyCompilationOptions(ICompilation *co);
1.66 - virtual void SetPauseState(bool paused);
1.67 - virtual bool IsPaused();
1.68 - virtual size_t GetMemUsage();
1.69 - virtual unsigned char *GetCodeHash();
1.70 - virtual unsigned char *GetDataHash();
1.71 - JitFunction *GetJittedFunction(uint32_t idx);
1.72 - uint32_t AddJittedFunction(JitFunction *fn);
1.73 -public:
1.74 - BaseContext *GetBaseContext();
1.75 -private:
1.76 - sp_plugin_t m_plugin;
1.77 - unsigned int m_NumFuncs;
1.78 - unsigned int m_MaxFuncs;
1.79 - JitFunction **m_FuncCache;
1.80 -public:
1.81 - DebugInfo m_Debug;
1.82 - sp_plugin_t *m_pPlugin;
1.83 - BaseContext *m_pCtx;
1.84 - CFunction **m_PubFuncs;
1.85 - JitFunction **m_PubJitFuncs;
1.86 - ICompilation *m_pCo;
1.87 - unsigned int m_CompSerial;
1.88 -
1.89 - unsigned char m_CodeHash[16];
1.90 - unsigned char m_DataHash[16];
1.91 + public:
1.92 + BaseRuntime();
1.93 + ~BaseRuntime();
1.94 +
1.95 + public:
1.96 + virtual int CreateBlank(uint32_t heastk);
1.97 + virtual int CreateFromMemory(sp_file_hdr_t *hdr, uint8_t *base);
1.98 + virtual bool IsDebugging();
1.99 + virtual IPluginDebugInfo *GetDebugInfo();
1.100 + virtual int FindNativeByName(const char *name, uint32_t *index);
1.101 + virtual int GetNativeByIndex(uint32_t index, sp_native_t **native);
1.102 + virtual uint32_t GetNativesNum();
1.103 + virtual int FindPublicByName(const char *name, uint32_t *index);
1.104 + virtual int GetPublicByIndex(uint32_t index, sp_public_t **publicptr);
1.105 + virtual uint32_t GetPublicsNum();
1.106 + virtual int GetPubvarByIndex(uint32_t index, sp_pubvar_t **pubvar);
1.107 + virtual int FindPubvarByName(const char *name, uint32_t *index);
1.108 + virtual int GetPubvarAddrs(uint32_t index, cell_t *local_addr, cell_t **phys_addr);
1.109 + virtual uint32_t GetPubVarsNum();
1.110 + virtual IPluginFunction *GetFunctionByName(const char *public_name);
1.111 + virtual IPluginFunction *GetFunctionById(funcid_t func_id);
1.112 + virtual IPluginContext *GetDefaultContext();
1.113 + virtual int ApplyCompilationOptions(ICompilation *co);
1.114 + virtual void SetPauseState(bool paused);
1.115 + virtual bool IsPaused();
1.116 + virtual size_t GetMemUsage();
1.117 + virtual unsigned char *GetCodeHash();
1.118 + virtual unsigned char *GetDataHash();
1.119 + JitFunction *GetJittedFunctionByOffset(cell_t pcode_offset);
1.120 + void AddJittedFunction(JitFunction *fn);
1.121 + void SetName(const char *name);
1.122 + unsigned GetNativeReplacement(size_t index);
1.123 +
1.124 + BaseContext *GetBaseContext();
1.125 + const sp_plugin_t *plugin() const {
1.126 + return &m_plugin;
1.127 + }
1.128 +
1.129 + private:
1.130 + void SetupFloatNativeRemapping();
1.131 +
1.132 + private:
1.133 + sp_plugin_t m_plugin;
1.134 + uint8_t *alt_pcode_;
1.135 + unsigned int m_NumFuncs;
1.136 + unsigned int m_MaxFuncs;
1.137 + floattbl_t *float_table_;
1.138 + JitFunction **function_map_;
1.139 + size_t function_map_size_;
1.140 + ke::Vector<JitFunction *> m_JitFunctions;
1.141 +
1.142 + public:
1.143 + DebugInfo m_Debug;
1.144 + BaseContext *m_pCtx;
1.145 + CFunction **m_PubFuncs;
1.146 + JitFunction **m_PubJitFuncs;
1.147 +
1.148 + private:
1.149 + ICompilation *co_;
1.150 +
1.151 + public:
1.152 + unsigned int m_CompSerial;
1.153 +
1.154 + unsigned char m_CodeHash[16];
1.155 + unsigned char m_DataHash[16];
1.156 };
1.157
1.158 #endif //_INCLUDE_SOURCEPAWN_JIT_RUNTIME_H_