1/* 2Copyright (C) 1996-1997 Id Software, Inc. 3 4This program is free software; you can redistribute it and/or 5modify it under the terms of the GNU General Public License 6as published by the Free Software Foundation; either version 2 7of the License, or (at your option) any later version. 8 9This program is distributed in the hope that it will be useful, 10but WITHOUT ANY WARRANTY; without even the implied warranty of 11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13See the GNU General Public License for more details. 14 15You should have received a copy of the GNU General Public License 16along with this program; if not, write to the Free Software 17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19*/ 20// 21// d_scana.s 22// x86 assembly-language turbulent texture mapping code 23// 24 25#include "asm_i386.h" 26#include "quakeasm.h" 27#include "asm_draw.h" 28#include "d_ifacea.h" 29 30#if id386 31 32 .data 33 34 .text 35 36//---------------------------------------------------------------------- 37// turbulent texture mapping code 38//---------------------------------------------------------------------- 39 40 .align 4 41.globl C(D_DrawTurbulent8Span) 42C(D_DrawTurbulent8Span): 43 pushl %ebp // preserve caller's stack frame pointer 44 pushl %esi // preserve register variables 45 pushl %edi 46 pushl %ebx 47 48 movl C(r_turb_s),%esi 49 movl C(r_turb_t),%ecx 50 movl C(r_turb_pdest),%edi 51 movl C(r_turb_spancount),%ebx 52 53Llp: 54 movl %ecx,%eax 55 movl %esi,%edx 56 sarl $16,%eax 57 movl C(r_turb_turb),%ebp 58 sarl $16,%edx 59 andl $(CYCLE-1),%eax 60 andl $(CYCLE-1),%edx 61 movl (%ebp,%eax,4),%eax 62 movl (%ebp,%edx,4),%edx 63 addl %esi,%eax 64 sarl $16,%eax 65 addl %ecx,%edx 66 sarl $16,%edx 67 andl $(TURB_TEX_SIZE-1),%eax 68 andl $(TURB_TEX_SIZE-1),%edx 69 shll $6,%edx 70 movl C(r_turb_pbase),%ebp 71 addl %eax,%edx 72 incl %edi 73 addl C(r_turb_sstep),%esi 74 addl C(r_turb_tstep),%ecx 75 movb (%ebp,%edx,1),%dl 76 decl %ebx 77 movb %dl,-1(%edi) 78 jnz Llp 79 80 movl %edi,C(r_turb_pdest) 81 82 popl %ebx // restore register variables 83 popl %edi 84 popl %esi 85 popl %ebp // restore caller's stack frame pointer 86 ret 87 88#endif // id386 89 90