public/jit/jit_helpers.h
author Scott Ehlert <ds@alliedmods.net>
Sun Jul 15 08:00:26 2007 +0000 (2007-07-15)
changeset 1116 40cc5e9f0f1b
parent 1009 06fd81fdedfb
child 1230 fb651202cb8c
permissions -rw-r--r--
Removed strange debugging code
dvander@706
     1
/**
dvander@706
     2
 * vim: set ts=4 :
dvander@706
     3
 * ================================================================
dvander@706
     4
 * SourcePawn (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@706
     5
 * ================================================================
dvander@706
     6
 *
dvander@706
     7
 * This file is not open source and may not be copied without explicit
dvander@706
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@706
     9
 * in whole or significant part.
dvander@706
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@706
    11
 *
dvander@706
    12
 * Version: $Id$
dvander@706
    13
 */
dvander@706
    14
dvander@706
    15
#ifndef _INCLUDE_SOURCEPAWN_JIT_HELPERS_H_
dvander@706
    16
#define _INCLUDE_SOURCEPAWN_JIT_HELPERS_H_
dvander@706
    17
dvander@706
    18
#include <sp_vm_types.h>
dvander@706
    19
#include <sp_vm_api.h>
dvander@706
    20
dvander@706
    21
#if defined HAVE_STDINT_H && !defined WIN32
dvander@706
    22
#include <stdint.h>
dvander@706
    23
typedef int8_t jit_int8_t;
dvander@706
    24
typedef uint8_t jit_uint8_t;
dvander@706
    25
typedef int32_t jit_int32_t;
dvander@706
    26
typedef uint32_t jit_uint32_t;
dvander@706
    27
typedef int64_t jit_int64_t;
dvander@706
    28
typedef uint64_t jit_uint64_t;
dvander@706
    29
#elif defined WIN32
dvander@706
    30
typedef __int8 jit_int8_t;
dvander@706
    31
typedef unsigned __int8 jit_uint8_t;
dvander@706
    32
typedef __int32 jit_int32_t;
dvander@706
    33
typedef unsigned __int32 jit_uint32_t;
dvander@706
    34
typedef __int64 jit_int64_t;
dvander@706
    35
typedef unsigned __int64 jit_uint64_t;
dvander@706
    36
#endif
dvander@706
    37
dvander@706
    38
typedef char * jitcode_t;
dvander@706
    39
typedef unsigned int jitoffs_t;
dvander@706
    40
typedef signed int jitrel_t;
dvander@706
    41
dvander@706
    42
class JitWriter
dvander@706
    43
{
dvander@706
    44
public:
dvander@706
    45
	inline cell_t read_cell()
dvander@706
    46
	{
dvander@706
    47
		cell_t val = *(inptr);
dvander@706
    48
		inptr++;
dvander@706
    49
		return val;
dvander@706
    50
	}
dvander@706
    51
	inline cell_t *read_cellptr()
dvander@706
    52
	{
dvander@706
    53
		cell_t *val = *(cell_t **)(inptr);
dvander@706
    54
		inptr++;
dvander@706
    55
		return val;
dvander@706
    56
	}
dvander@706
    57
	inline void write_ubyte(jit_uint8_t c)
dvander@706
    58
	{
dvander@706
    59
		if (outbase)
dvander@706
    60
		{
dvander@706
    61
			*outptr = c;
dvander@706
    62
		}
dvander@706
    63
		outptr++;
dvander@706
    64
	}
dvander@1009
    65
	inline void write_ushort(unsigned short c)
dvander@1009
    66
	{
dvander@1009
    67
		if (outbase)
dvander@1009
    68
		{
dvander@1009
    69
			*(unsigned short *)outptr = c;
dvander@1009
    70
		}
dvander@1009
    71
		outptr += sizeof(unsigned short);
dvander@1009
    72
	}
dvander@706
    73
	inline void write_byte(jit_int8_t c)
dvander@706
    74
	{
dvander@706
    75
		if (outbase)
dvander@706
    76
		{
dvander@706
    77
			*outptr = c;
dvander@706
    78
		}
dvander@706
    79
		outptr++;
dvander@706
    80
	}
dvander@706
    81
	inline void write_int32(jit_int32_t c)
dvander@706
    82
	{
dvander@706
    83
		if (outbase)
dvander@706
    84
		{
dvander@706
    85
			*(jit_int32_t *)outptr = c;
dvander@706
    86
		}
dvander@706
    87
		outptr += sizeof(jit_int32_t);
dvander@706
    88
	}
dvander@706
    89
	inline void write_uint32(jit_uint32_t c)
dvander@706
    90
	{
dvander@706
    91
		if (outbase)
dvander@706
    92
		{
dvander@706
    93
			*(jit_uint32_t *)outptr = c;
dvander@706
    94
		}
dvander@706
    95
		outptr += sizeof(jit_uint32_t);
dvander@706
    96
	}
dvander@706
    97
	inline jitoffs_t get_outputpos()
dvander@706
    98
	{
dvander@706
    99
		return (outptr - outbase);
dvander@706
   100
	}
dvander@706
   101
	inline void set_outputpos(jitoffs_t offs)
dvander@706
   102
	{
dvander@706
   103
		outptr = outbase + offs;
dvander@706
   104
	}
dvander@706
   105
	inline jitoffs_t get_inputpos()
dvander@706
   106
	{
dvander@706
   107
		return (jitoffs_t)((char *)inptr - (char *)inbase);
dvander@706
   108
	}
dvander@706
   109
public:
dvander@706
   110
	cell_t *inptr;		/* input pointer */
dvander@706
   111
	cell_t *inbase;		/* input base */
dvander@706
   112
	jitcode_t outbase;	/* output pointer */
dvander@706
   113
	jitcode_t outptr;	/* output base */
dvander@706
   114
	SourcePawn::ICompilation *data;	/* compiler live info */
dvander@706
   115
};
dvander@706
   116
dvander@706
   117
#endif //_INCLUDE_SOURCEPAWN_JIT_HELPERS_H_