Annotation of uae/src/md-i386-gcc/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:  * [it's not necessarily a win to code these in assembler, though - Paul
                      4:  * Liss says this code is slower than the generic C stuff in custom.c on
                      5:  * a PPro]
                      6:  */
                      7: 
                      8: #include "config.h"
                      9: 
                     10: /*#define X86_PPRO_OPT*/
                     11: #ifdef X86_PPRO_OPT
                     12: #define PARTIAL_REG(a,b) a
                     13: #define BYTE_MOVE movzbl
                     14: #define WORD_MOVE movzwl
                     15: #define CLEAR_FOR_BYTE_MOVE(a)
                     16: #else
                     17: #define PARTIAL_REG(a,b) b
                     18: #define BYTE_MOVE movb
                     19: #define WORD_MOVE movw
                     20: #define CLEAR_FOR_BYTE_MOVE(a) xorl a,a
                     21: #endif
                     22: 
                     23: #ifndef USE_UNDERSCORE
                     24: #define SYM(NAME) NAME
                     25: #define FUNCTION_ALIGN .align 16
                     26: #define FUNCTYPE(NAME) .type NAME,@function
                     27: #else
                     28: #define SYM(NAME) _##NAME
                     29: #define FUNCTION_ALIGN .align 4
                     30: #define FUNCTYPE(NAME)
                     31: #endif
                     32: 
                     33:        .text
                     34: 
                     35:         .globl pfield_linetoscr_asm8
                     36:        FUNCTYPE (pfield_linetoscr_asm8)
                     37:        FUNCTION_ALIGN
                     38: pfield_linetoscr_asm8:
                     39:        pushl %ebp
                     40:        pushl %edi
                     41:        pushl %esi
                     42:        pushl %ebx
                     43:        movl 24(%esp),%esi /* start */
                     44:        movl 28(%esp),%edi /* lframe_end */
                     45:        
                     46:        movl SYM(colors_for_drawing),%eax
                     47:         movl 20(%esp),%ebx
                     48:        movl SYM(xlinebuffer),%ecx
                     49:        jmp .La_do_start_line
                     50:        FUNCTION_ALIGN
                     51: .La_start_line:
                     52:        movl %eax,(%ecx,%esi)
                     53:        addl $4,%esi
                     54: .La_do_start_line:
                     55:        cmpl %esi,%edi
                     56:        jnbe .La_start_line
                     57: 
                     58:        call %ebx
                     59: 
                     60:        /* Finish off the line */
                     61: 
                     62:        movl SYM(xlinebuffer),%ecx
                     63:         movl 36(%esp),%edi /* stoppos */
                     64:        movl SYM(colors_for_drawing),%eax
                     65:        jmp .La_do_end_line
                     66:        FUNCTION_ALIGN
                     67: .La_end_line:
                     68:        movl %eax,(%ecx,%esi)
                     69:        addl $4,%esi
                     70: .La_do_end_line:
                     71:        cmpl %esi,%edi
                     72:        jnbe .La_end_line
                     73: 
                     74:        popl %ebx
                     75:        popl %esi
                     76:        popl %edi
                     77:        popl %ebp
                     78:        ret
                     79: 
                     80:         .globl pfield_linetoscr_ham6_asm8
                     81:        FUNCTYPE (pfield_linetoscr_ham6_asm8)
                     82:        FUNCTION_ALIGN
                     83: pfield_linetoscr_ham6_asm8:
                     84:        movl 36(%esp),%edi /* diw_end */
                     85: .Laa_hamloop:
                     86:        cmpl %esi,%edi
                     87:        jbe .Laa_hamend
                     88: 
                     89:        movl SYM(ham_linebuf)+12(,%esi,4),%eax
                     90:        movb SYM(xcolors)(,%eax,4),%bh
                     91:        movl SYM(ham_linebuf)+8(,%esi,4),%eax
                     92:        movb SYM(xcolors)(,%eax,4),%bl
                     93:        sall $16,%ebx
                     94:        movl SYM(ham_linebuf)+4(,%esi,4),%eax
                     95:        movb SYM(xcolors)(,%eax,4),%bh
                     96:        movl SYM(ham_linebuf)(,%esi,4),%eax
                     97:        movb SYM(xcolors)(,%eax,4),%bl
                     98:        movl %ebx,(%ecx,%esi)
                     99:        addl $4,%esi
                    100:        jmp .Laa_hamloop
                    101: 
                    102: .Laa_hamend:
                    103:         ret
                    104: 
                    105:         .globl pfield_linetoscr_dualpf_asm8
                    106:        FUNCTYPE (pfield_linetoscr_dualpf_asm8)
                    107:        FUNCTION_ALIGN
                    108: pfield_linetoscr_dualpf_asm8:
                    109:        xorl %edx,%edx
                    110:        movl 44(%esp),%ebp /* lookup_no */
                    111: .Lab_dp_loop:
                    112:         movl 36(%esp),%eax /* diw_end */
                    113:        xorl %edx,%edx
                    114:        cmpl %esi,%eax
                    115:        jbe .La_dp_done
                    116: 
                    117:        movl SYM(pixdata)(%esi),%eax
                    118: 
                    119:        BYTE_MOVE %al,PARTIAL_REG(%edx,%dl)
                    120:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    121:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    122:        BYTE_MOVE %ah,PARTIAL_REG(%edx,%dl)
                    123:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    124:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    125:        bswapl %eax
                    126:        bswapl %ecx
                    127:        BYTE_MOVE %al,PARTIAL_REG(%edx,%dl)
                    128:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    129:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    130:        BYTE_MOVE %ah,PARTIAL_REG(%edx,%dl)
                    131:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    132:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    133:        bswapl %ecx
                    134:        
                    135:        movl SYM(xlinebuffer),%eax
                    136:        movl %ecx,(%eax,%esi)
                    137:        addl $4,%esi
                    138:        jmp .Lab_dp_loop        
                    139: .La_dp_done:
                    140:        ret
                    141: 
                    142:         .globl pfield_linetoscr_ehb_asm8
                    143:        FUNCTYPE (pfield_linetoscr_ehb_asm8)
                    144:        FUNCTION_ALIGN
                    145: pfield_linetoscr_ehb_asm8:
                    146:        xorl %edx,%edx
                    147:        movl SYM(xlinebuffer),%ebx
                    148: .La_ehb_loop:
                    149:        movl 36(%esp),%edi /* diw_end */
                    150:        cmpl %esi,%edi
                    151:        jbe .La_ehb_end
                    152:        
                    153:        movl SYM(pixdata)(%esi),%eax
                    154:        BYTE_MOVE %al,PARTIAL_REG(%edx,%dl)
                    155:        cmpb $32,%al
                    156:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    157:        jc   .La_ehb1
                    158:        movw SYM(colors_for_drawing)+32*4-32*2(,%edx,2),%di
                    159:        shrl $1,%edi
                    160:        andl $0x777,%edi
                    161:        movb SYM(xcolors)(,%edi,4),%cl
                    162: .La_ehb1:
                    163:        BYTE_MOVE %ah,PARTIAL_REG(%edx,%dl)
                    164:        cmpb $32,%ah
                    165:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    166:        jc   .La_ehb2
                    167:        movw SYM(colors_for_drawing)+32*4-32*2(,%edx,2),%di
                    168:        shrl $1,%edi
                    169:        andl $0x777,%edi
                    170:        movb SYM(xcolors)(,%edi,4),%ch
                    171: .La_ehb2:
                    172:        sarl $16,%eax
                    173:        sall $16,%ecx
                    174:        BYTE_MOVE %al,PARTIAL_REG(%edx,%dl)
                    175:        cmpb $32,%al
                    176:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    177:        jc   .La_ehb3
                    178:        movw SYM(colors_for_drawing)+32*4-32*2(,%edx,2),%di
                    179:        shrl $1,%edi
                    180:        andl $0x777,%edi
                    181:        movb SYM(xcolors)(,%edi,4),%cl
                    182: .La_ehb3:
                    183:         BYTE_MOVE %ah,PARTIAL_REG(%edx,%dl)
                    184:        cmpb $32,%ah
                    185:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    186:        jc   .La_ehb4
                    187:        movw SYM(colors_for_drawing)+32*4-32*2(,%edx,2),%di
                    188:        shrl $1,%edi
                    189:        andl $0x777,%edi
                    190:        movb SYM(xcolors)(,%edi,4),%ch
                    191: .La_ehb4:
                    192:        roll $16,%ecx
                    193: 
                    194:        movl %ecx,(%ebx,%esi)
                    195:        addl $4,%esi
                    196:        jmp .La_ehb_loop
                    197: 
                    198: .La_ehb_end:
                    199:         ret
                    200: 
                    201:         .globl pfield_linetoscr_normal_asm8
                    202:        FUNCTYPE (pfield_linetoscr_normal_asm8)
                    203:        FUNCTION_ALIGN
                    204: pfield_linetoscr_normal_asm8:
                    205:        xorl %edx,%edx
                    206:        xorl %ebx,%ebx
                    207:        movl 36(%esp),%edi /* diw_end */
                    208:        movl SYM(xlinebuffer),%ebp
                    209:        jmp .La_normal_doloop
                    210:        FUNCTION_ALIGN
                    211: .La_normal_loop:
                    212:         BYTE_MOVE SYM(pixdata)(%esi),PARTIAL_REG(%edx,%dl)
                    213:        BYTE_MOVE SYM(pixdata)+4(%esi),PARTIAL_REG(%ebx,%bl)
                    214:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    215:        movb SYM(colors_for_drawing)(,%ebx,4),%al
                    216:        BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    217:        BYTE_MOVE SYM(pixdata)+5(%esi),PARTIAL_REG(%ebx,%bl)
                    218:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    219:        movb SYM(colors_for_drawing)(,%ebx,4),%ah
                    220: 
                    221:        sall $16,%ecx
                    222:        BYTE_MOVE SYM(pixdata)+2(%esi),PARTIAL_REG(%edx,%dl)
                    223:        sall $16,%eax
                    224: 
                    225:        BYTE_MOVE SYM(pixdata)+6(%esi),PARTIAL_REG(%ebx,%bl)
                    226:        movb SYM(colors_for_drawing)(,%edx,4),%cl
                    227:        movb SYM(colors_for_drawing)(,%ebx,4),%al
                    228:        BYTE_MOVE SYM(pixdata)+3(%esi),PARTIAL_REG(%edx,%dl)
                    229:        BYTE_MOVE SYM(pixdata)+7(%esi),PARTIAL_REG(%ebx,%bl)
                    230:        movb SYM(colors_for_drawing)(,%edx,4),%ch
                    231:        addl $4,%esi
                    232:        roll $16,%ecx
                    233:        movb SYM(colors_for_drawing)(,%ebx,4),%ah
                    234:        roll $16,%eax
                    235: 
                    236:        movl %ecx,-4(%ebp,%esi)
                    237:        cmpl %esi,%edi
                    238:        jbe .La_normal_end
                    239:        movl %eax,(%ebp,%esi)
                    240:        addl $4,%esi
                    241: .La_normal_doloop:
                    242:        cmpl %esi,%edi
                    243:        jnbe .La_normal_loop
                    244: 
                    245: .La_normal_end:
                    246:         ret
                    247: 
                    248:         .globl pfield_linetoscr_hdouble_asm8
                    249:        FUNCTYPE (pfield_linetoscr_hdouble_asm8)
                    250:        FUNCTION_ALIGN
                    251: pfield_linetoscr_hdouble_asm8:
                    252:         shrl $1,%esi
                    253:        xorl %edx,%edx
                    254:        xorl %ebx,%ebx
                    255:        movl 36(%esp),%edi /* diw_end */
                    256:        shrl $1,%edi
                    257:        movl SYM(xlinebuffer),%ebp
                    258:        jmp .La_hdouble_doloop
                    259:        FUNCTION_ALIGN
                    260: .La_hdouble_loop:
                    261:         BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    262:        BYTE_MOVE SYM(pixdata)+3(%esi),PARTIAL_REG(%ebx,%bl)
                    263:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    264:        movl SYM(colors_for_drawing)(,%ebx,4),%eax
                    265:        BYTE_MOVE SYM(pixdata)+0(%esi),PARTIAL_REG(%edx,%dl)
                    266:        BYTE_MOVE SYM(pixdata)+2(%esi),PARTIAL_REG(%ebx,%bl)
                    267:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    268:        movw SYM(colors_for_drawing)(,%ebx,4),%ax
                    269:        addl $2,%esi
                    270: 
                    271:        movl %ecx,-4(%ebp,%esi,2)
                    272:        cmpl %esi,%edi
                    273:        jbe .La_hdouble_end
                    274:        movl %eax,(%ebp,%esi,2)
                    275:        addl $2,%esi
                    276: .La_hdouble_doloop:
                    277:        cmpl %esi,%edi
                    278:        jnbe .La_hdouble_loop
                    279: 
                    280: .La_hdouble_end:
                    281:         addl %esi,%esi
                    282:         ret
                    283: 
                    284:         .globl pfield_linetoscr_hdouble_dpf_asm8
                    285:        FUNCTYPE (pfield_linetoscr_hdouble_dpf_asm8)
                    286:        FUNCTION_ALIGN
                    287: pfield_linetoscr_hdouble_dpf_asm8:
                    288:         shrl $1,%esi
                    289:        xorl %edx,%edx
                    290:        xorl %ebx,%ebx
                    291:        movl 36(%esp),%edi /* diw_end */
                    292:        movl 44(%esp),%ebp
                    293:        shrl $1,%edi
                    294:        jmp .La_hdouble_dpf_doloop
                    295:        FUNCTION_ALIGN
                    296: .La_hdouble_dpf_loop:
                    297:         BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    298:        CLEAR_FOR_BYTE_MOVE(%ebx)
                    299:        BYTE_MOVE SYM(pixdata)+3(%esi),PARTIAL_REG(%ebx,%bl)
                    300:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    301:        BYTE_MOVE (%ebp,%ebx,4),PARTIAL_REG(%ebx,%bl)
                    302:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    303:        movl SYM(colors_for_drawing)(,%ebx,4),%eax
                    304:        BYTE_MOVE SYM(pixdata)+0(%esi),PARTIAL_REG(%edx,%dl)
                    305:        BYTE_MOVE SYM(pixdata)+2(%esi),PARTIAL_REG(%ebx,%bl)
                    306:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    307:        addl $2,%esi
                    308:        BYTE_MOVE (%ebp,%ebx,4),PARTIAL_REG(%ebx,%bl)
                    309:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    310:        movw SYM(colors_for_drawing)(,%ebx,4),%ax
                    311: 
                    312:        movl SYM(xlinebuffer),%ebx
                    313:        movl %ecx,-4(%ebx,%esi,2)
                    314:        cmpl %esi,%edi
                    315:        jbe .La_hdouble_dpf_end
                    316:        movl %eax,(%ebx,%esi,2)
                    317:        addl $2,%esi
                    318: .La_hdouble_dpf_doloop:
                    319:        cmpl %esi,%edi
                    320:        jnbe .La_hdouble_dpf_loop
                    321: 
                    322: .La_hdouble_dpf_end:
                    323:         addl %esi,%esi
                    324:         ret
                    325: 
                    326:         .globl pfield_linetoscr_hdouble_ehb_asm8
                    327:        FUNCTYPE (pfield_linetoscr_hdouble_ehb_asm8)
                    328:        FUNCTION_ALIGN
                    329: pfield_linetoscr_hdouble_ehb_asm8:
                    330:         shrl $1,%esi
                    331:        movl 36(%esp),%edi /* diw_end */
                    332:        shrl $1,%edi
                    333:        xorl %edx,%edx
                    334:        movl SYM(xlinebuffer),%ebp
                    335:        jmp .La_hdouble_ehb_doloop
                    336:        FUNCTION_ALIGN
                    337: .La_hdouble_ehb_loop:
                    338:        BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    339:        cmpb $32,%dl
                    340:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    341:        jc   .La_dehb1
                    342:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%ebx,%bx)
                    343:        shrl $1,%ebx
                    344:        andl $0x777,%ebx
                    345:        movl SYM(xcolors)(,%ebx,4),%ecx
                    346: .La_dehb1:
                    347: 
                    348:        BYTE_MOVE SYM(pixdata)+3(%esi),PARTIAL_REG(%edx,%dl)
                    349:        cmpb $32,%dl
                    350:        movl SYM(colors_for_drawing)(,%edx,4),%eax
                    351:        jc   .La_dehb2
                    352:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%ebx,%bx)
                    353:        shrl $1,%ebx
                    354:        andl $0x777,%ebx
                    355:        movl SYM(xcolors)(,%ebx,4),%eax
                    356: .La_dehb2:
                    357: 
                    358:        BYTE_MOVE SYM(pixdata)+0(%esi),PARTIAL_REG(%edx,%dl)
                    359:        cmpb $32,%dl
                    360:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    361:        jc   .La_dehb3
                    362:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%ebx,%bx)
                    363:        shrl $1,%ebx
                    364:        andl $0x777,%ebx
                    365:        movw SYM(xcolors)(,%ebx,4),%cx
                    366: .La_dehb3:
                    367: 
                    368:        BYTE_MOVE SYM(pixdata)+2(%esi),PARTIAL_REG(%edx,%dl)
                    369:        cmpb $32,%dl
                    370:        movw SYM(colors_for_drawing)(,%edx,4),%ax
                    371:        jc   .La_dehb4
                    372:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%ebx,%bx)
                    373:        shrl $1,%ebx
                    374:        andl $0x777,%ebx
                    375:        movw SYM(xcolors)(,%ebx,4),%ax
                    376: .La_dehb4:
                    377:        addl $2,%esi
                    378: 
                    379:        movl %ecx,-4(%ebp,%esi,2)
                    380:        cmpl %esi,%edi
                    381:        jbe .La_hdouble_ehb_end
                    382:        movl %eax,(%ebp,%esi,2)
                    383:        addl $2,%esi
                    384: .La_hdouble_ehb_doloop:
                    385:        cmpl %esi,%edi
                    386:        jnbe .La_hdouble_ehb_loop
                    387: 
                    388: .La_hdouble_ehb_end:
                    389:         addl %esi,%esi
                    390:         ret
                    391: 
                    392: /* 16 bit functions */
                    393: 
                    394:         .globl pfield_linetoscr_asm16
                    395:        FUNCTYPE (pfield_linetoscr_asm16)
                    396:        FUNCTION_ALIGN
                    397: pfield_linetoscr_asm16:
                    398:        pushl %ebp
                    399:        pushl %edi
                    400:        pushl %esi
                    401:        pushl %ebx
                    402:        movl 24(%esp),%esi /* start */
                    403:        movl 28(%esp),%edi /* lframe_end */
                    404:        
                    405:        movl SYM(colors_for_drawing),%eax
                    406:        
                    407:         movl 20(%esp),%ebx
                    408:        movl SYM(xlinebuffer),%ecx
                    409:        jmp .Lb_do_start_line
                    410:        FUNCTION_ALIGN
                    411: .Lb_start_line:
                    412:        movl %eax,(%ecx,%esi,2)
                    413:        movl %eax,4(%ecx,%esi,2)
                    414:        addl $4,%esi
                    415: .Lb_do_start_line:
                    416:        cmpl %esi,%edi
                    417:        jnbe .Lb_start_line
                    418: 
                    419:        call %ebx
                    420: 
                    421:        /* Finish off the line */
                    422: 
                    423:        movl SYM(xlinebuffer),%ecx
                    424:         movl 36(%esp),%edi /* stoppos */
                    425:        movl SYM(colors_for_drawing),%eax
                    426:        jmp .Lb_do_end_line
                    427:        FUNCTION_ALIGN
                    428: .Lb_end_line:
                    429:        movl %eax,(%ecx,%esi,2)
                    430:        movl %eax,4(%ecx,%esi,2)
                    431:        addl $4,%esi
                    432: .Lb_do_end_line:
                    433:        cmpl %esi,%edi
                    434:        jnbe .Lb_end_line
                    435: 
                    436:        popl %ebx
                    437:        popl %esi
                    438:        popl %edi
                    439:        popl %ebp
                    440:        ret
                    441: 
                    442:         .globl pfield_linetoscr_ham6_asm16
                    443:        FUNCTYPE (pfield_linetoscr_ham6_asm16)
                    444:        FUNCTION_ALIGN
                    445: pfield_linetoscr_ham6_asm16:
                    446:        movl 36(%esp),%edi /* diw_end */
                    447: .Lb_hamloop:
                    448:        cmpl %esi,%edi
                    449:        jbe .Lb_hamend
                    450: 
                    451:        movl SYM(ham_linebuf)+4(,%esi,4),%eax
                    452:        movl SYM(xcolors)(,%eax,4),%ebx
                    453:        movl SYM(ham_linebuf)(,%esi,4),%eax
                    454:        movw SYM(xcolors)(,%eax,4),%bx
                    455:        movl %ebx,(%ecx,%esi,2)
                    456: 
                    457:        movl SYM(ham_linebuf)+12(,%esi,4),%eax
                    458:        movl SYM(xcolors)(,%eax,4),%ebx
                    459:        movl SYM(ham_linebuf)+8(,%esi,4),%eax
                    460:        movw SYM(xcolors)(,%eax,4),%bx
                    461:        movl %ebx,4(%ecx,%esi,2)
                    462: 
                    463:        addl $4,%esi
                    464:        jmp .Lb_hamloop
                    465: .Lb_hamend:
                    466:         ret
                    467: 
                    468:         .globl pfield_linetoscr_dualpf_asm16
                    469:        FUNCTYPE (pfield_linetoscr_dualpf_asm16)
                    470:        FUNCTION_ALIGN
                    471: pfield_linetoscr_dualpf_asm16:
                    472:        movl 44(%esp),%ebp /* lookup_no */
                    473: .Lb_dp_loop:
                    474:         movl 36(%esp),%eax /* diw_end */
                    475:        xorl %edx,%edx
                    476:        cmpl %esi,%eax
                    477:        jbe .Lb_dp_done
                    478: 
                    479:        movl SYM(pixdata)(%esi),%eax
                    480:        
                    481:        movl SYM(xlinebuffer),%ebx
                    482: 
                    483:        movb %ah,%dl
                    484:        movb (%ebp,%edx,4),%dl
                    485:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    486:        movb %al,%dl
                    487:        movb (%ebp,%edx,4),%dl
                    488:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    489:        sarl $16,%eax
                    490:        movl %ecx,(%ebx,%esi,2)
                    491:        movb %ah,%dl
                    492:        movb (%ebp,%edx,4),%dl
                    493:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    494:        movb %al,%dl
                    495:        movb (%ebp,%edx,4),%dl
                    496:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    497:        movl %ecx,4(%ebx,%esi,2)
                    498: 
                    499:        addl $4,%esi
                    500:        jmp .Lb_dp_loop
                    501: 
                    502: .Lb_dp_done:
                    503:        ret
                    504: 
                    505:         .globl pfield_linetoscr_ehb_asm16
                    506:        FUNCTYPE (pfield_linetoscr_ehb_asm16)
                    507:        FUNCTION_ALIGN
                    508: pfield_linetoscr_ehb_asm16:
                    509:        xorl %edx,%edx
                    510:        xorl %ebx,%ebx
                    511: .Lb_ehb_loop:
                    512:        movl 36(%esp),%edi /* diw_end */
                    513:        cmpl %esi,%edi
                    514:        jbe .Lb_ehb_end
                    515:        
                    516:        movl SYM(pixdata)(%esi),%eax
                    517:        movb %ah,%bl
                    518:        cmpb $32,%ah
                    519:        movl SYM(colors_for_drawing)(,%ebx,4),%ecx
                    520:        jc   .Lb_ehb2
                    521:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%ebx,2),PARTIAL_REG(%edi,%di)
                    522:        shrl $1,%edi
                    523:        andl $0x777,%edi
                    524:        movl SYM(xcolors)(,%edi,4),%ecx
                    525: .Lb_ehb2:
                    526:        movb %al,%dl
                    527:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    528:        cmpb $32,%al
                    529:        jc   .Lb_ehb1
                    530: 
                    531:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%edi,%di)
                    532:        shrl $1,%edi
                    533:        andl $0x777,%edi
                    534:        movw SYM(xcolors)(,%edi,4),%cx
                    535: .Lb_ehb1:
                    536:        movl SYM(xlinebuffer),%edi
                    537:        sarl $16,%eax
                    538:        movl %ecx,(%edi,%esi,2)
                    539:        movb %ah,%bl
                    540:        movl SYM(colors_for_drawing)(,%ebx,4),%ecx
                    541:        cmpb $32,%ah
                    542:        jc   .Lb_ehb4
                    543: 
                    544:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%ebx,2),PARTIAL_REG(%edi,%di)
                    545:        shrl $1,%edi
                    546:        andl $0x777,%edi
                    547:        movl SYM(xcolors)(,%edi,4),%ecx
                    548: .Lb_ehb4:
                    549:        movb %al,%dl
                    550:        movw SYM(colors_for_drawing)(,%edx,4),%cx
                    551:        cmpb $32,%al
                    552:        jc   .Lb_ehb3
                    553: 
                    554:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%edi,%di)
                    555:        shrl $1,%edi
                    556:        andl $0x777,%edi
                    557:        movw SYM(xcolors)(,%edi,4),%cx
                    558: .Lb_ehb3:
                    559: 
                    560:        movl SYM(xlinebuffer),%edi
                    561:        movl %ecx,4(%edi,%esi,2)
                    562:        addl $4,%esi
                    563:        jmp .Lb_ehb_loop
                    564: 
                    565: .Lb_ehb_end:
                    566:         ret
                    567: 
                    568:        .globl pfield_linetoscr_normal_asm16
                    569:        FUNCTYPE (pfield_linetoscr_normal_asm16)
                    570:        FUNCTION_ALIGN
                    571: pfield_linetoscr_normal_asm16:
                    572:        movl 36(%esp),%edi /* diw_end */
                    573:        jmp .Lb_normal_doloop
                    574: 
                    575:        FUNCTION_ALIGN
                    576: .Lb_normal_loop:
                    577:        CLEAR_FOR_BYTE_MOVE(%edx)
                    578:        BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    579:        CLEAR_FOR_BYTE_MOVE(%ebx)
                    580:        BYTE_MOVE SYM(pixdata)+5(%esi),PARTIAL_REG(%ebx,%bl)
                    581: 
                    582:        movl SYM(colors_for_drawing)(,%edx,4),%edi
                    583:        movl SYM(colors_for_drawing)(,%ebx,4),%ecx
                    584:        BYTE_MOVE SYM(pixdata)+0(%esi),PARTIAL_REG(%edx,%dl)
                    585:        BYTE_MOVE SYM(pixdata)+4(%esi),PARTIAL_REG(%ebx,%bl)
                    586:        movw SYM(colors_for_drawing)(,%edx,4),%di
                    587:        movw SYM(colors_for_drawing)(,%ebx,4),%cx
                    588:        BYTE_MOVE SYM(pixdata)+3(%esi),PARTIAL_REG(%edx,%dl)
                    589:        BYTE_MOVE SYM(pixdata)+7(%esi),PARTIAL_REG(%ebx,%bl)
                    590:        movl SYM(colors_for_drawing)(,%edx,4),%eax
                    591:        movl SYM(colors_for_drawing)(,%ebx,4),%ebp
                    592:        BYTE_MOVE SYM(pixdata)+2(%esi),PARTIAL_REG(%edx,%dl)
                    593:        BYTE_MOVE SYM(pixdata)+6(%esi),PARTIAL_REG(%ebx,%bl)
                    594:        movw SYM(colors_for_drawing)(,%edx,4),%ax
                    595:        addl $4,%esi
                    596:        movw SYM(colors_for_drawing)(,%ebx,4),%bp
                    597: 
                    598:        movl SYM(xlinebuffer),%ebx
                    599:        movl %edi,-8(%ebx,%esi,2)
                    600:        movl 36(%esp),%edi
                    601:        movl %eax,-4(%ebx,%esi,2)
                    602: 
                    603:        cmpl %esi,%edi
                    604:        jbe .Lb_normal_done
                    605: 
                    606:        movl %ecx,(%ebx,%esi,2)
                    607:        movl %ebp,4(%ebx,%esi,2)
                    608: 
                    609:        addl $4,%esi
                    610: .Lb_normal_doloop:
                    611:        cmpl %esi,%edi
                    612:        jnbe .Lb_normal_loop
                    613: 
                    614: .Lb_normal_done:
                    615:         ret
                    616: 
                    617:        .globl pfield_linetoscr_hdouble_asm16
                    618:        FUNCTYPE (pfield_linetoscr_hdouble_asm16)
                    619:        FUNCTION_ALIGN
                    620: pfield_linetoscr_hdouble_asm16:
                    621:        shrl $1,%esi
                    622:        movl 36(%esp),%eax /* diw_end */
                    623:        shrl $1,%eax
                    624:        movl SYM(xlinebuffer),%ebp
                    625:        CLEAR_FOR_BYTE_MOVE(%edx)
                    626:        CLEAR_FOR_BYTE_MOVE(%ebx)
                    627:        jmp .Lb_hdouble_doloop
                    628: 
                    629:        FUNCTION_ALIGN
                    630: .Lb_hdouble_loop:
                    631:        BYTE_MOVE SYM(pixdata)(%esi),PARTIAL_REG(%edx,%dl)
                    632:        BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%ebx,%bl)
                    633: 
                    634:        addl $2,%esi
                    635:        movl SYM(colors_for_drawing)(,%edx,4),%edi
                    636:        movl SYM(colors_for_drawing)(,%ebx,4),%ecx
                    637:        movl %edi,-8(%ebp,%esi,4)
                    638:        movl %ecx,-4(%ebp,%esi,4)
                    639: 
                    640: .Lb_hdouble_doloop:
                    641:        cmpl %esi,%eax
                    642:        jnbe .Lb_hdouble_loop
                    643: 
                    644: .Lb_hdouble_done:
                    645:         addl %esi,%esi
                    646:         ret
                    647: 
                    648:         .globl pfield_linetoscr_hdouble_dpf_asm16
                    649:        FUNCTYPE (pfield_linetoscr_hdouble_dpf_asm16)
                    650:        FUNCTION_ALIGN
                    651: pfield_linetoscr_hdouble_dpf_asm16:
                    652:         shrl $1,%esi
                    653:        xorl %edx,%edx
                    654:        xorl %ebx,%ebx
                    655:        movl 36(%esp),%edi /* diw_end */
                    656:        movl 44(%esp),%ebp
                    657:        shrl $1,%edi
                    658:        cmpl %esi,%edi
                    659:        jbe .Lb_hdouble_dpf_end
                    660:        jmp .Lb_hdouble_dpf_loop
                    661:        FUNCTION_ALIGN
                    662: .Lb_hdouble_dpf_loop:
                    663:        CLEAR_FOR_BYTE_MOVE(%edx)
                    664:         BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%edx,%dl)
                    665:        CLEAR_FOR_BYTE_MOVE(%ebx)
                    666:        BYTE_MOVE SYM(pixdata)+0(%esi),PARTIAL_REG(%ebx,%bl)
                    667:        BYTE_MOVE (%ebp,%edx,4),PARTIAL_REG(%edx,%dl)
                    668:        BYTE_MOVE (%ebp,%ebx,4),PARTIAL_REG(%ebx,%bl)
                    669:        addl $2,%esi
                    670:        movl SYM(colors_for_drawing)(,%edx,4),%ecx
                    671:        movl SYM(colors_for_drawing)(,%ebx,4),%eax
                    672: 
                    673:        movl SYM(xlinebuffer),%ebx
                    674:        movl %eax,-8(%ebx,%esi,4)
                    675:        cmpl %esi,%edi
                    676:        movl %ecx,-4(%ebx,%esi,4)
                    677:        jnbe .Lb_hdouble_dpf_loop
                    678:        jmp  .Lb_hdouble_dpf_end
                    679: 
                    680: .Lb_hdouble_dpf_end:
                    681:         addl %esi,%esi
                    682:         ret
                    683: 
                    684:        .globl pfield_linetoscr_hdouble_ehb_asm16
                    685:        FUNCTYPE (pfield_linetoscr_hdouble_ehb_asm16)
                    686:        FUNCTION_ALIGN
                    687: pfield_linetoscr_hdouble_ehb_asm16:
                    688:        shrl $1,%esi
                    689:        movl 36(%esp),%eax /* diw_end */
                    690:        shrl $1,%eax
                    691:        movl SYM(xlinebuffer),%ebp
                    692:        jmp .Lb_hdouble_ehb_doloop
                    693: 
                    694:        FUNCTION_ALIGN
                    695: .Lb_hdouble_ehb_loop:
                    696:        CLEAR_FOR_BYTE_MOVE(%edx)
                    697:        BYTE_MOVE SYM(pixdata)(%esi),PARTIAL_REG(%edx,%dl)
                    698:        CLEAR_FOR_BYTE_MOVE(%ebx)
                    699:        BYTE_MOVE SYM(pixdata)+1(%esi),PARTIAL_REG(%ebx,%bl)
                    700:        addl $2,%esi
                    701: 
                    702:        cmpb $32,%dl
                    703:        movl SYM(colors_for_drawing)(,%edx,4),%edi
                    704:        jc   .Lb_dehb1
                    705:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%edx,2),PARTIAL_REG(%edi,%di)
                    706:        shrl $1,%edi
                    707:        andl $0x777,%edi
                    708:        movl SYM(xcolors)(,%edi,4),%edi
                    709: .Lb_dehb1:
                    710: 
                    711:        cmpb $32,%bl
                    712:        movl SYM(colors_for_drawing)(,%ebx,4),%ecx
                    713:        jc   .Lb_dehb2
                    714:        WORD_MOVE SYM(colors_for_drawing)+32*4-32*2(,%ebx,2),PARTIAL_REG(%ecx,%cx)
                    715:        shrl $1,%ecx
                    716:        andl $0x777,%ecx
                    717:        movl SYM(xcolors)(,%ecx,4),%ecx
                    718: .Lb_dehb2:
                    719:        movl %edi,-8(%ebp,%esi,4)
                    720:        movl %ecx,-4(%ebp,%esi,4)
                    721: 
                    722: .Lb_hdouble_ehb_doloop:
                    723:        cmpl %esi,%eax
                    724:        jnbe .Lb_hdouble_ehb_loop
                    725: 
                    726: .Lb_hdouble_ehb_done:
                    727:         addl %esi,%esi
                    728:         ret
                    729: 
                    730:         .globl DitherLine
                    731: #ifndef USE_UNDERSCORE
                    732:        .type    DitherLine,@function
                    733: #endif
                    734:        FUNCTION_ALIGN
                    735: DitherLine:
                    736:        pushl %ebp
                    737:        pushl %edi
                    738:        pushl %esi
                    739:        pushl %ebx
                    740:        movl 20(%esp),%edi
                    741:        xorl %ebx,%ebx
                    742:        movw 36(%esp),%bx
                    743:        movl 32(%esp),%edx
                    744:        andl $3,%edx
                    745:        sall $15,%edx
                    746:        movl 28(%esp),%eax
                    747:        andl $3,%eax
                    748:        sall $12,%eax
                    749:        leal SYM(cidx)(%edx,%eax),%ebp
                    750:        xorb %dl,%dl
                    751:        movl $8,%ecx
                    752:        testl %ebx,%ebx
                    753:        je .Li_end
                    754:        cmpl $8,40(%esp)
                    755:        je .Li_fast
                    756: 
                    757:        movl 24(%esp),%esi
                    758: .Li_loop:
                    759:        movzwl (%esi),%eax
                    760:        movzbl (%eax,%ebp),%eax
                    761:        subl 40(%esp),%ecx
                    762:        sall %cl,%eax
                    763:        orb %al,%dl
                    764:        testl %ecx,%ecx
                    765:        jne .Li_1
                    766:        movb %dl,(%edi)
                    767:        incl %edi
                    768:        movl $8,%ecx
                    769:        xorb %dl,%dl
                    770: .Li_1:
                    771:        movzwl 2(%esi),%eax
                    772:        movzbl 4096(%ebp,%eax),%eax
                    773:        subl 40(%esp),%ecx
                    774:        sall %cl,%eax
                    775:        orb %al,%dl
                    776:        testl %ecx,%ecx
                    777:        jne .Li_2
                    778:        movb %dl,(%edi)
                    779:        incl %edi
                    780:        movl $8,%ecx
                    781:        xorb %dl,%dl
                    782: .Li_2:
                    783:        movzwl 4(%esi),%eax
                    784:        movzbl 8192(%ebp,%eax),%eax
                    785:        subl 40(%esp),%ecx
                    786:        sall %cl,%eax
                    787:        orb %al,%dl
                    788:        testl %ecx,%ecx
                    789:        jne .Li_3
                    790:        movb %dl,(%edi)
                    791:        incl %edi
                    792:        movl $8,%ecx
                    793:        xorb %dl,%dl
                    794: .Li_3:
                    795:        movzwl 6(%esi),%eax
                    796:        movzbl 12288(%ebp,%eax),%eax
                    797:        addl $8,%esi
                    798:        subl 40(%esp),%ecx
                    799:        sall %cl,%eax
                    800:        orb %al,%dl
                    801:        testl %ecx,%ecx
                    802:        jne .Li_4
                    803:        movb %dl,(%edi)
                    804:        incl %edi
                    805:        movl $8,%ecx
                    806:        xorb %dl,%dl
                    807: .Li_4:
                    808:        subl $4,%ebx
                    809:        jne .Li_loop
                    810:        jmp .Li_end
                    811:        
                    812:        /* Fast 8-bit version */
                    813: .Li_fast:
                    814:        movl 24(%esp),%esi
                    815:        xorl %edx,%edx
                    816:        xorl %ecx,%ecx
                    817:        FUNCTION_ALIGN
                    818: .Li_fast_loop:
                    819:        movw (%esi),%edx
                    820:        movw 2(%esi),%cx
                    821:        movb (%edx,%ebp),%al    
                    822:        movw 4(%esi),%dx
                    823:        movb 4096(%ebp,%ecx),%ah
                    824:        
                    825:        movw 6(%esi),%cx
                    826:        sall $16,%eax
                    827:        movb 8192(%ebp,%edx),%al
                    828:        
                    829:        movb 12288(%ebp,%ecx),%ah
                    830:        
                    831:        roll $16,%eax
                    832:        movl %eax,(%edi)
                    833:        addl $4,%edi
                    834:        addl $8,%esi
                    835:        
                    836:        subl $4,%ebx
                    837:        jne .Li_fast_loop
                    838: 
                    839: .Li_end:
                    840:        popl %ebx
                    841:        popl %esi
                    842:        popl %edi
                    843:        popl %ebp
                    844:        ret
                    845: #if 0  
                    846: .globl compiler_do_rts
                    847:         /* Entry: EDX == regs.regs + 15 */
                    848: compiler_do_rts:
                    849:         movl (%edx),%esi
                    850:         addl address_space,%esi
                    851:        movl jsr_num,%ecx
                    852:        movl (%esi),%esi
                    853:        orl %ecx,%ecx
                    854:        bswapl %esi
                    855:        jz cdrts_noway
                    856:        decl %ecx
                    857:        cmpl jsr_rets(,%ecx,4),%esi
                    858:        jne cdrts_noway
                    859:        movl jsr_hash(,%ecx,4),%ebx
                    860:        movl (%ebx),%ebx
                    861:        orl %ebx,%ebx
                    862:        jz cdrts_noway
                    863:        addl $4,(%edx)
                    864:        movl %ecx,jsr_num
                    865:        jmp %ebx
                    866: cdrts_noway:
                    867:         ret
                    868: #endif
                    869: #if 0
                    870: .globl longget_stub
                    871: longget_stub:
                    872:         pushl %ecx
                    873:         pushl %eax
                    874:        pushl %edx
                    875:        call SYM(longget)
                    876:        popl %ecx
                    877:        movl %eax,%ecx
                    878:        popl %eax
                    879:         ret
                    880: 
                    881: .globl wordget_stub
                    882: wordget_stub:
                    883:         pushl %ecx
                    884:         pushl %eax
                    885:        pushl %edx
                    886:        call SYM(wordget)
                    887:        popl %ecx
                    888:        movl %eax,%ecx
                    889:        popl %eax
                    890:         ret
                    891: 
                    892: .globl byteget_stub
                    893: byteget_stub:
                    894:         pushl %ecx
                    895:         pushl %eax
                    896:        pushl %edx
                    897:        call SYM(byteget)
                    898:        popl %ecx
                    899:        movl %eax,%ecx
                    900:        popl %eax
                    901:         ret
                    902: 
                    903: .globl longput_stub
                    904: longput_stub:
                    905:         pushl %ecx
                    906:         pushl %eax
                    907:        pushl %ebx
                    908:        pushl %edx
                    909:        call SYM(longput)
                    910:        movl %eax,%ecx
                    911:        addl $8,%esp
                    912:        popl %eax
                    913:         ret
                    914: 
                    915: .globl wordput_stub
                    916: wordput_stub:
                    917:         pushl %ecx
                    918:         pushl %eax
                    919:        pushl %ebx
                    920:        pushl %edx
                    921:        call SYM(wordput)
                    922:        movl %eax,%ecx
                    923:        addl $8,%esp
                    924:        popl %eax
                    925:         ret
                    926: 
                    927: .globl byteput_stub
                    928: byteput_stub:
                    929:         pushl %ecx
                    930:         pushl %eax
                    931:        pushl %ebx
                    932:        pushl %edx
                    933:        call SYM(byteput)
                    934:        movl %eax,%ecx
                    935:        addl $8,%esp
                    936:        popl %eax
                    937:         ret
                    938: #endif

unix.superglobalmegacorp.com

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