Annotation of uae/src/md-i386-gcc/X86.S, revision 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.