extensions/bintools/CallMaker.cpp
author Borja Ferrer <faluco@alliedmods.net>
Fri May 04 22:53:40 2007 +0000 (2007-05-04)
changeset 740 04a39f9db33c
parent 739 d22243bb5864
child 757 b799caa9a190
permissions -rw-r--r--
added linux support
faluco@739
     1
/**
faluco@739
     2
 * vim: set ts=4 :
faluco@739
     3
 * ===============================================================
faluco@739
     4
 * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. 
faluco@739
     5
 * All rights reserved.
faluco@739
     6
 * ===============================================================
faluco@739
     7
 *
faluco@739
     8
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be 
faluco@739
     9
 * used or modified under the Terms and Conditions of its License Agreement, 
faluco@739
    10
 * which is found in public/licenses/LICENSE.txt.  As of this notice, derivative 
faluco@739
    11
 * works must be licensed under the GNU General Public License (version 2 or 
faluco@739
    12
 * greater).  A copy of the GPL is included under public/licenses/GPL.txt.
faluco@739
    13
 * 
faluco@739
    14
 * To view the latest information, see: http://www.sourcemod.net/license.php
faluco@739
    15
 *
faluco@739
    16
 * Version: $Id$
faluco@739
    17
 */
faluco@739
    18
faluco@739
    19
#include "CallMaker.h"
faluco@739
    20
#include "CallWrapper.h"
faluco@739
    21
#include "jit_call.h"
faluco@739
    22
faluco@739
    23
ICallWrapper *CallMaker::CreateCall(void *address,
faluco@739
    24
						 CallConvention cv,
faluco@739
    25
						 const PassInfo *retInfo,
faluco@739
    26
						 const PassInfo paramInfo[],
faluco@739
    27
						 unsigned int numParams)
faluco@739
    28
{
faluco@739
    29
	CallWrapper *pWrapper = new CallWrapper(cv, paramInfo, retInfo, numParams);
faluco@739
    30
	pWrapper->m_Addrs[ADDR_CALLEE] = address;
faluco@739
    31
faluco@739
    32
	JIT_Compile(pWrapper, FuncAddr_Direct);
faluco@739
    33
faluco@739
    34
	return pWrapper;
faluco@739
    35
}
faluco@739
    36
faluco@739
    37
ICallWrapper *CallMaker::CreateVCall(unsigned int vtblIdx, 
faluco@739
    38
									 unsigned int vtblOffs, 
faluco@739
    39
									 unsigned int thisOffs, 
faluco@739
    40
									 const PassInfo *retInfo, 
faluco@739
    41
									 const PassInfo paramInfo[], 
faluco@739
    42
									 unsigned int numParams)
faluco@739
    43
{
faluco@739
    44
	CallWrapper *pWrapper = new CallWrapper(CallConv_ThisCall, paramInfo, retInfo, numParams);
faluco@739
    45
	pWrapper->m_VtInfo.thisOffs = thisOffs;
faluco@739
    46
	pWrapper->m_VtInfo.vtblIdx = vtblIdx;
faluco@739
    47
	pWrapper->m_VtInfo.vtblOffs = vtblOffs;
faluco@739
    48
faluco@739
    49
	JIT_Compile(pWrapper, FuncAddr_VTable);
faluco@739
    50
faluco@739
    51
	return pWrapper;
faluco@740
    52
}