Quake-2

Quake 2 GPL Source Release
Log | Files | Refs

r_scana.s (1290B)


      1 //
      2 // d_scana.s
      3 // x86 assembly-language turbulent texture mapping code
      4 //
      5 
      6 #include "qasm.h"
      7 #include "d_ifacea.h"
      8 
      9 #if id386
     10 
     11 	.data
     12 
     13 	.text
     14 
     15 //----------------------------------------------------------------------
     16 // turbulent texture mapping code
     17 //----------------------------------------------------------------------
     18 
     19 	.align 4
     20 .globl C(D_DrawTurbulent8Span)
     21 C(D_DrawTurbulent8Span):
     22 	pushl	%ebp				// preserve caller's stack frame pointer
     23 	pushl	%esi				// preserve register variables
     24 	pushl	%edi
     25 	pushl	%ebx
     26 
     27 	movl	C(r_turb_s),%esi
     28 	movl	C(r_turb_t),%ecx
     29 	movl	C(r_turb_pdest),%edi
     30 	movl	C(r_turb_spancount),%ebx
     31 
     32 Llp:
     33 	movl	%ecx,%eax
     34 	movl	%esi,%edx
     35 	sarl	$16,%eax
     36 	movl	C(r_turb_turb),%ebp
     37 	sarl	$16,%edx
     38 	andl	$(CYCLE-1),%eax
     39 	andl	$(CYCLE-1),%edx
     40 	movl	(%ebp,%eax,4),%eax
     41 	movl	(%ebp,%edx,4),%edx
     42 	addl	%esi,%eax
     43 	sarl	$16,%eax
     44 	addl	%ecx,%edx
     45 	sarl	$16,%edx
     46 	andl	$(TURB_TEX_SIZE-1),%eax
     47 	andl	$(TURB_TEX_SIZE-1),%edx
     48 	shll	$6,%edx
     49 	movl	C(r_turb_pbase),%ebp
     50 	addl	%eax,%edx
     51 	incl	%edi
     52 	addl	C(r_turb_sstep),%esi
     53 	addl	C(r_turb_tstep),%ecx
     54 	movb	(%ebp,%edx,1),%dl
     55 	decl	%ebx
     56 	movb	%dl,-1(%edi)
     57 	jnz		Llp
     58 
     59 	movl	%edi,C(r_turb_pdest)
     60 
     61 	popl	%ebx				// restore register variables
     62 	popl	%edi
     63 	popl	%esi
     64 	popl	%ebp				// restore caller's stack frame pointer
     65 	ret
     66 
     67 #endif	// id386
     68