#ifndef _INL_EXEC_H_
#define _INL_EXEC_H_

#include <sys/cdefs.h>
#include <inline/stubs.h>

__BEGIN_DECLS

#ifndef BASE_EXT_DECL
#define BASE_EXT_DECL extern struct ExecBase * SysBase;
#endif
#ifndef BASE_PAR_DECL
#define BASE_PAR_DECL
#define BASE_PAR_DECL0 void
#endif
#ifndef BASE_NAME
#define BASE_NAME SysBase
#endif

static __inline void 
AbortIO (BASE_PAR_DECL struct IORequest *ioRequest)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct IORequest *a1 __asm("a1") = ioRequest;
  __asm __volatile ("jsr a6@(-0x1e0)"
  : /* no output */
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
AddHead (BASE_PAR_DECL struct List *list,struct Node *node)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct List *a0 __asm("a0") = list;
  register struct Node *a1 __asm("a1") = node;
  __asm __volatile ("jsr a6@(-0xf0)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
AddTail (BASE_PAR_DECL struct List *list,struct Node *node)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct List *a0 __asm("a0") = list;
  register struct Node *a1 __asm("a1") = node;
  __asm __volatile ("jsr a6@(-0xf6)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline APTR 
AllocMem (BASE_PAR_DECL unsigned long byteSize,unsigned long requirements)
{
  BASE_EXT_DECL
  register APTR  _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = byteSize;
  register unsigned long d1 __asm("d1") = requirements;
  __asm __volatile ("jsr a6@(-0xc6)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline BYTE 
AllocSignal (BASE_PAR_DECL long signalNum)
{
  BASE_EXT_DECL
  register BYTE  _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register long d0 __asm("d0") = signalNum;
  __asm __volatile ("jsr a6@(-0x14a)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
CloseDevice (BASE_PAR_DECL struct IORequest *ioRequest)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct IORequest *a1 __asm("a1") = ioRequest;
  __asm __volatile ("jsr a6@(-0x1c2)"
  : /* no output */
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
CloseLibrary (BASE_PAR_DECL struct Library *library)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct Library *a1 __asm("a1") = library;
  __asm __volatile ("jsr a6@(-0x19e)"
  : /* no output */
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
CopyMem (BASE_PAR_DECL APTR source,APTR dest,unsigned long size)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register APTR a0 __asm("a0") = source;
  register APTR a1 __asm("a1") = dest;
  register unsigned long d0 __asm("d0") = size;
  __asm __volatile ("jsr a6@(-0x270)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct MsgPort *
CreateMsgPort (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register struct MsgPort * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x29a)"
  : "=r" (_res)
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
DeleteMsgPort (BASE_PAR_DECL struct MsgPort *port)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct MsgPort *a0 __asm("a0") = port;
  __asm __volatile ("jsr a6@(-0x2a0)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct Task *
FindTask (BASE_PAR_DECL UBYTE *name)
{
  BASE_EXT_DECL
  register struct Task * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a1 __asm("a1") = name;
  __asm __volatile ("jsr a6@(-0x126)"
  : "=r" (_res)
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
Forbid (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x84)"
  : /* no output */
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
FreeMem (BASE_PAR_DECL APTR memoryBlock,unsigned long byteSize)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register APTR a1 __asm("a1") = memoryBlock;
  register unsigned long d0 __asm("d0") = byteSize;
  __asm __volatile ("jsr a6@(-0xd2)"
  : /* no output */
  : "r" (a6), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
FreeSignal (BASE_PAR_DECL long signalNum)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register long d0 __asm("d0") = signalNum;
  __asm __volatile ("jsr a6@(-0x150)"
  : /* no output */
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct Message *
GetMsg (BASE_PAR_DECL struct MsgPort *port)
{
  BASE_EXT_DECL
  register struct Message * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct MsgPort *a0 __asm("a0") = port;
  __asm __volatile ("jsr a6@(-0x174)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline BYTE 
OpenDevice (BASE_PAR_DECL UBYTE *devName,unsigned long unit,struct IORequest *ioRequest,unsigned long flags)
{
  BASE_EXT_DECL
  register BYTE  _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = devName;
  register unsigned long d0 __asm("d0") = unit;
  register struct IORequest *a1 __asm("a1") = ioRequest;
  register unsigned long d1 __asm("d1") = flags;
  __asm __volatile ("jsr a6@(-0x1bc)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (d0), "r" (a1), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct Library *
OpenLibrary (BASE_PAR_DECL UBYTE *libName,unsigned long version)
{
  BASE_EXT_DECL
  register struct Library * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a1 __asm("a1") = libName;
  register unsigned long d0 __asm("d0") = version;
  __asm __volatile ("jsr a6@(-0x228)"
  : "=r" (_res)
  : "r" (a6), "r" (a1), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void 
Permit (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x8a)"
  : /* no output */
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct Node *
RemHead (BASE_PAR_DECL struct List *list)
{
  BASE_EXT_DECL
  register struct Node * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct List *a0 __asm("a0") = list;
  __asm __volatile ("jsr a6@(-0x102)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct Node *
RemTail (BASE_PAR_DECL struct List *list)
{
  BASE_EXT_DECL
  register struct Node * _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct List *a0 __asm("a0") = list;
  __asm __volatile ("jsr a6@(-0x108)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}

static __inline void 
Remove (BASE_PAR_DECL struct Node *node)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct Node *a1 __asm("a1") = node;
  __asm __volatile ("jsr a6@(-0xfc)"
  : /* no output */
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void 
SendIO (BASE_PAR_DECL struct IORequest *ioRequest)
{
  BASE_EXT_DECL
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct IORequest *a1 __asm("a1") = ioRequest;
  __asm __volatile ("jsr a6@(-0x1ce)"
  : /* no output */
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline ULONG 
Wait (BASE_PAR_DECL unsigned long signalSet)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register unsigned long d0 __asm("d0") = signalSet;
  __asm __volatile ("jsr a6@(-0x13e)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline BYTE 
WaitIO (BASE_PAR_DECL struct IORequest *ioRequest)
{
  BASE_EXT_DECL
  register BYTE  _res  __asm("d0");
  register struct ExecBase *a6 __asm("a6") = BASE_NAME;
  register struct IORequest *a1 __asm("a1") = ioRequest;
  __asm __volatile ("jsr a6@(-0x1da)"
  : "=r" (_res)
  : "r" (a6), "r" (a1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
#undef BASE_EXT_DECL
#undef BASE_PAR_DECL
#undef BASE_PAR_DECL0
#undef BASE_NAME

__END_DECLS

#endif /* _INL_EXEC_H_ */
