/* * jit-interp.h - Bytecode interpreter for platforms without native support. * * 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 * . */ #ifndef _JIT_INTERP_H #define _JIT_INTERP_H #include "jit-internal.h" #include "jit-apply-rules.h" #include "jit-interp-opcode.h" #ifdef __cplusplus extern "C" { #endif /* * Structure of a stack item. */ typedef union { jit_int int_value; jit_uint uint_value; jit_long long_value; jit_ulong ulong_value; jit_float32 float32_value; jit_float64 float64_value; jit_nfloat nfloat_value; void *ptr_value; #if JIT_APPLY_MAX_STRUCT_IN_REG != 0 char struct_value[JIT_APPLY_MAX_STRUCT_IN_REG]; #endif } jit_item; /* * Number of items that make up a struct or union value on the stack. */ #define JIT_NUM_ITEMS_IN_STRUCT(size) \ (((size) + (sizeof(jit_item) - 1)) / sizeof(jit_item)) /* * Information that is prefixed to a function that describes * its interpretation context. The code starts just after this. */ typedef struct jit_function_interp *jit_function_interp_t; struct jit_function_interp { /* The function that this structure is associated with */ jit_function_t func; /* Size of the argument area to allocate, in bytes */ unsigned int args_size; /* Size of the local stack frame to allocate, in bytes */ unsigned int frame_size; /* Size of the working stack area of the frame, in items */ unsigned int working_area; }; /* * Get the size of the "jit_function_interp" structure, rounded * up to a multiple of "void *". */ #define jit_function_interp_size \ ((sizeof(struct jit_function_interp) + sizeof(void *) - 1) & \ ~(sizeof(void *) - 1)) /* * Get the entry point for a function, from its "jit_function_interp_t" block. */ #define jit_function_interp_entry_pc(info) \ ((void **)(((unsigned char *)(info)) + jit_function_interp_size)) #ifdef __cplusplus }; #endif #endif /* _JIT_INTERP_H */

AltStyle によって変換されたページ (->オリジナル) /