mirror of https://github.com/ademakov/libjit
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.3 KiB
71 lines
2.3 KiB
/*
|
|
* jit-apply-arm.h - Special definitions for ARM function application.
|
|
*
|
|
* Copyright (C) 2004 Southern Storm Software, Pty Ltd.
|
|
*
|
|
* This file is part of the libjit library.
|
|
*
|
|
* The libjit library is free software: you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation, either version 2.1 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* The libjit library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with the libjit library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef _JIT_APPLY_ARM_H
|
|
#define _JIT_APPLY_ARM_H
|
|
|
|
/*
|
|
* The maximum number of bytes that are needed to represent a closure,
|
|
* and the alignment to use for the closure.
|
|
*/
|
|
#define jit_closure_size 128
|
|
#define jit_closure_align 16
|
|
|
|
/*
|
|
* The number of bytes that are needed for a redirector stub.
|
|
* This includes any extra bytes that are needed for alignment.
|
|
*/
|
|
#define jit_redirector_size 128
|
|
|
|
/*
|
|
* The number of bytes that are needed for a indirector stub.
|
|
* This includes any extra bytes that are needed for alignment.
|
|
*/
|
|
#define jit_indirector_size 24
|
|
|
|
/*
|
|
* We should pad unused code space with NOP's.
|
|
*/
|
|
#define jit_should_pad 1
|
|
|
|
/*
|
|
* Defines the alignment for the stack pointer at a public interface.
|
|
* As of the "Procedure Call Standard for the ARM Architecture" (AAPCS release 2.07)
|
|
* SP mod 8 = 0
|
|
* must always be true at every public interface (function calls, etc)
|
|
*/
|
|
#define JIT_SP_ALIGN_PUBLIC 8
|
|
|
|
/*
|
|
* Redefine jit_builtin_apply in order to correctly align the stack pointer
|
|
* to JIT_SP_ALING_PUBLIC bytes before calling __builtin_apply to execute the
|
|
* jit-compiled function
|
|
*/
|
|
#define jit_builtin_apply(func,args,size,return_float,return_buf) \
|
|
do { \
|
|
register void *sp asm("sp"); \
|
|
sp = (void *) (((unsigned) sp) & ~(JIT_SP_ALIGN_PUBLIC - 1)); \
|
|
(return_buf) = __builtin_apply \
|
|
((void (*)())(func), (args), (size)); \
|
|
} while (0)
|
|
|
|
#endif /* _JIT_APPLY_ARM_H */
|
|
|