Annotation of uae/src/X86.S, revision 1.1.1.1

1.1       root        1: /* These are optimized x86 assembly versions of pfield_linetoscr.
                      2:  * Feel free to send me Sparc/PPC/Alpha versions of this... :)
                      3:  */
                      4: 
                      5: #ifdef __DOS__
                      6: #define SYM(NAME) _##NAME
                      7: #define _color_regs _bpl_info
                      8: #else
                      9: #define SYM(NAME) NAME
                     10: #endif
                     11: 
                     12: /* Urgl... */
                     13: #define color_regs bpl_info
                     14: 
                     15: #ifndef __DOS__
                     16:        .local  lastcolor
                     17:        .comm   lastcolor,2
                     18:        .align 16
                     19: #else
                     20:        .comm   lastcolor,2
                     21:        .align 8
                     22: #endif
                     23: 
                     24: .globl pfield_linetoscr_full8
                     25: pfield_linetoscr_full8:
                     26:        pushl %ebp
                     27:        pushl %edi
                     28:        pushl %esi
                     29:        pushl %ebx
                     30:        movl 20(%esp),%esi
                     31:        movl 24(%esp),%edi
                     32:        
                     33:        xorl %edx,%edx
                     34:        movl SYM(diwfirstword),%eax
                     35:        cmpl $4,%eax
                     36:        jc .Loops1
                     37:        movl %edx,SYM(pixdata)-4(%eax)
                     38:        movl %edx,SYM(spixstate)-4(%eax)
                     39: .Loops1:       
                     40:        movl SYM(diwlastword),%eax
                     41:        movl %edx,SYM(pixdata)(%eax)
                     42:        movl %edx,SYM(spixstate)(%eax)
                     43:        
                     44:        movl SYM(acolors),%edx
                     45:        movb %dl,%dh
                     46:        movw %dx,%ax
                     47:        bswapl %eax
                     48:        movw %dx,%ax
                     49:        
                     50:        movl SYM(xlinebuffer),%ecx
                     51:        leal 4(%esi),%edx
                     52:        cmpl %edx,SYM(diwfirstword)
                     53:        jle .La_start_ok
                     54: .La_start_line:
                     55:        cmpl %edi,%esi
                     56:        jge .La_start_ok
                     57:        movl %eax,(%ecx)
                     58:        addl $4,%ecx
                     59:        movl %edx,%esi
                     60: 
                     61:        leal 4(%esi),%edx
                     62:        cmpl %edx,SYM(diwfirstword)
                     63:        jg .La_start_line
                     64: .La_start_ok:
                     65:         movl %ecx,SYM(xlinebuffer)
                     66: 
                     67:         cmpl $0,SYM(bplham)
                     68:        je .La_noham
                     69:        cmpl $6,SYM(bplplanecnt)
                     70:        jne .La_noham
                     71:        
                     72:        /* HAM 6 */
                     73:        movl SYM(xlinebuffer),%ebp
                     74:        xorl %edx,%edx
                     75: .La_hamloop:
                     76:        cmpl %esi,SYM(diwlastword)
                     77:        jle .La_hamend
                     78:        cmpl %edi,%esi
                     79:        jge .La_hamend
                     80:                
                     81:        movl SYM(ham_linebuf)+12(,%esi,4),%eax
                     82:        movb SYM(xcolors)(,%eax,4),%bl
                     83:        movl SYM(ham_linebuf)+8(,%esi,4),%eax
                     84:        movb SYM(xcolors)(,%eax,4),%bh
                     85:        bswapl %ebx
                     86:        movl SYM(ham_linebuf)+4(,%esi,4),%eax
                     87:        movb SYM(xcolors)(,%eax,4),%bh
                     88:        movl SYM(ham_linebuf)(,%esi,4),%eax
                     89:        movb SYM(xcolors)(,%eax,4),%bl
                     90:        movl %ebx,(%ebp)
                     91:        addl $4,%ebp
                     92:        addl $4,%esi
                     93:        jmp .La_hamloop
                     94: 
                     95: .La_hamend:
                     96:        movl %ebp,SYM(xlinebuffer)
                     97:        jmp .La_finish_line
                     98:        
                     99: .La_noham:
                    100:        cmpl $0,SYM(bpldualpf)
                    101:        je .La_normal
                    102:        
                    103:        /* Dual Playfield */
                    104:        
                    105:        xorl %edx,%edx
                    106: 
                    107:        movl $SYM(dblpf_ind1),%ebp
                    108:        cmpl $0,SYM(bpldualpfpri)
                    109:        je .La_dp_loop
                    110:        movl $SYM(dblpf_ind2),%ebp
                    111: .La_dp_loop:
                    112:        cmpl %esi,SYM(diwlastword)
                    113:        jle .La_finish_line
                    114:        
                    115:        cmpl %edi,%esi
                    116:        jge .La_finish_line
                    117: 
                    118:        xorl %edx,%edx
                    119:        movl SYM(pixdata)(%esi),%eax
                    120:        movl SYM(spixstate)(%esi),%ebx
                    121:        testl %ebx,%ebx
                    122:        jne .La_dp_sprites
                    123:        
                    124:        /* no sprites */
                    125: 
                    126:        movb %al,%dl
                    127:        movb (%ebp,%edx,4),%dl
                    128:        movb SYM(acolors)(,%edx,4),%cl
                    129:        movb %ah,%dl
                    130:        movb (%ebp,%edx,4),%dl
                    131:        movb SYM(acolors)(,%edx,4),%ch
                    132:        bswapl %eax
                    133:        bswapl %ecx
                    134:        movb %al,%dl
                    135:        movb (%ebp,%edx,4),%dl
                    136:        movb SYM(acolors)(,%edx,4),%cl
                    137:        movb %ah,%dl
                    138:        movb (%ebp,%edx,4),%dl
                    139:        movb SYM(acolors)(,%edx,4),%ch
                    140:        bswapl %ecx
                    141:        
                    142:        movl SYM(xlinebuffer),%eax
                    143:        movl %ecx,(%eax)
                    144:        addl $4,SYM(xlinebuffer)
                    145:        addl $4,%esi
                    146:        jmp .La_dp_loop
                    147:        
                    148: .La_dp_sprites:
                    149: 
                    150:         /* dual playfield with sprites */
                    151: 
                    152:        movb %al,%dl
                    153:        testb %bl,%bl
                    154:        je .La3
                    155:        movb SYM(acolors)(,%edx,4),%cl
                    156:        jmp .La1
                    157: .La3:
                    158:        movb (%ebp,%edx,4),%dl
                    159:        movb SYM(acolors)(,%edx,4),%cl
                    160: .La1:
                    161: 
                    162:        movb %ah,%dl
                    163:        testb %bh,%bh
                    164:        je .La6
                    165:        movb SYM(acolors)(,%edx,4),%ch
                    166:        jmp .La4
                    167: .La6:
                    168:        movb (%ebp,%edx,4),%dl
                    169:        movb SYM(acolors)(,%edx,4),%ch
                    170: .La4:
                    171:        bswapl %ecx     
                    172:        bswapl %eax
                    173:        bswapl %ebx
                    174:        
                    175:        movb %al,%dl
                    176:        testb %bl,%bl
                    177:        je .La9
                    178:        movb SYM(acolors)(,%edx,4),%cl
                    179:        jmp .La7
                    180: .La9:
                    181:        movb (%ebp,%edx,4),%dl
                    182:        movb SYM(acolors)(,%edx,4),%cl
                    183: .La7:
                    184: 
                    185:        movb %ah,%dl
                    186:        testb %bh,%bh
                    187:        je .La12
                    188:        movb SYM(acolors)(,%edx,4),%ch
                    189:        jmp .La10
                    190: .La12:
                    191:        movb (%ebp,%edx,4),%dl
                    192:        movb SYM(acolors)(,%edx,4),%ch
                    193: .La10:
                    194:        addl $4,%esi
                    195:        
                    196:        bswapl %ecx
                    197:        movl SYM(xlinebuffer),%eax
                    198:        movl %ecx,(%eax)
                    199:        addl $4,SYM(xlinebuffer)
                    200:        
                    201:        jmp .La_dp_loop
                    202:        
                    203:        /* normal case */       
                    204: .La_normal:
                    205:        xorl %edx,%edx
                    206:        movl SYM(xlinebuffer),%ebx
                    207: .La_normal_loop:
                    208:        cmpl %esi,SYM(diwlastword)
                    209:        jle .La_normal_end
                    210:        cmpl %edi,%esi
                    211:        jge .La_normal_end
                    212:        
                    213:        movl SYM(pixdata)(%esi),%eax
                    214:        
                    215:        movb %al,%dl
                    216:        movb SYM(acolors)(,%edx,4),%cl
                    217:        movb %ah,%dl
                    218:        movb SYM(acolors)(,%edx,4),%ch
                    219:        bswapl %eax
                    220:        bswapl %ecx
                    221:        movb %al,%dl
                    222:        movb SYM(acolors)(,%edx,4),%cl
                    223:        movb %ah,%dl
                    224:        movb SYM(acolors)(,%edx,4),%ch
                    225:        bswapl %ecx
                    226:        
                    227:        movl %ecx,(%ebx)
                    228:        addl $4,%ebx
                    229:        addl $4,%esi
                    230:        jmp .La_normal_loop
                    231: 
                    232: .La_normal_end:
                    233:        movl %ebx,SYM(xlinebuffer)
                    234: 
                    235: .La_finish_line:
                    236:        /* Finish off the line */
                    237:        
                    238:        movl SYM(acolors),%edx
                    239:        movb %dl,%dh
                    240:        movw %dx,%ax
                    241:        bswapl %eax
                    242:        movw %dx,%ax
                    243:        
                    244:        movl SYM(xlinebuffer),%ecx
                    245: .La_fin_loop:
                    246:        cmpl %edi,%esi
                    247:        jge .La_fin_end
                    248:        
                    249:        movl %eax,(%ecx)
                    250:        addl $4,%ecx
                    251:        addl $4,%esi
                    252:        jmp  .La_fin_loop
                    253: 
                    254: .La_fin_end:
                    255:         movl %ecx,SYM(xlinebuffer)
                    256:        
                    257:        popl %ebx
                    258:        popl %esi
                    259:        popl %edi
                    260:        popl %ebp
                    261:        ret
                    262: 
                    263: #ifndef __DOS__
                    264:        .align 16
                    265: #else
                    266:        .align 8
                    267: #endif
                    268: .globl pfield_linetoscr_full16
                    269: pfield_linetoscr_full16:
                    270:        pushl %ebp
                    271:        pushl %edi
                    272:        pushl %esi
                    273:        pushl %ebx
                    274:        
                    275:        movl 20(%esp),%esi
                    276:        movl 24(%esp),%edi
                    277:        
                    278:        xorl %edx,%edx
                    279:        movl SYM(diwfirstword),%eax
                    280:        cmpl $4,%eax
                    281:        jc .Lboops1
                    282:        movl %edx,SYM(pixdata)-4(%eax)
                    283:        movl %edx,SYM(spixstate)-4(%eax)
                    284: .Lboops1:      
                    285:        movl SYM(diwlastword),%eax
                    286:        movl %edx,SYM(pixdata)(%eax)
                    287:        movl %edx,SYM(spixstate)(%eax)
                    288:        
                    289:        movl SYM(acolors),%edx
                    290:        movw %dx,%ax
                    291:        sall $16,%eax
                    292:        movw %dx,%ax
                    293:        
                    294:        movl SYM(xlinebuffer),%ecx
                    295:        leal 4(%esi),%edx
                    296:        cmpl %edx,SYM(diwfirstword)
                    297:        jle .Lb_start_ok
                    298: .Lb_start_line:
                    299:        cmpl %edi,%esi
                    300:        jge .Lb_start_ok
                    301:        movl %eax,(%ecx)
                    302:        movl %eax,4(%ecx)
                    303:        addl $8,%ecx
                    304:        movl %edx,%esi
                    305: 
                    306:        leal 4(%esi),%edx
                    307:        cmpl %edx,SYM(diwfirstword)
                    308:        jg .Lb_start_line
                    309: .Lb_start_ok:
                    310:         movl %ecx,SYM(xlinebuffer)
                    311: 
                    312:         cmpl $0,SYM(bplham)
                    313:        je .Lb_noham
                    314:        cmpl $6,SYM(bplplanecnt)
                    315:        jne .Lb_noham
                    316:        
                    317:        /* HAM 6 */
                    318:        movl SYM(xlinebuffer),%ebp
                    319:        xorl %edx,%edx
                    320: .Lb_hamloop:
                    321:        cmpl %esi,SYM(diwlastword)
                    322:        jle .Lb_hamend
                    323:        cmpl %edi,%esi
                    324:        jge .Lb_hamend
                    325: 
                    326:        movl SYM(ham_linebuf)+4(,%esi,4),%eax
                    327:        movw SYM(xcolors)(,%eax,4),%bx
                    328:        sall $16,%ebx
                    329:        movl SYM(ham_linebuf)(,%esi,4),%eax
                    330:        movw SYM(xcolors)(,%eax,4),%bx
                    331:        movl %ebx,(%ebp)
                    332: 
                    333:        movl SYM(ham_linebuf)+12(,%esi,4),%eax
                    334:        movw SYM(xcolors)(,%eax,4),%bx
                    335:        sall $16,%ebx
                    336:        movl SYM(ham_linebuf)+8(,%esi,4),%eax
                    337:        movw SYM(xcolors)(,%eax,4),%bx
                    338:        movl %ebx,4(%ebp)
                    339:        addl $8,%ebp
                    340:        addl $4,%esi
                    341:        jmp .Lb_hamloop
                    342: 
                    343: .Lb_hamend:
                    344:        movl %ebp,SYM(xlinebuffer)
                    345:        jmp .Lb_finish_line
                    346:        
                    347: .Lb_noham:
                    348:        cmpl $0,SYM(bpldualpf)
                    349:        je .Lb_normal
                    350:        
                    351:        /* Dual Playfield */
                    352:        
                    353:        xorl %edx,%edx
                    354:        movl $SYM(dblpf_ind1),%ebp
                    355:        cmpl $0,SYM(bpldualpfpri)
                    356:        je .Lb_dp_loop
                    357:        movl $SYM(dblpf_ind2),%ebp
                    358: .Lb_dp_loop:
                    359:        cmpl %esi,SYM(diwlastword)
                    360:        jle .Lb_finish_line
                    361:        
                    362:        cmpl %edi,%esi
                    363:        jge .Lb_finish_line
                    364: 
                    365:        xorl %edx,%edx
                    366:        movl SYM(pixdata)(%esi),%eax
                    367:        movl SYM(spixstate)(%esi),%ebx
                    368:        testl %ebx,%ebx
                    369:        jne .Lb_dp_sprites
                    370:        
                    371:        /* no sprites */
                    372: 
                    373:         movl SYM(xlinebuffer),%ebx
                    374: 
                    375:        movb %ah,%dl
                    376:        movb (%ebp,%edx,4),%dl
                    377:        movw SYM(acolors)(,%edx,4),%cx
                    378:        sall $16,%ecx
                    379:        movb %al,%dl
                    380:        movb (%ebp,%edx,4),%dl
                    381:        movw SYM(acolors)(,%edx,4),%cx
                    382:        
                    383:        movl %ecx,(%ebx)
                    384: 
                    385:        bswapl %eax
                    386:        
                    387:        movb %al,%dl
                    388:        movb (%ebp,%edx,4),%dl
                    389:        movw SYM(acolors)(,%edx,4),%cx
                    390:        sall $16,%ecx
                    391:        movb %ah,%dl
                    392:        movb (%ebp,%edx,4),%dl
                    393:        movw SYM(acolors)(,%edx,4),%cx
                    394:        
                    395:        movl %ecx,4(%ebx)
                    396:        addl $8,SYM(xlinebuffer)
                    397:        addl $4,%esi
                    398:        jmp .Lb_dp_loop
                    399:        
                    400: .Lb_dp_sprites:
                    401: 
                    402:         /* dual playfield with sprites */
                    403: 
                    404:        movb %ah,%dl
                    405:        testb %bh,%bh
                    406:        je .Lb3
                    407:        movw SYM(acolors)(,%edx,4),%cx
                    408:        jmp .Lb1
                    409: .Lb3:
                    410:        movb (%ebp,%edx,4),%dl
                    411:        movw SYM(acolors)(,%edx,4),%cx
                    412: .Lb1:
                    413:         sall $16,%ecx
                    414: 
                    415:        movb %al,%dl
                    416:        testb %bl,%bl
                    417:        je .Lb6
                    418:        movw SYM(acolors)(,%edx,4),%cx
                    419:        jmp .Lb4
                    420: .Lb6:
                    421:        movb (%ebp,%edx,4),%dl
                    422:        mov SYM(acolors)(,%edx,4),%cx
                    423: .Lb4:
                    424:        movl SYM(xlinebuffer),%edx
                    425:        movl %ecx,(%edx)
                    426:        xorl %edx,%edx
                    427: 
                    428:        bswapl %eax
                    429:        bswapl %ebx
                    430:        
                    431:        movb %al,%dl
                    432:        testb %bl,%bl
                    433:        je .Lb9
                    434:        movw SYM(acolors)(,%edx,4),%cx
                    435:        jmp .Lb7
                    436: .Lb9:
                    437:        movb (%ebp,%edx,4),%dl
                    438:        movw SYM(acolors)(,%edx,4),%cx
                    439: .Lb7:
                    440:         sall $16,%ecx
                    441: 
                    442:        movb %ah,%dl
                    443:        testb %bh,%bh
                    444:        je .Lb12
                    445:        movw SYM(acolors)(,%edx,4),%cx
                    446:        jmp .Lb10
                    447: .Lb12:
                    448:        movb (%ebp,%edx,4),%dl
                    449:        movw SYM(acolors)(,%edx,4),%cx
                    450: .Lb10:
                    451:        addl $4,%esi
                    452:        
                    453:        movl SYM(xlinebuffer),%eax
                    454:        movl %ecx,4(%eax)
                    455:        addl $8,SYM(xlinebuffer)
                    456:        
                    457:        jmp .Lb_dp_loop
                    458:        
                    459:        /* normal case */       
                    460: .Lb_normal:
                    461:        xorl %edx,%edx
                    462:        movl SYM(xlinebuffer),%ebx
                    463: .Lb_normal_loop:
                    464:        cmpl %esi,SYM(diwlastword)
                    465:        jle .Lb_normal_end
                    466:        cmpl %edi,%esi
                    467:        jge .Lb_normal_end
                    468:        
                    469:        movl SYM(pixdata)(%esi),%eax
                    470:        
                    471:        movb %ah,%dl
                    472:        movw SYM(acolors)(,%edx,4),%cx
                    473:        sall $16,%ecx
                    474:        movb %al,%dl
                    475:        movw SYM(acolors)(,%edx,4),%cx
                    476:        movl %ecx,(%ebx)
                    477:        bswapl %eax
                    478:        movb %al,%dl
                    479:        movw SYM(acolors)(,%edx,4),%cx
                    480:        sall $16,%ecx
                    481:        movb %ah,%dl
                    482:        movw SYM(acolors)(,%edx,4),%cx
                    483:        movl %ecx,4(%ebx)
                    484:        
                    485:        addl $8,%ebx
                    486:        addl $4,%esi
                    487:        jmp .Lb_normal_loop
                    488: 
                    489: .Lb_normal_end:
                    490:        movl %ebx,SYM(xlinebuffer)
                    491: 
                    492: .Lb_finish_line:
                    493:        /* Finish off the line */
                    494:        
                    495:        movw SYM(acolors),%edx
                    496:        movw %dx,%ax
                    497:        sall $16,%eax
                    498:        movw %dx,%ax
                    499:        
                    500:        movl SYM(xlinebuffer),%ecx
                    501: .Lb_fin_loop:
                    502:        cmpl %edi,%esi
                    503:        jge .Lb_fin_end
                    504:        
                    505:        movl %eax,(%ecx)
                    506:        movl %eax,4(%ecx)
                    507:        addl $8,%ecx
                    508:        addl $4,%esi
                    509:        jmp  .Lb_fin_loop
                    510: 
                    511: .Lb_fin_end:
                    512:         movl %ecx,SYM(xlinebuffer)
                    513:        
                    514:        popl %ebx
                    515:        popl %esi
                    516:        popl %edi
                    517:        popl %ebp
                    518:        ret
                    519: 
                    520:         .ident "Crux CC 3.14.15"
                    521: 
                    522: #ifndef __DOS__
                    523:        .align 16
                    524: .globl DitherLine
                    525:        .type    DitherLine,@function
                    526: #else
                    527:        .align 8
                    528: .globl DitherLine
                    529: #endif
                    530: DitherLine:
                    531:        pushl %ebp
                    532:        pushl %edi
                    533:        pushl %esi
                    534:        pushl %ebx
                    535:        movl 20(%esp),%edi
                    536:        xorl %ebx,%ebx
                    537:        movw 36(%esp),%bx
                    538:        movl 32(%esp),%edx
                    539:        andl $3,%edx
                    540:        sall $15,%edx
                    541:        movl 28(%esp),%eax
                    542:        andl $3,%eax
                    543:        sall $12,%eax
                    544:        leal SYM(cidx)(%edx,%eax),%ebp
                    545:        xorb %dl,%dl
                    546:        movl $8,%ecx
                    547:        testl %ebx,%ebx
                    548:        je .Li_end
                    549:        cmpl $8,40(%esp)
                    550:        je .Li_fast
                    551: 
                    552:        movl 24(%esp),%esi
                    553: .Li_loop:
                    554:        movzwl (%esi),%eax
                    555:        movzbl (%eax,%ebp),%eax
                    556:        subl 40(%esp),%ecx
                    557:        sall %cl,%eax
                    558:        orb %al,%dl
                    559:        testl %ecx,%ecx
                    560:        jne .Li_1
                    561:        movb %dl,(%edi)
                    562:        incl %edi
                    563:        movl $8,%ecx
                    564:        xorb %dl,%dl
                    565: .Li_1:
                    566:        movzwl 2(%esi),%eax
                    567:        movzbl 4096(%ebp,%eax),%eax
                    568:        subl 40(%esp),%ecx
                    569:        sall %cl,%eax
                    570:        orb %al,%dl
                    571:        testl %ecx,%ecx
                    572:        jne .Li_2
                    573:        movb %dl,(%edi)
                    574:        incl %edi
                    575:        movl $8,%ecx
                    576:        xorb %dl,%dl
                    577: .Li_2:
                    578:        movzwl 4(%esi),%eax
                    579:        movzbl 8192(%ebp,%eax),%eax
                    580:        subl 40(%esp),%ecx
                    581:        sall %cl,%eax
                    582:        orb %al,%dl
                    583:        testl %ecx,%ecx
                    584:        jne .Li_3
                    585:        movb %dl,(%edi)
                    586:        incl %edi
                    587:        movl $8,%ecx
                    588:        xorb %dl,%dl
                    589: .Li_3:
                    590:        movzwl 6(%esi),%eax
                    591:        movzbl 12288(%ebp,%eax),%eax
                    592:        addl $8,%esi
                    593:        subl 40(%esp),%ecx
                    594:        sall %cl,%eax
                    595:        orb %al,%dl
                    596:        testl %ecx,%ecx
                    597:        jne .Li_4
                    598:        movb %dl,(%edi)
                    599:        incl %edi
                    600:        movl $8,%ecx
                    601:        xorb %dl,%dl
                    602: .Li_4:
                    603:        subl $4,%ebx
                    604:        jne .Li_loop
                    605:        jmp .Li_end
                    606:        
                    607:        /* Fast 8-bit version */
                    608: .Li_fast:
                    609:        movl 24(%esp),%esi
                    610:        xorl %edx,%edx
                    611: .Li_fast_loop:
                    612:        movl (%esi),%ecx
                    613:        movw %cx,%dx
                    614:        movb (%edx,%ebp),%al
                    615:        
                    616:        sarl $16,%ecx
                    617:        movw %cx,%dx
                    618:        movb 4096(%ebp,%edx),%ah
                    619:        bswapl %eax
                    620:        
                    621:        movl 4(%esi),%ecx
                    622:        movw %cx,%dx
                    623:        movb 8192(%ebp,%edx),%ah
                    624:        
                    625:        sarl $16,%ecx
                    626:        movw %cx,%dx
                    627:        movb 12288(%ebp,%edx),%al
                    628:        
                    629:        bswapl %eax
                    630:        movl %eax,(%edi)
                    631:        addl $4,%edi
                    632:        addl $8,%esi
                    633:        
                    634:        subl $4,%ebx
                    635:        jne .Li_fast_loop
                    636: 
                    637: .Li_end:
                    638:        popl %ebx
                    639:        popl %esi
                    640:        popl %edi
                    641:        popl %ebp
                    642:        ret

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.