Annotation of coherent/b/kernel/io.386/xla.s, revision 1.1.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.