|
|
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: // surf8.s ! 22: // x86 assembly-language 8 bpp surface block drawing code. ! 23: // ! 24: ! 25: #include "asm_i386.h" ! 26: #include "quakeasm.h" ! 27: #include "asm_draw.h" ! 28: ! 29: #if id386 ! 30: ! 31: .data ! 32: ! 33: sb_v: .long 0 ! 34: ! 35: .text ! 36: ! 37: .align 4 ! 38: .globl C(R_Surf8Start) ! 39: C(R_Surf8Start): ! 40: ! 41: //---------------------------------------------------------------------- ! 42: // Surface block drawer for mip level 0 ! 43: //---------------------------------------------------------------------- ! 44: ! 45: .align 4 ! 46: .globl C(R_DrawSurfaceBlock8_mip0) ! 47: C(R_DrawSurfaceBlock8_mip0): ! 48: pushl %ebp // preserve caller's stack frame ! 49: pushl %edi ! 50: pushl %esi // preserve register variables ! 51: pushl %ebx ! 52: ! 53: // for (v=0 ; v<numvblocks ; v++) ! 54: // { ! 55: movl C(r_lightptr),%ebx ! 56: movl C(r_numvblocks),%eax ! 57: ! 58: movl %eax,sb_v ! 59: movl C(prowdestbase),%edi ! 60: ! 61: movl C(pbasesource),%esi ! 62: ! 63: Lv_loop_mip0: ! 64: ! 65: // lightleft = lightptr[0]; ! 66: // lightright = lightptr[1]; ! 67: // lightdelta = (lightleft - lightright) & 0xFFFFF; ! 68: movl (%ebx),%eax // lightleft ! 69: movl 4(%ebx),%edx // lightright ! 70: ! 71: movl %eax,%ebp ! 72: movl C(r_lightwidth),%ecx ! 73: ! 74: movl %edx,C(lightright) ! 75: subl %edx,%ebp ! 76: ! 77: andl $0xFFFFF,%ebp ! 78: leal (%ebx,%ecx,4),%ebx ! 79: ! 80: // lightptr += lightwidth; ! 81: movl %ebx,C(r_lightptr) ! 82: ! 83: // lightleftstep = (lightptr[0] - lightleft) >> blockdivshift; ! 84: // lightrightstep = (lightptr[1] - lightright) >> blockdivshift; ! 85: // lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | ! 86: // 0xF0000000; ! 87: movl 4(%ebx),%ecx // lightptr[1] ! 88: movl (%ebx),%ebx // lightptr[0] ! 89: ! 90: subl %eax,%ebx ! 91: subl %edx,%ecx ! 92: ! 93: sarl $4,%ecx ! 94: orl $0xF0000000,%ebp ! 95: ! 96: sarl $4,%ebx ! 97: movl %ecx,C(lightrightstep) ! 98: ! 99: subl %ecx,%ebx ! 100: andl $0xFFFFF,%ebx ! 101: ! 102: orl $0xF0000000,%ebx ! 103: subl %ecx,%ecx // high word must be 0 in loop for addressing ! 104: ! 105: movl %ebx,C(lightdeltastep) ! 106: subl %ebx,%ebx // high word must be 0 in loop for addressing ! 107: ! 108: Lblockloop8_mip0: ! 109: movl %ebp,C(lightdelta) ! 110: movb 14(%esi),%cl ! 111: ! 112: sarl $4,%ebp ! 113: movb %dh,%bh ! 114: ! 115: movb 15(%esi),%bl ! 116: addl %ebp,%edx ! 117: ! 118: movb %dh,%ch ! 119: addl %ebp,%edx ! 120: ! 121: movb 0x12345678(%ebx),%ah ! 122: LBPatch0: ! 123: movb 13(%esi),%bl ! 124: ! 125: movb 0x12345678(%ecx),%al ! 126: LBPatch1: ! 127: movb 12(%esi),%cl ! 128: ! 129: movb %dh,%bh ! 130: addl %ebp,%edx ! 131: ! 132: rorl $16,%eax ! 133: movb %dh,%ch ! 134: ! 135: addl %ebp,%edx ! 136: movb 0x12345678(%ebx),%ah ! 137: LBPatch2: ! 138: ! 139: movb 11(%esi),%bl ! 140: movb 0x12345678(%ecx),%al ! 141: LBPatch3: ! 142: ! 143: movb 10(%esi),%cl ! 144: movl %eax,12(%edi) ! 145: ! 146: movb %dh,%bh ! 147: addl %ebp,%edx ! 148: ! 149: movb %dh,%ch ! 150: addl %ebp,%edx ! 151: ! 152: movb 0x12345678(%ebx),%ah ! 153: LBPatch4: ! 154: movb 9(%esi),%bl ! 155: ! 156: movb 0x12345678(%ecx),%al ! 157: LBPatch5: ! 158: movb 8(%esi),%cl ! 159: ! 160: movb %dh,%bh ! 161: addl %ebp,%edx ! 162: ! 163: rorl $16,%eax ! 164: movb %dh,%ch ! 165: ! 166: addl %ebp,%edx ! 167: movb 0x12345678(%ebx),%ah ! 168: LBPatch6: ! 169: ! 170: movb 7(%esi),%bl ! 171: movb 0x12345678(%ecx),%al ! 172: LBPatch7: ! 173: ! 174: movb 6(%esi),%cl ! 175: movl %eax,8(%edi) ! 176: ! 177: movb %dh,%bh ! 178: addl %ebp,%edx ! 179: ! 180: movb %dh,%ch ! 181: addl %ebp,%edx ! 182: ! 183: movb 0x12345678(%ebx),%ah ! 184: LBPatch8: ! 185: movb 5(%esi),%bl ! 186: ! 187: movb 0x12345678(%ecx),%al ! 188: LBPatch9: ! 189: movb 4(%esi),%cl ! 190: ! 191: movb %dh,%bh ! 192: addl %ebp,%edx ! 193: ! 194: rorl $16,%eax ! 195: movb %dh,%ch ! 196: ! 197: addl %ebp,%edx ! 198: movb 0x12345678(%ebx),%ah ! 199: LBPatch10: ! 200: ! 201: movb 3(%esi),%bl ! 202: movb 0x12345678(%ecx),%al ! 203: LBPatch11: ! 204: ! 205: movb 2(%esi),%cl ! 206: movl %eax,4(%edi) ! 207: ! 208: movb %dh,%bh ! 209: addl %ebp,%edx ! 210: ! 211: movb %dh,%ch ! 212: addl %ebp,%edx ! 213: ! 214: movb 0x12345678(%ebx),%ah ! 215: LBPatch12: ! 216: movb 1(%esi),%bl ! 217: ! 218: movb 0x12345678(%ecx),%al ! 219: LBPatch13: ! 220: movb (%esi),%cl ! 221: ! 222: movb %dh,%bh ! 223: addl %ebp,%edx ! 224: ! 225: rorl $16,%eax ! 226: movb %dh,%ch ! 227: ! 228: movb 0x12345678(%ebx),%ah ! 229: LBPatch14: ! 230: movl C(lightright),%edx ! 231: ! 232: movb 0x12345678(%ecx),%al ! 233: LBPatch15: ! 234: movl C(lightdelta),%ebp ! 235: ! 236: movl %eax,(%edi) ! 237: ! 238: addl C(sourcetstep),%esi ! 239: addl C(surfrowbytes),%edi ! 240: ! 241: addl C(lightrightstep),%edx ! 242: addl C(lightdeltastep),%ebp ! 243: ! 244: movl %edx,C(lightright) ! 245: jc Lblockloop8_mip0 ! 246: ! 247: // if (pbasesource >= r_sourcemax) ! 248: // pbasesource -= stepback; ! 249: ! 250: cmpl C(r_sourcemax),%esi ! 251: jb LSkip_mip0 ! 252: subl C(r_stepback),%esi ! 253: LSkip_mip0: ! 254: ! 255: movl C(r_lightptr),%ebx ! 256: decl sb_v ! 257: ! 258: jnz Lv_loop_mip0 ! 259: ! 260: popl %ebx // restore register variables ! 261: popl %esi ! 262: popl %edi ! 263: popl %ebp // restore the caller's stack frame ! 264: ret ! 265: ! 266: ! 267: //---------------------------------------------------------------------- ! 268: // Surface block drawer for mip level 1 ! 269: //---------------------------------------------------------------------- ! 270: ! 271: .align 4 ! 272: .globl C(R_DrawSurfaceBlock8_mip1) ! 273: C(R_DrawSurfaceBlock8_mip1): ! 274: pushl %ebp // preserve caller's stack frame ! 275: pushl %edi ! 276: pushl %esi // preserve register variables ! 277: pushl %ebx ! 278: ! 279: // for (v=0 ; v<numvblocks ; v++) ! 280: // { ! 281: movl C(r_lightptr),%ebx ! 282: movl C(r_numvblocks),%eax ! 283: ! 284: movl %eax,sb_v ! 285: movl C(prowdestbase),%edi ! 286: ! 287: movl C(pbasesource),%esi ! 288: ! 289: Lv_loop_mip1: ! 290: ! 291: // lightleft = lightptr[0]; ! 292: // lightright = lightptr[1]; ! 293: // lightdelta = (lightleft - lightright) & 0xFFFFF; ! 294: movl (%ebx),%eax // lightleft ! 295: movl 4(%ebx),%edx // lightright ! 296: ! 297: movl %eax,%ebp ! 298: movl C(r_lightwidth),%ecx ! 299: ! 300: movl %edx,C(lightright) ! 301: subl %edx,%ebp ! 302: ! 303: andl $0xFFFFF,%ebp ! 304: leal (%ebx,%ecx,4),%ebx ! 305: ! 306: // lightptr += lightwidth; ! 307: movl %ebx,C(r_lightptr) ! 308: ! 309: // lightleftstep = (lightptr[0] - lightleft) >> blockdivshift; ! 310: // lightrightstep = (lightptr[1] - lightright) >> blockdivshift; ! 311: // lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | ! 312: // 0xF0000000; ! 313: movl 4(%ebx),%ecx // lightptr[1] ! 314: movl (%ebx),%ebx // lightptr[0] ! 315: ! 316: subl %eax,%ebx ! 317: subl %edx,%ecx ! 318: ! 319: sarl $3,%ecx ! 320: orl $0x70000000,%ebp ! 321: ! 322: sarl $3,%ebx ! 323: movl %ecx,C(lightrightstep) ! 324: ! 325: subl %ecx,%ebx ! 326: andl $0xFFFFF,%ebx ! 327: ! 328: orl $0xF0000000,%ebx ! 329: subl %ecx,%ecx // high word must be 0 in loop for addressing ! 330: ! 331: movl %ebx,C(lightdeltastep) ! 332: subl %ebx,%ebx // high word must be 0 in loop for addressing ! 333: ! 334: Lblockloop8_mip1: ! 335: movl %ebp,C(lightdelta) ! 336: movb 6(%esi),%cl ! 337: ! 338: sarl $3,%ebp ! 339: movb %dh,%bh ! 340: ! 341: movb 7(%esi),%bl ! 342: addl %ebp,%edx ! 343: ! 344: movb %dh,%ch ! 345: addl %ebp,%edx ! 346: ! 347: movb 0x12345678(%ebx),%ah ! 348: LBPatch22: ! 349: movb 5(%esi),%bl ! 350: ! 351: movb 0x12345678(%ecx),%al ! 352: LBPatch23: ! 353: movb 4(%esi),%cl ! 354: ! 355: movb %dh,%bh ! 356: addl %ebp,%edx ! 357: ! 358: rorl $16,%eax ! 359: movb %dh,%ch ! 360: ! 361: addl %ebp,%edx ! 362: movb 0x12345678(%ebx),%ah ! 363: LBPatch24: ! 364: ! 365: movb 3(%esi),%bl ! 366: movb 0x12345678(%ecx),%al ! 367: LBPatch25: ! 368: ! 369: movb 2(%esi),%cl ! 370: movl %eax,4(%edi) ! 371: ! 372: movb %dh,%bh ! 373: addl %ebp,%edx ! 374: ! 375: movb %dh,%ch ! 376: addl %ebp,%edx ! 377: ! 378: movb 0x12345678(%ebx),%ah ! 379: LBPatch26: ! 380: movb 1(%esi),%bl ! 381: ! 382: movb 0x12345678(%ecx),%al ! 383: LBPatch27: ! 384: movb (%esi),%cl ! 385: ! 386: movb %dh,%bh ! 387: addl %ebp,%edx ! 388: ! 389: rorl $16,%eax ! 390: movb %dh,%ch ! 391: ! 392: movb 0x12345678(%ebx),%ah ! 393: LBPatch28: ! 394: movl C(lightright),%edx ! 395: ! 396: movb 0x12345678(%ecx),%al ! 397: LBPatch29: ! 398: movl C(lightdelta),%ebp ! 399: ! 400: movl %eax,(%edi) ! 401: movl C(sourcetstep),%eax ! 402: ! 403: addl %eax,%esi ! 404: movl C(surfrowbytes),%eax ! 405: ! 406: addl %eax,%edi ! 407: movl C(lightrightstep),%eax ! 408: ! 409: addl %eax,%edx ! 410: movl C(lightdeltastep),%eax ! 411: ! 412: addl %eax,%ebp ! 413: movl %edx,C(lightright) ! 414: ! 415: jc Lblockloop8_mip1 ! 416: ! 417: // if (pbasesource >= r_sourcemax) ! 418: // pbasesource -= stepback; ! 419: ! 420: cmpl C(r_sourcemax),%esi ! 421: jb LSkip_mip1 ! 422: subl C(r_stepback),%esi ! 423: LSkip_mip1: ! 424: ! 425: movl C(r_lightptr),%ebx ! 426: decl sb_v ! 427: ! 428: jnz Lv_loop_mip1 ! 429: ! 430: popl %ebx // restore register variables ! 431: popl %esi ! 432: popl %edi ! 433: popl %ebp // restore the caller's stack frame ! 434: ret ! 435: ! 436: ! 437: //---------------------------------------------------------------------- ! 438: // Surface block drawer for mip level 2 ! 439: //---------------------------------------------------------------------- ! 440: ! 441: .align 4 ! 442: .globl C(R_DrawSurfaceBlock8_mip2) ! 443: C(R_DrawSurfaceBlock8_mip2): ! 444: pushl %ebp // preserve caller's stack frame ! 445: pushl %edi ! 446: pushl %esi // preserve register variables ! 447: pushl %ebx ! 448: ! 449: // for (v=0 ; v<numvblocks ; v++) ! 450: // { ! 451: movl C(r_lightptr),%ebx ! 452: movl C(r_numvblocks),%eax ! 453: ! 454: movl %eax,sb_v ! 455: movl C(prowdestbase),%edi ! 456: ! 457: movl C(pbasesource),%esi ! 458: ! 459: Lv_loop_mip2: ! 460: ! 461: // lightleft = lightptr[0]; ! 462: // lightright = lightptr[1]; ! 463: // lightdelta = (lightleft - lightright) & 0xFFFFF; ! 464: movl (%ebx),%eax // lightleft ! 465: movl 4(%ebx),%edx // lightright ! 466: ! 467: movl %eax,%ebp ! 468: movl C(r_lightwidth),%ecx ! 469: ! 470: movl %edx,C(lightright) ! 471: subl %edx,%ebp ! 472: ! 473: andl $0xFFFFF,%ebp ! 474: leal (%ebx,%ecx,4),%ebx ! 475: ! 476: // lightptr += lightwidth; ! 477: movl %ebx,C(r_lightptr) ! 478: ! 479: // lightleftstep = (lightptr[0] - lightleft) >> blockdivshift; ! 480: // lightrightstep = (lightptr[1] - lightright) >> blockdivshift; ! 481: // lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | ! 482: // 0xF0000000; ! 483: movl 4(%ebx),%ecx // lightptr[1] ! 484: movl (%ebx),%ebx // lightptr[0] ! 485: ! 486: subl %eax,%ebx ! 487: subl %edx,%ecx ! 488: ! 489: sarl $2,%ecx ! 490: orl $0x30000000,%ebp ! 491: ! 492: sarl $2,%ebx ! 493: movl %ecx,C(lightrightstep) ! 494: ! 495: subl %ecx,%ebx ! 496: ! 497: andl $0xFFFFF,%ebx ! 498: ! 499: orl $0xF0000000,%ebx ! 500: subl %ecx,%ecx // high word must be 0 in loop for addressing ! 501: ! 502: movl %ebx,C(lightdeltastep) ! 503: subl %ebx,%ebx // high word must be 0 in loop for addressing ! 504: ! 505: Lblockloop8_mip2: ! 506: movl %ebp,C(lightdelta) ! 507: movb 2(%esi),%cl ! 508: ! 509: sarl $2,%ebp ! 510: movb %dh,%bh ! 511: ! 512: movb 3(%esi),%bl ! 513: addl %ebp,%edx ! 514: ! 515: movb %dh,%ch ! 516: addl %ebp,%edx ! 517: ! 518: movb 0x12345678(%ebx),%ah ! 519: LBPatch18: ! 520: movb 1(%esi),%bl ! 521: ! 522: movb 0x12345678(%ecx),%al ! 523: LBPatch19: ! 524: movb (%esi),%cl ! 525: ! 526: movb %dh,%bh ! 527: addl %ebp,%edx ! 528: ! 529: rorl $16,%eax ! 530: movb %dh,%ch ! 531: ! 532: movb 0x12345678(%ebx),%ah ! 533: LBPatch20: ! 534: movl C(lightright),%edx ! 535: ! 536: movb 0x12345678(%ecx),%al ! 537: LBPatch21: ! 538: movl C(lightdelta),%ebp ! 539: ! 540: movl %eax,(%edi) ! 541: movl C(sourcetstep),%eax ! 542: ! 543: addl %eax,%esi ! 544: movl C(surfrowbytes),%eax ! 545: ! 546: addl %eax,%edi ! 547: movl C(lightrightstep),%eax ! 548: ! 549: addl %eax,%edx ! 550: movl C(lightdeltastep),%eax ! 551: ! 552: addl %eax,%ebp ! 553: movl %edx,C(lightright) ! 554: ! 555: jc Lblockloop8_mip2 ! 556: ! 557: // if (pbasesource >= r_sourcemax) ! 558: // pbasesource -= stepback; ! 559: ! 560: cmpl C(r_sourcemax),%esi ! 561: jb LSkip_mip2 ! 562: subl C(r_stepback),%esi ! 563: LSkip_mip2: ! 564: ! 565: movl C(r_lightptr),%ebx ! 566: decl sb_v ! 567: ! 568: jnz Lv_loop_mip2 ! 569: ! 570: popl %ebx // restore register variables ! 571: popl %esi ! 572: popl %edi ! 573: popl %ebp // restore the caller's stack frame ! 574: ret ! 575: ! 576: ! 577: //---------------------------------------------------------------------- ! 578: // Surface block drawer for mip level 3 ! 579: //---------------------------------------------------------------------- ! 580: ! 581: .align 4 ! 582: .globl C(R_DrawSurfaceBlock8_mip3) ! 583: C(R_DrawSurfaceBlock8_mip3): ! 584: pushl %ebp // preserve caller's stack frame ! 585: pushl %edi ! 586: pushl %esi // preserve register variables ! 587: pushl %ebx ! 588: ! 589: // for (v=0 ; v<numvblocks ; v++) ! 590: // { ! 591: movl C(r_lightptr),%ebx ! 592: movl C(r_numvblocks),%eax ! 593: ! 594: movl %eax,sb_v ! 595: movl C(prowdestbase),%edi ! 596: ! 597: movl C(pbasesource),%esi ! 598: ! 599: Lv_loop_mip3: ! 600: ! 601: // lightleft = lightptr[0]; ! 602: // lightright = lightptr[1]; ! 603: // lightdelta = (lightleft - lightright) & 0xFFFFF; ! 604: movl (%ebx),%eax // lightleft ! 605: movl 4(%ebx),%edx // lightright ! 606: ! 607: movl %eax,%ebp ! 608: movl C(r_lightwidth),%ecx ! 609: ! 610: movl %edx,C(lightright) ! 611: subl %edx,%ebp ! 612: ! 613: andl $0xFFFFF,%ebp ! 614: leal (%ebx,%ecx,4),%ebx ! 615: ! 616: movl %ebp,C(lightdelta) ! 617: // lightptr += lightwidth; ! 618: movl %ebx,C(r_lightptr) ! 619: ! 620: // lightleftstep = (lightptr[0] - lightleft) >> blockdivshift; ! 621: // lightrightstep = (lightptr[1] - lightright) >> blockdivshift; ! 622: // lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | ! 623: // 0xF0000000; ! 624: movl 4(%ebx),%ecx // lightptr[1] ! 625: movl (%ebx),%ebx // lightptr[0] ! 626: ! 627: subl %eax,%ebx ! 628: subl %edx,%ecx ! 629: ! 630: sarl $1,%ecx ! 631: ! 632: sarl $1,%ebx ! 633: movl %ecx,C(lightrightstep) ! 634: ! 635: subl %ecx,%ebx ! 636: andl $0xFFFFF,%ebx ! 637: ! 638: sarl $1,%ebp ! 639: orl $0xF0000000,%ebx ! 640: ! 641: movl %ebx,C(lightdeltastep) ! 642: subl %ebx,%ebx // high word must be 0 in loop for addressing ! 643: ! 644: movb 1(%esi),%bl ! 645: subl %ecx,%ecx // high word must be 0 in loop for addressing ! 646: ! 647: movb %dh,%bh ! 648: movb (%esi),%cl ! 649: ! 650: addl %ebp,%edx ! 651: movb %dh,%ch ! 652: ! 653: movb 0x12345678(%ebx),%al ! 654: LBPatch16: ! 655: movl C(lightright),%edx ! 656: ! 657: movb %al,1(%edi) ! 658: movb 0x12345678(%ecx),%al ! 659: LBPatch17: ! 660: ! 661: movb %al,(%edi) ! 662: movl C(sourcetstep),%eax ! 663: ! 664: addl %eax,%esi ! 665: movl C(surfrowbytes),%eax ! 666: ! 667: addl %eax,%edi ! 668: movl C(lightdeltastep),%eax ! 669: ! 670: movl C(lightdelta),%ebp ! 671: movb (%esi),%cl ! 672: ! 673: addl %eax,%ebp ! 674: movl C(lightrightstep),%eax ! 675: ! 676: sarl $1,%ebp ! 677: addl %eax,%edx ! 678: ! 679: movb %dh,%bh ! 680: movb 1(%esi),%bl ! 681: ! 682: addl %ebp,%edx ! 683: movb %dh,%ch ! 684: ! 685: movb 0x12345678(%ebx),%al ! 686: LBPatch30: ! 687: movl C(sourcetstep),%edx ! 688: ! 689: movb %al,1(%edi) ! 690: movb 0x12345678(%ecx),%al ! 691: LBPatch31: ! 692: ! 693: movb %al,(%edi) ! 694: movl C(surfrowbytes),%ebp ! 695: ! 696: addl %edx,%esi ! 697: addl %ebp,%edi ! 698: ! 699: // if (pbasesource >= r_sourcemax) ! 700: // pbasesource -= stepback; ! 701: ! 702: cmpl C(r_sourcemax),%esi ! 703: jb LSkip_mip3 ! 704: subl C(r_stepback),%esi ! 705: LSkip_mip3: ! 706: ! 707: movl C(r_lightptr),%ebx ! 708: decl sb_v ! 709: ! 710: jnz Lv_loop_mip3 ! 711: ! 712: popl %ebx // restore register variables ! 713: popl %esi ! 714: popl %edi ! 715: popl %ebp // restore the caller's stack frame ! 716: ret ! 717: ! 718: ! 719: .globl C(R_Surf8End) ! 720: C(R_Surf8End): ! 721: ! 722: //---------------------------------------------------------------------- ! 723: // Code patching routines ! 724: //---------------------------------------------------------------------- ! 725: .data ! 726: ! 727: .align 4 ! 728: LPatchTable8: ! 729: .long LBPatch0-4 ! 730: .long LBPatch1-4 ! 731: .long LBPatch2-4 ! 732: .long LBPatch3-4 ! 733: .long LBPatch4-4 ! 734: .long LBPatch5-4 ! 735: .long LBPatch6-4 ! 736: .long LBPatch7-4 ! 737: .long LBPatch8-4 ! 738: .long LBPatch9-4 ! 739: .long LBPatch10-4 ! 740: .long LBPatch11-4 ! 741: .long LBPatch12-4 ! 742: .long LBPatch13-4 ! 743: .long LBPatch14-4 ! 744: .long LBPatch15-4 ! 745: .long LBPatch16-4 ! 746: .long LBPatch17-4 ! 747: .long LBPatch18-4 ! 748: .long LBPatch19-4 ! 749: .long LBPatch20-4 ! 750: .long LBPatch21-4 ! 751: .long LBPatch22-4 ! 752: .long LBPatch23-4 ! 753: .long LBPatch24-4 ! 754: .long LBPatch25-4 ! 755: .long LBPatch26-4 ! 756: .long LBPatch27-4 ! 757: .long LBPatch28-4 ! 758: .long LBPatch29-4 ! 759: .long LBPatch30-4 ! 760: .long LBPatch31-4 ! 761: ! 762: .text ! 763: ! 764: .align 4 ! 765: .globl C(R_Surf8Patch) ! 766: C(R_Surf8Patch): ! 767: pushl %ebx ! 768: ! 769: movl C(colormap),%eax ! 770: movl $LPatchTable8,%ebx ! 771: movl $32,%ecx ! 772: LPatchLoop8: ! 773: movl (%ebx),%edx ! 774: addl $4,%ebx ! 775: movl %eax,(%edx) ! 776: decl %ecx ! 777: jnz LPatchLoop8 ! 778: ! 779: popl %ebx ! 780: ! 781: ret ! 782: ! 783: #endif // id386
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.