2015-01-18 03:00:19 +00:00
|
|
|
/*****************************************************************
|
|
|
|
* INSTRUCTIONS *
|
|
|
|
*****************************************************************/
|
|
|
|
|
|
|
|
#ifdef INDENT_CODE
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#endif /* INDENT_CODE */
|
|
|
|
|
|
|
|
|
|
|
|
BOp(Ystop, l);
|
|
|
|
SET_ASP(YREG, E_CB*sizeof(CELL));
|
2015-11-05 15:04:12 +00:00
|
|
|
/* make sure ASP is initialized */
|
2015-01-18 03:00:19 +00:00
|
|
|
saveregs();
|
|
|
|
|
|
|
|
#if PUSH_REGS
|
|
|
|
restore_absmi_regs(old_regs);
|
|
|
|
#endif
|
|
|
|
#if BP_FREE
|
|
|
|
P1REG = PCBACKUP;
|
|
|
|
#endif
|
|
|
|
return 1;
|
|
|
|
ENDBOp();
|
|
|
|
|
|
|
|
BOp(Nstop, e);
|
|
|
|
SET_ASP(YREG, E_CB*sizeof(CELL));
|
|
|
|
saveregs();
|
|
|
|
#if PUSH_REGS
|
|
|
|
restore_absmi_regs(old_regs);
|
|
|
|
#endif
|
|
|
|
#if BP_FREE
|
|
|
|
P1REG = PCBACKUP;
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
ENDBOp();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************************\
|
|
|
|
* Native Code Execution *
|
|
|
|
\************************************************************************/
|
|
|
|
|
|
|
|
#if YAP_JIT
|
2015-09-21 23:05:36 +01:00
|
|
|
static void *OpAddress_JIT[] =
|
2015-08-07 22:57:53 +01:00
|
|
|
{
|
|
|
|
#define OPCODE(OP,TYPE) && _##OP
|
|
|
|
#include "YapOpcodes.h"
|
|
|
|
#undef OPCODE
|
|
|
|
};
|
|
|
|
|
2015-01-18 03:00:19 +00:00
|
|
|
/* native_me */
|
|
|
|
BOp(jit_handler, J);
|
|
|
|
if (!PREG->y_u.J.jh->fi.bcst.c) PREG->y_u.J.jh->mf.isground = IsGround(PREG);
|
|
|
|
PREG->y_u.J.jh->fi.bcst.c++;
|
|
|
|
|
|
|
|
/* Did PREG reach threshold value to become critical? */
|
|
|
|
if (PREG->y_u.J.jh->fi.bcst.c == (COUNT)(ExpEnv.config_struc.frequency_bound*(ExpEnv.config_struc.profiling_startp)) && !PREG->y_u.J.jh->mf.isground) {
|
|
|
|
#if YAP_DBG_PREDS
|
|
|
|
if (ExpEnv.debug_struc.pprint_me.criticals != 0 && ExpEnv.debug_struc.pprint_me.criticals != 0x1) {
|
|
|
|
fprintf(stderr, "%s:%d\n", __FILE__, __LINE__);
|
|
|
|
fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pprint_me.criticals);
|
|
|
|
}
|
|
|
|
#endif
|
2015-02-06 18:11:52 +00:00
|
|
|
traced_absmi();
|
|
|
|
|
2015-01-18 03:00:19 +00:00
|
|
|
}
|
|
|
|
#if YAP_DBG_PREDS
|
|
|
|
print_main_when_head(PREG, ON_INTERPRETER);
|
|
|
|
#endif
|
|
|
|
PREG = NEXTOP(PREG, J);
|
|
|
|
JMPNext();
|
|
|
|
ENDBOp();
|
|
|
|
#endif
|
|
|
|
|
2015-01-20 03:00:42 +00:00
|
|
|
#include "cp_absmi_insts.h"
|
|
|
|
#include "lu_absmi_insts.h"
|
|
|
|
#include "fail_absmi_insts.h"
|
|
|
|
#include "control_absmi_insts.h"
|
|
|
|
#include "unify_absmi_insts.h"
|
|
|
|
#include "fli_absmi_insts.h"
|
|
|
|
#include "or_absmi_insts.h"
|
|
|
|
#include "index_absmi_insts.h"
|
|
|
|
#include "type_absmi_insts.h"
|
|
|
|
#include "prim_absmi_insts.h"
|
|
|
|
#include "meta_absmi_insts.h"
|