/************************************************************************* * * * 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 * core of an execution loop. They are simpler to implement, more compact, * and easier to debug. * * */ #ifndef ABSMI_THREADED_H #define ABSMI_THREADED_H #ifndef _NATIVE #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) #else #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) #endif /* _NATIVE */ #ifndef _NATIVE #define ALWAYS_END_PREFETCH() } #define ALWAYS_END_PREFETCH_W() } #define END_PREFETCH() } #define END_PREFETCH_W() } #else #define ALWAYS_END_PREFETCH() #define ALWAYS_END_PREFETCH_W() #define END_PREFETCH() #define END_PREFETCH_W() #endif /* _NATIVE */ #define DO_PREFETCH(TYPE) #define DO_PREFETCH_W(TYPE) #define JMPNext() goto nextop #define JMPNextW() goto nextop_write #define baGONext() JMPNext() #define GONextW() JMPNextW() #define ALWAYS_GONext() GONext() #define ALWAYS_GONextW() GONextW() #define Op(Label,Type) case _##Label: { START_PREFETCH(Type) #define OpW(Label,Type) case _##Label: { START_PREFETCH_W(Type) #define BOp(Label,Type) case _##Label: { #define PBOp(Label,Type) case _##Label: { INIT_PREFETCH() #define OpRW(Label,Type) case _##Label: { #endif // ABSMI_THREADED_H