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) 21C(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 32Llp: 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 69