/************************************************************************* * * * YAP Prolog * * * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: absmi.c * * Last rev: * * mods: * * comments: Portable abstract machine interpreter that support threaded * execution. * * * *************************************************************************/ /** * @file absmi-threaded.h * @author VITOR SANTOS COSTA * @date Sun Aug 2 23:46:47 2015 * * @brief This file implements the support for switch-based execution of * the YAP abstract machine emulator. * % Switch-based emulators consist of one or several switches that are at the % * YAP includes several operations to support threaded emulation: * * - a header that defines the type of instruction; * * - a transition instruction that moves to the next operation; * * - get values well before they are needed; this is still * useful for the opcode of the next instruction. * - * ss */ #ifndef ABSMI_THREADED_H #define ABSMI_THREADED_H #define ALWAYS_START_PREFETCH(TYPE) #define ALWAYS_START_PREFETCH_W(TYPE) #define ALWAYS_LOOKAHEAD(WHERE) #define START_PREFETCH(TYPE) #define START_PREFETCH_W(TYPE) #define INIT_PREFETCH() #define PREFETCH_OP(X) #define DO_PREFETCH(TYPE) #define DO_PREFETCH_W(TYPE) #define ALWAYS_END_PREFETCH() #define ALWAYS_END_PREFETCH_W() #define END_PREFETCH() #define END_PREFETCH_W() #if YAP_DBG_PREDS #define Op(Label,Type) \ _##Label:{ (ExpEnv.config_struc.current_displacement) ? \ print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ print_instruction(PREG, ON_INTERPRETER); \ START_PREFETCH(Type) #define OpW(Label,Type) \ Label:{ (ExpEnv.config_struc.current_displacement) ? \ print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ print_instruction(PREG, ON_INTERPRETER); \ START_PREFETCH_W(Type) #define BOp(Label,Type) \ Label:{ (ExpEnv.config_struc.current_displacement) ? \ print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ print_instruction(PREG, ON_INTERPRETER); #define PBOp(Label,Type) \ Label:{ (ExpEnv.config_struc.current_displacement) ? \ print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ print_instruction(PREG, ON_INTERPRETER); \ INIT_PREFETCH() #define OpRW(Label,Type) \ Label:{ (ExpEnv.config_struc.current_displacement) ? \ print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ print_instruction(PREG, ON_INTERPRETER); #else /* YAP_DBG_PREDS */ #define JMPNext() goto nextop #define JMPNextW() goto nextop_write #define GONext() JMPNext() #define GONextW() JMPNextW() #define ALWAYS_GONext() GONext() #define ALWAYS_GONextW() GONextW() #define Op(Label,Type) \ _##Label:{ START_PREFETCH(Type) #define OpW(Label,Type) \ _##Label:{ START_PREFETCH_W(Type) #define BOp(Label,Type) \ _##Label:{ #define PBOp(Label,Type) \ _##Label:{ INIT_PREFETCH() #define OpRW(Label,Type) \ _##Label:{ #endif /* YAP_DBG_PREDS */ #endif // ABSMI_THREADED_H