more fixes to NASM sources
This commit is contained in:
@@ -5,7 +5,9 @@
|
||||
# Web : http://www.geocities.com/dborca
|
||||
#
|
||||
# $Header$
|
||||
# $Log$
|
||||
# $Log$
|
||||
# Revision 1.1.2.3 2003/06/07 09:53:24 dborca
|
||||
# initial checkin for NASM sources
|
||||
#
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* CPU detection code
|
||||
*
|
||||
* $Header$
|
||||
* $Log$
|
||||
*/
|
||||
|
||||
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <string.h>
|
||||
@@ -20,23 +28,30 @@ typedef unsigned long word32;
|
||||
#define _3DNOWPLUS_FEATURE_BIT 0x40000000
|
||||
#define _MMXPLUS_FEATURE_BIT 0x00400000
|
||||
|
||||
/* Testing code */
|
||||
/* Testing code:
|
||||
* TEST_SSE = xorps xmm0, xmm0
|
||||
* TEST_SSE2 = xorpd xmm0, xmm0
|
||||
* TEST_3DNOW = femms
|
||||
* TEST_MMX = emms
|
||||
* TEST_3DNOWPLUS = femms | pswapd mm0, mm0 | femms
|
||||
* TEST_MMXPLUS = emms | pminsw mm0, mm0 | emms
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#define TEST_CPUID(f) __asm __volatile ("cpuid"::"a"(f):"%ebx", "%ecx", "%edx")
|
||||
#define TEST_SSE() __asm __volatile ("xorps %xmm0, %xmm0")
|
||||
#define TEST_SSE2() __asm __volatile ("xorpd %xmm0, %xmm0")
|
||||
#define TEST_3DNOW() __asm __volatile ("femms")
|
||||
#define TEST_MMX() __asm __volatile ("emms")
|
||||
#define TEST_3DNOWPLUS() __asm __volatile ("femms; pswapd %mm0, %mm0; femms")
|
||||
#define TEST_MMXPLUS() __asm __volatile ("emms; pminsw %mm0, %mm0; emms")
|
||||
#define TEST_SSE() __asm __volatile (".byte 0x0f, 0x57, 0xc0")
|
||||
#define TEST_SSE2() __asm __volatile (".byte 0x66, 0x0f, 0x57, 0xc0")
|
||||
#define TEST_3DNOW() __asm __volatile (".byte 0x0f, 0x0e")
|
||||
#define TEST_MMX() __asm __volatile (".byte 0x0f, 0x77")
|
||||
#define TEST_3DNOWPLUS() __asm __volatile (".byte 0x0f, 0x0e, 0x0f, 0x0f, 0xc0, 0xbb, 0x0f, 0x0e")
|
||||
#define TEST_MMXPLUS() __asm __volatile (".byte 0x0f, 0x77, 0x0f, 0xea, 0xc0, 0x0f, 0x77")
|
||||
#else
|
||||
#define TEST_CPUID(f) __asm { _asm mov eax, f _asm cpuid }
|
||||
#define TEST_SSE() __asm { _asm _emit 0x0f _asm _emit 0x57 _asm _emit 0xc0 }
|
||||
#define TEST_SSE2() __asm { _asm _emit 0x66 _asm _emit 0x0f _asm _emit 0x57 _asm _emit 0xc0 }
|
||||
#define TEST_3DNOW() __asm { _asm _emit 0x0f _asm _emit 0x0e }
|
||||
#define TEST_MMX() __asm { _asm emms }
|
||||
#define TEST_MMX() __asm { _asm _emit 0x0f _asm _emit 0x77 }
|
||||
#define TEST_3DNOWPLUS() __asm { _asm _emit 0x0f _asm _emit 0x0e _asm _emit 0x0f _asm _emit 0x0f _asm _emit 0xc0 _asm _emit 0xbb _asm _emit 0x0f _asm _emit 0x0e }
|
||||
#define TEST_MMXPLUS() __asm { _asm emms _asm _emit 0x0f _asm _emit 0xea _asm _emit 0xc0 _asm emms }
|
||||
#define TEST_MMXPLUS() __asm { _asm _emit 0x0f _asm _emit 0x77 _asm _emit 0x0f _asm _emit 0xea _asm _emit 0xc0 _asm _emit 0x0f _asm _emit 0x77 }
|
||||
#endif
|
||||
|
||||
|
||||
@@ -116,12 +131,14 @@ static int has_feature (int feature)
|
||||
|
||||
|
||||
|
||||
/***
|
||||
*
|
||||
* void map_mname(int, int, const char *, char *) maps family and model to processor name
|
||||
*
|
||||
****************************************************/
|
||||
static void map_mname (int family, int model, const char * v_name, char *m_name)
|
||||
/* Desc: maps family and model to processor name
|
||||
*
|
||||
* In : family, model, vendor, ptr to store name
|
||||
* Out : -
|
||||
*
|
||||
* Note: incomplete
|
||||
*/
|
||||
static void map_mname (int family, int model, const char *v_name, char *m_name)
|
||||
{
|
||||
if (!strncmp("AuthenticAMD", v_name, 12)) {
|
||||
switch (family) { /* extract family code */
|
||||
@@ -160,10 +177,12 @@ static void map_mname (int family, int model, const char * v_name, char *m_name)
|
||||
}
|
||||
break;
|
||||
case 6: /* Athlon */
|
||||
switch (model) { /* No model numbers are currently defined */
|
||||
case 1:
|
||||
switch (model) { /* extract model code */
|
||||
case 3:
|
||||
strcpy (m_name,"AMD Duron");
|
||||
break;
|
||||
default:
|
||||
strcpy (m_name,"AMD ATHLON");
|
||||
strcpy (m_name,"AMD Athlon");
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -244,19 +263,13 @@ static void map_mname (int family, int model, const char * v_name, char *m_name)
|
||||
|
||||
|
||||
|
||||
/***
|
||||
*
|
||||
* int _cpuid (_p_info *pinfo)
|
||||
*
|
||||
* Entry:
|
||||
*
|
||||
* pinfo: pointer to _p_info.
|
||||
*
|
||||
* Exit:
|
||||
*
|
||||
* Returns int with capablity bit set even if pinfo = NULL
|
||||
*
|
||||
****************************************************/
|
||||
/* Desc: get CPU info
|
||||
*
|
||||
* In : pointer to _p_info
|
||||
* Out : features
|
||||
*
|
||||
* Note: -
|
||||
*/
|
||||
int _cpuid (_p_info *pinfo)
|
||||
{
|
||||
word32 dwStandard = 0;
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
;; $Header$
|
||||
;; $Revision$
|
||||
;; $Log$
|
||||
;; Revision 1.1.8.3 2003/06/07 09:53:24 dborca
|
||||
;; initial checkin for NASM sources
|
||||
;;
|
||||
;; Revision 1.1.8.1 2003/04/06 18:23:09 koolsmoky
|
||||
;; initial checkin of dos win32 glide
|
||||
;;
|
||||
@@ -93,16 +96,12 @@
|
||||
;;; Definitions of cvg regs and glide root structures.
|
||||
%INCLUDE "fxgasm.h"
|
||||
|
||||
extern _GlideRoot
|
||||
extern _grValidateState
|
||||
%IFDEF __WIN32__
|
||||
extern _grCommandTransportMakeRoom@12
|
||||
%ELSE
|
||||
extern _grCommandTransportMakeRoom
|
||||
%ENDIF
|
||||
extrn _GlideRoot
|
||||
extrn _grCommandTransportMakeRoom, 12
|
||||
extrn _grValidateState
|
||||
|
||||
%IFDEF HAL_CSIM
|
||||
extern halStore32
|
||||
extrn halStore32, 8
|
||||
%ENDIF
|
||||
|
||||
%MACRO GR_FIFO_WRITE 3
|
||||
@@ -219,31 +218,11 @@ Y equ 4
|
||||
|
||||
%MACRO PROC_TYPE 1
|
||||
%IFDEF GL_AMD3D
|
||||
%IFDEF __WIN32__
|
||||
global _trisetup_3DNow_%1@12
|
||||
_trisetup_3DNow_%1@12:
|
||||
%ELSE
|
||||
global _trisetup_3DNow_%1
|
||||
_trisetup_3DNow_%1:
|
||||
%ENDIF
|
||||
proc _trisetup_3DNow_%1, 12
|
||||
%ELIFDEF GL_SSE
|
||||
proc _trisetup_SSE_%1, 12
|
||||
%ELSE
|
||||
%IFDEF GL_SSE
|
||||
%IFDEF __WIN32__
|
||||
global _trisetup_SSE_%1@12
|
||||
_trisetup_SSE_%1@12:
|
||||
%ELSE
|
||||
global _trisetup_SSE_%1
|
||||
_trisetup_SSE_%1:
|
||||
%ENDIF
|
||||
%ELSE
|
||||
%IFDEF __WIN32__
|
||||
global _trisetup_Default_%1@12
|
||||
_trisetup_Default_%1@12:
|
||||
%ELSE
|
||||
global _trisetup_Default_%1
|
||||
_trisetup_Default_%1:
|
||||
%ENDIF
|
||||
%ENDIF
|
||||
proc _trisetup_Default_%1, 12
|
||||
%ENDIF
|
||||
%ENDM
|
||||
|
||||
@@ -278,6 +257,8 @@ PROC_TYPE clip_nocull_invalid
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE clip_cull_invalid
|
||||
|
||||
@@ -294,6 +275,8 @@ PROC_TYPE clip_cull_invalid
|
||||
%undef GLIDE_CULLING
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE clip_cull_valid
|
||||
@@ -311,6 +294,8 @@ PROC_TYPE clip_cull_valid
|
||||
%undef GLIDE_CULLING
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE clip_nocull_valid
|
||||
@@ -329,6 +314,8 @@ PROC_TYPE clip_nocull_valid
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE win_nocull_invalid
|
||||
|
||||
@@ -346,6 +333,8 @@ PROC_TYPE win_nocull_invalid
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE win_cull_invalid
|
||||
|
||||
@@ -363,6 +352,8 @@ PROC_TYPE win_cull_invalid
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE win_cull_valid
|
||||
|
||||
@@ -379,6 +370,8 @@ PROC_TYPE win_cull_valid
|
||||
%undef GLIDE_CULLING
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
ALIGN 32
|
||||
PROC_TYPE win_nocull_valid
|
||||
@@ -397,15 +390,11 @@ PROC_TYPE win_nocull_valid
|
||||
%undef GLIDE_CLIP_COORDS
|
||||
%undef GLIDE_VALIDATE_STATE
|
||||
|
||||
endp
|
||||
|
||||
%IFDEF GL_AMD3D
|
||||
ALIGN 32
|
||||
%IFDEF __WIN32__
|
||||
global _trisetup_clip_coor_thunk@12
|
||||
_trisetup_clip_coor_thunk@12:
|
||||
%ELSE
|
||||
global _trisetup_clip_coor_thunk
|
||||
_trisetup_clip_coor_thunk:
|
||||
%ENDIF
|
||||
proc _trisetup_clip_coor_thunk, 12
|
||||
|
||||
%define procPtr eax
|
||||
%define vPtr ecx
|
||||
@@ -419,8 +408,7 @@ _trisetup_clip_coor_thunk:
|
||||
|
||||
;; If debugging make sure that we're in clip coordinates
|
||||
%IFDEF GLIDE_DEBUG
|
||||
mov eax, [gc + CoordinateSpace]
|
||||
test eax, 1
|
||||
test dword [gc + CoordinateSpace], 1
|
||||
jnz __clipSpace
|
||||
xor eax, eax
|
||||
mov [eax], eax
|
||||
@@ -429,19 +417,14 @@ __clipSpace:
|
||||
|
||||
invoke procPtr, 1, 3, vPtr ; (*gc->curArchProcs.drawTrianglesProc)(grDrawVertexArray, 3, vPtr)
|
||||
|
||||
ret 12 ; pop 3 dwords (vertex addrs) and return
|
||||
ret ; pop 3 dwords (vertex addrs) and return
|
||||
endp
|
||||
|
||||
%ENDIF ; GL_AMD3D
|
||||
|
||||
%IFDEF GL_SSE
|
||||
ALIGN 32
|
||||
%IFDEF __WIN32__
|
||||
global _trisetup_SSE_clip_coor_thunk@12
|
||||
_trisetup_SSE_clip_coor_thunk@12:
|
||||
%ELSE
|
||||
global _trisetup_SSE_clip_coor_thunk
|
||||
_trisetup_SSE_clip_coor_thunk:
|
||||
%ENDIF
|
||||
proc _trisetup_SSE_clip_coor_thunk, 12
|
||||
|
||||
%define procPtr eax
|
||||
%define vPtr ecx
|
||||
@@ -455,8 +438,7 @@ _trisetup_SSE_clip_coor_thunk:
|
||||
|
||||
;; If debugging make sure that we're in clip coordinates
|
||||
%IFDEF GLIDE_DEBUG
|
||||
mov eax, [gc + CoordinateSpace]
|
||||
test eax, 1
|
||||
test dword [gc + CoordinateSpace], 1
|
||||
jnz __clipSpace
|
||||
xor eax, eax
|
||||
mov [eax], eax
|
||||
@@ -465,6 +447,7 @@ __clipSpace:
|
||||
|
||||
invoke procPtr, 1, 3, vPtr ; (*gc->curArchProcs.drawTrianglesProc)(grDrawVertexArray, 3, vPtr)
|
||||
|
||||
ret 12 ; pop 3 dwords (vertex addrs) and return
|
||||
ret ; pop 3 dwords (vertex addrs) and return
|
||||
endp
|
||||
|
||||
%ENDIF ; GL_SSE
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
;; $Header$
|
||||
;; $Revision$
|
||||
;; $Log$
|
||||
;; Revision 1.1.8.3 2003/06/07 09:53:24 dborca
|
||||
;; initial checkin for NASM sources
|
||||
;;
|
||||
;; Revision 1.1.8.1 2003/04/06 18:23:09 koolsmoky
|
||||
;; initial checkin of dos win32 glide
|
||||
;;
|
||||
@@ -120,7 +123,7 @@
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD arguments off stack
|
||||
ret ; return, pop 3 DWORD arguments off stack
|
||||
|
||||
win_coordinates:
|
||||
%endif ; GLIDE_CLIP_COORDS
|
||||
@@ -191,11 +194,7 @@ win_coordinates:
|
||||
cmp ebx, tempVal ; fifo space required >= space available ?
|
||||
jge .__triBegin ; yup, push out triangle data to Voodoo
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
jmp .__triBegin ; merge back with short path
|
||||
|
||||
@@ -213,11 +212,7 @@ win_coordinates:
|
||||
cmp ebx, tempVal ; fifo spce available >= space needed ?
|
||||
jge .__triBegin ; yup, ready to draw triangle
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
%ELSE ; !GLIDE_CULLING
|
||||
|
||||
;; Prologue stuff
|
||||
@@ -252,7 +247,7 @@ win_coordinates:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD arguments off stack
|
||||
ret ; return, pop 3 DWORD arguments off stack
|
||||
|
||||
ALIGN 16
|
||||
win_coordinates:
|
||||
@@ -278,11 +273,7 @@ no_validation:
|
||||
cmp ebx, tempVal ; fifo spce available >= space needed ?
|
||||
jge .__triBegin ; yup, ready to draw triangle
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
jmp .__triBegin ; large distance due to alignment
|
||||
%endif ; GLIDE_CULLING
|
||||
@@ -580,7 +571,7 @@ no_validation:
|
||||
|
||||
femms ; no more AMD3D code, clear FPU/MMX regs
|
||||
|
||||
ret 12 ; return to caller
|
||||
ret ; return to caller
|
||||
|
||||
|
||||
%IF GLIDE_CULLING
|
||||
@@ -601,7 +592,7 @@ no_validation:
|
||||
pop esi
|
||||
pop edi
|
||||
|
||||
ret 12
|
||||
ret
|
||||
%ENDIF ; GLIDE_CULLING
|
||||
%ENDIF ; !GLIDE_CLIP_COORDS
|
||||
|
||||
@@ -672,7 +663,7 @@ no_validation:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD arguments off stack
|
||||
ret ; return, pop 3 DWORD arguments off stack
|
||||
|
||||
win_coordinates:
|
||||
%endif ; GLIDE_CLIP_COORDS
|
||||
@@ -755,11 +746,7 @@ win_coordinates:
|
||||
cmp ebx, tempVal ; fifo space required >= space available ?
|
||||
jge .__triBegin ; yup, push out triangle data to Voodoo
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
jmp .__triBegin ; merge back with short path
|
||||
|
||||
@@ -777,11 +764,7 @@ win_coordinates:
|
||||
cmp ebx, tempVal ; fifo spce available >= space needed ?
|
||||
jge .__triBegin ; yup, ready to draw triangle
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
%ELSE ; !GLIDE_CULLING
|
||||
|
||||
;; Prologue stuff
|
||||
@@ -816,7 +799,7 @@ win_coordinates:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD arguments off stack
|
||||
ret ; return, pop 3 DWORD arguments off stack
|
||||
|
||||
ALIGN 16
|
||||
win_coordinates:
|
||||
@@ -849,11 +832,7 @@ no_validation:
|
||||
cmp ebx, tempVal ; fifo spce available >= space needed ?
|
||||
jge .__triBegin ; yup, ready to draw triangle
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, tempVal, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
jmp .__triBegin ; large distance due to alignment
|
||||
%endif ; GLIDE_CULLING
|
||||
@@ -1149,7 +1128,7 @@ no_validation:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return to caller
|
||||
ret ; return to caller
|
||||
|
||||
|
||||
%IF GLIDE_CULLING
|
||||
@@ -1168,7 +1147,7 @@ no_validation:
|
||||
pop esi
|
||||
pop edi
|
||||
|
||||
ret 12
|
||||
ret
|
||||
%ENDIF ; GLIDE_CULLING
|
||||
%ENDIF ; !GLIDE_CLIP_COORDS
|
||||
|
||||
@@ -1322,12 +1301,8 @@ no_validation:
|
||||
cmp ebx, eax
|
||||
|
||||
jge .__triBegin
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__
|
||||
%ELSE
|
||||
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__
|
||||
%ENDIF
|
||||
|
||||
;; Send triangle parameters
|
||||
|
||||
@@ -1427,7 +1402,7 @@ no_validation:
|
||||
mov [gc + trisProcessed], ecx
|
||||
|
||||
pop esi
|
||||
ret 12
|
||||
ret
|
||||
%ENDIF ; !GLIDE_CLIP_COOR
|
||||
%ENDIF ; !GL_SSE
|
||||
%ENDIF ; !GL_AMD3D
|
||||
|
||||
@@ -21,13 +21,9 @@
|
||||
|
||||
%include "xos.inc"
|
||||
|
||||
extern _GlideRoot
|
||||
extern _grValidateState
|
||||
%IFDEF __WIN32__
|
||||
extern _grCommandTransportMakeRoom@12
|
||||
%ELSE
|
||||
extern _grCommandTransportMakeRoom
|
||||
%ENDIF
|
||||
extrn _GlideRoot
|
||||
extrn _grValidateState
|
||||
extrn _grCommandTransportMakeRoom, 12
|
||||
|
||||
%ifdef GL_AMD3D
|
||||
|
||||
@@ -54,19 +50,10 @@ vertices DD 0
|
||||
segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawTriangles_3DNow@12
|
||||
%ELSE
|
||||
global _grDrawTriangles_3DNow
|
||||
%ENDIF
|
||||
proc _grDrawTriangles_3DNow, 12
|
||||
%define _mode 20
|
||||
%define _count 24
|
||||
%define _pointers 28
|
||||
%IFDEF __WIN32__
|
||||
_grDrawTriangles_3DNow@12:
|
||||
%ELSE
|
||||
_grDrawTriangles_3DNow:
|
||||
%ENDIF
|
||||
|
||||
; 930 : {
|
||||
; 931 : #define FN_NAME "_grDrawTriangles"
|
||||
@@ -198,11 +185,7 @@ _grDrawTriangles_3DNow:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_tri_begin_ND ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_tri_begin_ND:
|
||||
@@ -316,7 +299,7 @@ _grDrawTriangles_3DNow:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
.fifo_aligned_ND:
|
||||
|
||||
@@ -398,7 +381,7 @@ _grDrawTriangles_3DNow:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
align 32
|
||||
|
||||
@@ -427,11 +410,7 @@ _grDrawTriangles_3DNow:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_tri_begin_D ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__ ; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__ ; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_tri_begin_D:
|
||||
@@ -523,7 +502,7 @@ _grDrawTriangles_3DNow:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
.fifo_aligned_D:
|
||||
|
||||
@@ -605,7 +584,7 @@ _grDrawTriangles_3DNow:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -671,11 +650,7 @@ _grDrawTriangles_3DNow:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .clip_tri_begin ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__ ; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__ ; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.clip_tri_begin:
|
||||
@@ -1098,7 +1073,8 @@ _grDrawTriangles_3DNow:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters
|
||||
ret ; return, pop 3 DWORD parameters
|
||||
endp
|
||||
|
||||
_pktype equ 20
|
||||
_type equ 24
|
||||
@@ -1118,13 +1094,8 @@ _type equ 24
|
||||
%define Y 4
|
||||
|
||||
ALIGN 32
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawVertexList_3DNow_Window@20
|
||||
_grDrawVertexList_3DNow_Window@20:
|
||||
%ELSE
|
||||
global _grDrawVertexList_3DNow_Window
|
||||
_grDrawVertexList_3DNow_Window:
|
||||
%ENDIF
|
||||
|
||||
proc _grDrawVertexList_3DNow_Window, 20
|
||||
; 132 : {
|
||||
|
||||
SET_TLSBASE edx ; get thread local storage base pointer
|
||||
@@ -1205,11 +1176,7 @@ _grDrawVertexList_3DNow_Window:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_strip_begin_ND ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_strip_begin_ND:
|
||||
@@ -1338,7 +1305,7 @@ _grDrawVertexList_3DNow_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -1438,7 +1405,7 @@ _grDrawVertexList_3DNow_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -1466,11 +1433,7 @@ _grDrawVertexList_3DNow_Window:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_strip_begin_D ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_strip_begin_D:
|
||||
@@ -1600,7 +1563,7 @@ _grDrawVertexList_3DNow_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -1701,20 +1664,15 @@ _grDrawVertexList_3DNow_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
endp
|
||||
|
||||
|
||||
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawVertexList_3DNow_Clip@20
|
||||
_grDrawVertexList_3DNow_Clip@20:
|
||||
%ELSE
|
||||
global _grDrawVertexList_3DNow_Clip
|
||||
_grDrawVertexList_3DNow_Clip:
|
||||
%ENDIF
|
||||
proc _grDrawVertexList_3DNow_Clip, 20
|
||||
; 132 : {
|
||||
|
||||
SET_TLSBASE edx ; get thread local storage base pointer
|
||||
@@ -1794,11 +1752,7 @@ _grDrawVertexList_3DNow_Clip:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .clip_strip_begin ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.clip_strip_begin:
|
||||
@@ -2184,7 +2138,8 @@ _grDrawVertexList_3DNow_Clip:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
endp
|
||||
|
||||
;;--------------------------------------------------------------------------
|
||||
;; end AMD3D version
|
||||
@@ -2216,19 +2171,10 @@ vertices DD 0
|
||||
segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawTriangles_SSE@12
|
||||
%ELSE
|
||||
global _grDrawTriangles_SSE
|
||||
%ENDIF
|
||||
proc _grDrawTriangles_SSE, 12
|
||||
%define _mode 20
|
||||
%define _count 24
|
||||
%define _pointers 28
|
||||
%IFDEF __WIN32__
|
||||
_grDrawTriangles_SSE@12:
|
||||
%ELSE
|
||||
_grDrawTriangles_SSE:
|
||||
%ENDIF
|
||||
|
||||
; 930 : {
|
||||
; 931 : #define FN_NAME "_grDrawTriangles"
|
||||
@@ -2367,11 +2313,7 @@ _grDrawTriangles_SSE:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_tri_begin_ND ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_tri_begin_ND:
|
||||
@@ -2483,7 +2425,7 @@ _grDrawTriangles_SSE:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
.fifo_aligned_ND:
|
||||
|
||||
@@ -2577,7 +2519,7 @@ _grDrawTriangles_SSE:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
align 32
|
||||
|
||||
@@ -2606,11 +2548,7 @@ _grDrawTriangles_SSE:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_tri_begin_D ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_tri_begin_D:
|
||||
@@ -2700,7 +2638,7 @@ _grDrawTriangles_SSE:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
.fifo_aligned_D:
|
||||
|
||||
@@ -2797,7 +2735,7 @@ _grDrawTriangles_SSE:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters off stack
|
||||
ret ; return, pop 3 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -2863,11 +2801,7 @@ _grDrawTriangles_SSE:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .clip_tri_begin ; yup, start writing triangle data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.clip_tri_begin:
|
||||
@@ -3289,7 +3223,8 @@ _grDrawTriangles_SSE:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 12 ; return, pop 3 DWORD parameters
|
||||
ret ; return, pop 3 DWORD parameters
|
||||
endp
|
||||
|
||||
_pktype equ 20
|
||||
_type equ 24
|
||||
@@ -3310,13 +3245,7 @@ _type equ 24
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawVertexList_SSE_Window@20
|
||||
_grDrawVertexList_SSE_Window@20:
|
||||
%ELSE
|
||||
global _grDrawVertexList_SSE_Window
|
||||
_grDrawVertexList_SSE_Window:
|
||||
%ENDIF
|
||||
proc _grDrawVertexList_SSE_Window, 20
|
||||
; 132 : {
|
||||
|
||||
SET_TLSBASE edx ; get thread local storage base pointer
|
||||
@@ -3404,11 +3333,7 @@ _grDrawVertexList_SSE_Window:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_strip_begin_ND ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_strip_begin_ND:
|
||||
@@ -3535,7 +3460,7 @@ _grDrawVertexList_SSE_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -3647,7 +3572,7 @@ _grDrawVertexList_SSE_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -3682,11 +3607,7 @@ _grDrawVertexList_SSE_Window:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .win_strip_begin_D ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.win_strip_begin_D:
|
||||
@@ -3814,7 +3735,7 @@ _grDrawVertexList_SSE_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
|
||||
ALIGN 32
|
||||
|
||||
@@ -3930,20 +3851,15 @@ _grDrawVertexList_SSE_Window:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restire caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
endp
|
||||
|
||||
|
||||
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _grDrawVertexList_SSE_Clip@20
|
||||
_grDrawVertexList_SSE_Clip@20:
|
||||
%ELSE
|
||||
global _grDrawVertexList_SSE_Clip
|
||||
_grDrawVertexList_SSE_Clip:
|
||||
%ENDIF
|
||||
proc _grDrawVertexList_SSE_Clip, 20
|
||||
; 132 : {
|
||||
|
||||
SET_TLSBASE edx ; get thread local storage base pointer
|
||||
@@ -4023,11 +3939,7 @@ _grDrawVertexList_SSE_Clip:
|
||||
cmp eax, ecx ; fifo space avail >= packet size ?
|
||||
jge .clip_strip_begin ; yup, start writing strip data
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, ecx, 0, __LINE__; note: updates fifoPtr
|
||||
%ENDIF
|
||||
|
||||
align 32
|
||||
.clip_strip_begin:
|
||||
@@ -4412,7 +4324,8 @@ _grDrawVertexList_SSE_Clip:
|
||||
pop esi ; restore caller's register variable
|
||||
pop edi ; restore caller's register variable
|
||||
|
||||
ret 20 ; return, pop 5 DWORD parameters off stack
|
||||
ret ; return, pop 5 DWORD parameters off stack
|
||||
endp
|
||||
|
||||
;;--------------------------------------------------------------------------
|
||||
;; end SSE version
|
||||
@@ -4465,13 +4378,7 @@ _pointers equ 36
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _drawvertexlist@20
|
||||
_drawvertexlist@20:
|
||||
%ELSE
|
||||
global _drawvertexlist
|
||||
_drawvertexlist:
|
||||
%ENDIF
|
||||
proc _drawvertexlist, 20
|
||||
; 132 : {
|
||||
|
||||
SET_TLSBASE eax ; get thread local storage base pointer
|
||||
@@ -4543,11 +4450,7 @@ _drawvertexlist:
|
||||
add eax, 4
|
||||
cmp ecx, eax
|
||||
jge .win_strip_begin
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__
|
||||
%ENDIF
|
||||
|
||||
align 4
|
||||
.win_strip_begin:
|
||||
@@ -4664,7 +4567,8 @@ _drawvertexlist:
|
||||
pop ebx
|
||||
pop edi
|
||||
pop esi
|
||||
ret 20 ; 00000014H
|
||||
ret ; 00000014H
|
||||
endp
|
||||
|
||||
%define gc esi ; points to graphics context
|
||||
%define fifo ecx ; points to next entry in fifo
|
||||
@@ -4672,13 +4576,7 @@ _drawvertexlist:
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _vpdrawvertexlist@20
|
||||
_vpdrawvertexlist@20:
|
||||
%ELSE
|
||||
global _vpdrawvertexlist
|
||||
_vpdrawvertexlist:
|
||||
%ENDIF
|
||||
proc _vpdrawvertexlist, 20
|
||||
|
||||
SET_TLSBASE eax ; tls base pointer
|
||||
push esi
|
||||
@@ -4749,11 +4647,7 @@ _vpdrawvertexlist:
|
||||
add eax, 4
|
||||
cmp ecx, eax
|
||||
jge .clip_strip_begin
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__
|
||||
%ENDIF
|
||||
|
||||
align 4
|
||||
.clip_strip_begin:
|
||||
@@ -5121,7 +5015,8 @@ _vpdrawvertexlist:
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
ret 20 ; 00000014H
|
||||
ret ; 00000014H
|
||||
endp
|
||||
|
||||
%define gc esi ; points to graphics context
|
||||
%define fifo ecx ; points to next entry in fifo
|
||||
@@ -5136,13 +5031,7 @@ _vpdrawvertexlist:
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _vptrisetup_cull@12
|
||||
_vptrisetup_cull@12:
|
||||
%ELSE
|
||||
global _vptrisetup_cull
|
||||
_vptrisetup_cull:
|
||||
%ENDIF
|
||||
proc _vptrisetup_cull, 12
|
||||
_va equ 20
|
||||
_vb equ 24
|
||||
_vc equ 28
|
||||
@@ -5198,12 +5087,8 @@ _vc equ 28
|
||||
|
||||
cmp ecx, eax
|
||||
jge .setup_pkt_hdr
|
||||
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__
|
||||
%ELSE
|
||||
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__
|
||||
%ENDIF
|
||||
|
||||
align 4
|
||||
.setup_pkt_hdr:
|
||||
@@ -5534,7 +5419,8 @@ _vc equ 28
|
||||
|
||||
pop ebx
|
||||
|
||||
ret 12 ; 0000000cH
|
||||
ret ; 0000000cH
|
||||
endp
|
||||
|
||||
%endif ; !GL_SSE
|
||||
%endif ; !GL_MMX
|
||||
|
||||
@@ -1,14 +1,95 @@
|
||||
;
|
||||
; compulsory header for h5/glide3/xdraw* assembly specializations (NASM)
|
||||
;
|
||||
; $Header$
|
||||
; $Log$
|
||||
;
|
||||
|
||||
%undef STDCALL
|
||||
;
|
||||
; compulsory header for h5/glide3/xdraw* assembly specializations (NASM)
|
||||
;
|
||||
; $Header$
|
||||
; $Log$
|
||||
; Revision 1.1.2.1 2003/06/07 09:53:25 dborca
|
||||
; initial checkin for NASM sources
|
||||
;
|
||||
|
||||
%ifdef __WIN32__
|
||||
;---------------------------------------
|
||||
; platform defines
|
||||
;---------------------------------------
|
||||
%define XOS_DJGPP 1
|
||||
%define XOS_LINUX 2
|
||||
%define XOS_WIN32 4
|
||||
|
||||
%define STDCALL 0
|
||||
|
||||
;---------------------------------------
|
||||
; pick up the right OS
|
||||
;---------------------------------------
|
||||
%ifdef __DJGPP__
|
||||
%define XOS XOS_DJGPP
|
||||
%elifdef __linux__
|
||||
%define XOS XOS_LINUX
|
||||
%elifdef __WIN32__
|
||||
%define XOS XOS_WIN32
|
||||
%define STDCALL 1
|
||||
%else
|
||||
%error Unknown OS
|
||||
%endif
|
||||
|
||||
;---------------------------------------
|
||||
; general purpose macros
|
||||
;---------------------------------------
|
||||
%macro extrn 1-2 0
|
||||
%if (XOS == XOS_WIN32) && STDCALL && (%2 > 0)
|
||||
%define %1 %1@%2
|
||||
%endif
|
||||
extern %1
|
||||
%endmacro
|
||||
|
||||
%macro globl 1-2 0
|
||||
%if (XOS == XOS_WIN32) && STDCALL && (%2 > 0)
|
||||
%define %1 %1@%2
|
||||
%endif
|
||||
global %1
|
||||
%endmacro
|
||||
|
||||
%macro proc 1-2 0
|
||||
%push proc
|
||||
%if STDCALL && (%2 > 0)
|
||||
%define %$ret RET %2
|
||||
%else
|
||||
%define %$ret RET
|
||||
%endif
|
||||
globl %1, %2
|
||||
%1:
|
||||
%endmacro
|
||||
|
||||
%macro endp 0
|
||||
%ifnctx proc
|
||||
%error Mismatched `endp'/`proc'
|
||||
%else
|
||||
%pop
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro ret 0
|
||||
%ifnctx proc
|
||||
RET
|
||||
%else
|
||||
%$ret
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro invoke 1-*
|
||||
%rep %0 - 1
|
||||
%rotate -1
|
||||
push %1
|
||||
%endrep
|
||||
%rotate -1
|
||||
call %1
|
||||
%if (STDCALL == 0) && (%0 > 1)
|
||||
add esp, 4 * (%0 - 1)
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
;---------------------------------------
|
||||
; Windows
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_WIN32
|
||||
|
||||
%define TEXT .text align=32
|
||||
%define DATA .data align=32
|
||||
@@ -28,13 +109,16 @@
|
||||
|
||||
%endif
|
||||
|
||||
%ifdef __DJGPP__
|
||||
;---------------------------------------
|
||||
; DJGPP
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_DJGPP
|
||||
|
||||
%define TEXT .text
|
||||
%define DATA .data
|
||||
%define CONST .rodata
|
||||
|
||||
extern threadValueDJGPP
|
||||
extrn threadValueDJGPP
|
||||
|
||||
%macro SET_TLSBASE 1
|
||||
%endmacro
|
||||
@@ -45,15 +129,19 @@ extern threadValueDJGPP
|
||||
%macro GET_GC 2
|
||||
mov gc, [threadValueDJGPP]
|
||||
%endmacro
|
||||
|
||||
%endif
|
||||
|
||||
%ifdef __linux__
|
||||
;---------------------------------------
|
||||
; Linux
|
||||
;---------------------------------------
|
||||
%if XOS == XOS_LINUX
|
||||
|
||||
%define TEXT .text align=32
|
||||
%define DATA .data align=32
|
||||
%define CONST .rodata align=32
|
||||
|
||||
extern threadValueLinux
|
||||
extrn threadValueLinux
|
||||
|
||||
%macro SET_TLSBASE 1
|
||||
%endmacro
|
||||
@@ -64,26 +152,5 @@ extern threadValueLinux
|
||||
%macro GET_GC 2
|
||||
mov gc, [threadValueLinux]
|
||||
%endmacro
|
||||
%endif
|
||||
|
||||
%macro ret 0-1
|
||||
%ifdef STDCALL
|
||||
ret %1
|
||||
%else
|
||||
ret
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro invoke 1-*
|
||||
%rep %0 - 1
|
||||
%rotate -1
|
||||
push %1
|
||||
%endrep
|
||||
%rotate -1
|
||||
call %1
|
||||
%ifndef STDCALL
|
||||
%if %0 > 1
|
||||
add esp, 4 * (%0 - 1)
|
||||
%endif
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
;; $Header$
|
||||
;; $Revision$
|
||||
;; $Log$
|
||||
;; Revision 1.1.8.3 2003/06/07 09:53:25 dborca
|
||||
;; initial checkin for NASM sources
|
||||
;;
|
||||
;; Revision 1.1.8.1 2003/04/06 18:23:10 koolsmoky
|
||||
;; initial checkin of dos win32 glide
|
||||
;;
|
||||
@@ -70,11 +73,7 @@
|
||||
%include "xos.inc"
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
extern _grCommandTransportMakeRoom@12
|
||||
%ELSE
|
||||
extern _grCommandTransportMakeRoom
|
||||
%ENDIF
|
||||
extrn _grCommandTransportMakeRoom, 12
|
||||
%endif
|
||||
|
||||
;;; Definitions of cvg regs and glide root structures.
|
||||
@@ -115,22 +114,10 @@ segment TEXT
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF GL_AMD3D
|
||||
%IFDEF __WIN32__
|
||||
global _grTexDownload_3DNow_MMX@24
|
||||
_grTexDownload_3DNow_MMX@24:
|
||||
%ELSE
|
||||
global _grTexDownload_3DNow_MMX
|
||||
_grTexDownload_3DNow_MMX:
|
||||
%ENDIF
|
||||
proc _grTexDownload_3DNow_MMX, 24
|
||||
%ENDIF
|
||||
%IFDEF GL_MMX
|
||||
%IFDEF __WIN32__
|
||||
global _grTexDownload_MMX@24
|
||||
_grTexDownload_MMX@24:
|
||||
%ELSE
|
||||
global _grTexDownload_MMX
|
||||
_grTexDownload_MMX:
|
||||
%ENDIF
|
||||
proc _grTexDownload_MMX, 24
|
||||
%ENDIF
|
||||
|
||||
push ebx ; save caller's register variable
|
||||
@@ -202,11 +189,7 @@ _grTexDownload_MMX:
|
||||
jge .mmxAlignFifo ; yes, write NULL packet to align fifo
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, 4, 0, __LINE__; make fifo room
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, 4, 0, __LINE__; make fifo room
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -304,11 +287,7 @@ _grTexDownload_MMX:
|
||||
jge .loopT ; yup, write next scan line
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr was modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -331,7 +310,8 @@ _grTexDownload_MMX:
|
||||
pop esi ; restore caller's register variable
|
||||
pop ebx ; restore caller's register variable
|
||||
|
||||
ret 24 ; pop 6 DWORD parameters and return
|
||||
ret ; pop 6 DWORD parameters and return
|
||||
endp
|
||||
|
||||
%ELSE ; !GL_SSE2
|
||||
|
||||
@@ -345,13 +325,7 @@ segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _grTexDownload_SSE2_64@24
|
||||
_grTexDownload_SSE2_64@24:
|
||||
%ELSE
|
||||
global _grTexDownload_SSE2_64
|
||||
_grTexDownload_SSE2_64:
|
||||
%ENDIF
|
||||
proc _grTexDownload_SSE2_64, 24
|
||||
|
||||
push ebx ; save caller's register variable
|
||||
mov curT, [esp + _maxT$ - 12] ; curT = maxT
|
||||
@@ -424,11 +398,7 @@ _grTexDownload_SSE2_64:
|
||||
jge .xmmAlignFifo ; yes, write NULL packet to align fifo
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, 4, 0, __LINE__; make fifo room
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, 4, 0, __LINE__; make fifo room
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -526,11 +496,7 @@ _grTexDownload_SSE2_64:
|
||||
jge .loopT ; yup, write next scan line
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr was modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -546,7 +512,8 @@ _grTexDownload_SSE2_64:
|
||||
pop esi ; restore caller's register variable
|
||||
pop ebx ; restore caller's register variable
|
||||
|
||||
ret 24 ; pop 6 DWORD parameters and return
|
||||
ret ; pop 6 DWORD parameters and return
|
||||
endp
|
||||
|
||||
|
||||
|
||||
@@ -554,13 +521,7 @@ segment TEXT
|
||||
|
||||
ALIGN 32
|
||||
|
||||
%IFDEF __WIN32__
|
||||
global _grTexDownload_SSE2_128@24
|
||||
_grTexDownload_SSE2_128@24:
|
||||
%ELSE
|
||||
global _grTexDownload_SSE2_128
|
||||
_grTexDownload_SSE2_128:
|
||||
%ENDIF
|
||||
proc _grTexDownload_SSE2_128, 24
|
||||
|
||||
push ebx ; save caller's register variable
|
||||
mov curT, [esp + _maxT$ - 12] ; curT = maxT
|
||||
@@ -633,11 +594,7 @@ _grTexDownload_SSE2_128:
|
||||
jge .xmmAlignFifo ; yes, write NULL packet to align fifo
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, 4, 0, __LINE__; make fifo room
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, 4, 0, __LINE__; make fifo room
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -735,11 +692,7 @@ _grTexDownload_SSE2_128:
|
||||
jge .loopT ; yup, write next scan line
|
||||
|
||||
%ifdef USE_PACKET_FIFO
|
||||
%IFDEF __WIN32__
|
||||
invoke _grCommandTransportMakeRoom@12, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ELSE
|
||||
invoke _grCommandTransportMakeRoom, eax, 0, __LINE__; make fifo room (if fifoPtr QWORD aligned before
|
||||
%ENDIF
|
||||
%endif
|
||||
|
||||
mov fifo, [gc + fifoPtr] ; fifoPtr was modified by _grCommandTransportMakeRoom, reload
|
||||
@@ -755,7 +708,8 @@ _grTexDownload_SSE2_128:
|
||||
pop esi ; restore caller's register variable
|
||||
pop ebx ; restore caller's register variable
|
||||
|
||||
ret 24 ; pop 6 DWORD parameters and return
|
||||
ret ; pop 6 DWORD parameters and return
|
||||
endp
|
||||
|
||||
|
||||
%ENDIF ; GL_SSE2
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
# DOS/DJGPP tests makefile v1.0 for Glide3
|
||||
# DOS/DJGPP tests makefile for Glide3
|
||||
#
|
||||
# Copyright (c) 2002 - Borca Daniel
|
||||
# Email : dborca@yahoo.com
|
||||
# Web : http://www.geocities.com/dborca
|
||||
#
|
||||
# $Header$
|
||||
# $Log$
|
||||
|
||||
|
||||
#
|
||||
@@ -28,7 +31,7 @@ TOP = ../../..
|
||||
CPU ?= k6
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -O2 -ffast-math -mcpu=k6
|
||||
CFLAGS = -Wall -O2 -ffast-math -mcpu=$(CPU)
|
||||
CFLAGS += -I$(TOP)/$(FX_GLIDE_HW)/glide3/src -I$(TOP)/$(FX_GLIDE_HW)/incsrc
|
||||
CFLAGS += -I$(TOP)/swlibs/fxmisc
|
||||
CFLAGS += -D__DOS__ -DH3
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
# Web : http://www.geocities.com/dborca
|
||||
#
|
||||
# $Header$
|
||||
# $Log$
|
||||
# $Log$
|
||||
# Revision 1.1.2.1 2003/06/07 09:53:25 dborca
|
||||
# initial checkin for NASM sources
|
||||
#
|
||||
|
||||
|
||||
@@ -30,7 +32,7 @@ TOP = ../../..
|
||||
CPU ?= k6
|
||||
|
||||
CC = mingw32-gcc
|
||||
CFLAGS = -Wall -O2 -ffast-math -mcpu=k6
|
||||
CFLAGS = -Wall -O2 -ffast-math -mcpu=$(CPU)
|
||||
CFLAGS += -I$(TOP)/$(FX_GLIDE_HW)/glide3/src -I$(TOP)/$(FX_GLIDE_HW)/incsrc
|
||||
CFLAGS += -I$(TOP)/swlibs/fxmisc
|
||||
CFLAGS += -D__WIN32__ -DH3
|
||||
|
||||
Reference in New Issue
Block a user