|
|
1.1 ! root 1: /* ! 2: Copyright (C) 1996-1997 Id Software, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or ! 5: modify it under the terms of the GNU General Public License ! 6: as published by the Free Software Foundation; either version 2 ! 7: of the License, or (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, 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) ! 42: C(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: ! 53: Llp: ! 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.