/*
Copyright (C) 2007 by Ellips BV. All rights reserved.

Permission to use, copy, modify, and distribute this
software is freely granted, provided that this notice
is preserved.
 */
/*
 ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
 ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

#ifndef __USER_LABEL_PREFIX__
#define __USER_LABEL_PREFIX__ _
#endif

#define __REG_PREFIX__ %

/* ANSI concatenation macros.  */

#define CONCAT1(a, b) CONCAT2(a, b)
#define CONCAT2(a, b) a##b

/* Use the right prefix for global labels.  */

#define SYM(x) CONCAT1(__USER_LABEL_PREFIX__, x)

/* Use the right prefix for registers.  */

#define REG(x) CONCAT1(__REG_PREFIX__, x)

#define rax    REG(rax)
#define rbx    REG(rbx)
#define rcx    REG(rcx)
#define rdx    REG(rdx)
#define rsi    REG(rsi)
#define rdi    REG(rdi)
#define rbp    REG(rbp)
#define rsp    REG(rsp)

#define r8     REG(r8)
#define r9     REG(r9)
#define r10    REG(r10)
#define r11    REG(r11)
#define r12    REG(r12)
#define r13    REG(r13)
#define r14    REG(r14)
#define r15    REG(r15)

#define eax    REG(eax)
#define ebx    REG(ebx)
#define ecx    REG(ecx)
#define edx    REG(edx)
#define esi    REG(esi)
#define edi    REG(edi)
#define ebp    REG(ebp)
#define esp    REG(esp)

#define st0    REG(st)
#define st1    REG(st(1))
#define st2    REG(st(2))
#define st3    REG(st(3))
#define st4    REG(st(4))
#define st5    REG(st(5))
#define st6    REG(st(6))
#define st7    REG(st(7))

#define ax     REG(ax)
#define bx     REG(bx)
#define cx     REG(cx)
#define dx     REG(dx)

#define ah     REG(ah)
#define bh     REG(bh)
#define ch     REG(ch)
#define dh     REG(dh)

#define al     REG(al)
#define bl     REG(bl)
#define cl     REG(cl)
#define dl     REG(dl)

#define sil    REG(sil)

#define mm1    REG(mm1)
#define mm2    REG(mm2)
#define mm3    REG(mm3)
#define mm4    REG(mm4)
#define mm5    REG(mm5)
#define mm6    REG(mm6)
#define mm7    REG(mm7)

#define xmm0   REG(xmm0)
#define xmm1   REG(xmm1)
#define xmm2   REG(xmm2)
#define xmm3   REG(xmm3)
#define xmm4   REG(xmm4)
#define xmm5   REG(xmm5)
#define xmm6   REG(xmm6)
#define xmm7   REG(xmm7)

#define cr0    REG(cr0)
#define cr1    REG(cr1)
#define cr2    REG(cr2)
#define cr3    REG(cr3)
#define cr4    REG(cr4)

#ifdef _I386MACH_NEED_SOTYPE_FUNCTION
#define SOTYPE_FUNCTION(sym) .type SYM(sym), @function
#else
#define SOTYPE_FUNCTION(sym)
#endif

#ifndef _I386MACH_DISABLE_HW_INTERRUPTS
#define __CLI
#define __STI
#else
#define __CLI cli
#define __STI sti
#endif
