Annotation of coherent/b/kernel/io.386/xla.s, revision 1.1

1.1     ! root        1: /************************************************************************/
        !             2: /*     Copyright (c) 1988, 1989 ARCHIVE Corporation                    */
        !             3: /*     This program is an unpublished work fully protected by the      */
        !             4: /*     United States Copyright laws and is considered a trade secret   */
        !             5: /*     belonging to Archive Corporation.                               */
        !             6: /************************************************************************/
        !             7: /*     file: xla.orig.s                asm code for xl.c               */
        !             8: /*                                                                     */
        !             9: /*                     13JUL88  14:00                                  */
        !            10: /*     Unix port       05/14/1989                                      */
        !            11: /************************************************************************/
        !            12: 
        !            13: /************************************************************************/
        !            14: /*     386 version                                                     */
        !            15: /************************************************************************/
        !            16:        
        !            17: /************************************************************************/
        !            18: /*     request buffer structure                                        */
        !            19: /*     must match struc rb{} in xl.c                                   */
        !            20: /************************************************************************/
        !            21:                .unixorder
        !            22: rb:                                    /* request buffer structure     */
        !            23: rbnxt:         .long   0                       /* ptr to next packet   */
        !            24: rbfun:         .byte   0                       /* function             */
        !            25: rbsts:         .byte   0                       /* status               */
        !            26: rbsgn:         .value  0                       /* segment #            */
        !            27: rbadr:         .long   0                       /* addr of buffer       */
        !            28: rbmap:         .long   0                       /* bad sector map       */
        !            29: rbhed:         .byte   0                       /* fdc head             */
        !            30: rbcyl:         .byte   0                       /* fdc cylinder         */
        !            31: rbsct:         .byte   0                       /* base fdc sector      */
        !            32: rbtrk:         .byte   0                       /* tape track           */
        !            33: rbtps:         .byte   0                       /*      segment         */
        !            34: rbidc:         .byte   0                       /* read id cylinder     */
        !            35: rbids:         .byte   0                       /*         sct          */
        !            36: rbnbk:         .byte   0                       /* # blocks             */
        !            37: rberc:         .byte   0                       /* error count          */
        !            38: rbers:         .byte   0,0,0                   /* error sectors        */
        !            39: rbtbl:         .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
        !            40:                                                /* parsed segment params*/
        !            41:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
        !            42: /rb    ends
        !            43: /********************************************************/
        !            44: /      data section                                    */
        !            45: /********************************************************/
        !            46:                .data
        !            47: /      tables must be on page boundary
        !            48: /      which is why they are in _data
        !            49:                .globl  xl_log2
        !            50:                .globl  xl_alg2
        !            51:                .globl  xl_mx02
        !            52:                .globl  xl_mxc0
        !            53:                .globl  xl_mxc3
        !            54: xl_log2:       .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /ecc tables
        !            55:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /2
        !            56:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /3
        !            57:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /4
        !            58:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /5
        !            59:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /6
        !            60:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /7
        !            61:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /8
        !            62:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /9
        !            63:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /10
        !            64:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /11
        !            65:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /12
        !            66:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /13
        !            67:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /14
        !            68:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /15
        !            69:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /16
        !            70: xl_alg2:       .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /ecc tables
        !            71:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /2
        !            72:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /3
        !            73:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /4
        !            74:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /5
        !            75:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /6
        !            76:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /7
        !            77:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /8
        !            78:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /9
        !            79:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /10
        !            80:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /11
        !            81:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /12
        !            82:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /13
        !            83:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /14
        !            84:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /15
        !            85:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /16
        !            86: xl_mx02:       .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /ecc tables
        !            87:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /2
        !            88:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /3
        !            89:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /4
        !            90:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /5
        !            91:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /6
        !            92:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /7
        !            93:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /8
        !            94:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /9
        !            95:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /10
        !            96:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /11
        !            97:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /12
        !            98:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /13
        !            99:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /14
        !           100:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /15
        !           101:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /16
        !           102: xl_mxc0:       .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /ecc tables
        !           103:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /2
        !           104:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /3
        !           105:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /4
        !           106:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /5
        !           107:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /6
        !           108:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /7
        !           109:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /8
        !           110:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /9
        !           111:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /10
        !           112:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /11
        !           113:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /12
        !           114:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /13
        !           115:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /14
        !           116:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /15
        !           117:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /16
        !           118: xl_mxc3:       .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /ecc tables
        !           119:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /2
        !           120:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /3
        !           121:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /4
        !           122:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /5
        !           123:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /6
        !           124:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /7
        !           125:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /8
        !           126:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /9
        !           127:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /10
        !           128:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /11
        !           129:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /12
        !           130:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /13
        !           131:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /14
        !           132:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /15
        !           133:                .byte   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /16
        !           134: encj:          .long   0
        !           135: chkj:          .long   0
        !           136: 
        !           137:                .globl  xl_encs
        !           138:                .globl  xl_chks
        !           139: xl_encs:       .byte   0
        !           140: xl_chks:       .byte   0
        !           141: 
        !           142:                .globl  xl_tbl
        !           143:                .globl  xl_bst
        !           144:                .globl  xl_sct
        !           145:                .globl  xl_cnt
        !           146:                .globl  xl_ofs
        !           147: xl_tbl:                .long   0               /* ptr to rb.tbl                */
        !           148: xl_bst:                .byte   0               /* base sector for segment      */
        !           149: xl_sct:                .byte   0               /* sector # for next chunk      */
        !           150: xl_cnt:                .long   0               /* # bytes to xfer next chunk   */
        !           151: xl_ofs:                .long   0               /* offset for next chunk        */
        !           152: prb:           .long   0               /* pointer to rb                */
        !           153: xl_nbk:                .byte   0               /* # blocks / segment           */
        !           154:                                        /* rb.tbl format:               */
        !           155:                                        /* bits 15-10 = dma count       */
        !           156:                                        /* bits  9-5  = dma offset >> 5 */
        !           157:                                        /* bits  4-0  = sector          */
        !           158: 
        !           159:                .bss
        !           160: /********************************************************/
        !           161: /      code section                                    */
        !           162: /********************************************************/
        !           163:                .text
        !           164:                .align 4
        !           165: /********************************************************/
        !           166: /      xl_move (src, dest, cnt)                        */
        !           167: /********************************************************/
        !           168:                .globl  xl_move
        !           169: xl_move:
        !           170:                push    %ebp            /* set up
        !           171:                mov     %esp,%ebp
        !           172:                push    %es
        !           173:                push    %edi
        !           174:                push    %esi
        !           175:                push    %ds
        !           176:                pop     %es
        !           177:                mov     8(%ebp),%esi
        !           178:                mov     12(%ebp),%edi
        !           179:                mov     16(%ebp),%ecx
        !           180:                cld
        !           181:                jcxz    xl_mov0         /* br if no data
        !           182:                shr     $2,%ecx         /* move longs
        !           183:                repz
        !           184:                movsl
        !           185:                mov     16(%ebp),%ecx   /* move bytes (if any)
        !           186:                and     $3,%ecx
        !           187:                rep
        !           188:                movsb
        !           189: xl_mov0:
        !           190:                pop     %esi            /* exit
        !           191:                pop     %edi
        !           192:                pop     %es
        !           193:                pop     %ebp
        !           194:                ret
        !           195: 
        !           196: /********************************************************/
        !           197: /      xl_tbi  initialize table                        */
        !           198: /********************************************************/
        !           199:                .globl  xl_tbi
        !           200: xl_tbi:
        !           201:                push    %ebx
        !           202:                push    %esi
        !           203: /
        !           204:                movl    $enc2,%eax              /initialize xl_encs
        !           205:                subl    $enc1,%eax
        !           206:                movb    %al,xl_encs
        !           207:                movl    $chk2,%eax              /initialize xl_chks
        !           208:                subl    $chk1,%eax
        !           209:                movb    %al,xl_chks
        !           210: /
        !           211:                mov     $xl_alg2,%ebx           /init alog2 table
        !           212:                movb    $01,%al
        !           213: tbli0:
        !           214:                movb    %al,(%ebx)
        !           215:                inc     %ebx
        !           216:                addb    %al,%al
        !           217:                jnc     tbli1
        !           218:                xorb    $0x87,%al
        !           219: tbli1:
        !           220:                cmpb    $01,%al
        !           221:                jne     tbli0
        !           222:                movb    %al,(%ebx)
        !           223: /
        !           224:                mov     $xl_alg2,%esi
        !           225:                movb    $0x0ff,xl_log2
        !           226:                xor     %eax,%eax
        !           227:                xor     %ebx,%ebx
        !           228: tbli2:
        !           229:                movb    (%esi),%bl
        !           230:                movb    %al,xl_log2(%ebx)
        !           231:                inc     %esi
        !           232:                inc     %eax
        !           233:                cmpb    $255,%al
        !           234:                jne     tbli2
        !           235: /
        !           236:                movl    $xl_mx02,%esi           /init mpy by 02 table
        !           237:                mov     $0x00200,%ecx
        !           238: tbli3:
        !           239:                call    _mpy
        !           240:                movb    %al,(%esi)
        !           241:                inc     %esi
        !           242:                incb    %cl
        !           243:                jne     tbli3
        !           244: /
        !           245:                mov     $xl_mxc0,%esi           /init mpy by c0 table
        !           246:                mov     $0x0c000,%ecx
        !           247: tbli4:         call    _mpy
        !           248:                movb    %al,(%esi)
        !           249:                inc     %esi
        !           250:                incb    %cl
        !           251:                jne     tbli4
        !           252: /
        !           253:                movl    $xl_mxc3,%esi           /init mpy by c3 table
        !           254:                mov     $0x0c300,%ecx
        !           255: tbli5:
        !           256:                call    _mpy
        !           257:                movb    %al,(%esi)
        !           258:                inc     %esi
        !           259:                incb    %cl
        !           260:                jne     tbli5
        !           261:                pop     %esi
        !           262:                pop     %ebx
        !           263:                ret
        !           264: 
        !           265: /encm          macro   a,c,d,o
        !           266: /              xor     o*1024(%edi),%e&a&x     ;eax = new r0 bytes
        !           267: /              xor     %e&c&x,%e&d&x           ;set up edx for later
        !           268: /              movb    %&a&l,%bl               ;multiply 4 bytes by c0
        !           269: /              xorb    (%ebp,%ebx),%&c&l               ; and xor to ecx
        !           270: /              movb    %&a&h,%bl               ; ecx will be new r2
        !           271: /              xorb    (%ebp,%ebx),%&c&h
        !           272: /              rol     $16,%e&a&x
        !           273: /              rol     $16,%e&c&x
        !           274: /              movb    %&a&l,%bl
        !           275: /              xorb    (%ebp,%ebx),%&c&l
        !           276: /              movb    %&a&h,%bl
        !           277: /              xorb    (%ebp,%ebx),%&c&h
        !           278: /              rol     $16,%e&a&x
        !           279: /              rol     $16,%e&c&x
        !           280: /              xor     %e&c&x,%e&d&x           ;edx = new r1
        !           281: /              endm
        !           282: 
        !           283: /********************************************************/
        !           284: /      xl_enc(bfr, nblks)   3/32  1024 byte blocks     */
        !           285: /********************************************************/
        !           286: /
        !           287:                .globl  xl_enc
        !           288: xl_enc:
        !           289:                enter   $0, $4          / loop count is a local variable
        !           290:                push    %ebx
        !           291:                push    %edi
        !           292:                push    %esi
        !           293:                mov     8(%ebp),%edi    /edi = bfr
        !           294:                mov     12(%ebp),%ebx   /ebx = nblks
        !           295:                mov     %ebx,%eax       /adjust edi
        !           296:                dec     %eax
        !           297:                shl     $10,%eax
        !           298:                add     %eax,%edi
        !           299:                mov     $32,%eax                /set encj according to # blocks
        !           300:                subb    %bl,%al
        !           301:                mulb    xl_encs
        !           302:                add     $enc1,%eax
        !           303:                mov     %eax,encj
        !           304:                mov     $256,-4(%ebp)   /set up for encode loop
        !           305: enc0:
        !           306:                mov     $xl_mxc0,%esi
        !           307:                xor     %ebx,%ebx       /edx ends up = r2
        !           308:                xor     %edx,%edx       /edx ends up = r2
        !           309:                xor     %ecx,%ecx       /ecx ends up = r1
        !           310:                xor     %eax,%eax       /eax ends up = r0
        !           311:                jmp     *encj
        !           312: /              .even
        !           313:                .align  2
        !           314: /
        !           315: /              encode data
        !           316: /
        !           317: enc1:
        !           318:                /encm   c,a,d,-31
        !           319:                xor     -31744(%edi),%ecx       /eax = new r0 bytes
        !           320:                xor     %eax,%edx               /set up edx for later
        !           321:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           322:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           323:                movb    %ch,%bl                 / ecx will be new r2
        !           324:                xorb    (%ebx,%esi),%ah
        !           325:                rol     $16,%ecx
        !           326:                rol     $16,%eax
        !           327:                movb    %cl,%bl
        !           328:                xorb    (%ebx,%esi),%al
        !           329:                movb    %ch,%bl
        !           330:                xorb    (%ebx,%esi),%ah
        !           331:                rol     $16,%ecx
        !           332:                rol     $16,%eax
        !           333:                xor     %eax,%edx               /edx = new r1
        !           334: enc2:
        !           335:                /encm   a,d,c,-30
        !           336:                xor     -30720(%edi),%eax       /eax = new r0 bytes
        !           337:                xor     %edx,%ecx               /set up edx for later
        !           338:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           339:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           340:                movb    %ah,%bl                 / ecx will be new r2
        !           341:                xorb    (%ebx,%esi),%dh
        !           342:                rol     $16,%eax
        !           343:                rol     $16,%edx
        !           344:                movb    %al,%bl
        !           345:                xorb    (%ebx,%esi),%dl
        !           346:                movb    %ah,%bl
        !           347:                xorb    (%ebx,%esi),%dh
        !           348:                rol     $16,%eax
        !           349:                rol     $16,%edx
        !           350:                xor     %edx,%ecx               /edx = new r1
        !           351:                /encm   d,c,a,-29
        !           352:                xor     -29696(%edi),%edx       /eax = new r0 bytes
        !           353:                xor     %ecx,%eax               /set up edx for later
        !           354:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           355:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           356:                movb    %dh,%bl                 / ecx will be new r2
        !           357:                xorb    (%ebx,%esi),%ch
        !           358:                rol     $16,%edx
        !           359:                rol     $16,%ecx
        !           360:                movb    %dl,%bl
        !           361:                xorb    (%ebx,%esi),%cl
        !           362:                movb    %dh,%bl
        !           363:                xorb    (%ebx,%esi),%ch
        !           364:                rol     $16,%edx
        !           365:                rol     $16,%ecx
        !           366:                xor     %ecx,%eax               /edx = new r1
        !           367:                /encm   c,a,d,-28
        !           368:                xor     -28672(%edi),%ecx       /eax = new r0 bytes
        !           369:                xor     %eax,%edx               /set up edx for later
        !           370:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           371:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           372:                movb    %ch,%bl                 / ecx will be new r2
        !           373:                xorb    (%ebx,%esi),%ah
        !           374:                rol     $16,%ecx
        !           375:                rol     $16,%eax
        !           376:                movb    %cl,%bl
        !           377:                xorb    (%ebx,%esi),%al
        !           378:                movb    %ch,%bl
        !           379:                xorb    (%ebx,%esi),%ah
        !           380:                rol     $16,%ecx
        !           381:                rol     $16,%eax
        !           382:                xor     %eax,%edx               /edx = new r1
        !           383:                /encm   a,d,c,-27
        !           384:                xor     -27648(%edi),%eax       /eax = new r0 bytes
        !           385:                xor     %edx,%ecx               /set up edx for later
        !           386:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           387:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           388:                movb    %ah,%bl                 / ecx will be new r2
        !           389:                xorb    (%ebx,%esi),%dh
        !           390:                rol     $16,%eax
        !           391:                rol     $16,%edx
        !           392:                movb    %al,%bl
        !           393:                xorb    (%ebx,%esi),%dl
        !           394:                movb    %ah,%bl
        !           395:                xorb    (%ebx,%esi),%dh
        !           396:                rol     $16,%eax
        !           397:                rol     $16,%edx
        !           398:                xor     %edx,%ecx               /edx = new r1
        !           399:                /encm   d,c,a,-26
        !           400:                xor     -26624(%edi),%edx       /eax = new r0 bytes
        !           401:                xor     %ecx,%eax               /set up edx for later
        !           402:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           403:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           404:                movb    %dh,%bl                 / ecx will be new r2
        !           405:                xorb    (%ebx,%esi),%ch
        !           406:                rol     $16,%edx
        !           407:                rol     $16,%ecx
        !           408:                movb    %dl,%bl
        !           409:                xorb    (%ebx,%esi),%cl
        !           410:                movb    %dh,%bl
        !           411:                xorb    (%ebx,%esi),%ch
        !           412:                rol     $16,%edx
        !           413:                rol     $16,%ecx
        !           414:                xor     %ecx,%eax               /edx = new r1
        !           415:                /encm   c,a,d,-25
        !           416:                xor     -25600(%edi),%ecx       /eax = new r0 bytes
        !           417:                xor     %eax,%edx               /set up edx for later
        !           418:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           419:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           420:                movb    %ch,%bl                 / ecx will be new r2
        !           421:                xorb    (%ebx,%esi),%ah
        !           422:                rol     $16,%ecx
        !           423:                rol     $16,%eax
        !           424:                movb    %cl,%bl
        !           425:                xorb    (%ebx,%esi),%al
        !           426:                movb    %ch,%bl
        !           427:                xorb    (%ebx,%esi),%ah
        !           428:                rol     $16,%ecx
        !           429:                rol     $16,%eax
        !           430:                xor     %eax,%edx               /edx = new r1
        !           431:                /encm   a,d,c,-24
        !           432:                xor     -24576(%edi),%eax       /eax = new r0 bytes
        !           433:                xor     %edx,%ecx               /set up edx for later
        !           434:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           435:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           436:                movb    %ah,%bl                 / ecx will be new r2
        !           437:                xorb    (%ebx,%esi),%dh
        !           438:                rol     $16,%eax
        !           439:                rol     $16,%edx
        !           440:                movb    %al,%bl
        !           441:                xorb    (%ebx,%esi),%dl
        !           442:                movb    %ah,%bl
        !           443:                xorb    (%ebx,%esi),%dh
        !           444:                rol     $16,%eax
        !           445:                rol     $16,%edx
        !           446:                xor     %edx,%ecx               /edx = new r1
        !           447:                /encm   d,c,a,-23
        !           448:                xor     -23552(%edi),%edx       /eax = new r0 bytes
        !           449:                xor     %ecx,%eax               /set up edx for later
        !           450:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           451:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           452:                movb    %dh,%bl                 / ecx will be new r2
        !           453:                xorb    (%ebx,%esi),%ch
        !           454:                rol     $16,%edx
        !           455:                rol     $16,%ecx
        !           456:                movb    %dl,%bl
        !           457:                xorb    (%ebx,%esi),%cl
        !           458:                movb    %dh,%bl
        !           459:                xorb    (%ebx,%esi),%ch
        !           460:                rol     $16,%edx
        !           461:                rol     $16,%ecx
        !           462:                xor     %ecx,%eax               /edx = new r1
        !           463:                /encm   c,a,d,-22
        !           464:                xor     -22528(%edi),%ecx       /eax = new r0 bytes
        !           465:                xor     %eax,%edx               /set up edx for later
        !           466:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           467:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           468:                movb    %ch,%bl                 / ecx will be new r2
        !           469:                xorb    (%ebx,%esi),%ah
        !           470:                rol     $16,%ecx
        !           471:                rol     $16,%eax
        !           472:                movb    %cl,%bl
        !           473:                xorb    (%ebx,%esi),%al
        !           474:                movb    %ch,%bl
        !           475:                xorb    (%ebx,%esi),%ah
        !           476:                rol     $16,%ecx
        !           477:                rol     $16,%eax
        !           478:                xor     %eax,%edx               /edx = new r1
        !           479:                /encm   a,d,c,-21
        !           480:                xor     -21504(%edi),%eax       /eax = new r0 bytes
        !           481:                xor     %edx,%ecx               /set up edx for later
        !           482:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           483:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           484:                movb    %ah,%bl                 / ecx will be new r2
        !           485:                xorb    (%ebx,%esi),%dh
        !           486:                rol     $16,%eax
        !           487:                rol     $16,%edx
        !           488:                movb    %al,%bl
        !           489:                xorb    (%ebx,%esi),%dl
        !           490:                movb    %ah,%bl
        !           491:                xorb    (%ebx,%esi),%dh
        !           492:                rol     $16,%eax
        !           493:                rol     $16,%edx
        !           494:                xor     %edx,%ecx               /edx = new r1
        !           495:                /encm   d,c,a,-20
        !           496:                xor     -20480(%edi),%edx       /eax = new r0 bytes
        !           497:                xor     %ecx,%eax               /set up edx for later
        !           498:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           499:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           500:                movb    %dh,%bl                 / ecx will be new r2
        !           501:                xorb    (%ebx,%esi),%ch
        !           502:                rol     $16,%edx
        !           503:                rol     $16,%ecx
        !           504:                movb    %dl,%bl
        !           505:                xorb    (%ebx,%esi),%cl
        !           506:                movb    %dh,%bl
        !           507:                xorb    (%ebx,%esi),%ch
        !           508:                rol     $16,%edx
        !           509:                rol     $16,%ecx
        !           510:                xor     %ecx,%eax               /edx = new r1
        !           511:                /encm   c,a,d,-19
        !           512:                xor     -19456(%edi),%ecx       /eax = new r0 bytes
        !           513:                xor     %eax,%edx               /set up edx for later
        !           514:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           515:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           516:                movb    %ch,%bl                 / ecx will be new r2
        !           517:                xorb    (%ebx,%esi),%ah
        !           518:                rol     $16,%ecx
        !           519:                rol     $16,%eax
        !           520:                movb    %cl,%bl
        !           521:                xorb    (%ebx,%esi),%al
        !           522:                movb    %ch,%bl
        !           523:                xorb    (%ebx,%esi),%ah
        !           524:                rol     $16,%ecx
        !           525:                rol     $16,%eax
        !           526:                xor     %eax,%edx               /edx = new r1
        !           527:                /encm   a,d,c,-18
        !           528:                xor     -18432(%edi),%eax       /eax = new r0 bytes
        !           529:                xor     %edx,%ecx               /set up edx for later
        !           530:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           531:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           532:                movb    %ah,%bl                 / ecx will be new r2
        !           533:                xorb    (%ebx,%esi),%dh
        !           534:                rol     $16,%eax
        !           535:                rol     $16,%edx
        !           536:                movb    %al,%bl
        !           537:                xorb    (%ebx,%esi),%dl
        !           538:                movb    %ah,%bl
        !           539:                xorb    (%ebx,%esi),%dh
        !           540:                rol     $16,%eax
        !           541:                rol     $16,%edx
        !           542:                xor     %edx,%ecx               /edx = new r1
        !           543:                /encm   d,c,a,-17
        !           544:                xor     -17408(%edi),%edx       /eax = new r0 bytes
        !           545:                xor     %ecx,%eax               /set up edx for later
        !           546:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           547:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           548:                movb    %dh,%bl                 / ecx will be new r2
        !           549:                xorb    (%ebx,%esi),%ch
        !           550:                rol     $16,%edx
        !           551:                rol     $16,%ecx
        !           552:                movb    %dl,%bl
        !           553:                xorb    (%ebx,%esi),%cl
        !           554:                movb    %dh,%bl
        !           555:                xorb    (%ebx,%esi),%ch
        !           556:                rol     $16,%edx
        !           557:                rol     $16,%ecx
        !           558:                xor     %ecx,%eax               /edx = new r1
        !           559:                /encm   c,a,d,-16
        !           560:                xor     -16384(%edi),%ecx       /eax = new r0 bytes
        !           561:                xor     %eax,%edx               /set up edx for later
        !           562:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           563:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           564:                movb    %ch,%bl                 / ecx will be new r2
        !           565:                xorb    (%ebx,%esi),%ah
        !           566:                rol     $16,%ecx
        !           567:                rol     $16,%eax
        !           568:                movb    %cl,%bl
        !           569:                xorb    (%ebx,%esi),%al
        !           570:                movb    %ch,%bl
        !           571:                xorb    (%ebx,%esi),%ah
        !           572:                rol     $16,%ecx
        !           573:                rol     $16,%eax
        !           574:                xor     %eax,%edx               /edx = new r1
        !           575:                /encm   a,d,c,-15
        !           576:                xor     -15360(%edi),%eax       /eax = new r0 bytes
        !           577:                xor     %edx,%ecx               /set up edx for later
        !           578:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           579:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           580:                movb    %ah,%bl                 / ecx will be new r2
        !           581:                xorb    (%ebx,%esi),%dh
        !           582:                rol     $16,%eax
        !           583:                rol     $16,%edx
        !           584:                movb    %al,%bl
        !           585:                xorb    (%ebx,%esi),%dl
        !           586:                movb    %ah,%bl
        !           587:                xorb    (%ebx,%esi),%dh
        !           588:                rol     $16,%eax
        !           589:                rol     $16,%edx
        !           590:                xor     %edx,%ecx               /edx = new r1
        !           591:                /encm   d,c,a,-14
        !           592:                xor     -14336(%edi),%edx       /eax = new r0 bytes
        !           593:                xor     %ecx,%eax               /set up edx for later
        !           594:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           595:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           596:                movb    %dh,%bl                 / ecx will be new r2
        !           597:                xorb    (%ebx,%esi),%ch
        !           598:                rol     $16,%edx
        !           599:                rol     $16,%ecx
        !           600:                movb    %dl,%bl
        !           601:                xorb    (%ebx,%esi),%cl
        !           602:                movb    %dh,%bl
        !           603:                xorb    (%ebx,%esi),%ch
        !           604:                rol     $16,%edx
        !           605:                rol     $16,%ecx
        !           606:                xor     %ecx,%eax               /edx = new r1
        !           607:                /encm   c,a,d,-13
        !           608:                xor     -13312(%edi),%ecx       /eax = new r0 bytes
        !           609:                xor     %eax,%edx               /set up edx for later
        !           610:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           611:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           612:                movb    %ch,%bl                 / ecx will be new r2
        !           613:                xorb    (%ebx,%esi),%ah
        !           614:                rol     $16,%ecx
        !           615:                rol     $16,%eax
        !           616:                movb    %cl,%bl
        !           617:                xorb    (%ebx,%esi),%al
        !           618:                movb    %ch,%bl
        !           619:                xorb    (%ebx,%esi),%ah
        !           620:                rol     $16,%ecx
        !           621:                rol     $16,%eax
        !           622:                xor     %eax,%edx               /edx = new r1
        !           623:                /encm   a,d,c,-12
        !           624:                xor     -12288(%edi),%eax       /eax = new r0 bytes
        !           625:                xor     %edx,%ecx               /set up edx for later
        !           626:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           627:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           628:                movb    %ah,%bl                 / ecx will be new r2
        !           629:                xorb    (%ebx,%esi),%dh
        !           630:                rol     $16,%eax
        !           631:                rol     $16,%edx
        !           632:                movb    %al,%bl
        !           633:                xorb    (%ebx,%esi),%dl
        !           634:                movb    %ah,%bl
        !           635:                xorb    (%ebx,%esi),%dh
        !           636:                rol     $16,%eax
        !           637:                rol     $16,%edx
        !           638:                xor     %edx,%ecx               /edx = new r1
        !           639:                /encm   d,c,a,-11
        !           640:                xor     -11264(%edi),%edx       /eax = new r0 bytes
        !           641:                xor     %ecx,%eax               /set up edx for later
        !           642:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           643:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           644:                movb    %dh,%bl                 / ecx will be new r2
        !           645:                xorb    (%ebx,%esi),%ch
        !           646:                rol     $16,%edx
        !           647:                rol     $16,%ecx
        !           648:                movb    %dl,%bl
        !           649:                xorb    (%ebx,%esi),%cl
        !           650:                movb    %dh,%bl
        !           651:                xorb    (%ebx,%esi),%ch
        !           652:                rol     $16,%edx
        !           653:                rol     $16,%ecx
        !           654:                xor     %ecx,%eax               /edx = new r1
        !           655:                /encm   c,a,d,-10
        !           656:                xor     -10240(%edi),%ecx       /eax = new r0 bytes
        !           657:                xor     %eax,%edx               /set up edx for later
        !           658:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           659:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           660:                movb    %ch,%bl                 / ecx will be new r2
        !           661:                xorb    (%ebx,%esi),%ah
        !           662:                rol     $16,%ecx
        !           663:                rol     $16,%eax
        !           664:                movb    %cl,%bl
        !           665:                xorb    (%ebx,%esi),%al
        !           666:                movb    %ch,%bl
        !           667:                xorb    (%ebx,%esi),%ah
        !           668:                rol     $16,%ecx
        !           669:                rol     $16,%eax
        !           670:                xor     %eax,%edx               /edx = new r1
        !           671:                /encm   a,d,c,-9
        !           672:                xor     -9216(%edi),%eax        /eax = new r0 bytes
        !           673:                xor     %edx,%ecx               /set up edx for later
        !           674:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           675:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           676:                movb    %ah,%bl                 / ecx will be new r2
        !           677:                xorb    (%ebx,%esi),%dh
        !           678:                rol     $16,%eax
        !           679:                rol     $16,%edx
        !           680:                movb    %al,%bl
        !           681:                xorb    (%ebx,%esi),%dl
        !           682:                movb    %ah,%bl
        !           683:                xorb    (%ebx,%esi),%dh
        !           684:                rol     $16,%eax
        !           685:                rol     $16,%edx
        !           686:                xor     %edx,%ecx               /edx = new r1
        !           687:                /encm   d,c,a,-8
        !           688:                xor     -8192(%edi),%edx        /eax = new r0 bytes
        !           689:                xor     %ecx,%eax               /set up edx for later
        !           690:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           691:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           692:                movb    %dh,%bl                 / ecx will be new r2
        !           693:                xorb    (%ebx,%esi),%ch
        !           694:                rol     $16,%edx
        !           695:                rol     $16,%ecx
        !           696:                movb    %dl,%bl
        !           697:                xorb    (%ebx,%esi),%cl
        !           698:                movb    %dh,%bl
        !           699:                xorb    (%ebx,%esi),%ch
        !           700:                rol     $16,%edx
        !           701:                rol     $16,%ecx
        !           702:                xor     %ecx,%eax               /edx = new r1
        !           703:                /encm   c,a,d,-7
        !           704:                xor     -7168(%edi),%ecx        /eax = new r0 bytes
        !           705:                xor     %eax,%edx               /set up edx for later
        !           706:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           707:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           708:                movb    %ch,%bl                 / ecx will be new r2
        !           709:                xorb    (%ebx,%esi),%ah
        !           710:                rol     $16,%ecx
        !           711:                rol     $16,%eax
        !           712:                movb    %cl,%bl
        !           713:                xorb    (%ebx,%esi),%al
        !           714:                movb    %ch,%bl
        !           715:                xorb    (%ebx,%esi),%ah
        !           716:                rol     $16,%ecx
        !           717:                rol     $16,%eax
        !           718:                xor     %eax,%edx               /edx = new r1
        !           719:                /encm   a,d,c,-6
        !           720:                xor     -6144(%edi),%eax        /eax = new r0 bytes
        !           721:                xor     %edx,%ecx               /set up edx for later
        !           722:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           723:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           724:                movb    %ah,%bl                 / ecx will be new r2
        !           725:                xorb    (%ebx,%esi),%dh
        !           726:                rol     $16,%eax
        !           727:                rol     $16,%edx
        !           728:                movb    %al,%bl
        !           729:                xorb    (%ebx,%esi),%dl
        !           730:                movb    %ah,%bl
        !           731:                xorb    (%ebx,%esi),%dh
        !           732:                rol     $16,%eax
        !           733:                rol     $16,%edx
        !           734:                xor     %edx,%ecx               /edx = new r1
        !           735:                /encm   d,c,a,-5
        !           736:                xor     -5120(%edi),%edx        /eax = new r0 bytes
        !           737:                xor     %ecx,%eax               /set up edx for later
        !           738:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           739:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           740:                movb    %dh,%bl                 / ecx will be new r2
        !           741:                xorb    (%ebx,%esi),%ch
        !           742:                rol     $16,%edx
        !           743:                rol     $16,%ecx
        !           744:                movb    %dl,%bl
        !           745:                xorb    (%ebx,%esi),%cl
        !           746:                movb    %dh,%bl
        !           747:                xorb    (%ebx,%esi),%ch
        !           748:                rol     $16,%edx
        !           749:                rol     $16,%ecx
        !           750:                xor     %ecx,%eax               /edx = new r1
        !           751:                /encm   c,a,d,-4
        !           752:                xor     -4096(%edi),%ecx        /eax = new r0 bytes
        !           753:                xor     %eax,%edx               /set up edx for later
        !           754:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           755:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           756:                movb    %ch,%bl                 / ecx will be new r2
        !           757:                xorb    (%ebx,%esi),%ah
        !           758:                rol     $16,%ecx
        !           759:                rol     $16,%eax
        !           760:                movb    %cl,%bl
        !           761:                xorb    (%ebx,%esi),%al
        !           762:                movb    %ch,%bl
        !           763:                xorb    (%ebx,%esi),%ah
        !           764:                rol     $16,%ecx
        !           765:                rol     $16,%eax
        !           766:                xor     %eax,%edx               /edx = new r1
        !           767:                /encm   a,d,c,-3
        !           768:                xor     -3072(%edi),%eax        /eax = new r0 bytes
        !           769:                xor     %edx,%ecx               /set up edx for later
        !           770:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           771:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           772:                movb    %ah,%bl                 / ecx will be new r2
        !           773:                xorb    (%ebx,%esi),%dh
        !           774:                rol     $16,%eax
        !           775:                rol     $16,%edx
        !           776:                movb    %al,%bl
        !           777:                xorb    (%ebx,%esi),%dl
        !           778:                movb    %ah,%bl
        !           779:                xorb    (%ebx,%esi),%dh
        !           780:                rol     $16,%eax
        !           781:                rol     $16,%edx
        !           782:                xor     %edx,%ecx               /edx = new r1
        !           783:                mov     %edx,-2048(%edi)        /store remainder bytes
        !           784:                mov     %ecx,-1024(%edi)
        !           785:                mov     %eax,(%edi)
        !           786:                add     $4,%edi
        !           787:                decw    -4(%ebp)                /loop till done
        !           788:                jnz     enc0
        !           789:                pop     %esi                    /exit
        !           790:                pop     %edi
        !           791:                pop     %ebx
        !           792:                leave
        !           793:                ret
        !           794: 
        !           795: /********************************************************/
        !           796: /      xl_chk(bfr, nblks)   3/32  1024 byte blocks     */
        !           797: /      out:    eax = 0 if ok                           */
        !           798: /********************************************************/
        !           799:                .globl  xl_chk
        !           800: xl_chk:
        !           801:                enter   $0, $4          / loop count is a local variable
        !           802:                push    %ebx
        !           803:                push    %edi
        !           804:                push    %esi
        !           805:                mov     8(%ebp),%edi    /edi = adr
        !           806:                mov     12(%ebp),%ebx   /ebx = # blocks
        !           807:                mov     %ebx,%eax       /adjust edi
        !           808:                dec     %eax
        !           809:                shl     $10,%eax
        !           810:                add     %eax,%edi
        !           811:                mov     $32,%eax                /set chkj according to # blocks
        !           812:                subb    %bl,%al
        !           813:                mulb    xl_chks
        !           814:                add     $chk1,%eax
        !           815:                mov     %eax,chkj
        !           816:                mov     $256,-4(%ebp)   /set up for check loop
        !           817: chk0:
        !           818:                mov     $xl_mxc0,%esi
        !           819:                xor     %ebx,%ebx
        !           820:                xor     %edx,%edx       /edx ends up = r2
        !           821:                xor     %ecx,%ecx       /ecx ends up = r1
        !           822:                xor     %eax,%eax       /eax ends up = r0
        !           823:                jmp     *chkj
        !           824: /              .even
        !           825:                .align  2
        !           826: /
        !           827: /              encode data
        !           828: /
        !           829: chk1:
        !           830:                /encm   c,a,d,-31
        !           831:                xor     -31744(%edi),%ecx       /eax = new r0 bytes
        !           832:                xor     %eax,%edx               /set up edx for later
        !           833:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           834:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           835:                movb    %ch,%bl                 / ecx will be new r2
        !           836:                xorb    (%ebx,%esi),%ah
        !           837:                rol     $16,%ecx
        !           838:                rol     $16,%eax
        !           839:                movb    %cl,%bl
        !           840:                xorb    (%ebx,%esi),%al
        !           841:                movb    %ch,%bl
        !           842:                xorb    (%ebx,%esi),%ah
        !           843:                rol     $16,%ecx
        !           844:                rol     $16,%eax
        !           845:                xor     %eax,%edx               /edx = new r1
        !           846: chk2:
        !           847:                /encm   a,d,c,-30
        !           848:                xor     -30720(%edi),%eax       /eax = new r0 bytes
        !           849:                xor     %edx,%ecx               /set up edx for later
        !           850:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           851:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           852:                movb    %ah,%bl                 / ecx will be new r2
        !           853:                xorb    (%ebx,%esi),%dh
        !           854:                rol     $16,%eax
        !           855:                rol     $16,%edx
        !           856:                movb    %al,%bl
        !           857:                xorb    (%ebx,%esi),%dl
        !           858:                movb    %ah,%bl
        !           859:                xorb    (%ebx,%esi),%dh
        !           860:                rol     $16,%eax
        !           861:                rol     $16,%edx
        !           862:                xor     %edx,%ecx               /edx = new r1
        !           863:                /encm   d,c,a,-29
        !           864:                xor     -29696(%edi),%edx       /eax = new r0 bytes
        !           865:                xor     %ecx,%eax               /set up edx for later
        !           866:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           867:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           868:                movb    %dh,%bl                 / ecx will be new r2
        !           869:                xorb    (%ebx,%esi),%ch
        !           870:                rol     $16,%edx
        !           871:                rol     $16,%ecx
        !           872:                movb    %dl,%bl
        !           873:                xorb    (%ebx,%esi),%cl
        !           874:                movb    %dh,%bl
        !           875:                xorb    (%ebx,%esi),%ch
        !           876:                rol     $16,%edx
        !           877:                rol     $16,%ecx
        !           878:                xor     %ecx,%eax               /edx = new r1
        !           879:                /encm   c,a,d,-28
        !           880:                xor     -28672(%edi),%ecx       /eax = new r0 bytes
        !           881:                xor     %eax,%edx               /set up edx for later
        !           882:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           883:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           884:                movb    %ch,%bl                 / ecx will be new r2
        !           885:                xorb    (%ebx,%esi),%ah
        !           886:                rol     $16,%ecx
        !           887:                rol     $16,%eax
        !           888:                movb    %cl,%bl
        !           889:                xorb    (%ebx,%esi),%al
        !           890:                movb    %ch,%bl
        !           891:                xorb    (%ebx,%esi),%ah
        !           892:                rol     $16,%ecx
        !           893:                rol     $16,%eax
        !           894:                xor     %eax,%edx               /edx = new r1
        !           895:                /encm   a,d,c,-27
        !           896:                xor     -27648(%edi),%eax       /eax = new r0 bytes
        !           897:                xor     %edx,%ecx               /set up edx for later
        !           898:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           899:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           900:                movb    %ah,%bl                 / ecx will be new r2
        !           901:                xorb    (%ebx,%esi),%dh
        !           902:                rol     $16,%eax
        !           903:                rol     $16,%edx
        !           904:                movb    %al,%bl
        !           905:                xorb    (%ebx,%esi),%dl
        !           906:                movb    %ah,%bl
        !           907:                xorb    (%ebx,%esi),%dh
        !           908:                rol     $16,%eax
        !           909:                rol     $16,%edx
        !           910:                xor     %edx,%ecx               /edx = new r1
        !           911:                /encm   d,c,a,-26
        !           912:                xor     -26624(%edi),%edx       /eax = new r0 bytes
        !           913:                xor     %ecx,%eax               /set up edx for later
        !           914:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           915:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           916:                movb    %dh,%bl                 / ecx will be new r2
        !           917:                xorb    (%ebx,%esi),%ch
        !           918:                rol     $16,%edx
        !           919:                rol     $16,%ecx
        !           920:                movb    %dl,%bl
        !           921:                xorb    (%ebx,%esi),%cl
        !           922:                movb    %dh,%bl
        !           923:                xorb    (%ebx,%esi),%ch
        !           924:                rol     $16,%edx
        !           925:                rol     $16,%ecx
        !           926:                xor     %ecx,%eax               /edx = new r1
        !           927:                /encm   c,a,d,-25
        !           928:                xor     -25600(%edi),%ecx       /eax = new r0 bytes
        !           929:                xor     %eax,%edx               /set up edx for later
        !           930:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           931:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           932:                movb    %ch,%bl                 / ecx will be new r2
        !           933:                xorb    (%ebx,%esi),%ah
        !           934:                rol     $16,%ecx
        !           935:                rol     $16,%eax
        !           936:                movb    %cl,%bl
        !           937:                xorb    (%ebx,%esi),%al
        !           938:                movb    %ch,%bl
        !           939:                xorb    (%ebx,%esi),%ah
        !           940:                rol     $16,%ecx
        !           941:                rol     $16,%eax
        !           942:                xor     %eax,%edx               /edx = new r1
        !           943:                /encm   a,d,c,-24
        !           944:                xor     -24576(%edi),%eax       /eax = new r0 bytes
        !           945:                xor     %edx,%ecx               /set up edx for later
        !           946:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           947:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           948:                movb    %ah,%bl                 / ecx will be new r2
        !           949:                xorb    (%ebx,%esi),%dh
        !           950:                rol     $16,%eax
        !           951:                rol     $16,%edx
        !           952:                movb    %al,%bl
        !           953:                xorb    (%ebx,%esi),%dl
        !           954:                movb    %ah,%bl
        !           955:                xorb    (%ebx,%esi),%dh
        !           956:                rol     $16,%eax
        !           957:                rol     $16,%edx
        !           958:                xor     %edx,%ecx               /edx = new r1
        !           959:                /encm   d,c,a,-23
        !           960:                xor     -23552(%edi),%edx       /eax = new r0 bytes
        !           961:                xor     %ecx,%eax               /set up edx for later
        !           962:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !           963:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !           964:                movb    %dh,%bl                 / ecx will be new r2
        !           965:                xorb    (%ebx,%esi),%ch
        !           966:                rol     $16,%edx
        !           967:                rol     $16,%ecx
        !           968:                movb    %dl,%bl
        !           969:                xorb    (%ebx,%esi),%cl
        !           970:                movb    %dh,%bl
        !           971:                xorb    (%ebx,%esi),%ch
        !           972:                rol     $16,%edx
        !           973:                rol     $16,%ecx
        !           974:                xor     %ecx,%eax               /edx = new r1
        !           975:                /encm   c,a,d,-22
        !           976:                xor     -22528(%edi),%ecx       /eax = new r0 bytes
        !           977:                xor     %eax,%edx               /set up edx for later
        !           978:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !           979:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !           980:                movb    %ch,%bl                 / ecx will be new r2
        !           981:                xorb    (%ebx,%esi),%ah
        !           982:                rol     $16,%ecx
        !           983:                rol     $16,%eax
        !           984:                movb    %cl,%bl
        !           985:                xorb    (%ebx,%esi),%al
        !           986:                movb    %ch,%bl
        !           987:                xorb    (%ebx,%esi),%ah
        !           988:                rol     $16,%ecx
        !           989:                rol     $16,%eax
        !           990:                xor     %eax,%edx               /edx = new r1
        !           991:                /encm   a,d,c,-21
        !           992:                xor     -21504(%edi),%eax       /eax = new r0 bytes
        !           993:                xor     %edx,%ecx               /set up edx for later
        !           994:                movb    %al,%bl                 /multiply 4 bytes by c0
        !           995:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !           996:                movb    %ah,%bl                 / ecx will be new r2
        !           997:                xorb    (%ebx,%esi),%dh
        !           998:                rol     $16,%eax
        !           999:                rol     $16,%edx
        !          1000:                movb    %al,%bl
        !          1001:                xorb    (%ebx,%esi),%dl
        !          1002:                movb    %ah,%bl
        !          1003:                xorb    (%ebx,%esi),%dh
        !          1004:                rol     $16,%eax
        !          1005:                rol     $16,%edx
        !          1006:                xor     %edx,%ecx               /edx = new r1
        !          1007:                /encm   d,c,a,-20
        !          1008:                xor     -20480(%edi),%edx       /eax = new r0 bytes
        !          1009:                xor     %ecx,%eax               /set up edx for later
        !          1010:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1011:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1012:                movb    %dh,%bl                 / ecx will be new r2
        !          1013:                xorb    (%ebx,%esi),%ch
        !          1014:                rol     $16,%edx
        !          1015:                rol     $16,%ecx
        !          1016:                movb    %dl,%bl
        !          1017:                xorb    (%ebx,%esi),%cl
        !          1018:                movb    %dh,%bl
        !          1019:                xorb    (%ebx,%esi),%ch
        !          1020:                rol     $16,%edx
        !          1021:                rol     $16,%ecx
        !          1022:                xor     %ecx,%eax               /edx = new r1
        !          1023:                /encm   c,a,d,-19
        !          1024:                xor     -19456(%edi),%ecx       /eax = new r0 bytes
        !          1025:                xor     %eax,%edx               /set up edx for later
        !          1026:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1027:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1028:                movb    %ch,%bl                 / ecx will be new r2
        !          1029:                xorb    (%ebx,%esi),%ah
        !          1030:                rol     $16,%ecx
        !          1031:                rol     $16,%eax
        !          1032:                movb    %cl,%bl
        !          1033:                xorb    (%ebx,%esi),%al
        !          1034:                movb    %ch,%bl
        !          1035:                xorb    (%ebx,%esi),%ah
        !          1036:                rol     $16,%ecx
        !          1037:                rol     $16,%eax
        !          1038:                xor     %eax,%edx               /edx = new r1
        !          1039:                /encm   a,d,c,-18
        !          1040:                xor     -18432(%edi),%eax       /eax = new r0 bytes
        !          1041:                xor     %edx,%ecx               /set up edx for later
        !          1042:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1043:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1044:                movb    %ah,%bl                 / ecx will be new r2
        !          1045:                xorb    (%ebx,%esi),%dh
        !          1046:                rol     $16,%eax
        !          1047:                rol     $16,%edx
        !          1048:                movb    %al,%bl
        !          1049:                xorb    (%ebx,%esi),%dl
        !          1050:                movb    %ah,%bl
        !          1051:                xorb    (%ebx,%esi),%dh
        !          1052:                rol     $16,%eax
        !          1053:                rol     $16,%edx
        !          1054:                xor     %edx,%ecx               /edx = new r1
        !          1055:                /encm   d,c,a,-17
        !          1056:                xor     -17408(%edi),%edx       /eax = new r0 bytes
        !          1057:                xor     %ecx,%eax               /set up edx for later
        !          1058:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1059:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1060:                movb    %dh,%bl                 / ecx will be new r2
        !          1061:                xorb    (%ebx,%esi),%ch
        !          1062:                rol     $16,%edx
        !          1063:                rol     $16,%ecx
        !          1064:                movb    %dl,%bl
        !          1065:                xorb    (%ebx,%esi),%cl
        !          1066:                movb    %dh,%bl
        !          1067:                xorb    (%ebx,%esi),%ch
        !          1068:                rol     $16,%edx
        !          1069:                rol     $16,%ecx
        !          1070:                xor     %ecx,%eax               /edx = new r1
        !          1071:                /encm   c,a,d,-16
        !          1072:                xor     -16384(%edi),%ecx       /eax = new r0 bytes
        !          1073:                xor     %eax,%edx               /set up edx for later
        !          1074:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1075:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1076:                movb    %ch,%bl                 / ecx will be new r2
        !          1077:                xorb    (%ebx,%esi),%ah
        !          1078:                rol     $16,%ecx
        !          1079:                rol     $16,%eax
        !          1080:                movb    %cl,%bl
        !          1081:                xorb    (%ebx,%esi),%al
        !          1082:                movb    %ch,%bl
        !          1083:                xorb    (%ebx,%esi),%ah
        !          1084:                rol     $16,%ecx
        !          1085:                rol     $16,%eax
        !          1086:                xor     %eax,%edx               /edx = new r1
        !          1087:                /encm   a,d,c,-15
        !          1088:                xor     -15360(%edi),%eax       /eax = new r0 bytes
        !          1089:                xor     %edx,%ecx               /set up edx for later
        !          1090:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1091:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1092:                movb    %ah,%bl                 / ecx will be new r2
        !          1093:                xorb    (%ebx,%esi),%dh
        !          1094:                rol     $16,%eax
        !          1095:                rol     $16,%edx
        !          1096:                movb    %al,%bl
        !          1097:                xorb    (%ebx,%esi),%dl
        !          1098:                movb    %ah,%bl
        !          1099:                xorb    (%ebx,%esi),%dh
        !          1100:                rol     $16,%eax
        !          1101:                rol     $16,%edx
        !          1102:                xor     %edx,%ecx               /edx = new r1
        !          1103:                /encm   d,c,a,-14
        !          1104:                xor     -14336(%edi),%edx       /eax = new r0 bytes
        !          1105:                xor     %ecx,%eax               /set up edx for later
        !          1106:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1107:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1108:                movb    %dh,%bl                 / ecx will be new r2
        !          1109:                xorb    (%ebx,%esi),%ch
        !          1110:                rol     $16,%edx
        !          1111:                rol     $16,%ecx
        !          1112:                movb    %dl,%bl
        !          1113:                xorb    (%ebx,%esi),%cl
        !          1114:                movb    %dh,%bl
        !          1115:                xorb    (%ebx,%esi),%ch
        !          1116:                rol     $16,%edx
        !          1117:                rol     $16,%ecx
        !          1118:                xor     %ecx,%eax               /edx = new r1
        !          1119:                /encm   c,a,d,-13
        !          1120:                xor     -13312(%edi),%ecx       /eax = new r0 bytes
        !          1121:                xor     %eax,%edx               /set up edx for later
        !          1122:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1123:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1124:                movb    %ch,%bl                 / ecx will be new r2
        !          1125:                xorb    (%ebx,%esi),%ah
        !          1126:                rol     $16,%ecx
        !          1127:                rol     $16,%eax
        !          1128:                movb    %cl,%bl
        !          1129:                xorb    (%ebx,%esi),%al
        !          1130:                movb    %ch,%bl
        !          1131:                xorb    (%ebx,%esi),%ah
        !          1132:                rol     $16,%ecx
        !          1133:                rol     $16,%eax
        !          1134:                xor     %eax,%edx               /edx = new r1
        !          1135:                /encm   a,d,c,-12
        !          1136:                xor     -12288(%edi),%eax       /eax = new r0 bytes
        !          1137:                xor     %edx,%ecx               /set up edx for later
        !          1138:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1139:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1140:                movb    %ah,%bl                 / ecx will be new r2
        !          1141:                xorb    (%ebx,%esi),%dh
        !          1142:                rol     $16,%eax
        !          1143:                rol     $16,%edx
        !          1144:                movb    %al,%bl
        !          1145:                xorb    (%ebx,%esi),%dl
        !          1146:                movb    %ah,%bl
        !          1147:                xorb    (%ebx,%esi),%dh
        !          1148:                rol     $16,%eax
        !          1149:                rol     $16,%edx
        !          1150:                xor     %edx,%ecx               /edx = new r1
        !          1151:                /encm   d,c,a,-11
        !          1152:                xor     -11264(%edi),%edx       /eax = new r0 bytes
        !          1153:                xor     %ecx,%eax               /set up edx for later
        !          1154:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1155:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1156:                movb    %dh,%bl                 / ecx will be new r2
        !          1157:                xorb    (%ebx,%esi),%ch
        !          1158:                rol     $16,%edx
        !          1159:                rol     $16,%ecx
        !          1160:                movb    %dl,%bl
        !          1161:                xorb    (%ebx,%esi),%cl
        !          1162:                movb    %dh,%bl
        !          1163:                xorb    (%ebx,%esi),%ch
        !          1164:                rol     $16,%edx
        !          1165:                rol     $16,%ecx
        !          1166:                xor     %ecx,%eax               /edx = new r1
        !          1167:                /encm   c,a,d,-10
        !          1168:                xor     -10240(%edi),%ecx       /eax = new r0 bytes
        !          1169:                xor     %eax,%edx               /set up edx for later
        !          1170:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1171:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1172:                movb    %ch,%bl                 / ecx will be new r2
        !          1173:                xorb    (%ebx,%esi),%ah
        !          1174:                rol     $16,%ecx
        !          1175:                rol     $16,%eax
        !          1176:                movb    %cl,%bl
        !          1177:                xorb    (%ebx,%esi),%al
        !          1178:                movb    %ch,%bl
        !          1179:                xorb    (%ebx,%esi),%ah
        !          1180:                rol     $16,%ecx
        !          1181:                rol     $16,%eax
        !          1182:                xor     %eax,%edx               /edx = new r1
        !          1183:                /encm   a,d,c,-9
        !          1184:                xor     -9216(%edi),%eax        /eax = new r0 bytes
        !          1185:                xor     %edx,%ecx               /set up edx for later
        !          1186:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1187:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1188:                movb    %ah,%bl                 / ecx will be new r2
        !          1189:                xorb    (%ebx,%esi),%dh
        !          1190:                rol     $16,%eax
        !          1191:                rol     $16,%edx
        !          1192:                movb    %al,%bl
        !          1193:                xorb    (%ebx,%esi),%dl
        !          1194:                movb    %ah,%bl
        !          1195:                xorb    (%ebx,%esi),%dh
        !          1196:                rol     $16,%eax
        !          1197:                rol     $16,%edx
        !          1198:                xor     %edx,%ecx               /edx = new r1
        !          1199:                /encm   d,c,a,-8
        !          1200:                xor     -8192(%edi),%edx        /eax = new r0 bytes
        !          1201:                xor     %ecx,%eax               /set up edx for later
        !          1202:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1203:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1204:                movb    %dh,%bl                 / ecx will be new r2
        !          1205:                xorb    (%ebx,%esi),%ch
        !          1206:                rol     $16,%edx
        !          1207:                rol     $16,%ecx
        !          1208:                movb    %dl,%bl
        !          1209:                xorb    (%ebx,%esi),%cl
        !          1210:                movb    %dh,%bl
        !          1211:                xorb    (%ebx,%esi),%ch
        !          1212:                rol     $16,%edx
        !          1213:                rol     $16,%ecx
        !          1214:                xor     %ecx,%eax               /edx = new r1
        !          1215:                /encm   c,a,d,-7
        !          1216:                xor     -7168(%edi),%ecx        /eax = new r0 bytes
        !          1217:                xor     %eax,%edx               /set up edx for later
        !          1218:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1219:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1220:                movb    %ch,%bl                 / ecx will be new r2
        !          1221:                xorb    (%ebx,%esi),%ah
        !          1222:                rol     $16,%ecx
        !          1223:                rol     $16,%eax
        !          1224:                movb    %cl,%bl
        !          1225:                xorb    (%ebx,%esi),%al
        !          1226:                movb    %ch,%bl
        !          1227:                xorb    (%ebx,%esi),%ah
        !          1228:                rol     $16,%ecx
        !          1229:                rol     $16,%eax
        !          1230:                xor     %eax,%edx               /edx = new r1
        !          1231:                /encm   a,d,c,-6
        !          1232:                xor     -6144(%edi),%eax        /eax = new r0 bytes
        !          1233:                xor     %edx,%ecx               /set up edx for later
        !          1234:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1235:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1236:                movb    %ah,%bl                 / ecx will be new r2
        !          1237:                xorb    (%ebx,%esi),%dh
        !          1238:                rol     $16,%eax
        !          1239:                rol     $16,%edx
        !          1240:                movb    %al,%bl
        !          1241:                xorb    (%ebx,%esi),%dl
        !          1242:                movb    %ah,%bl
        !          1243:                xorb    (%ebx,%esi),%dh
        !          1244:                rol     $16,%eax
        !          1245:                rol     $16,%edx
        !          1246:                xor     %edx,%ecx               /edx = new r1
        !          1247:                /encm   d,c,a,-5
        !          1248:                xor     -5120(%edi),%edx        /eax = new r0 bytes
        !          1249:                xor     %ecx,%eax               /set up edx for later
        !          1250:                movb    %dl,%bl                 /multiply 4 bytes by c0
        !          1251:                xorb    (%ebx,%esi),%cl         / and xor to ecx
        !          1252:                movb    %dh,%bl                 / ecx will be new r2
        !          1253:                xorb    (%ebx,%esi),%ch
        !          1254:                rol     $16,%edx
        !          1255:                rol     $16,%ecx
        !          1256:                movb    %dl,%bl
        !          1257:                xorb    (%ebx,%esi),%cl
        !          1258:                movb    %dh,%bl
        !          1259:                xorb    (%ebx,%esi),%ch
        !          1260:                rol     $16,%edx
        !          1261:                rol     $16,%ecx
        !          1262:                xor     %ecx,%eax               /edx = new r1
        !          1263:                /encm   c,a,d,-4
        !          1264:                xor     -4096(%edi),%ecx        /eax = new r0 bytes
        !          1265:                xor     %eax,%edx               /set up edx for later
        !          1266:                movb    %cl,%bl                 /multiply 4 bytes by c0
        !          1267:                xorb    (%ebx,%esi),%al         / and xor to ecx
        !          1268:                movb    %ch,%bl                 / ecx will be new r2
        !          1269:                xorb    (%ebx,%esi),%ah
        !          1270:                rol     $16,%ecx
        !          1271:                rol     $16,%eax
        !          1272:                movb    %cl,%bl
        !          1273:                xorb    (%ebx,%esi),%al
        !          1274:                movb    %ch,%bl
        !          1275:                xorb    (%ebx,%esi),%ah
        !          1276:                rol     $16,%ecx
        !          1277:                rol     $16,%eax
        !          1278:                xor     %eax,%edx               /edx = new r1
        !          1279:                /encm   a,d,c,-3
        !          1280:                xor     -3072(%edi),%eax        /eax = new r0 bytes
        !          1281:                xor     %edx,%ecx               /set up edx for later
        !          1282:                movb    %al,%bl                 /multiply 4 bytes by c0
        !          1283:                xorb    (%ebx,%esi),%dl         / and xor to ecx
        !          1284:                movb    %ah,%bl                 / ecx will be new r2
        !          1285:                xorb    (%ebx,%esi),%dh
        !          1286:                rol     $16,%eax
        !          1287:                rol     $16,%edx
        !          1288:                movb    %al,%bl
        !          1289:                xorb    (%ebx,%esi),%dl
        !          1290:                movb    %ah,%bl
        !          1291:                xorb    (%ebx,%esi),%dh
        !          1292:                rol     $16,%eax
        !          1293:                rol     $16,%edx
        !          1294:                xor     %edx,%ecx               /edx = new r1
        !          1295:                xor     -2048(%edi),%edx        /check encoded data
        !          1296:                xor     -1024(%edi),%ecx
        !          1297:                xor     (%edi),%eax
        !          1298:                add     $4,%edi                 /adv 4 columns
        !          1299:                or      %ecx,%eax               /br if error
        !          1300:                or      %edx,%eax
        !          1301:                jnz     chk3
        !          1302:                decw    -4(%ebp)                /loop till done
        !          1303:                jnz     chk0
        !          1304: chk3:
        !          1305:                pop     %esi                    /exit
        !          1306:                pop     %edi
        !          1307:                pop     %ebx
        !          1308:                leave
        !          1309:                ret
        !          1310: /********************************************************/
        !          1311: /      mpy     eax = ch*cl                             */
        !          1312: /********************************************************/
        !          1313: _mpy:
        !          1314:                movb    $0,%al
        !          1315:                orb     %cl,%cl         /return if 0
        !          1316:                je      mpy0
        !          1317:                orb     %ch,%ch
        !          1318:                je      mpy0
        !          1319: /
        !          1320: /      al=log[ch]+log[cl]
        !          1321: /
        !          1322:                xor     %ebx,%ebx
        !          1323:                movb    %ch,%bl
        !          1324:                movb    xl_log2(%ebx),%al
        !          1325: 
        !          1326:                movb    %cl,%bl
        !          1327: /
        !          1328: /      al = sum modulo 255
        !          1329: /
        !          1330:                addb    xl_log2(%ebx),%al
        !          1331:                adcb    $1,%al
        !          1332:                adcb    $255,%al
        !          1333: 
        !          1334:                mov     $xl_alg2,%ebx
        !          1335:                xlat
        !          1336: mpy0:
        !          1337:                ret
        !          1338: 

unix.superglobalmegacorp.com

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