sourcepawn/jit/BaseRuntime.h
changeset 3977 fca2b54741ca
parent 3601 d3a2fb7b3a1e
child 4013 6201c1180e0e
     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_