minimize the number of DIVs
[mesa.git] / src / mesa / x86 / assyntax.h
index 6ee6ac6c29ee56cac5f30496037c29201a4f1849..f37bde3a7d1cf0cf609f58b0b899869fc4f13881 100644 (file)
@@ -1,4 +1,3 @@
-/* $Id: assyntax.h,v 1.21 2002/06/11 01:26:58 brianp Exp $ */
 
 #ifndef __ASSYNTAX_H__
 #define __ASSYNTAX_H__
 #endif
 
 #if (defined(__STDC__) && !defined(UNIXCPP)) || (defined (sun) && defined (i386) && defined (SVR4) && defined (__STDC__) && !defined (__GNUC__))
-#define CONCAT(x, y)   x ## y
+#define CONCAT(x, y)           x ## y
+#define CONCAT3(x, y, z)       x ## y ## z
 #else
-#define CONCAT(x, y)   x/**/y
+#define CONCAT(x, y)           x/**/y
+#define CONCAT3(x, y, z)       x/**/y/**/z
 #endif
 
 #ifdef ACK_ASSEMBLER
 #endif /* ACK_ASSEMBLER */
 
 
-#if defined(__QNX__) || defined(Lynx) || (defined(SYSV) || defined(SVR4)) && !defined(ACK_ASSEMBLER) || defined(__ELF__) || defined(__GNU__) || defined(__GNUC__) && !defined(DJGPP)
+#if defined(__QNX__) || defined(Lynx) || (defined(SYSV) || defined(SVR4)) && !defined(ACK_ASSEMBLER) || defined(__ELF__) || defined(__GNU__) || defined(__GNUC__) && !defined(__DJGPP__) && !defined(__MINGW32__)
 #define GLNAME(a)      a
 #else
 #define GLNAME(a)      CONCAT(_,a)
 
 /* Addressing Modes */
 /* Immediate Mode */
-#define ADDR(a)                CHOICE(CONCAT($,a), CONCAT($,a), a)
-#define CONST(a)       CHOICE(CONCAT($,a), CONCAT($,a), a)
+#define ADDR(a)                CHOICE(CONCAT($,a), $a, a)
+#define CONST(a)       CHOICE(CONCAT($,a), $a, a)
 
 /* Indirect Mode */
 #define CONTENT(a)     CHOICE(a, a, (a))        /* take contents of variable */
 #define P_XMM6         xmm6
 #define P_XMM7         xmm7
 
-#define CONCAT(x, y)   x ## y
+#define CONCAT(x, y)           x ## y
+#define CONCAT3(x, y, z)       x ## y ## z
 
 #if defined(NASM_ASSEMBLER)
 
@@ -1074,7 +1076,7 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define B_REGDB(d, b)          BYTE_PTR [b + d]
 
 /* Variable indirect: */
-#define VARINDIRECT(var)       var
+#define VARINDIRECT(var)       [var]
 
 /* Use register contents as jump/call target: */
 #define CODEPTR(reg)           P_(reg)
@@ -1086,6 +1088,7 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define P_(a)                  P_ ## a
 #define X_(a)                  X_ ## a
 #define D_(a)                  D_ ## a
+#define SR_(a)                 W_ ## a
 #define S_(a)                  L_ ## a
 #define L_(a)                  L_ ## a
 #define W_(a)                  W_ ## a
@@ -1227,7 +1230,7 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define LOOPNZ(a)              loopnz a
 #define LSL(a, b)              lsl b, a
 #define LTR(a)                 ltr a
-#define MOV_SR(a, b)           mov S_(b), S_(a)
+#define MOV_SR(a, b)           mov SR_(b), SR_(a)
 #define MOV_L(a, b)            mov L_(b), L_(a)
 #define MOV_W(a, b)            mov W_(b), W_(a)
 #define MOV_B(a, b)            mov B_(b), B_(a)
@@ -1262,14 +1265,14 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define OUTS_L                 outsd
 #define OUTS_W                 outsw
 #define OUTS_B                 outsb
-#define POP_SR(a)              pop S_(a)
+#define POP_SR(a)              pop SR_(a)
 #define POP_L(a)               pop L_(a)
 #define POP_W(a)               pop W_(a)
 #define POPA_L                 popad
 #define POPA_W                 popa
 #define POPF_L                 popfd
 #define POPF_W                 popf
-#define PUSH_SR(a)             push S_(a)
+#define PUSH_SR(a)             push SR_(a)
 #define PUSH_L(a)              push L_(a)
 #define PUSH_W(a)              push W_(a)
 #define PUSH_B(a)              push B_(a)
@@ -1341,15 +1344,15 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define SETZ(a)                        setz a
 #define SGDT(a)                        sgdt a
 #define SIDT(a)                        sidt a
-#define SHL_L(a, b)            shl L_(b), L_(a)
-#define SHL_W(a, b)            shl W_(b), W_(a)
+#define SHL_L(a, b)            shl L_(b), B_(a)
+#define SHL_W(a, b)            shl W_(b), B_(a)
 #define SHL_B(a, b)            shl B_(b), B_(a)
 #define SHLD_L(a,b,c)          shld
 #define SHLD2_L(a,b)           shld L_(b), L_(a)
 #define SHLD_W(a,b,c)          shld
 #define SHLD2_W(a,b)           shld W_(b), W_(a)
-#define SHR_L(a, b)            shr L_(b), L_(a)
-#define SHR_W(a, b)            shr W_(b), W_(a)
+#define SHR_L(a, b)            shr L_(b), B_(a)
+#define SHR_W(a, b)            shr W_(b), B_(a)
 #define SHR_B(a, b)            shr B_(b), B_(a)
 #define SHRD_L(a,b,c)          shrd
 #define SHRD2_L(a,b)           shrd L_(b), L_(a)
@@ -1360,9 +1363,9 @@ SECTION _DATA public align=16 class=DATA use32 flat
 #define STC                    stc
 #define STD                    std
 #define STI                    sti
-#define STOS_L                 stos
-#define STOS_W                 stos
-#define STOS_B                 stos
+#define STOS_L                 stosd
+#define STOS_W                 stosw
+#define STOS_B                 stosb
 #define STR(a)                 str a
 #define SUB_L(a, b)            sub L_(b), L_(a)
 #define SUB_W(a, b)            sub W_(b), W_(a)
@@ -1689,9 +1692,24 @@ SECTION _DATA public align=16 class=DATA use32 flat
 /* Added by BrianP for FreeBSD (per David Dawes) */
 #if !defined(NASM_ASSEMBLER) && !defined(MASM_ASSEMBLER) && !defined(__bsdi__)
 #define LLBL(a)                CONCAT(.L,a)
+#define LLBL2(a,b)     CONCAT3(.L,a,b)
 #else
 #define LLBL(a)                a
+#define LLBL2(a,b)     CONCAT(a,b)
 #endif
 
+/* Segment overrides */
+#define SEGCS          D_BYTE  46
+#define SEGDS          D_BYTE  62
+#define SEGES          D_BYTE  38
+#define SEGFS          D_BYTE  100
+#define SEGGS          D_BYTE  101
+
+/* Temporary labels: valid until next non-local label */
+#ifdef NASM_ASSEMBLER
+#define TLBL(a)                CONCAT(.,a)
+#else
+#define TLBL(a)                CONCAT(a,$)
+#endif
 
 #endif /* __ASSYNTAX_H__ */