Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jit/jit-interp.c view on Meta::CPAN
VMCASE(JIT_INTERP_OP_LDR_0_NFLOAT):
{
/* Load a native float return value into the register 0 */
VM_R0_NFLOAT = return_area->nfloat_value;
VM_MODIFY_PC(1);
}
VMBREAK;
/******************************************************************
* Stack management.
******************************************************************/
VMCASE(JIT_OP_POP_STACK):
{
/* Pop a specific number of items from the stack */
temparg = VM_NINT_ARG;
VM_MODIFY_PC_AND_STACK(2, temparg);
}
VMBREAK;
VMCASE(JIT_INTERP_OP_POP):
{
/* Pop a single item from the stack */
VM_MODIFY_PC_AND_STACK(1, 1);
}
VMBREAK;
VMCASE(JIT_INTERP_OP_POP_2):
{
/* Pop two items from the stack */
VM_MODIFY_PC_AND_STACK(1, 2);
}
VMBREAK;
VMCASE(JIT_INTERP_OP_POP_3):
{
/* Pop three items from the stack */
VM_MODIFY_PC_AND_STACK(1, 3);
}
VMBREAK;
VMCASE(JIT_OP_PUSH_RETURN_AREA_PTR):
{
/* Push the address of "return_area" for an external call */
VM_STK_PTRP = return_area;
VM_MODIFY_PC_AND_STACK(1, -1);
}
VMBREAK;
/******************************************************************
* Debugging support.
******************************************************************/
VMCASE(JIT_OP_MARK_BREAKPOINT):
{
/* Process a marked breakpoint within the current function */
tempptr = (void *)VM_NINT_ARG;
tempptr2 = (void *)VM_NINT_ARG2;
VM_MODIFY_PC(3);
_jit_backtrace_push(&call_trace, pc);
_jit_debugger_hook
(func->func, (jit_nint)tempptr, (jit_nint)tempptr2);
_jit_backtrace_pop();
}
VMBREAK;
/******************************************************************
* Opcodes that aren't used by the interpreter. These are replaced
* by more specific instructions during function compilation.
******************************************************************/
VMCASE(JIT_OP_IMPORT):
VMCASE(JIT_OP_COPY_LOAD_SBYTE):
VMCASE(JIT_OP_COPY_LOAD_UBYTE):
VMCASE(JIT_OP_COPY_LOAD_SHORT):
VMCASE(JIT_OP_COPY_LOAD_USHORT):
VMCASE(JIT_OP_COPY_INT):
VMCASE(JIT_OP_COPY_LONG):
VMCASE(JIT_OP_COPY_FLOAT32):
VMCASE(JIT_OP_COPY_FLOAT64):
VMCASE(JIT_OP_COPY_NFLOAT):
VMCASE(JIT_OP_COPY_STORE_BYTE):
VMCASE(JIT_OP_COPY_STORE_SHORT):
VMCASE(JIT_OP_ADDRESS_OF):
VMCASE(JIT_OP_INCOMING_REG):
VMCASE(JIT_OP_INCOMING_FRAME_POSN):
VMCASE(JIT_OP_OUTGOING_REG):
VMCASE(JIT_OP_OUTGOING_FRAME_POSN):
VMCASE(JIT_OP_RETURN_REG):
VMCASE(JIT_OP_SET_PARAM_INT):
VMCASE(JIT_OP_SET_PARAM_LONG):
VMCASE(JIT_OP_SET_PARAM_FLOAT32):
VMCASE(JIT_OP_SET_PARAM_FLOAT64):
VMCASE(JIT_OP_SET_PARAM_NFLOAT):
VMCASE(JIT_OP_SET_PARAM_STRUCT):
VMCASE(JIT_OP_ENTER_FINALLY):
VMCASE(JIT_OP_ENTER_FILTER):
VMCASE(JIT_OP_CALL_FILTER_RETURN):
VMCASE(JIT_OP_MARK_OFFSET):
{
/* Shouldn't happen, but skip the instruction anyway */
VM_MODIFY_PC_AND_STACK(1, 0);
}
VMBREAK;
}
VMSWITCHEND
handle_builtin: ;
jit_exception_builtin(builtin_exception);
}
int jit_function_apply
(jit_function_t func, void **args, void *return_area)
{
if(func)
{
return jit_function_apply_vararg
(func, func->signature, args, return_area);
}
else
( run in 0.635 second using v1.01-cache-2.11-cpan-02777c243ea )