Quake-2

Quake 2 GPL Source Release
Log | Files | Refs

r_surf8.s (13135B)


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