Moved inline assembly to a separate file for debugging.

Implemented GetTickCount/timeGetTime.

Added basic SDL/OpenGL support.

Draws something with no optimizations, but draws nothing with -O2. (What is
drawn looks like garbage.)
This commit is contained in:
Steven Fuller 2001-08-08 06:14:20 +00:00 committed by Patryk Obara
parent 665f33b0f9
commit 9e5b7f430d
10 changed files with 947 additions and 65 deletions

View file

@ -1111,7 +1111,7 @@ a = itmp;}
#else
#if 0
#if 1 /* GCC! */
void ADD_LL(LONGLONGCH *a, LONGLONGCH *b, LONGLONGCH *c);
void ADD_LL_PP(LONGLONGCH *c, LONGLONGCH *a);
void SUB_LL(LONGLONGCH *a, LONGLONGCH *b, LONGLONGCH *c);
@ -1134,10 +1134,12 @@ void RotateAndCopyVector_ASM(VECTORCH *v1, VECTORCH *v2, MATRIXCH *m);
int FloatToInt(float);
#define f2i(a, b) { a = FloatToInt(b); }
#endif
#else /* inline stuff */
/* ADD */
static __inline__ void ADD_LL(LONGLONGCH *a, LONGLONGCH *b, LONGLONGCH *c)
{
/*
@ -1319,21 +1321,21 @@ static __inline__ int CMP_LL(LONGLONGCH *a, LONGLONGCH *b)
}
*/
/* TODO */
__asm__("xorl %0, %0 \n\t"
"movl 0(%%ebx), %%eax \n\t"
__asm__("movl 0(%%ebx), %%eax \n\t"
"movl 4(%%ebx), %%edx \n\t"
"subl 0(%%ecx), %%eax \n\t"
"sbbl 4(%%ecx), %%edx \n\t"
"xorl %0, %0 \n\t" /* hopefully it doesn't pick %eax or %edx */
"andl %%edx, %%edx \n\t"
"jne llnz \n\t"
"jne 0 \n\t" /* llnz */
"andl %%eax, %%eax \n\t"
"je llgs \n"
"llnz: \n\t"
"je 1 \n" /* llgs */
"0: \n\t" /* llnz */
"movl $1, %0 \n\t"
"andl %%edx, %%edx \n\t"
"jge llgs \n\t"
"jge 1 \n\t" /* llgs */
"negl %0 \n"
"llgs: \n\t"
"1: \n\t" /* llgs */
: "=r" (retval)
: "b" (a), "c" (b)
: "%eax", "%edx", "memory", "cc"
@ -1411,13 +1413,13 @@ static __inline__ void ASR_LL(LONGLONGCH *a, int shift)
}
*/
__asm__("andl %%eax, %%eax \n\t"
"jle asrdn \n"
"asrlp: \n\t"
"jle 0 \n" /* asrdn */
"1: \n\t" /* asrlp */
"sarl $1, 4(%%esi) \n\t"
"rcrl $1, 0(%%esi) \n\t"
"decl %%eax \n\t"
"jne asrlp \n"
"asrdn: \n\t"
"jne 1 \n"
"0: \n\t"
:
: "S" (a), "a" (shift)
: "memory", "cc"
@ -1589,6 +1591,7 @@ __asm__("movl 0(%%esi), %%eax \n\t"
static __inline__ int WideMulNarrowDiv(int a, int b, int c)
{
#if 0 /* TODO: broken? */
int retval;
/*
_asm
@ -1607,6 +1610,8 @@ __asm__("imull %2 \n\t"
: "cc"
);
return retval;
#endif
return (a * b) / c;
}
/*
@ -1781,8 +1786,10 @@ static void RotateAndCopyVector_ASM(VECTORCH *v1, VECTORCH *v2, MATRIXCH *m)
extern int sqrt_temp1;
extern int sqrt_temp2;
#include <math.h>
static __inline__ int SqRoot32(int A)
{
#if 0
sqrt_temp1 = A;
/*
_asm
@ -1806,6 +1813,13 @@ __asm__("finit \n\t"
);
return sqrt_temp2;
#endif
{ /* TODO: clean this please */
double x = A;
double retvald = sqrt(x);
int retval = retvald;
return retval;
}
}
#endif
@ -1823,6 +1837,7 @@ extern int fti_itmp;
static __inline__ int FloatToInt(float fptmp)
{
#if 0
fti_fptmp = fptmp;
/*
_asm
@ -1839,6 +1854,9 @@ __asm__("fld fti_fptmp \n\t"
);
return fti_itmp;
#endif
return fptmp;
}
/*
@ -1851,6 +1869,8 @@ __asm__("fld fti_fptmp \n\t"
a = FloatToInt(b); \
}
#endif
#endif
int WideMul2NarrowDiv(int a, int b, int c, int d, int e);