Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jit/jit-rules-interp.c view on Meta::CPAN
/*
* jit-rules-interp.c - Rules that define the interpreter characteristics.
*
* 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/>.
*/
#include "jit-internal.h"
#include "jit-rules.h"
#include "jit-reg-alloc.h"
#if defined(JIT_BACKEND_INTERP)
#include "jit-interp.h"
/*@
The architecture definition rules for a CPU are placed into the files
@code{jit-rules-ARCH.h} and @code{jit-rules-ARCH.c}. You should add
both of these files to @code{Makefile.am} in @code{libjit/jit}.
You will also need to edit @code{jit-rules.h} in two places. First,
place detection logic at the top of the file to detect your platform
and define @code{JIT_BACKEND_ARCH} to 1. Further down the file,
you should add the following two lines to the include file logic:
@example
#elif defined(JIT_BACKEND_ARCH)
#include "jit-rules-ARCH.h"
@end example
@subsection Defining the registers
Every rule header file needs to define the macro @code{JIT_REG_INFO} to
an array of values that represents the properties of the CPU's
registers. The @code{_jit_reg_info} array is populated with
these values. @code{JIT_NUM_REGS} defines the number of
elements in the array. Each element in the array has the
following members:
@table @code
@item name
The name of the register. This is used for debugging purposes.
@item cpu_reg
The raw CPU register number. Registers in @code{libjit} are
referred to by their pseudo register numbers, corresponding to
their index within @code{JIT_REG_INFO}. However, these pseudo
register numbers may not necessarily correspond to the register
numbers used by the actual CPU. This field provides a mapping.
@item other_reg
The second pseudo register in a 64-bit register pair, or -1 if
the current register cannot be used as the first pseudo register
in a 64-bit register pair. This field only has meaning on 32-bit
platforms, and should always be set to -1 on 64-bit platforms.
@item flags
Flag bits that describe the pseudo register's properties.
@end table
@noindent
The following flags may be present:
@table @code
@item JIT_REG_WORD
This register can hold an integer word value.
@item JIT_REG_LONG
This register can hold a 64-bit long value without needing a
second register. Normally only used on 64-bit platforms.
@item JIT_REG_FLOAT32
This register can hold a 32-bit floating-point value.
@item JIT_REG_FLOAT64
This register can hold a 64-bit floating-point value.
@item JIT_REG_NFLOAT
This register can hold a native floating-point value.
@item JIT_REG_FRAME
( run in 0.509 second using v1.01-cache-2.11-cpan-70e19b8f4f1 )