Annotation of researchv9/jerq/src/lib/j/bitblt.out, revision 1.1.1.1

1.1       root        1: #      line 99999
                      2:        .file   "bitblt.c"
                      3:        .data
                      4:        .text
                      5:        .align  4
                      6:        .def    bitblt; .val    bitblt; .scl    2;      .type   044;    .endef
                      7:        .globl  bitblt
                      8: bitblt:
                      9:        save    &.R1
                     10:        addw2   &.F1,%sp
                     11: #      /* BITBLT()     Moves bits around on the screen, and does a LOT of it
                     12: #       *
                     13: #       *      WARNING
                     14: #       *      WARNING:  to any future modifier of this code.  This is highly 
                     15: #       *              hand optimized code, it pushes the frame pointer and
                     16: #       *              references locals off the stack pointer, 
                     17: #       *              and it even simulates register
                     18: #       *              allocation.  Be very careful if you edit this.
                     19: #       */
                     20: #      
                     21: #      #include <jerq.h>
                     22: #                      /* alignment codes for narrow rectangles */
                     23: #      #define S_STRADDLE      0x4     /* source straddles a word boundary */
                     24: #      #define D_STRADDLE      0x8     /* dest straddles a word boundary */
                     25: #      #define LEFTDIR 8
                     26: #      #define NOSHIFT 4
                     27: #      #define DAMMIT  4               /* you'll see why */
                     28: #      #undef  sw
                     29: #      #define DX1     m
                     30: #      
                     31: #      bitblt(sm,r,dm,p,fc)
                     32: #      Bitmap *sm,*dm;
                     33: #      Rectangle r;
                     34: #      Point p;
                     35: #      int fc;
                     36: #      {
                     37: #              register Word *source,*dest;            /* %r8-%r7 */
                     38: #              register Word sw, dw;                   /* %r6-%r5 */
                     39: #              register UWord m;                       /* %r4     */
                     40: #              register int i;                         /* %r3     */
                     41: #      
                     42: #              int a,b,j,h,w,dx1,px31,rx31;
                     43: #              unsigned int mask1,mask2,mask3,mask4,ntmask1,ntmask2;
                     44: #              int dummy1, dummy2;             /* for future use, CANNOT CHANGE */
                     45: #                                              /* NUMBER OF LOCALS DUE TO %fp  */
                     46: #                                              /* TRICKS                       */
                     47: #              /* clip to the source Bitmap */
                     48: #              if(r.origin.x < sm->rect.origin.x)
                     49:        addw3   &8,0(%ap),%r0
                     50:        cmph    4(%ap),0(%r0)
                     51:        jge     .L32
                     52: #                      r.origin.x=sm->rect.origin.x;
                     53:        addw3   &8,0(%ap),%r0
                     54:        movh    0(%r0),4(%ap)
                     55: .L32:
                     56: #              if(r.corner.x > sm->rect.corner.x)
                     57:        addw3   &12,0(%ap),%r0
                     58:        cmph    8(%ap),0(%r0)
                     59:        jle     .L33
                     60: #                      r.corner.x=sm->rect.corner.x;
                     61:        addw3   &12,0(%ap),%r0
                     62:        movh    0(%r0),8(%ap)
                     63: .L33:
                     64: #              if(r.origin.y < sm->rect.origin.y)
                     65:        addw3   &10,0(%ap),%r0
                     66:        cmph    6(%ap),0(%r0)
                     67:        jge     .L34
                     68: #                      r.origin.y=sm->rect.origin.y;
                     69:        addw3   &10,0(%ap),%r0
                     70:        movh    0(%r0),6(%ap)
                     71: .L34:
                     72: #              if(r.corner.y > sm->rect.corner.y)
                     73:        addw3   &14,0(%ap),%r0
                     74:        cmph    10(%ap),0(%r0)
                     75:        jle     .L35
                     76: #                      r.corner.y=sm->rect.corner.y;
                     77:        addw3   &14,0(%ap),%r0
                     78:        movh    0(%r0),10(%ap)
                     79: .L35:
                     80: #              /*
                     81: #               * If the sm->rect and r are disjoint, r is now degenerate,
                     82: #               * due to the clipping, and the next clipping code will reject it.
                     83: #               * This is safe because we will only increase origin or decrease corner.
                     84: #               */
                     85: #              /* clip to the destination Bitmap */
                     86: #              if(p.x < dm->rect.origin.x){
                     87:        addw3   &8,12(%ap),%r0
                     88:        cmph    16(%ap),0(%r0)
                     89:        jge     .L36
                     90: #                      r.origin.x+=dm->rect.origin.x-p.x;
                     91:        addw3   &8,12(%ap),%r0
                     92:        subh3   16(%ap),0(%r0),%r0
                     93:        addh2   %r0,4(%ap)
                     94: #                      p.x=dm->rect.origin.x;
                     95:        addw3   &8,12(%ap),%r0
                     96:        movh    0(%r0),16(%ap)
                     97: .L36:
                     98: #              }
                     99: #              if(p.y < dm->rect.origin.y){
                    100:        addw3   &10,12(%ap),%r0
                    101:        cmph    18(%ap),0(%r0)
                    102:        jge     .L37
                    103: #                      r.origin.y+=dm->rect.origin.y-p.y;
                    104:        addw3   &10,12(%ap),%r0
                    105:        subh3   18(%ap),0(%r0),%r0
                    106:        addh2   %r0,6(%ap)
                    107: #                      p.y=dm->rect.origin.y;
                    108:        addw3   &10,12(%ap),%r0
                    109:        movh    0(%r0),18(%ap)
                    110: .L37:
                    111: #              }
                    112: #              if(r.corner.x-r.origin.x > dm->rect.corner.x-p.x)
                    113:        subh3   4(%ap),8(%ap),%r0
                    114:        addw3   &12,12(%ap),%r1
                    115:        subh3   16(%ap),0(%r1),%r1
                    116:        cmpw    %r0,%r1
                    117:        jle     .L38
                    118: #                      r.corner.x=r.origin.x+(dm->rect.corner.x-p.x);
                    119:        addw3   &12,12(%ap),%r0
                    120:        subh3   16(%ap),0(%r0),%r0
                    121:        addh2   4(%ap),%r0
                    122:        movh    %r0,8(%ap)
                    123: .L38:
                    124: #              if(r.corner.y-r.origin.y > dm->rect.corner.y-p.y)
                    125:        subh3   6(%ap),10(%ap),%r0
                    126:        addw3   &14,12(%ap),%r1
                    127:        subh3   18(%ap),0(%r1),%r1
                    128:        cmpw    %r0,%r1
                    129:        jle     .L39
                    130: #                      r.corner.y=r.origin.y+(dm->rect.corner.y-p.y);
                    131:        addw3   &14,12(%ap),%r0
                    132:        subh3   18(%ap),0(%r0),%r0
                    133:        addh2   6(%ap),%r0
                    134:        movh    %r0,10(%ap)
                    135: .L39:
                    136: #              i = r.corner.y - r.origin.y;    /* going to be h */
                    137:        subh3   6(%ap),10(%ap),%r0
                    138:        movw    %r0,%r3
                    139: #              dw = r.corner.x - r.origin.x - 1;       /* going to be dx1 */
                    140:        subh3   4(%ap),8(%ap),%r0
                    141:        subw2   &1,%r0
                    142:        movw    %r0,%r5
                    143: #              if (i <= 0 || dw < 0)
                    144:        cmpw    %r3,&0
                    145:        jle     .L41
                    146:        cmpw    %r5,&0
                    147:        jge     .L40
                    148: .L41:
                    149:        jmp     .L31
                    150: .L40:
                    151: #                      return;
                    152: #              if (dw < 32)
                    153:        cmpw    %r5,&32
                    154:        jge     .L42
                    155:        jmp     .L43
                    156: .L42:
                    157: #                      goto narrow;
                    158: #              DX1 = dw;
                    159:        movw    %r5,%r4
                    160: #              h = i; 
                    161:        movw    %r3,12(%fp)
                    162: #              ntmask1 = topbits[p.x & 0x1f];
                    163:        andh3   &31,16(%ap),%r0
                    164:        LLSW3   &2,%r0,%r0
                    165:        movw    topbits(%r0),48(%fp)
                    166: #              mask1 = ~ntmask1;
                    167:        mcomw   48(%fp),%r0
                    168:        movw    %r0,32(%fp)
                    169: #              mask2 = topbits[((p.x+DX1) & 31) + 1];
                    170:        movbhw  16(%ap),%r0
                    171:        addw2   %r4,%r0
                    172:        andw2   &31,%r0
                    173:        addw2   &1,%r0
                    174:        LLSW3   &2,%r0,%r0
                    175:        movw    topbits(%r0),36(%fp)
                    176: #              ntmask2 = ~mask2;
                    177:        mcomw   36(%fp),%r0
                    178:        movw    %r0,52(%fp)
                    179: #              w = ((p.x+DX1) >> 5) - (p.x >> 5);      /* inner loop+1: sub 1 later*/
                    180:        movbhw  16(%ap),%r0
                    181:        addw2   %r4,%r0
                    182:        LRSW3   &5,%r0,%r0
                    183:        movbhw  16(%ap),%r1
                    184:        LRSW3   &5,%r1,%r1
                    185:        subw2   %r1,%r0
                    186:        movw    %r0,16(%fp)
                    187: #              sw = ((sm->width - w) << 2);    /* sleazy hack to avoid shift */
                    188:        addw3   &4,0(%ap),%r0
                    189:        subw3   16(%fp),0(%r0),%r0
                    190:        LLSW3   &2,%r0,%r0
                    191:        movw    %r0,%r6
                    192: #              dw = ((dm->width - w) << 2);    /* in outer, inner loops */
                    193:        addw3   &4,12(%ap),%r0
                    194:        subw3   16(%fp),0(%r0),%r0
                    195:        LLSW3   &2,%r0,%r0
                    196:        movw    %r0,%r5
                    197: #              if (sm == dm) {         /* may have to mess with loop order */
                    198:        cmpw    0(%ap),12(%ap)
                    199:        jne     .L44
                    200: #                      if (r.origin.y < p.y) {         /* swap top with bottom */
                    201:        cmph    6(%ap),18(%ap)
                    202:        jge     .L45
                    203: #                              r.origin.y += i-1;
                    204:        movtwh  %r3,%r0
                    205:        subh2   &1,%r0
                    206:        addh2   %r0,6(%ap)
                    207: #                              p.y += i-1;
                    208:        movtwh  %r3,%r0
                    209:        subh2   &1,%r0
                    210:        addh2   %r0,18(%ap)
                    211: #                              if (r.origin.x < p.x) { /* swap left with right */
                    212:        cmph    4(%ap),16(%ap)
                    213:        jge     .L46
                    214: #                                      fc |= LEFTDIR;
                    215:        orw2    &8,20(%ap)
                    216: #                                      r.origin.x = r.origin.x + DX1;
                    217:        movtwh  %r4,%r0
                    218:        addh2   4(%ap),%r0
                    219:        movh    %r0,4(%ap)
                    220: #                                      p.x = p.x + DX1;
                    221:        movtwh  %r4,%r0
                    222:        addh2   16(%ap),%r0
                    223:        movh    %r0,16(%ap)
                    224: #                                      sw = -sw;
                    225:        mnegw   %r6,%r0
                    226:        movw    %r0,%r6
                    227: #                                      dw = -dw;
                    228:        mnegw   %r5,%r0
                    229:        movw    %r0,%r5
                    230:        jmp     .L47
                    231: .L46:
                    232: #                              }
                    233: #                              else
                    234: #                              {
                    235: #                                      sw -= (sm->width << 3); /* -(w+n) == (w-n) - 2*w  */
                    236:        addw3   &4,0(%ap),%r0
                    237:        LLSW3   &3,0(%r0),%r0
                    238:        subw2   %r0,%r6
                    239: #                                      dw -= (dm->width << 3) ;
                    240:        addw3   &4,12(%ap),%r0
                    241:        LLSW3   &3,0(%r0),%r0
                    242:        subw2   %r0,%r5
                    243: .L47:
                    244:        jmp     .L48
                    245: .L45:
                    246: #                              }
                    247: #                      }
                    248: #                      else
                    249: #                      {
                    250: #                              if (r.origin.x < p.x) { /* swap left with right */
                    251:        cmph    4(%ap),16(%ap)
                    252:        jge     .L49
                    253: #                                      fc |= LEFTDIR;
                    254:        orw2    &8,20(%ap)
                    255: #                                      r.origin.x = r.origin.x + DX1;
                    256:        movtwh  %r4,%r0
                    257:        addh2   4(%ap),%r0
                    258:        movh    %r0,4(%ap)
                    259: #                                      p.x = p.x + DX1;
                    260:        movtwh  %r4,%r0
                    261:        addh2   16(%ap),%r0
                    262:        movh    %r0,16(%ap)
                    263: #                                      sw = (sm->width + w) << 2;
                    264:        addw3   &4,0(%ap),%r0
                    265:        addw3   16(%fp),0(%r0),%r0
                    266:        LLSW3   &2,%r0,%r0
                    267:        movw    %r0,%r6
                    268: #                                      dw = (dm->width + w) << 2;
                    269:        addw3   &4,12(%ap),%r0
                    270:        addw3   16(%fp),0(%r0),%r0
                    271:        LLSW3   &2,%r0,%r0
                    272:        movw    %r0,%r5
                    273: .L49:
                    274: .L48:
                    275: .L44:
                    276: #                              }
                    277: #                      }
                    278: #              }
                    279: #              w--;                    /* subtract the 1 like we promised */
                    280:        subw2   &1,16(%fp)
                    281: #              px31 = p.x & 0x1f;              /* commonly used expression */
                    282:        andh3   &31,16(%ap),%r0
                    283:        movw    %r0,24(%fp)
                    284: #              rx31 = r.origin.x & 0x1f;       /* commonly used expression */
                    285:        andh3   &31,4(%ap),%r0
                    286:        movw    %r0,28(%fp)
                    287: #              dest = addr(dm,p);
                    288:        pushw   12(%ap)
                    289:        pushw   16(%ap)
                    290:        call    &2,addr
                    291:        movw    %r0,%r7
                    292: #              source = addr(sm,r.origin);
                    293:        pushw   0(%ap)
                    294:        pushw   4(%ap)
                    295:        call    &2,addr
                    296:        movw    %r0,%r8
                    297: #              a = px31 - rx31;
                    298:        subw3   28(%fp),24(%fp),%r0
                    299:        movw    %r0,0(%fp)
                    300: #              if(a == 0)
                    301:        cmpw    0(%fp),&0
                    302:        jne     .L50
                    303: #                      fc |= NOSHIFT;
                    304:        orw2    &4,20(%ap)
                    305:        jmp     .L51
                    306: .L50:
                    307: #              else if (a < 0)
                    308:        cmpw    0(%fp),&0
                    309:        jge     .L52
                    310: #                      a += 32;
                    311:        addw2   &32,0(%fp)
                    312: .L52:
                    313: .L51:
                    314: #                      /* a == 0 means no shift, remember that */
                    315: #              b = 32 - a;
                    316:        subw3   0(%fp),&32,%r0
                    317:        movw    %r0,4(%fp)
                    318: #              switch (fc) {
                    319:        movw    20(%ap),%r0
                    320:        jmp     .L54
                    321: .L55:
                    322: #      
                    323: #              case F_OR | NOSHIFT | LEFTDIR:
                    324: #                      b = w>>2;
                    325:        LRSW3   &2,16(%fp),%r0
                    326:        movw    %r0,4(%fp)
                    327: #                      w = w&3;
                    328:        andw3   &3,16(%fp),%r0
                    329:        movw    %r0,16(%fp)
                    330: #                      m = h;          /* m is free => use it */
                    331:        movw    12(%fp),%r4
                    332: .L58:
                    333: #                      do {
                    334: #                              *dest-- |= mask2 & *source--;
                    335:        movw    %r7,%r0
                    336:        subw2   &4,%r7
                    337:        movw    %r8,%r1
                    338:        subw2   &4,%r8
                    339:        andw3   0(%r1),36(%fp),%r1
                    340:        orw2    %r1,0(%r0)
                    341: #                              if ((i = b) > 0) do {
                    342:        movw    4(%fp),%r3
                    343:        jnpos   .L59
                    344: .L62:
                    345: #                                      *dest |= *source;
                    346:        orw2    0(%r8),0(%r7)
                    347: #                                      *(dest-1) |= *(source-1);
                    348:        orw2    -4(%r8),-4(%r7)
                    349: #                                      *(dest-2) |= *(source-2);
                    350:        orw2    -8(%r8),-8(%r7)
                    351: #                                      *(dest-3) |= *(source-3);
                    352:        orw2    -12(%r8),-12(%r7)
                    353: #                                      dest -= 4;
                    354:        subw2   &16,%r7
                    355: #                                      source -= 4;
                    356:        subw2   &16,%r8
                    357: .L61:
                    358: #                              } while (--i > 0);
                    359:        subw2   &1,%r3
                    360:        jpos    .L62
                    361: .L60:
                    362: .L59:
                    363: #                              if ((i = w) > 0) do {
                    364:        movw    16(%fp),%r3
                    365:        jnpos   .L63
                    366: .L66:
                    367: #                                      *dest-- |= *source--;
                    368:        movw    %r7,%r0
                    369:        subw2   &4,%r7
                    370:        movw    %r8,%r1
                    371:        subw2   &4,%r8
                    372:        orw2    0(%r1),0(%r0)
                    373: .L65:
                    374: #                              } while (--i > 0);
                    375:        subw2   &1,%r3
                    376:        jpos    .L66
                    377: .L64:
                    378: .L63:
                    379: #                              *dest |= mask1 & *source;
                    380:        andw3   0(%r8),32(%fp),%r0
                    381:        orw2    %r0,0(%r7)
                    382:  ADDW2 %r6,%r8
                    383:  ADDW2 %r5,%r7
                    384: .L57:
                    385: #                              asm(" ADDW2     %r6,%r8");      /*source += sw; */
                    386: #                              asm(" ADDW2     %r5,%r7");      /*dest += dw; */
                    387: #                      } while (--m != 0);
                    388:        subw2   &1,%r4
                    389:        jnz     .L58
                    390: .L56:
                    391:        jmp     .L53
                    392: .L67:
                    393: #                      break;
                    394: #              case F_OR | LEFTDIR:
                    395: #                      if ((px31) < (rx31))
                    396:        cmpw    24(%fp),28(%fp)
                    397:        jge     .L68
                    398: #                              source++;       /* adjust for pipeline */
                    399:        addw2   &4,%r8
                    400: .L68:
                    401: .L71:
                    402: #                      do {
                    403: #                              m = *source--;  /* m is a free register */
                    404:        movw    %r8,%r0
                    405:        subw2   &4,%r8
                    406:        movw    0(%r0),%r4
                    407: #                              *dest-- |= (((m >> a) | (*source << b)) & mask2);
                    408:        movw    %r7,%r0
                    409:        subw2   &4,%r7
                    410:        LRSW3   0(%fp),%r4,%r1
                    411:        LLSW3   4(%fp),0(%r8),%r2
                    412:        orw2    %r2,%r1
                    413:        andw2   36(%fp),%r1
                    414:        orw2    %r1,0(%r0)
                    415: #                              if ((i=w) > 0) do {
                    416:        movw    16(%fp),%r3
                    417:        jnpos   .L72
                    418: .L75:
                    419: #                                      m = (*source--) >> a;
                    420:        movw    %r8,%r0
                    421:        subw2   &4,%r8
                    422:        LRSW3   0(%fp),0(%r0),%r0
                    423:        movw    %r0,%r4
                    424: #                                      *dest-- |= m | (*source << b);
                    425:        movw    %r7,%r0
                    426:        subw2   &4,%r7
                    427:        LLSW3   4(%fp),0(%r8),%r1
                    428:        orw2    %r4,%r1
                    429:        orw2    %r1,0(%r0)
                    430: .L74:
                    431: #                              } while (--i > 0);
                    432:        subw2   &1,%r3
                    433:        jpos    .L75
                    434: .L73:
                    435: .L72:
                    436: #                              m = *source;    /* m is a free register */
                    437:        movw    0(%r8),%r4
                    438: #                              *dest |= (((m >> a) | (*(source-1) << b)) & mask1);
                    439:        LRSW3   0(%fp),%r4,%r0
                    440:        LLSW3   4(%fp),-4(%r8),%r1
                    441:        orw2    %r1,%r0
                    442:        andw2   32(%fp),%r0
                    443:        orw2    %r0,0(%r7)
                    444:  addw2 %r6,%r8
                    445:  addw2 %r5,%r7
                    446: .L70:
                    447: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    448: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    449: #                      } while (--h > 0);
                    450:        subw2   &1,12(%fp)
                    451:        jpos    .L71
                    452: .L69:
                    453:        jmp     .L53
                    454: .L76:
                    455: #                      break;
                    456: #              case F_OR | NOSHIFT:
                    457: #                      b = w>>2;
                    458:        LRSW3   &2,16(%fp),%r0
                    459:        movw    %r0,4(%fp)
                    460: #                      w = w&3;
                    461:        andw3   &3,16(%fp),%r0
                    462:        movw    %r0,16(%fp)
                    463: #                      m = h;          /* m is free => use it */
                    464:        movw    12(%fp),%r4
                    465: .L79:
                    466: #                      do {
                    467: #                              *dest++ |= (mask1 & *source++);
                    468:        movw    %r7,%r0
                    469:        addw2   &4,%r7
                    470:        movw    %r8,%r1
                    471:        addw2   &4,%r8
                    472:        andw3   0(%r1),32(%fp),%r1
                    473:        orw2    %r1,0(%r0)
                    474: #                              if ((i = b) > 0) do {
                    475:        movw    4(%fp),%r3
                    476:        jnpos   .L80
                    477: .L83:
                    478: #                                      *dest |= *source;
                    479:        orw2    0(%r8),0(%r7)
                    480: #                                      *(dest+1) |= *(source+1);
                    481:        orw2    4(%r8),4(%r7)
                    482: #                                      *(dest+2) |= *(source+2);
                    483:        orw2    8(%r8),8(%r7)
                    484: #                                      *(dest+3) |= *(source+3);
                    485:        orw2    12(%r8),12(%r7)
                    486: #                                      dest += 4;
                    487:        addw2   &16,%r7
                    488: #                                      source += 4;
                    489:        addw2   &16,%r8
                    490: .L82:
                    491: #                              } while (--i > 0);
                    492:        subw2   &1,%r3
                    493:        jpos    .L83
                    494: .L81:
                    495: .L80:
                    496: #                              if ((i = w) > 0) do {
                    497:        movw    16(%fp),%r3
                    498:        jnpos   .L84
                    499: .L87:
                    500: #                                      *dest++ |= *source++;
                    501:        movw    %r7,%r0
                    502:        addw2   &4,%r7
                    503:        movw    %r8,%r1
                    504:        addw2   &4,%r8
                    505:        orw2    0(%r1),0(%r0)
                    506: .L86:
                    507: #                              } while (--i > 0);
                    508:        subw2   &1,%r3
                    509:        jpos    .L87
                    510: .L85:
                    511: .L84:
                    512: #                              *dest |= (mask2 & *source);
                    513:        andw3   0(%r8),36(%fp),%r0
                    514:        orw2    %r0,0(%r7)
                    515:  addw2 %r6,%r8
                    516:  addw2 %r5,%r7
                    517: .L78:
                    518: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    519: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    520: #                      } while (--m != 0);
                    521:        subw2   &1,%r4
                    522:        jnz     .L79
                    523: .L77:
                    524:        jmp     .L53
                    525: .L88:
                    526: #                      break;
                    527: #              case F_OR:
                    528: #                      if ((px31) > (rx31))
                    529:        cmpw    24(%fp),28(%fp)
                    530:        jle     .L89
                    531: #                              source--;       /* adjust for pipeline */
                    532:        subw2   &4,%r8
                    533: .L89:
                    534: .L92:
                    535: #                      do {
                    536: #                              m = *source++;  /* m is a free register */
                    537:        movw    %r8,%r0
                    538:        addw2   &4,%r8
                    539:        movw    0(%r0),%r4
                    540: #                              *dest++ |= (((m << b) | (*source >> a)) & mask1);
                    541:        movw    %r7,%r0
                    542:        addw2   &4,%r7
                    543:        LLSW3   4(%fp),%r4,%r1
                    544:        LRSW3   0(%fp),0(%r8),%r2
                    545:        orw2    %r2,%r1
                    546:        andw2   32(%fp),%r1
                    547:        orw2    %r1,0(%r0)
                    548: #                              if ((i=w) > 0) do {
                    549:        movw    16(%fp),%r3
                    550:        jnpos   .L93
                    551: .L96:
                    552: #                                      m = (*source++) << b;
                    553:        movw    %r8,%r0
                    554:        addw2   &4,%r8
                    555:        LLSW3   4(%fp),0(%r0),%r0
                    556:        movw    %r0,%r4
                    557: #                                      *dest++ |= m | (*source >> a);
                    558:        movw    %r7,%r0
                    559:        addw2   &4,%r7
                    560:        LRSW3   0(%fp),0(%r8),%r1
                    561:        orw2    %r4,%r1
                    562:        orw2    %r1,0(%r0)
                    563: .L95:
                    564: #                              } while (--i > 0);
                    565:        subw2   &1,%r3
                    566:        jpos    .L96
                    567: .L94:
                    568: .L93:
                    569: #                              m = *source;    /* m is a free register */
                    570:        movw    0(%r8),%r4
                    571: #                              *dest |= (((m << b) | (*(source+1) >> a)) & mask2);
                    572:        LLSW3   4(%fp),%r4,%r0
                    573:        LRSW3   0(%fp),4(%r8),%r1
                    574:        orw2    %r1,%r0
                    575:        andw2   36(%fp),%r0
                    576:        orw2    %r0,0(%r7)
                    577:  addw2 %r6,%r8
                    578:  addw2 %r5,%r7
                    579: .L91:
                    580: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    581: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    582: #                      } while (--h > 0);
                    583:        subw2   &1,12(%fp)
                    584:        jpos    .L92
                    585: .L90:
                    586:        jmp     .L53
                    587: .L97:
                    588: #                      break;
                    589: #              case F_CLR | NOSHIFT | LEFTDIR:
                    590: #                      b = w>>2;
                    591:        LRSW3   &2,16(%fp),%r0
                    592:        movw    %r0,4(%fp)
                    593: #                      w = w&3;
                    594:        andw3   &3,16(%fp),%r0
                    595:        movw    %r0,16(%fp)
                    596: #                      m = h;          /* m is free => use it */
                    597:        movw    12(%fp),%r4
                    598: .L100:
                    599: #                      do {
                    600: #                              *dest-- &= ~(mask2 & *source--);
                    601:        movw    %r7,%r0
                    602:        subw2   &4,%r7
                    603:        movw    %r8,%r1
                    604:        subw2   &4,%r8
                    605:        andw3   0(%r1),36(%fp),%r1
                    606:        mcomw   %r1,%r1
                    607:        andw2   %r1,0(%r0)
                    608: #                              if ((i = b) > 0) do {
                    609:        movw    4(%fp),%r3
                    610:        jnpos   .L101
                    611: .L104:
                    612: #                                      *dest &= ~(*source);
                    613:        mcomw   0(%r8),%r0
                    614:        andw2   %r0,0(%r7)
                    615: #                                      *(dest-1) &= ~(*(source-1));
                    616:        mcomw   -4(%r8),%r0
                    617:        andw2   %r0,-4(%r7)
                    618: #                                      *(dest-2) &= ~(*(source-2));
                    619:        mcomw   -8(%r8),%r0
                    620:        andw2   %r0,-8(%r7)
                    621: #                                      *(dest-3) &= ~(*(source-3));
                    622:        mcomw   -12(%r8),%r0
                    623:        andw2   %r0,-12(%r7)
                    624: #                                      dest -= 4;
                    625:        subw2   &16,%r7
                    626: #                                      source -= 4;
                    627:        subw2   &16,%r8
                    628: .L103:
                    629: #                              } while (--i > 0);
                    630:        subw2   &1,%r3
                    631:        jpos    .L104
                    632: .L102:
                    633: .L101:
                    634: #                              if ((i = w) > 0) do {
                    635:        movw    16(%fp),%r3
                    636:        jnpos   .L105
                    637: .L108:
                    638: #                                      *dest-- &= ~(*source--);
                    639:        movw    %r7,%r0
                    640:        subw2   &4,%r7
                    641:        movw    %r8,%r1
                    642:        subw2   &4,%r8
                    643:        mcomw   0(%r1),%r1
                    644:        andw2   %r1,0(%r0)
                    645: .L107:
                    646: #                              } while (--i > 0);
                    647:        subw2   &1,%r3
                    648:        jpos    .L108
                    649: .L106:
                    650: .L105:
                    651: #                              *dest &= ~(mask1 & *source);
                    652:        andw3   0(%r8),32(%fp),%r0
                    653:        mcomw   %r0,%r0
                    654:        andw2   %r0,0(%r7)
                    655:  addw2 %r6,%r8
                    656:  addw2 %r5,%r7
                    657: .L99:
                    658: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    659: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    660: #                      } while (--m != 0);
                    661:        subw2   &1,%r4
                    662:        jnz     .L100
                    663: .L98:
                    664:        jmp     .L53
                    665: .L109:
                    666: #                      break;
                    667: #              case F_CLR | LEFTDIR:
                    668: #                      if ((px31) < (rx31))
                    669:        cmpw    24(%fp),28(%fp)
                    670:        jge     .L110
                    671: #                              source++;       /* adjust for pipeline */
                    672:        addw2   &4,%r8
                    673: .L110:
                    674: .L113:
                    675: #                      do {
                    676: #                              m = *source--;  /* m is a free register */
                    677:        movw    %r8,%r0
                    678:        subw2   &4,%r8
                    679:        movw    0(%r0),%r4
                    680: #                              *dest-- &= ~((((m >> a) | (*source << b)) & mask2));
                    681:        movw    %r7,%r0
                    682:        subw2   &4,%r7
                    683:        LRSW3   0(%fp),%r4,%r1
                    684:        LLSW3   4(%fp),0(%r8),%r2
                    685:        orw2    %r2,%r1
                    686:        andw2   36(%fp),%r1
                    687:        mcomw   %r1,%r1
                    688:        andw2   %r1,0(%r0)
                    689: #                              if ((i=w) > 0) do {
                    690:        movw    16(%fp),%r3
                    691:        jnpos   .L114
                    692: .L117:
                    693: #                                      m = (*source--) >> a;
                    694:        movw    %r8,%r0
                    695:        subw2   &4,%r8
                    696:        LRSW3   0(%fp),0(%r0),%r0
                    697:        movw    %r0,%r4
                    698: #                                      *dest-- &= ~(m | (*source << b));
                    699:        movw    %r7,%r0
                    700:        subw2   &4,%r7
                    701:        LLSW3   4(%fp),0(%r8),%r1
                    702:        orw2    %r4,%r1
                    703:        mcomw   %r1,%r1
                    704:        andw2   %r1,0(%r0)
                    705: .L116:
                    706: #                              } while (--i > 0);
                    707:        subw2   &1,%r3
                    708:        jpos    .L117
                    709: .L115:
                    710: .L114:
                    711: #                              m = *source;    /* m is a free register */
                    712:        movw    0(%r8),%r4
                    713: #                              *dest &= ~((((m >> a) | (*(source-1) << b)) & mask1));
                    714:        LRSW3   0(%fp),%r4,%r0
                    715:        LLSW3   4(%fp),-4(%r8),%r1
                    716:        orw2    %r1,%r0
                    717:        andw2   32(%fp),%r0
                    718:        mcomw   %r0,%r0
                    719:        andw2   %r0,0(%r7)
                    720:  addw2 %r6,%r8
                    721:  addw2 %r5,%r7
                    722: .L112:
                    723: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    724: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    725: #                      } while (--h > 0);
                    726:        subw2   &1,12(%fp)
                    727:        jpos    .L113
                    728: .L111:
                    729:        jmp     .L53
                    730: .L118:
                    731: #                      break;
                    732: #              case F_CLR | NOSHIFT:
                    733: #                      b = w>>2;
                    734:        LRSW3   &2,16(%fp),%r0
                    735:        movw    %r0,4(%fp)
                    736: #                      w = w&3;
                    737:        andw3   &3,16(%fp),%r0
                    738:        movw    %r0,16(%fp)
                    739: #                      m = h;          /* m is free => use it */
                    740:        movw    12(%fp),%r4
                    741: .L121:
                    742: #                      do {
                    743: #                              *dest++ &= ~((mask1 & *source++));
                    744:        movw    %r7,%r0
                    745:        addw2   &4,%r7
                    746:        movw    %r8,%r1
                    747:        addw2   &4,%r8
                    748:        andw3   0(%r1),32(%fp),%r1
                    749:        mcomw   %r1,%r1
                    750:        andw2   %r1,0(%r0)
                    751: #                              if ((i = b) > 0) do {
                    752:        movw    4(%fp),%r3
                    753:        jnpos   .L122
                    754: .L125:
                    755: #                                      *dest &= ~(*source);
                    756:        mcomw   0(%r8),%r0
                    757:        andw2   %r0,0(%r7)
                    758: #                                      *(dest+1) &= ~(*(source+1));
                    759:        mcomw   4(%r8),%r0
                    760:        andw2   %r0,4(%r7)
                    761: #                                      *(dest+2) &= ~(*(source+2));
                    762:        mcomw   8(%r8),%r0
                    763:        andw2   %r0,8(%r7)
                    764: #                                      *(dest+3) &= ~(*(source+3));
                    765:        mcomw   12(%r8),%r0
                    766:        andw2   %r0,12(%r7)
                    767: #                                      dest += 4;
                    768:        addw2   &16,%r7
                    769: #                                      source += 4;
                    770:        addw2   &16,%r8
                    771: .L124:
                    772: #                              } while (--i > 0);
                    773:        subw2   &1,%r3
                    774:        jpos    .L125
                    775: .L123:
                    776: .L122:
                    777: #                              if ((i = w) > 0) do {
                    778:        movw    16(%fp),%r3
                    779:        jnpos   .L126
                    780: .L129:
                    781: #                                      *dest++ &= ~(*source++);
                    782:        movw    %r7,%r0
                    783:        addw2   &4,%r7
                    784:        movw    %r8,%r1
                    785:        addw2   &4,%r8
                    786:        mcomw   0(%r1),%r1
                    787:        andw2   %r1,0(%r0)
                    788: .L128:
                    789: #                              } while (--i > 0);
                    790:        subw2   &1,%r3
                    791:        jpos    .L129
                    792: .L127:
                    793: .L126:
                    794: #                              *dest &= ~((mask2 & *source));
                    795:        andw3   0(%r8),36(%fp),%r0
                    796:        mcomw   %r0,%r0
                    797:        andw2   %r0,0(%r7)
                    798:  addw2 %r6,%r8
                    799:  addw2 %r5,%r7
                    800: .L120:
                    801: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    802: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    803: #                      } while (--m != 0);
                    804:        subw2   &1,%r4
                    805:        jnz     .L121
                    806: .L119:
                    807:        jmp     .L53
                    808: .L130:
                    809: #                      break;
                    810: #              case F_CLR:
                    811: #                      if ((px31) > (rx31))
                    812:        cmpw    24(%fp),28(%fp)
                    813:        jle     .L131
                    814: #                              source--;       /* adjust for pipeline */
                    815:        subw2   &4,%r8
                    816: .L131:
                    817: .L134:
                    818: #                      do {
                    819: #                              m = *source++;  /* m is a free register */
                    820:        movw    %r8,%r0
                    821:        addw2   &4,%r8
                    822:        movw    0(%r0),%r4
                    823: #                              *dest++ &= ~((((m << b) | (*source >> a)) & mask1));
                    824:        movw    %r7,%r0
                    825:        addw2   &4,%r7
                    826:        LLSW3   4(%fp),%r4,%r1
                    827:        LRSW3   0(%fp),0(%r8),%r2
                    828:        orw2    %r2,%r1
                    829:        andw2   32(%fp),%r1
                    830:        mcomw   %r1,%r1
                    831:        andw2   %r1,0(%r0)
                    832: #                              if ((i=w) > 0) do {
                    833:        movw    16(%fp),%r3
                    834:        jnpos   .L135
                    835: .L138:
                    836: #                                      m = (*source++) << b;
                    837:        movw    %r8,%r0
                    838:        addw2   &4,%r8
                    839:        LLSW3   4(%fp),0(%r0),%r0
                    840:        movw    %r0,%r4
                    841: #                                      *dest++ &= ~(m | (*source >> a));
                    842:        movw    %r7,%r0
                    843:        addw2   &4,%r7
                    844:        LRSW3   0(%fp),0(%r8),%r1
                    845:        orw2    %r4,%r1
                    846:        mcomw   %r1,%r1
                    847:        andw2   %r1,0(%r0)
                    848: .L137:
                    849: #                              } while (--i > 0);
                    850:        subw2   &1,%r3
                    851:        jpos    .L138
                    852: .L136:
                    853: .L135:
                    854: #                              m = *source;    /* m is a free register */
                    855:        movw    0(%r8),%r4
                    856: #                              *dest &= ~((((m << b) | (*(source+1) >> a)) & mask2));
                    857:        LLSW3   4(%fp),%r4,%r0
                    858:        LRSW3   0(%fp),4(%r8),%r1
                    859:        orw2    %r1,%r0
                    860:        andw2   36(%fp),%r0
                    861:        mcomw   %r0,%r0
                    862:        andw2   %r0,0(%r7)
                    863:  addw2 %r6,%r8
                    864:  addw2 %r5,%r7
                    865: .L133:
                    866: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    867: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    868: #                      } while (--h > 0);
                    869:        subw2   &1,12(%fp)
                    870:        jpos    .L134
                    871: .L132:
                    872:        jmp     .L53
                    873: .L139:
                    874: #                      break;
                    875: #              case F_XOR | NOSHIFT | LEFTDIR:
                    876: #                      b = w>>2;
                    877:        LRSW3   &2,16(%fp),%r0
                    878:        movw    %r0,4(%fp)
                    879: #                      w = w&3;
                    880:        andw3   &3,16(%fp),%r0
                    881:        movw    %r0,16(%fp)
                    882: #                      m = h;          /* m is free => use it */
                    883:        movw    12(%fp),%r4
                    884: .L142:
                    885: #                      do {
                    886: #                              *dest-- ^= mask2 & *source--;
                    887:        movw    %r7,%r0
                    888:        subw2   &4,%r7
                    889:        movw    %r8,%r1
                    890:        subw2   &4,%r8
                    891:        andw3   0(%r1),36(%fp),%r1
                    892:        xorw2   %r1,0(%r0)
                    893: #                              if ((i = b) > 0) do {
                    894:        movw    4(%fp),%r3
                    895:        jnpos   .L143
                    896: .L146:
                    897: #                                      *dest ^= *source;
                    898:        xorw2   0(%r8),0(%r7)
                    899: #                                      *(dest-1) ^= *(source-1);
                    900:        xorw2   -4(%r8),-4(%r7)
                    901: #                                      *(dest-2) ^= *(source-2);
                    902:        xorw2   -8(%r8),-8(%r7)
                    903: #                                      *(dest-3) ^= *(source-3);
                    904:        xorw2   -12(%r8),-12(%r7)
                    905: #                                      dest -= 4;
                    906:        subw2   &16,%r7
                    907: #                                      source -= 4;
                    908:        subw2   &16,%r8
                    909: .L145:
                    910: #                              } while (--i > 0);
                    911:        subw2   &1,%r3
                    912:        jpos    .L146
                    913: .L144:
                    914: .L143:
                    915: #                              if ((i = w) > 0) do {
                    916:        movw    16(%fp),%r3
                    917:        jnpos   .L147
                    918: .L150:
                    919: #                                      *dest-- ^= *source--;
                    920:        movw    %r7,%r0
                    921:        subw2   &4,%r7
                    922:        movw    %r8,%r1
                    923:        subw2   &4,%r8
                    924:        xorw2   0(%r1),0(%r0)
                    925: .L149:
                    926: #                              } while (--i > 0);
                    927:        subw2   &1,%r3
                    928:        jpos    .L150
                    929: .L148:
                    930: .L147:
                    931: #                              *dest ^= mask1 & *source;
                    932:        andw3   0(%r8),32(%fp),%r0
                    933:        xorw2   %r0,0(%r7)
                    934:  addw2 %r6,%r8
                    935:  addw2 %r5,%r7
                    936: .L141:
                    937: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                    938: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                    939: #                      } while (--m != 0);
                    940:        subw2   &1,%r4
                    941:        jnz     .L142
                    942: .L140:
                    943:        jmp     .L53
                    944: .L151:
                    945: #                      break;
                    946: #              case F_XOR | LEFTDIR:
                    947: #                      if ((px31) < (rx31))
                    948:        cmpw    24(%fp),28(%fp)
                    949:        jge     .L152
                    950: #                              source++;       /* adjust for pipeline */
                    951:        addw2   &4,%r8
                    952: .L152:
                    953: .L155:
                    954: #                      do {
                    955: #                              m = *source--;  /* m is a free register */
                    956:        movw    %r8,%r0
                    957:        subw2   &4,%r8
                    958:        movw    0(%r0),%r4
                    959: #                              *dest-- ^= (((m >> a) | (*source << b)) & mask2);
                    960:        movw    %r7,%r0
                    961:        subw2   &4,%r7
                    962:        LRSW3   0(%fp),%r4,%r1
                    963:        LLSW3   4(%fp),0(%r8),%r2
                    964:        orw2    %r2,%r1
                    965:        andw2   36(%fp),%r1
                    966:        xorw2   %r1,0(%r0)
                    967: #                              if ((i=w) > 0) do {
                    968:        movw    16(%fp),%r3
                    969:        jnpos   .L156
                    970: .L159:
                    971: #                                      m = (*source--) >> a;
                    972:        movw    %r8,%r0
                    973:        subw2   &4,%r8
                    974:        LRSW3   0(%fp),0(%r0),%r0
                    975:        movw    %r0,%r4
                    976: #                                      *dest-- ^= m | (*source << b);
                    977:        movw    %r7,%r0
                    978:        subw2   &4,%r7
                    979:        LLSW3   4(%fp),0(%r8),%r1
                    980:        orw2    %r4,%r1
                    981:        xorw2   %r1,0(%r0)
                    982: .L158:
                    983: #                              } while (--i > 0);
                    984:        subw2   &1,%r3
                    985:        jpos    .L159
                    986: .L157:
                    987: .L156:
                    988: #                              m = *source;    /* m is a free register */
                    989:        movw    0(%r8),%r4
                    990: #                              *dest ^= (((m >> a) | (*(source-1) << b)) & mask1);
                    991:        LRSW3   0(%fp),%r4,%r0
                    992:        LLSW3   4(%fp),-4(%r8),%r1
                    993:        orw2    %r1,%r0
                    994:        andw2   32(%fp),%r0
                    995:        xorw2   %r0,0(%r7)
                    996:  addw2 %r6,%r8
                    997:  addw2 %r5,%r7
                    998: .L154:
                    999: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                   1000: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1001: #                      } while (--h > 0);
                   1002:        subw2   &1,12(%fp)
                   1003:        jpos    .L155
                   1004: .L153:
                   1005:        jmp     .L53
                   1006: .L160:
                   1007: #                      break;
                   1008: #              case F_XOR | NOSHIFT:
                   1009: #                      b = w>>2;
                   1010:        LRSW3   &2,16(%fp),%r0
                   1011:        movw    %r0,4(%fp)
                   1012: #                      w = w&3;
                   1013:        andw3   &3,16(%fp),%r0
                   1014:        movw    %r0,16(%fp)
                   1015: #                      m = h;          /* m is free => use it */
                   1016:        movw    12(%fp),%r4
                   1017: .L163:
                   1018: #                      do {
                   1019: #                              *dest++ ^= (mask1 & *source++);
                   1020:        movw    %r7,%r0
                   1021:        addw2   &4,%r7
                   1022:        movw    %r8,%r1
                   1023:        addw2   &4,%r8
                   1024:        andw3   0(%r1),32(%fp),%r1
                   1025:        xorw2   %r1,0(%r0)
                   1026: #                              if ((i = b) > 0) do {
                   1027:        movw    4(%fp),%r3
                   1028:        jnpos   .L164
                   1029: .L167:
                   1030: #                                      *dest ^= *source;
                   1031:        xorw2   0(%r8),0(%r7)
                   1032: #                                      *(dest+1) ^= *(source+1);
                   1033:        xorw2   4(%r8),4(%r7)
                   1034: #                                      *(dest+2) ^= *(source+2);
                   1035:        xorw2   8(%r8),8(%r7)
                   1036: #                                      *(dest+3) ^= *(source+3);
                   1037:        xorw2   12(%r8),12(%r7)
                   1038: #                                      dest += 4;
                   1039:        addw2   &16,%r7
                   1040: #                                      source += 4;
                   1041:        addw2   &16,%r8
                   1042: .L166:
                   1043: #                              } while (--i > 0);
                   1044:        subw2   &1,%r3
                   1045:        jpos    .L167
                   1046: .L165:
                   1047: .L164:
                   1048: #                              if ((i = w) > 0) do {
                   1049:        movw    16(%fp),%r3
                   1050:        jnpos   .L168
                   1051: .L171:
                   1052: #                                      *dest++ ^= *source++;
                   1053:        movw    %r7,%r0
                   1054:        addw2   &4,%r7
                   1055:        movw    %r8,%r1
                   1056:        addw2   &4,%r8
                   1057:        xorw2   0(%r1),0(%r0)
                   1058: .L170:
                   1059: #                              } while (--i > 0);
                   1060:        subw2   &1,%r3
                   1061:        jpos    .L171
                   1062: .L169:
                   1063: .L168:
                   1064: #                              *dest ^= (mask2 & *source);
                   1065:        andw3   0(%r8),36(%fp),%r0
                   1066:        xorw2   %r0,0(%r7)
                   1067:  addw2 %r6,%r8
                   1068:  addw2 %r5,%r7
                   1069: .L162:
                   1070: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                   1071: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1072: #                      } while (--m != 0);
                   1073:        subw2   &1,%r4
                   1074:        jnz     .L163
                   1075: .L161:
                   1076:        jmp     .L53
                   1077: .L172:
                   1078: #                      break;
                   1079: #              case F_XOR:
                   1080: #                      if ((px31) > (rx31))
                   1081:        cmpw    24(%fp),28(%fp)
                   1082:        jle     .L173
                   1083: #                              source--;       /* adjust for pipeline */
                   1084:        subw2   &4,%r8
                   1085: .L173:
                   1086:  PUSHW %ap
                   1087: #                      asm(" PUSHW %ap");
                   1088: #                      m = topbits[a];
                   1089:        LLSW3   &2,0(%fp),%r0
                   1090:        movw    topbits(%r0),%r4
                   1091:  MCOMW %r4, %r1
                   1092:  MOVW %r4, %r2
                   1093:  MOVW 0(%fp),%ap
                   1094:  PUSHW %fp
                   1095: BW_XORLOOP:
                   1096:  ROTW %ap, 0(%r8), %r4
                   1097:  ANDW2 %r2,%r4
                   1098:  ADDW2 &4,%r8
                   1099:  ROTW %ap,0(%r8),%r0
                   1100:  ANDW3 %r0,%r1,%fp
                   1101:  ORW2 %r4,%fp
                   1102:  ANDW2 -0x28(%sp),%fp
                   1103:  XORW2 %fp,0(%r7)
                   1104:  ADDW2 &4,%r7
                   1105:  MOVW -0x38(%sp),%r3
                   1106:  BEB BW_XORINNER
                   1107: .L176:
                   1108:  ANDW3 %r2,%r0,%r4
                   1109:  ADDW2 &4,%r8
                   1110:  ROTW %ap, 0(%r8),%r0
                   1111:  ANDW3 %r0,%r1,%fp
                   1112:  ORW2 %r4,%fp
                   1113:  XORW2 %fp,0(%r7)
                   1114:  ADDW2 &4, %r7
                   1115: .L175:
                   1116: #                      asm(" MCOMW %r4, %r1");
                   1117: #                      asm(" MOVW %r4, %r2");
                   1118: #                      asm(" MOVW 0(%fp),%ap");
                   1119: #                      asm(" PUSHW %fp");
                   1120: #              asm("BW_XORLOOP:");
                   1121: #                      asm(" ROTW %ap, 0(%r8), %r4");
                   1122: #                      asm(" ANDW2 %r2,%r4");
                   1123: #                      asm(" ADDW2 &4,%r8");
                   1124: #                      asm(" ROTW %ap,0(%r8),%r0");
                   1125: #                      asm(" ANDW3 %r0,%r1,%fp");
                   1126: #                      asm(" ORW2 %r4,%fp");
                   1127: #                      asm(" ANDW2 -0x28(%sp),%fp");
                   1128: #                      asm(" XORW2 %fp,0(%r7)");
                   1129: #                      asm(" ADDW2 &4,%r7");
                   1130: #                              /* if (i = w) */
                   1131: #                      asm(" MOVW -0x38(%sp),%r3");
                   1132: #                      asm(" BEB BW_XORINNER");
                   1133: #                      do{
                   1134: #                              asm(" ANDW3 %r2,%r0,%r4");
                   1135: #                              asm(" ADDW2 &4,%r8");
                   1136: #                              asm(" ROTW %ap, 0(%r8),%r0");
                   1137: #                              asm(" ANDW3 %r0,%r1,%fp");
                   1138: #                              asm(" ORW2 %r4,%fp");
                   1139: #                              asm(" XORW2 %fp,0(%r7)");
                   1140: #                              asm(" ADDW2 &4, %r7");
                   1141: #                      } while (--i > 0);
                   1142:        subw2   &1,%r3
                   1143:        jpos    .L176
                   1144: .L174:
                   1145: BW_XORINNER:
                   1146:  ROTW %ap, 0(%r8),%r4
                   1147:  ANDW2 %r2,%r4
                   1148:  LRSW3 %ap, 4(%r8),%r0
                   1149:  ORW2 %r4,%r0
                   1150:  ANDW2 -0x24(%sp),%r0
                   1151:  XORW2 %r0,0(%r7)
                   1152:  ADDW2 %r6,%r8
                   1153:  ADDW2 %r5,%r7
                   1154:  DECW -0x3c(%sp)
                   1155:  BGB BW_XORLOOP
                   1156:  POPW %fp
                   1157:  POPW %ap
                   1158:        jmp     .L53
                   1159: .L177:
                   1160: #              asm("BW_XORINNER:");
                   1161: #                      asm(" ROTW %ap, 0(%r8),%r4");
                   1162: #                      asm(" ANDW2 %r2,%r4");
                   1163: #                      asm(" LRSW3 %ap, 4(%r8),%r0");
                   1164: #                      asm(" ORW2 %r4,%r0");
                   1165: #                      asm(" ANDW2 -0x24(%sp),%r0");
                   1166: #                      asm(" XORW2 %r0,0(%r7)");
                   1167: #                      asm(" ADDW2     %r6,%r8");      /*source += sw; */
                   1168: #                      asm(" ADDW2     %r5,%r7");      /*dest += dw; */
                   1169: #                              /* } while (--h > 0); */
                   1170: #                      asm(" DECW -0x3c(%sp)");
                   1171: #                      asm(" BGB BW_XORLOOP");
                   1172: #      
                   1173: #                      asm(" POPW %fp");
                   1174: #                      asm(" POPW %ap");
                   1175: #      
                   1176: #              /* above is similar to: 
                   1177: #      /*              do {
                   1178: #      /*                      m = *source++ << b;     /* m is a free register */
                   1179: #      /*                      *dest++ ^= ((m & LMASK) | ((*source >> a)& RMASK) & mask1);
                   1180: #      /*                      if ((i=w) > 0) do {
                   1181: #      /*                              m = ((*source++) << b) & LMASK;
                   1182: #      /*                              *dest++ ^= m | ((*source >> a)&RMASK);
                   1183: #      /*                      } while (--i > 0);
                   1184: #      /*                      m = *source;    /* m is a free register */
                   1185: #      /*                      *dest ^= (((m << b) | (*(source+1) >> a)) & mask2);
                   1186: #      /*                      asm(" addw2     %r6,%r8");      /*source += sw; */
                   1187: #      /*                      asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1188: #      /*              } while (--h > 0);              */
                   1189: #                      break;
                   1190: #              case F_STORE | NOSHIFT | LEFTDIR:
                   1191: #                      b = w>>2;
                   1192:        LRSW3   &2,16(%fp),%r0
                   1193:        movw    %r0,4(%fp)
                   1194: #                      w = w&3;
                   1195:        andw3   &3,16(%fp),%r0
                   1196:        movw    %r0,16(%fp)
                   1197: #                      m = h;          /* m is free => use it */
                   1198:        movw    12(%fp),%r4
                   1199: .L180:
                   1200: #                      do {
                   1201: #                              *dest = (ntmask2 & *dest) | (mask2 & *source--);
                   1202:        andw3   0(%r7),52(%fp),%r0
                   1203:        movw    %r8,%r1
                   1204:        subw2   &4,%r8
                   1205:        andw3   0(%r1),36(%fp),%r1
                   1206:        orw2    %r1,%r0
                   1207:        movw    %r0,0(%r7)
                   1208: #                              --dest;
                   1209:        subw2   &4,%r7
                   1210: #                              if ((i = b) > 0) do {
                   1211:        movw    4(%fp),%r3
                   1212:        jnpos   .L181
                   1213: .L184:
                   1214: #                                      *dest = *source;
                   1215:        movw    0(%r8),0(%r7)
                   1216: #                                      *(dest-1) = *(source-1);
                   1217:        movw    -4(%r8),-4(%r7)
                   1218: #                                      *(dest-2) = *(source-2);
                   1219:        movw    -8(%r8),-8(%r7)
                   1220: #                                      *(dest-3) = *(source-3);
                   1221:        movw    -12(%r8),-12(%r7)
                   1222: #                                      dest -= 4;
                   1223:        subw2   &16,%r7
                   1224: #                                      source -= 4;
                   1225:        subw2   &16,%r8
                   1226: .L183:
                   1227: #                              } while (--i > 0);
                   1228:        subw2   &1,%r3
                   1229:        jpos    .L184
                   1230: .L182:
                   1231: .L181:
                   1232: #                              if ((i = w) > 0) do {
                   1233:        movw    16(%fp),%r3
                   1234:        jnpos   .L185
                   1235: .L188:
                   1236: #                                      *dest-- = *source--;
                   1237:        movw    %r7,%r0
                   1238:        subw2   &4,%r7
                   1239:        movw    %r8,%r1
                   1240:        subw2   &4,%r8
                   1241:        movw    0(%r1),0(%r0)
                   1242: .L187:
                   1243: #                              } while (--i > 0);
                   1244:        subw2   &1,%r3
                   1245:        jpos    .L188
                   1246: .L186:
                   1247: .L185:
                   1248: #                              *dest = (ntmask1 & *dest) | (mask1 & *source);
                   1249:        andw3   0(%r7),48(%fp),%r0
                   1250:        andw3   0(%r8),32(%fp),%r1
                   1251:        orw2    %r1,%r0
                   1252:        movw    %r0,0(%r7)
                   1253:  addw2 %r6,%r8
                   1254:  addw2 %r5,%r7
                   1255: .L179:
                   1256: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                   1257: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1258: #                      } while (--m != 0);
                   1259:        subw2   &1,%r4
                   1260:        jnz     .L180
                   1261: .L178:
                   1262:        jmp     .L53
                   1263: .L189:
                   1264: #                      break;
                   1265: #              case F_STORE | LEFTDIR:
                   1266: #                      if ((px31) < (rx31))
                   1267:        cmpw    24(%fp),28(%fp)
                   1268:        jge     .L190
                   1269: #                              source++;       /* adjust for pipeline */
                   1270:        addw2   &4,%r8
                   1271: .L190:
                   1272: .L193:
                   1273: #                      do {
                   1274: #                              m = *source--;  /* m is a free register */
                   1275:        movw    %r8,%r0
                   1276:        subw2   &4,%r8
                   1277:        movw    0(%r0),%r4
                   1278: #                              *dest = (((m >> a) | (*source << b)) & mask2) |
                   1279: #                                                       (*dest & ntmask2);
                   1280:        LRSW3   0(%fp),%r4,%r0
                   1281:        LLSW3   4(%fp),0(%r8),%r1
                   1282:        orw2    %r1,%r0
                   1283:        andw2   36(%fp),%r0
                   1284:        andw3   52(%fp),0(%r7),%r1
                   1285:        orw2    %r1,%r0
                   1286:        movw    %r0,0(%r7)
                   1287: #                              --dest;
                   1288:        subw2   &4,%r7
                   1289: #                              if ((i=w) > 0) do {
                   1290:        movw    16(%fp),%r3
                   1291:        jnpos   .L194
                   1292: .L197:
                   1293: #                                      m = (*source--) >> a;
                   1294:        movw    %r8,%r0
                   1295:        subw2   &4,%r8
                   1296:        LRSW3   0(%fp),0(%r0),%r0
                   1297:        movw    %r0,%r4
                   1298: #                                      *dest-- = m | (*source << b);
                   1299:        movw    %r7,%r0
                   1300:        subw2   &4,%r7
                   1301:        LLSW3   4(%fp),0(%r8),%r1
                   1302:        orw2    %r4,%r1
                   1303:        movw    %r1,0(%r0)
                   1304: .L196:
                   1305: #                              } while (--i > 0);
                   1306:        subw2   &1,%r3
                   1307:        jpos    .L197
                   1308: .L195:
                   1309: .L194:
                   1310: #                              m = *source;    /* m is a free register */
                   1311:        movw    0(%r8),%r4
                   1312: #                              *dest = (((m >> a) | (*(source-1) << b)) & mask1) |
                   1313: #                                                       (*dest & ntmask1);
                   1314:        LRSW3   0(%fp),%r4,%r0
                   1315:        LLSW3   4(%fp),-4(%r8),%r1
                   1316:        orw2    %r1,%r0
                   1317:        andw2   32(%fp),%r0
                   1318:        andw3   48(%fp),0(%r7),%r1
                   1319:        orw2    %r1,%r0
                   1320:        movw    %r0,0(%r7)
                   1321:  addw2 %r6,%r8
                   1322:  addw2 %r5,%r7
                   1323: .L192:
                   1324: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                   1325: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1326: #                      } while (--h > 0);
                   1327:        subw2   &1,12(%fp)
                   1328:        jpos    .L193
                   1329: .L191:
                   1330:        jmp     .L53
                   1331: .L198:
                   1332: #                      break;
                   1333: #              case F_STORE | NOSHIFT:
                   1334: #                      if (w > 25)
                   1335:        cmpw    16(%fp),&25
                   1336:        jle     .L199
                   1337:        jmp     .L200
                   1338: .L199:
                   1339: #                              goto widestore;
                   1340: #                      i = 25 - w;
                   1341:        subw3   16(%fp),&25,%r0
                   1342:        movw    %r0,%r3
                   1343: #                      m = (i << 2) + (i << 1);
                   1344:        LLSW3   &2,%r3,%r0
                   1345:        LLSW3   &1,%r3,%r1
                   1346:        addw2   %r1,%r0
                   1347:        movw    %r0,%r4
                   1348:  LLSW3 &0x2,0x10(%fp),%r0
                   1349:  ADDW2 &4,%r0
                   1350:  MOVAW B_FS_N,%r1
                   1351:  ADDW2 %r4,%r1
                   1352: #                      
                   1353: #                      asm(" LLSW3 &0x2,0x10(%fp),%r0");       /* bytewidth in r0*/
                   1354: #                      asm(" ADDW2 &4,%r0");   /* r0 +=4 for loop offsets */
                   1355: #                      asm(" MOVAW B_FS_N,%r1");
                   1356: #                      asm(" ADDW2 %r4,%r1");  /* r1 += &label, or jump addr*/
                   1357: #                      m = h;          /* m is free reg, use it as height */
                   1358:        movw    12(%fp),%r4
                   1359:  MOVW 0x20(%fp),%r2
                   1360:  PUSHW %ap
                   1361:  MOVW 0x24(%fp),%ap
                   1362:  PUSHW %fp
                   1363:  MOVW %r1,%fp
                   1364: .L203:
                   1365:  XORW3 0(%r7),0(%r8),%r1
                   1366:  ANDW2 %r2,%r1
                   1367:  XORW2 %r1,0(%r7)
                   1368:  JMP     0(%fp)
                   1369: B_FS_N: 
                   1370:  MOVW    0x64(%r8),0x64(%r7)
                   1371:  MOVW    0x60(%r8),0x60(%r7)
                   1372:  MOVW    0x5c(%r8),0x5c(%r7)
                   1373:  MOVW    0x58(%r8),0x58(%r7)
                   1374:  MOVW    0x54(%r8),0x54(%r7)
                   1375:  MOVW    0x50(%r8),0x50(%r7)
                   1376:  MOVW    0x4c(%r8),0x4c(%r7)
                   1377:  MOVW    0x48(%r8),0x48(%r7)
                   1378:  MOVW    0x44(%r8),0x44(%r7)
                   1379:  MOVW    0x40(%r8),0x40(%r7)
                   1380:  MOVW    0x3c(%r8),0x3c(%r7)
                   1381:  MOVW    0x38(%r8),0x38(%r7)
                   1382:  MOVW    0x34(%r8),0x34(%r7)
                   1383:  MOVW    0x30(%r8),0x30(%r7)
                   1384:  MOVW    0x2c(%r8),0x2c(%r7)
                   1385:  MOVW    0x28(%r8),0x28(%r7)
                   1386:  MOVW    0x24(%r8),0x24(%r7)
                   1387:  MOVW    0x20(%r8),0x20(%r7)
                   1388:  MOVW    0x1c(%r8),0x1c(%r7)
                   1389:  MOVW    0x18(%r8),0x18(%r7)
                   1390:  MOVW    0x14(%r8),0x14(%r7)
                   1391:  MOVW    0x10(%r8),0x10(%r7)
                   1392:  MOVW    0xc(%r8),0xc(%r7)
                   1393:  MOVW    0x8(%r8),0x8(%r7)
                   1394:  MOVW    0x4(%r8),0x4(%r7)
                   1395:  ADDW2   %r0,%r8
                   1396:  ADDW2   %r0,%r7
                   1397:  XORW3 0(%r7),0(%r8),%r1
                   1398:  ANDW2 %ap,%r1
                   1399:  XORW2 %r1,0(%r7)
                   1400:  ADDW2   %r6,%r8
                   1401:  ADDW2   %r5,%r7
                   1402: .L202:
                   1403: #                      asm(" MOVW 0x20(%fp),%r2");     /* r2 = mask1 */
                   1404: #                      asm(" PUSHW %ap");      /* save fp and ap */
                   1405: #                      asm(" MOVW 0x24(%fp),%ap");     /* ap = mask2 */
                   1406: #                      asm(" PUSHW %fp");
                   1407: #                      asm(" MOVW %r1,%fp");   /* put jump index into fp */
                   1408: #      
                   1409: #                      do{
                   1410: #      
                   1411: #                      asm(" XORW3 0(%r7),0(%r8),%r1");
                   1412: #                      asm(" ANDW2 %r2,%r1");
                   1413: #                      asm(" XORW2 %r1,0(%r7)");
                   1414: #      
                   1415: #                      asm(" JMP     0(%fp)");
                   1416: #                      asm("B_FS_N: ");                /* label */
                   1417: #                      asm(" MOVW    0x64(%r8),0x64(%r7)");
                   1418: #                      asm(" MOVW    0x60(%r8),0x60(%r7)"); asm(" MOVW    0x5c(%r8),0x5c(%r7)");
                   1419: #                      asm(" MOVW    0x58(%r8),0x58(%r7)"); asm(" MOVW    0x54(%r8),0x54(%r7)");
                   1420: #                      asm(" MOVW    0x50(%r8),0x50(%r7)"); asm(" MOVW    0x4c(%r8),0x4c(%r7)"); asm(" MOVW    0x48(%r8),0x48(%r7)"); asm(" MOVW    0x44(%r8),0x44(%r7)");
                   1421: #                      asm(" MOVW    0x40(%r8),0x40(%r7)"); asm(" MOVW    0x3c(%r8),0x3c(%r7)"); asm(" MOVW    0x38(%r8),0x38(%r7)"); asm(" MOVW    0x34(%r8),0x34(%r7)");
                   1422: #                      asm(" MOVW    0x30(%r8),0x30(%r7)"); asm(" MOVW    0x2c(%r8),0x2c(%r7)"); asm(" MOVW    0x28(%r8),0x28(%r7)"); asm(" MOVW    0x24(%r8),0x24(%r7)");
                   1423: #                      asm(" MOVW    0x20(%r8),0x20(%r7)"); asm(" MOVW    0x1c(%r8),0x1c(%r7)"); asm(" MOVW    0x18(%r8),0x18(%r7)");
                   1424: #                      asm(" MOVW    0x14(%r8),0x14(%r7)");
                   1425: #                      asm(" MOVW    0x10(%r8),0x10(%r7)");
                   1426: #                      asm(" MOVW    0xc(%r8),0xc(%r7)");
                   1427: #                      asm(" MOVW    0x8(%r8),0x8(%r7)");
                   1428: #                      asm(" MOVW    0x4(%r8),0x4(%r7)");
                   1429: #                      asm(" ADDW2   %r0,%r8");
                   1430: #                      asm(" ADDW2   %r0,%r7");
                   1431: #                      asm(" XORW3 0(%r7),0(%r8),%r1");
                   1432: #                      asm(" ANDW2 %ap,%r1");  /* ap has mask2 */
                   1433: #                      asm(" XORW2 %r1,0(%r7)");
                   1434: #                      asm(" ADDW2   %r6,%r8");
                   1435: #                      asm(" ADDW2   %r5,%r7");
                   1436: #              } while (--m != 0);
                   1437:        subw2   &1,%r4
                   1438:        jnz     .L203
                   1439: .L201:
                   1440:  POPW %fp
                   1441:  POPW %ap
                   1442:        jmp     .L53
                   1443: .L200:
                   1444: #                      asm(" POPW %fp");
                   1445: #                      asm(" POPW %ap");
                   1446: #              break;
                   1447: #              /* ABOVE ALMOST EQUAL TO : */
                   1448: #      widestore:
                   1449: #                      b = w >> 2;
                   1450:        LRSW3   &2,16(%fp),%r0
                   1451:        movw    %r0,4(%fp)
                   1452: #                      w = w & 3;
                   1453:        andw3   &3,16(%fp),%r0
                   1454:        movw    %r0,16(%fp)
                   1455: #                      m = h;
                   1456:        movw    12(%fp),%r4
                   1457: .L206:
                   1458: #                      do {
                   1459: #                              *dest = (ntmask1 & *dest) | (mask1 & *source++);
                   1460:        andw3   0(%r7),48(%fp),%r0
                   1461:        movw    %r8,%r1
                   1462:        addw2   &4,%r8
                   1463:        andw3   0(%r1),32(%fp),%r1
                   1464:        orw2    %r1,%r0
                   1465:        movw    %r0,0(%r7)
                   1466: #                              dest++;
                   1467:        addw2   &4,%r7
                   1468: #                              if ((i = b) > 0) do {
                   1469:        movw    4(%fp),%r3
                   1470:        jnpos   .L207
                   1471: .L210:
                   1472: #                                      *dest = *source;
                   1473:        movw    0(%r8),0(%r7)
                   1474: #                                      *(dest+1) = *(source+1);
                   1475:        movw    4(%r8),4(%r7)
                   1476: #                                      *(dest+2) = *(source+2);
                   1477:        movw    8(%r8),8(%r7)
                   1478: #                                      *(dest+3) = *(source+3);
                   1479:        movw    12(%r8),12(%r7)
                   1480: #                                      dest += 4;
                   1481:        addw2   &16,%r7
                   1482: #                                      source += 4;
                   1483:        addw2   &16,%r8
                   1484: .L209:
                   1485: #                              } while (--i > 0);
                   1486:        subw2   &1,%r3
                   1487:        jpos    .L210
                   1488: .L208:
                   1489: .L207:
                   1490: #                              if ((i = w) > 0) do {
                   1491:        movw    16(%fp),%r3
                   1492:        jnpos   .L211
                   1493: .L214:
                   1494: #                                      *dest++ = *source++;
                   1495:        movw    %r7,%r0
                   1496:        addw2   &4,%r7
                   1497:        movw    %r8,%r1
                   1498:        addw2   &4,%r8
                   1499:        movw    0(%r1),0(%r0)
                   1500: .L213:
                   1501: #                              } while (--i > 0);
                   1502:        subw2   &1,%r3
                   1503:        jpos    .L214
                   1504: .L212:
                   1505: .L211:
                   1506: #                              *dest = (ntmask2 & *dest) | (mask2 & *source);
                   1507:        andw3   0(%r7),52(%fp),%r0
                   1508:        andw3   0(%r8),36(%fp),%r1
                   1509:        orw2    %r1,%r0
                   1510:        movw    %r0,0(%r7)
                   1511:  addw2 %r6,%r8
                   1512:  addw2 %r5,%r7
                   1513: .L205:
                   1514: #                              asm(" addw2     %r6,%r8");
                   1515: #                              asm(" addw2     %r5,%r7");
                   1516: #                      } while (--m != 0);
                   1517:        subw2   &1,%r4
                   1518:        jnz     .L206
                   1519: .L204:
                   1520:        jmp     .L53
                   1521: .L215:
                   1522: #                      break;
                   1523: #              case F_STORE:
                   1524: #                      if ((px31) > (rx31))
                   1525:        cmpw    24(%fp),28(%fp)
                   1526:        jle     .L216
                   1527: #                              source--;       /* adjust for pipeline */
                   1528:        subw2   &4,%r8
                   1529: .L216:
                   1530: .L219:
                   1531: #                      do {
                   1532: #                              m = *source++;  /* m is a free register */
                   1533:        movw    %r8,%r0
                   1534:        addw2   &4,%r8
                   1535:        movw    0(%r0),%r4
                   1536: #                              *dest = (((m << b) | (*source >> a)) & mask1) |
                   1537: #                                                       (*dest & ntmask1);
                   1538:        LLSW3   4(%fp),%r4,%r0
                   1539:        LRSW3   0(%fp),0(%r8),%r1
                   1540:        orw2    %r1,%r0
                   1541:        andw2   32(%fp),%r0
                   1542:        andw3   48(%fp),0(%r7),%r1
                   1543:        orw2    %r1,%r0
                   1544:        movw    %r0,0(%r7)
                   1545: #                              dest++;
                   1546:        addw2   &4,%r7
                   1547: #                              if ((i=w) > 0) do {
                   1548:        movw    16(%fp),%r3
                   1549:        jnpos   .L220
                   1550: .L223:
                   1551: #                                      m = (*source++) << b;
                   1552:        movw    %r8,%r0
                   1553:        addw2   &4,%r8
                   1554:        LLSW3   4(%fp),0(%r0),%r0
                   1555:        movw    %r0,%r4
                   1556: #                                      *dest++ = m | (*source >> a);
                   1557:        movw    %r7,%r0
                   1558:        addw2   &4,%r7
                   1559:        LRSW3   0(%fp),0(%r8),%r1
                   1560:        orw2    %r4,%r1
                   1561:        movw    %r1,0(%r0)
                   1562: .L222:
                   1563: #                              } while (--i > 0);
                   1564:        subw2   &1,%r3
                   1565:        jpos    .L223
                   1566: .L221:
                   1567: .L220:
                   1568: #                              m = *source;    /* m is a free register */
                   1569:        movw    0(%r8),%r4
                   1570: #                              *dest = (((m << b) | (*(source+1) >> a)) & mask2) |
                   1571: #                                                       (*dest & ntmask2);
                   1572:        LLSW3   4(%fp),%r4,%r0
                   1573:        LRSW3   0(%fp),4(%r8),%r1
                   1574:        orw2    %r1,%r0
                   1575:        andw2   36(%fp),%r0
                   1576:        andw3   52(%fp),0(%r7),%r1
                   1577:        orw2    %r1,%r0
                   1578:        movw    %r0,0(%r7)
                   1579:  addw2 %r6,%r8
                   1580:  addw2 %r5,%r7
                   1581: .L218:
                   1582: #                              asm(" addw2     %r6,%r8");      /*source += sw; */
                   1583: #                              asm(" addw2     %r5,%r7");      /*dest += dw; */
                   1584: #                      } while (--h > 0);
                   1585:        subw2   &1,12(%fp)
                   1586:        jpos    .L219
                   1587: .L217:
                   1588:        jmp     .L53
                   1589: .L54:
                   1590:        cmpw    %r0,&0
                   1591:        jl      .L224
                   1592:        cmpw    %r0,&15
                   1593:        jg      .L224
                   1594:        ALSW3   &2,%r0,%r0
                   1595:        jmp     *.L225(%r0)
                   1596:        .data
                   1597:        .align  4
                   1598: #SWBEG
                   1599: .L225:
                   1600:        .word   .L215
                   1601:        .word   .L88
                   1602:        .word   .L130
                   1603:        .word   .L172
                   1604:        .word   .L198
                   1605:        .word   .L76
                   1606:        .word   .L118
                   1607:        .word   .L160
                   1608:        .word   .L189
                   1609:        .word   .L67
                   1610:        .word   .L109
                   1611:        .word   .L151
                   1612:        .word   .L177
                   1613:        .word   .L55
                   1614:        .word   .L97
                   1615:        .word   .L139
                   1616: #SWEND
                   1617:        .text
                   1618: .L224:
                   1619: .L53:
                   1620:        jmp     .L31
                   1621: .L43:
                   1622: #                      break;
                   1623: #              }
                   1624: #      
                   1625: #              return;
                   1626: #      narrow:
                   1627: #              /*
                   1628: #               * width is 32 bits or less.  There are four basic cases
                   1629: #               * (in addition to the function code), which depend on whether
                   1630: #               * the source and dest straddle word boundaries or not
                   1631: #               */
                   1632: #      
                   1633: #              m = p.x & 31;           /* commonly used expression  */
                   1634:        andh3   &31,16(%ap),%r0
                   1635:        movw    %r0,%r4
                   1636: #              sw = r.origin.x & 31;           /* commonly used expression  */
                   1637:        andh3   &31,4(%ap),%r0
                   1638:        movw    %r0,%r6
                   1639: #              if (sw + dw > 31)       /* if source is NOT aligned */
                   1640:        addw3   %r5,%r6,%r0
                   1641:        cmpw    %r0,&31
                   1642:        jle     .L226
                   1643: #              {
                   1644: #                      fc |= S_STRADDLE;
                   1645:        orw2    &4,20(%ap)
                   1646: #                      mask1 = ONES >> sw;
                   1647:        LRSW3   %r6,&-1,%r0
                   1648:        movw    %r0,32(%fp)
                   1649: #                      mask2 = topbits[((sw + dw) & 31) + 1];
                   1650:        addw3   %r5,%r6,%r0
                   1651:        andw2   &31,%r0
                   1652:        addw2   &1,%r0
                   1653:        LLSW3   &2,%r0,%r0
                   1654:        movw    topbits(%r0),36(%fp)
                   1655: .L226:
                   1656: #              }
                   1657: #      
                   1658: #              if (m + dw > 31)        /* if dest is NOT aligned */
                   1659:        addw3   %r5,%r4,%r0
                   1660:        cmpw    %r0,&31
                   1661:        jleu    .L227
                   1662: #              {
                   1663: #                      fc |= D_STRADDLE;
                   1664:        orw2    &8,20(%ap)
                   1665: #                      mask3 = ONES >> m;
                   1666:        LRSW3   %r4,&-1,%r0
                   1667:        movw    %r0,40(%fp)
                   1668: #                      mask4 = topbits[((m + dw) & 31) + 1];
                   1669:        addw3   %r5,%r4,%r0
                   1670:        andw2   &31,%r0
                   1671:        addw2   &1,%r0
                   1672:        LLSW3   &2,%r0,%r0
                   1673:        movw    topbits(%r0),44(%fp)
                   1674: .L227:
                   1675: #              }
                   1676: #              px31 = m;
                   1677:        movw    %r4,24(%fp)
                   1678: #              m = m - sw;
                   1679:        subw3   %r6,%r4,%r0
                   1680:        movw    %r0,%r4
                   1681: #              a = dw;
                   1682:        movw    %r5,0(%fp)
                   1683: #      
                   1684: #              if ((sm == dm) && (r.origin.y < p.y))
                   1685:        cmpw    0(%ap),12(%ap)
                   1686:        jne     .L228
                   1687:        cmph    6(%ap),18(%ap)
                   1688:        jge     .L228
                   1689: .L229:
                   1690: #              {       /* may have to mess with loop order */
                   1691: #                      r.origin.y += i-1;
                   1692:        movtwh  %r3,%r0
                   1693:        subh2   &1,%r0
                   1694:        addh2   %r0,6(%ap)
                   1695: #                      p.y += i-1;
                   1696:        movtwh  %r3,%r0
                   1697:        subh2   &1,%r0
                   1698:        addh2   %r0,18(%ap)
                   1699: #                      sw = -(sm->width << 2); /* sleazy hack to avoid shift */
                   1700:        addw3   &4,0(%ap),%r0
                   1701:        LLSW3   &2,0(%r0),%r0
                   1702:        mnegw   %r0,%r0
                   1703:        movw    %r0,%r6
                   1704: #                      dw = -(dm->width << 2); /* in outer, inner loops */
                   1705:        addw3   &4,12(%ap),%r0
                   1706:        LLSW3   &2,0(%r0),%r0
                   1707:        mnegw   %r0,%r0
                   1708:        movw    %r0,%r5
                   1709:        jmp     .L230
                   1710: .L228:
                   1711: #              }
                   1712: #              else
                   1713: #              {
                   1714: #                      sw = sm->width << 2;
                   1715:        addw3   &4,0(%ap),%r0
                   1716:        LLSW3   &2,0(%r0),%r0
                   1717:        movw    %r0,%r6
                   1718: #                      dw = dm->width << 2;
                   1719:        addw3   &4,12(%ap),%r0
                   1720:        LLSW3   &2,0(%r0),%r0
                   1721:        movw    %r0,%r5
                   1722: .L230:
                   1723: #              }
                   1724: #      
                   1725: #              source = addr(sm,r.origin);
                   1726:        pushw   0(%ap)
                   1727:        pushw   4(%ap)
                   1728:        call    &2,addr
                   1729:        movw    %r0,%r8
                   1730: #              dest = addr(dm,p);
                   1731:        pushw   12(%ap)
                   1732:        pushw   16(%ap)
                   1733:        call    &2,addr
                   1734:        movw    %r0,%r7
                   1735: #      
                   1736: #              switch(fc)
                   1737:        movw    20(%ap),%r0
                   1738:        jmp     .L232
                   1739: .L233:
                   1740: #              {
                   1741: #              case F_STORE:
                   1742: #                      mask1 = topbits[a+1] >> (px31);
                   1743:        addw3   &1,0(%fp),%r0
                   1744:        LLSW3   &2,%r0,%r0
                   1745:        LRSW3   24(%fp),topbits(%r0),%r0
                   1746:        movw    %r0,32(%fp)
                   1747:  MOVW 0x20(%fp),%r1
                   1748: .L236:
                   1749:  ROTW %r4,0(%r8),%r2
                   1750:  XORW2 0(%r7),%r2
                   1751:  ANDW2 %r1,%r2
                   1752:  XORW2 %r2,0(%r7)
                   1753:  ADDW2 %r6, %r8
                   1754:  ADDW2 %r5, %r7
                   1755: .L235:
                   1756: #                      asm(" MOVW 0x20(%fp),%r1");
                   1757: #                      do {
                   1758: #                              asm(" ROTW %r4,0(%r8),%r2");
                   1759: #                              asm(" XORW2 0(%r7),%r2");
                   1760: #                              asm(" ANDW2 %r1,%r2");
                   1761: #                              asm(" XORW2 %r2,0(%r7)");
                   1762: #                              asm(" ADDW2 %r6, %r8");
                   1763: #                              asm(" ADDW2 %r5, %r7");
                   1764: #                      } while (--i > 0);
                   1765:        subw2   &1,%r3
                   1766:        jpos    .L236
                   1767: .L234:
                   1768:        jmp     .L231
                   1769: .L237:
                   1770: #                      break;
                   1771: #              case F_STORE | S_STRADDLE:
                   1772: #                      mask4 = 32 - m;         /* REALLY the other shift count */
                   1773:        subw3   %r4,&32,%r0
                   1774:        movw    %r0,44(%fp)
                   1775: #                      mask3 = topbits[a+1] >> px31;
                   1776:        addw3   &1,0(%fp),%r0
                   1777:        LLSW3   &2,%r0,%r0
                   1778:        LRSW3   24(%fp),topbits(%r0),%r0
                   1779:        movw    %r0,40(%fp)
                   1780:  PUSHW %ap
                   1781:  MOVW 0x28(%fp),%r0
                   1782:  MOVW 0x2c(%fp),%ap
                   1783: .L240:
                   1784:  LLSW3 %ap,0(%r8),%r1
                   1785:  LRSW3 %r4,4(%r8),%r2
                   1786:  ORW2  %r2, %r1
                   1787:  XORW2 0(%r7),%r1
                   1788:  ANDW2 %r0,%r1
                   1789:  XORW2 %r1,0(%r7)
                   1790:  ADDW2 %r6, %r8
                   1791:  ADDW2 %r5, %r7
                   1792: .L239:
                   1793: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   1794: #                      asm(" MOVW 0x28(%fp),%r0");     /* put mask3 in r0 */
                   1795: #                      asm(" MOVW 0x2c(%fp),%ap");     /* put other shift in ap */
                   1796: #      
                   1797: #                      do {
                   1798: #                              asm(" LLSW3 %ap,0(%r8),%r1"); /* 32-m,lft shft */
                   1799: #                              asm(" LRSW3 %r4,4(%r8),%r2");   /* m, right shift */
                   1800: #                              asm(" ORW2  %r2, %r1");
                   1801: #                              asm(" XORW2 0(%r7),%r1");
                   1802: #                              asm(" ANDW2 %r0,%r1");
                   1803: #                              asm(" XORW2 %r1,0(%r7)");
                   1804: #                              asm(" ADDW2 %r6, %r8");
                   1805: #                              asm(" ADDW2 %r5, %r7");
                   1806: #                      } while (--i > 0);
                   1807:        subw2   &1,%r3
                   1808:        jpos    .L240
                   1809: .L238:
                   1810:  POPW %ap
                   1811:        jmp     .L231
                   1812: .L241:
                   1813:  PUSHW %ap
                   1814:  MOVW 0x28(%fp),%r0
                   1815:  MOVW 0x2c(%fp),%ap
                   1816: .L244:
                   1817:  ROTW %r4,0(%r8),%r1
                   1818:  XORW3 0(%r7),%r1,%r2
                   1819:  ANDW2 %r0,%r2
                   1820:  XORW2 %r2,0(%r7)
                   1821:  XORW2 4(%r7),%r1
                   1822:  ANDW2 %ap,%r1
                   1823:  XORW2 %r1,4(%r7)
                   1824:  ADDW2 %r6, %r8
                   1825:  ADDW2 %r5, %r7
                   1826: .L243:
                   1827: #                      asm(" POPW %ap");       /* restore ap from stack */
                   1828: #                      break;
                   1829: #              case F_STORE | D_STRADDLE:
                   1830: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   1831: #                      asm(" MOVW 0x28(%fp),%r0");     /* put mask3 in r0 */
                   1832: #                      asm(" MOVW 0x2c(%fp),%ap");     /* put mask4 in ap */
                   1833: #                      do {
                   1834: #                              asm(" ROTW %r4,0(%r8),%r1");
                   1835: #                              asm(" XORW3 0(%r7),%r1,%r2");
                   1836: #                              asm(" ANDW2 %r0,%r2");
                   1837: #                              asm(" XORW2 %r2,0(%r7)");
                   1838: #                              asm(" XORW2 4(%r7),%r1");
                   1839: #                              asm(" ANDW2 %ap,%r1");
                   1840: #                              asm(" XORW2 %r1,4(%r7)");
                   1841: #                              asm(" ADDW2 %r6, %r8");
                   1842: #                              asm(" ADDW2 %r5, %r7");
                   1843: #                          } while (--i > 0);
                   1844:        subw2   &1,%r3
                   1845:        jpos    .L244
                   1846: .L242:
                   1847:  POPW %ap
                   1848:        jmp     .L231
                   1849: .L245:
                   1850:  PUSHW %ap
                   1851:  SUBW3 %r4,&0x20,%ap
                   1852:  MOVW 0x20(%fp),%r0
                   1853:  MOVW 0x24(%fp),%r2
                   1854:  PUSHW %fp
                   1855: .L248:
                   1856:  ANDW3 %r0, 0(%r8), %r1
                   1857:  ANDW3 %r2, 4(%r8),%ap
                   1858:  ORW2 %ap, %r1
                   1859:  ROTW %r4, %r1, %r1
                   1860:  XORW3 0(%r7), %r1, %ap
                   1861:  ANDW2 0x28(%fp), %ap
                   1862:  XORW2 %ap, 0(%r7)
                   1863:  XORW2 4(%r7), %r1
                   1864:  ANDW2 0x2c(%fp), %r1
                   1865:  XORW2 %r1, 4(%r7)
                   1866:  ADDW2 %r6, %r8
                   1867:  ADDW2 %r5, %r7
                   1868: .L247:
                   1869: #                      asm(" POPW %ap");       /* restore ap from stack */
                   1870: #                      break;
                   1871: #              case F_STORE | S_STRADDLE | D_STRADDLE:
                   1872: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   1873: #                      asm(" SUBW3 %r4,&0x20,%ap");    /* right shift distance */
                   1874: #                      asm(" MOVW 0x20(%fp),%r0");     /* r0 <- mask1 */
                   1875: #                      asm(" MOVW 0x24(%fp),%r2");     /* r2 <- mask2 */
                   1876: #                      asm(" PUSHW %fp");      /* store fp on stack */
                   1877: #                      do {
                   1878: #                              asm(" ANDW3 %r0, 0(%r8), %r1");
                   1879: #                              asm(" ANDW3 %r2, 4(%r8),%ap");
                   1880: #                              asm(" ORW2 %ap, %r1");
                   1881: #                              asm(" ROTW %r4, %r1, %r1");
                   1882: #                              asm(" XORW3 0(%r7), %r1, %ap");
                   1883: #                              asm(" ANDW2 0x28(%fp), %ap");
                   1884: #                              asm(" XORW2 %ap, 0(%r7)");
                   1885: #                              asm(" XORW2 4(%r7), %r1");
                   1886: #                              asm(" ANDW2 0x2c(%fp), %r1");
                   1887: #                              asm(" XORW2 %r1, 4(%r7)");
                   1888: #                              asm(" ADDW2 %r6, %r8");
                   1889: #                              asm(" ADDW2 %r5, %r7");
                   1890: #                      } while (--i > 0);
                   1891:        subw2   &1,%r3
                   1892:        jpos    .L248
                   1893: .L246:
                   1894:  POPW %fp
                   1895:  POPW %ap
                   1896:        jmp     .L231
                   1897: .L249:
                   1898: #                      asm(" POPW %fp");       /* restore fp from stack */
                   1899: #                      asm(" POPW %ap");       /* restore ap from stack */
                   1900: #                      break;
                   1901: #              case F_OR:
                   1902: #                       mask1 = topbits[a+1] >> px31;
                   1903:        addw3   &1,0(%fp),%r0
                   1904:        LLSW3   &2,%r0,%r0
                   1905:        LRSW3   24(%fp),topbits(%r0),%r0
                   1906:        movw    %r0,32(%fp)
                   1907:  MOVW 0x20(%fp),%r1
                   1908: .L252:
                   1909:  ROTW %r4,0(%r8),%r2
                   1910:  ANDW2 %r1,%r2
                   1911:  ORW2 %r2,0(%r7)
                   1912:  ADDW2 %r6, %r8
                   1913:  ADDW2 %r5, %r7
                   1914: .L251:
                   1915: #                      asm(" MOVW 0x20(%fp),%r1");     /* mask1 */
                   1916: #                      do {
                   1917: #                              asm(" ROTW %r4,0(%r8),%r2");
                   1918: #                              asm(" ANDW2 %r1,%r2");
                   1919: #                              asm(" ORW2 %r2,0(%r7)");
                   1920: #                              asm(" ADDW2 %r6, %r8");
                   1921: #                              asm(" ADDW2 %r5, %r7");
                   1922: #                      } while (--i > 0);
                   1923:        subw2   &1,%r3
                   1924:        jpos    .L252
                   1925: .L250:
                   1926:        jmp     .L231
                   1927: .L253:
                   1928:  MOVW 0x20(%fp),%r0
                   1929:  PUSHW %ap
                   1930:  MOVW 0x24(%fp),%ap
                   1931: .L256:
                   1932:  ANDW3 %r0,0(%r8),%r2
                   1933:  ANDW3 %ap,4(%r8),%r1
                   1934:  ORW2 %r2,%r1
                   1935:  ROTW %r4,%r1,%r1
                   1936:  ORW2 %r1,0(%r7)
                   1937:  ADDW2 %r6, %r8
                   1938:  ADDW2 %r5, %r7
                   1939: .L255:
                   1940: #                      break;
                   1941: #              case F_OR | S_STRADDLE:
                   1942: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   1943: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   1944: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask1 in a reg */
                   1945: #      
                   1946: #                      do {
                   1947: #                              asm(" ANDW3 %r0,0(%r8),%r2"); /* x20(fp)=mask1 */
                   1948: #                              asm(" ANDW3 %ap,4(%r8),%r1"); /* x24(fp)=mask2 */
                   1949: #                              asm(" ORW2 %r2,%r1");
                   1950: #                              asm(" ROTW %r4,%r1,%r1");
                   1951: #                              asm(" ORW2 %r1,0(%r7)");
                   1952: #                              asm(" ADDW2 %r6, %r8");
                   1953: #                              asm(" ADDW2 %r5, %r7");
                   1954: #                      } while (--i > 0);
                   1955:        subw2   &1,%r3
                   1956:        jpos    .L256
                   1957: .L254:
                   1958:  POPW %ap
                   1959:        jmp     .L231
                   1960: .L257:
                   1961: #                      asm(" POPW %ap");       /* restore ap from stack */
                   1962: #                      break;
                   1963: #              case F_OR | D_STRADDLE:
                   1964: #                      if (a <= 16)                    /* very narrow, 17 bits max */
                   1965:        cmpw    0(%fp),&16
                   1966:        jg      .L258
                   1967:  MOVW &0xffff0000,%r2
                   1968:  ORW3 0x28(%fp),0x2c(%fp),%r0
                   1969: .L261:
                   1970:  ROTW %r4,0(%r8),%r1
                   1971:  ANDW2 %r0,%r1
                   1972:  ORH2 %r1,2(%r7)
                   1973:  ANDW2 %r2, %r1
                   1974:  ORW2 %r1, 4(%r7)
                   1975:  ADDW2 %r6, %r8
                   1976:  ADDW2 %r5, %r7
                   1977: .L260:
                   1978: #                      {
                   1979: #                      asm(" MOVW &0xffff0000,%r2");
                   1980: #                      asm(" ORW3 0x28(%fp),0x2c(%fp),%r0");   /* compute mask */
                   1981: #                      do {
                   1982: #                              asm(" ROTW %r4,0(%r8),%r1");
                   1983: #                              asm(" ANDW2 %r0,%r1");  /* mask */
                   1984: #                              asm(" ORH2 %r1,2(%r7)");
                   1985: #                              asm(" ANDW2 %r2, %r1");
                   1986: #                              asm(" ORW2 %r1, 4(%r7)");
                   1987: #                              asm(" ADDW2 %r6, %r8");
                   1988: #                              asm(" ADDW2 %r5, %r7");
                   1989: #                         } while (--i > 0);
                   1990:        subw2   &1,%r3
                   1991:        jpos    .L261
                   1992: .L259:
                   1993:        jmp     .L262
                   1994: .L258:
                   1995:  MOVW 0x28(%fp),%r0
                   1996:  PUSHW %ap
                   1997:  MOVW 0x2c(%fp),%ap
                   1998: .L265:
                   1999:  ROTW %r4,0(%r8),%r1
                   2000:  ANDW3 %r0,%r1,%r2
                   2001:  ORW2 %r2,0(%r7)
                   2002:  ANDW2 %ap,%r1
                   2003:  ORW2 %r1,4(%r7)
                   2004:  ADDW2 %r6, %r8
                   2005:  ADDW2 %r5, %r7
                   2006: .L264:
                   2007: #                      }
                   2008: #                      else
                   2009: #                      {
                   2010: #                      asm(" MOVW 0x28(%fp),%r0");     /* store mask3 in a reg */
                   2011: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2012: #                      asm(" MOVW 0x2c(%fp),%ap");     /* store mask4 in a reg */
                   2013: #                      do {
                   2014: #                              asm(" ROTW %r4,0(%r8),%r1");
                   2015: #                              asm(" ANDW3 %r0,%r1,%r2");
                   2016: #                              asm(" ORW2 %r2,0(%r7)");
                   2017: #                              asm(" ANDW2 %ap,%r1");
                   2018: #                              asm(" ORW2 %r1,4(%r7)");
                   2019: #                              asm(" ADDW2 %r6, %r8");
                   2020: #                              asm(" ADDW2 %r5, %r7");
                   2021: #                          } while (--i > 0);
                   2022:        subw2   &1,%r3
                   2023:        jpos    .L265
                   2024: .L263:
                   2025:  POPW %ap
                   2026: .L262:
                   2027:        jmp     .L231
                   2028: .L266:
                   2029:  MOVW 0x20(%fp),%r0
                   2030:  PUSHW %ap
                   2031:  MOVW 0x24(%fp),%ap
                   2032: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2033: #                      }
                   2034: #                      break;
                   2035: #              case F_OR | S_STRADDLE | D_STRADDLE:
                   2036: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   2037: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2038: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask2 in a reg */
                   2039: #                      if (a > 16){            /* not super narrow */
                   2040:        cmpw    0(%fp),&16
                   2041:        jle     .L267
                   2042: .L270:
                   2043:  ANDW3 %r0,0(%r8),%r1
                   2044:  ANDW3 %ap,4(%r8),%r2
                   2045:  ORW2 %r2,%r1
                   2046:  ROTW %r4,%r1,%r1
                   2047:  ANDW3 0x28(%fp),%r1,%r2
                   2048:  ORW2 %r2,0(%r7)
                   2049:  ANDW2 0x2c(%fp),%r1
                   2050:  ORW2 %r1,4(%r7)
                   2051:  ADDW2 %r6, %r8
                   2052:  ADDW2 %r5, %r7
                   2053: .L269:
                   2054: #                      do {
                   2055: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2056: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2057: #                              asm(" ORW2 %r2,%r1");
                   2058: #                              asm(" ROTW %r4,%r1,%r1");
                   2059: #                              asm(" ANDW3 0x28(%fp),%r1,%r2");
                   2060: #                              asm(" ORW2 %r2,0(%r7)");
                   2061: #                              asm(" ANDW2 0x2c(%fp),%r1");
                   2062: #                              asm(" ORW2 %r1,4(%r7)");
                   2063: #                              asm(" ADDW2 %r6, %r8");
                   2064: #                              asm(" ADDW2 %r5, %r7");
                   2065: #                      } while (--i > 0);
                   2066:        subw2   &1,%r3
                   2067:        jpos    .L270
                   2068: .L268:
                   2069:        jmp     .L271
                   2070: .L267:
                   2071: .L274:
                   2072:  ANDW3 %r0,0(%r8),%r1
                   2073:  ANDW3 %ap,4(%r8),%r2
                   2074:  ORW2 %r2,%r1
                   2075:  ROTW %r4,%r1,%r1
                   2076:  ORH2 %r1,2(%r7)
                   2077:  ANDW2 &0xffff0000,%r1
                   2078:  ORW2 %r1,4(%r7)
                   2079:  ADDW2 %r6, %r8
                   2080:  ADDW2 %r5, %r7
                   2081: .L273:
                   2082: #                      }
                   2083: #                      else
                   2084: #                      {
                   2085: #                      do {
                   2086: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2087: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2088: #                              asm(" ORW2 %r2,%r1");
                   2089: #                              asm(" ROTW %r4,%r1,%r1");
                   2090: #                              asm(" ORH2 %r1,2(%r7)");
                   2091: #                              asm(" ANDW2 &0xffff0000,%r1");
                   2092: #                              asm(" ORW2 %r1,4(%r7)");
                   2093: #                              asm(" ADDW2 %r6, %r8");
                   2094: #                              asm(" ADDW2 %r5, %r7");
                   2095: #                      } while (--i > 0);
                   2096:        subw2   &1,%r3
                   2097:        jpos    .L274
                   2098: .L272:
                   2099: .L271:
                   2100:  POPW %ap
                   2101:        jmp     .L231
                   2102: .L275:
                   2103: #                      }
                   2104: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2105: #                      break;
                   2106: #              case F_CLR:
                   2107: #                      mask1 = topbits[a+1] >> px31;
                   2108:        addw3   &1,0(%fp),%r0
                   2109:        LLSW3   &2,%r0,%r0
                   2110:        LRSW3   24(%fp),topbits(%r0),%r0
                   2111:        movw    %r0,32(%fp)
                   2112:  MOVW 0x20(%fp),%r1
                   2113: .L278:
                   2114:  ROTW %r4,0(%r8),%r2
                   2115:  ANDW2 %r1,%r2
                   2116:  MCOMW %r2,%r2
                   2117:  ANDW2 %r2,0(%r7)
                   2118:  ADDW2 %r6, %r8
                   2119:  ADDW2 %r5, %r7
                   2120: .L277:
                   2121: #                      asm(" MOVW 0x20(%fp),%r1");     /* mask1 */
                   2122: #                      do {
                   2123: #                              asm(" ROTW %r4,0(%r8),%r2");
                   2124: #                              asm(" ANDW2 %r1,%r2");
                   2125: #                              asm(" MCOMW %r2,%r2");
                   2126: #                              asm(" ANDW2 %r2,0(%r7)");
                   2127: #                              asm(" ADDW2 %r6, %r8");
                   2128: #                              asm(" ADDW2 %r5, %r7");
                   2129: #                      } while (--i > 0);
                   2130:        subw2   &1,%r3
                   2131:        jpos    .L278
                   2132: .L276:
                   2133:        jmp     .L231
                   2134: .L279:
                   2135:  MOVW 0x20(%fp),%r0
                   2136:  PUSHW %ap
                   2137:  MOVW 0x24(%fp),%ap
                   2138: .L282:
                   2139:  ANDW3 %r0,0(%r8),%r2
                   2140:  ANDW3 %ap,4(%r8),%r1
                   2141:  ORW2 %r2,%r1
                   2142:  ROTW %r4,%r1,%r1
                   2143:  MCOMW %r1,%r1
                   2144:  ANDW2 %r1,0(%r7)
                   2145:  ADDW2 %r6, %r8
                   2146:  ADDW2 %r5, %r7
                   2147: .L281:
                   2148: #                      break;
                   2149: #              case F_CLR | S_STRADDLE:
                   2150: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   2151: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2152: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask1 in a reg */
                   2153: #      
                   2154: #                      do {
                   2155: #                              asm(" ANDW3 %r0,0(%r8),%r2"); /* x20(fp)=mask1 */
                   2156: #                              asm(" ANDW3 %ap,4(%r8),%r1"); /* x24(fp)=mask2 */
                   2157: #                              asm(" ORW2 %r2,%r1");
                   2158: #                              asm(" ROTW %r4,%r1,%r1");
                   2159: #                              asm(" MCOMW %r1,%r1");
                   2160: #                              asm(" ANDW2 %r1,0(%r7)");
                   2161: #                              asm(" ADDW2 %r6, %r8");
                   2162: #                              asm(" ADDW2 %r5, %r7");
                   2163: #                      } while (--i > 0);
                   2164:        subw2   &1,%r3
                   2165:        jpos    .L282
                   2166: .L280:
                   2167:  POPW %ap
                   2168:        jmp     .L231
                   2169: .L283:
                   2170: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2171: #                      break;
                   2172: #              case F_CLR | D_STRADDLE:
                   2173: #                      if (a <= 16)                    /* very narrow, 17 bits max */
                   2174:        cmpw    0(%fp),&16
                   2175:        jg      .L284
                   2176:  MOVW &0xffff,%r2
                   2177:  ORW3 0x28(%fp),0x2c(%fp),%r0
                   2178: .L287:
                   2179:  ROTW %r4,0(%r8),%r1
                   2180:  ANDW2 %r0,%r1
                   2181:  MCOMW %r1,%r1
                   2182:  ANDH2 %r1,2(%r7)
                   2183:  ORW2 %r2,%r1
                   2184:  ANDW2 %r1,4(%r7)
                   2185:  ADDW2 %r6, %r8
                   2186:  ADDW2 %r5, %r7
                   2187: .L286:
                   2188: #                      {
                   2189: #                      asm(" MOVW &0xffff,%r2");
                   2190: #                      asm(" ORW3 0x28(%fp),0x2c(%fp),%r0");   /* compute mask */
                   2191: #                      do {
                   2192: #                              asm(" ROTW %r4,0(%r8),%r1");
                   2193: #                              asm(" ANDW2 %r0,%r1");  /* mask */
                   2194: #                              asm(" MCOMW %r1,%r1");
                   2195: #                              asm(" ANDH2 %r1,2(%r7)");
                   2196: #                              asm(" ORW2 %r2,%r1");
                   2197: #                              asm(" ANDW2 %r1,4(%r7)");
                   2198: #                              asm(" ADDW2 %r6, %r8");
                   2199: #                              asm(" ADDW2 %r5, %r7");
                   2200: #                         } while (--i > 0);
                   2201:        subw2   &1,%r3
                   2202:        jpos    .L287
                   2203: .L285:
                   2204:        jmp     .L288
                   2205: .L284:
                   2206:  MOVW 0x28(%fp),%r0
                   2207:  PUSHW %ap
                   2208:  MOVW 0x2c(%fp),%ap
                   2209: .L291:
                   2210:  ROTW %r4,0(%r8),%r1
                   2211:  ANDW3 %r0,%r1,%r2
                   2212:  MCOMW %r2,%r2
                   2213:  ANDW2 %r2,0(%r7)
                   2214:  ANDW2 %ap,%r1
                   2215:  MCOMW %r1,%r1
                   2216:  ANDW2 %r1,4(%r7)
                   2217:  ADDW2 %r6, %r8
                   2218:  ADDW2 %r5, %r7
                   2219: .L290:
                   2220: #                      }
                   2221: #                      else
                   2222: #                      {
                   2223: #                      asm(" MOVW 0x28(%fp),%r0");     /* store mask3 in a reg */
                   2224: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2225: #                      asm(" MOVW 0x2c(%fp),%ap");     /* store mask4 in a reg */
                   2226: #                      do {
                   2227: #                              asm(" ROTW %r4,0(%r8),%r1");
                   2228: #                              asm(" ANDW3 %r0,%r1,%r2");
                   2229: #                              asm(" MCOMW %r2,%r2");
                   2230: #                              asm(" ANDW2 %r2,0(%r7)");
                   2231: #                              asm(" ANDW2 %ap,%r1");
                   2232: #                              asm(" MCOMW %r1,%r1");
                   2233: #                              asm(" ANDW2 %r1,4(%r7)");
                   2234: #                              asm(" ADDW2 %r6, %r8");
                   2235: #                              asm(" ADDW2 %r5, %r7");
                   2236: #                          } while (--i > 0);
                   2237:        subw2   &1,%r3
                   2238:        jpos    .L291
                   2239: .L289:
                   2240:  POPW %ap
                   2241: .L288:
                   2242:        jmp     .L231
                   2243: .L292:
                   2244:  MOVW 0x20(%fp),%r0
                   2245:  PUSHW %ap
                   2246:  MOVW 0x24(%fp),%ap
                   2247: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2248: #                      }
                   2249: #                      break;
                   2250: #              case F_CLR | S_STRADDLE | D_STRADDLE:
                   2251: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   2252: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2253: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask2 in a reg */
                   2254: #                      if (a > 16){            /* not super narrow */
                   2255:        cmpw    0(%fp),&16
                   2256:        jle     .L293
                   2257: .L296:
                   2258:  ANDW3 %r0,0(%r8),%r1
                   2259:  ANDW3 %ap,4(%r8),%r2
                   2260:  ORW2 %r2,%r1
                   2261:  ROTW %r4,%r1,%r1
                   2262:  ANDW3 0x28(%fp),%r1,%r2
                   2263:  MCOMW %r2,%r2
                   2264:  ANDW2 %r2,0(%r7)
                   2265:  ANDW2 0x2c(%fp),%r1
                   2266:  MCOMW %r1,%r1
                   2267:  ANDW2 %r1,4(%r7)
                   2268:  ADDW2 %r6, %r8
                   2269:  ADDW2 %r5, %r7
                   2270: .L295:
                   2271: #                      do {
                   2272: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2273: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2274: #                              asm(" ORW2 %r2,%r1");
                   2275: #                              asm(" ROTW %r4,%r1,%r1");
                   2276: #                              asm(" ANDW3 0x28(%fp),%r1,%r2");
                   2277: #                              asm(" MCOMW %r2,%r2");
                   2278: #                              asm(" ANDW2 %r2,0(%r7)");
                   2279: #                              asm(" ANDW2 0x2c(%fp),%r1");
                   2280: #                              asm(" MCOMW %r1,%r1");
                   2281: #                              asm(" ANDW2 %r1,4(%r7)");
                   2282: #                              asm(" ADDW2 %r6, %r8");
                   2283: #                              asm(" ADDW2 %r5, %r7");
                   2284: #                      } while (--i > 0);
                   2285:        subw2   &1,%r3
                   2286:        jpos    .L296
                   2287: .L294:
                   2288:        jmp     .L297
                   2289: .L293:
                   2290: .L300:
                   2291:  ANDW3 %r0,0(%r8),%r1
                   2292:  ANDW3 %ap,4(%r8),%r2
                   2293:  ORW2 %r2,%r1
                   2294:  ROTW %r4,%r1,%r1
                   2295:  MCOMW %r1,%r1
                   2296:  ANDH2 %r1,2(%r7)
                   2297:  ORW2 &0xffff,%r1
                   2298:  ANDW2 %r1,4(%r7)
                   2299:  ADDW2 %r6, %r8
                   2300:  ADDW2 %r5, %r7
                   2301: .L299:
                   2302: #                      }
                   2303: #                      else
                   2304: #                      {
                   2305: #                      do {
                   2306: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2307: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2308: #                              asm(" ORW2 %r2,%r1");
                   2309: #                              asm(" ROTW %r4,%r1,%r1");
                   2310: #                              asm(" MCOMW %r1,%r1");
                   2311: #                              asm(" ANDH2 %r1,2(%r7)");
                   2312: #                              asm(" ORW2 &0xffff,%r1");
                   2313: #                              asm(" ANDW2 %r1,4(%r7)");
                   2314: #                              asm(" ADDW2 %r6, %r8");
                   2315: #                              asm(" ADDW2 %r5, %r7");
                   2316: #                      } while (--i > 0);
                   2317:        subw2   &1,%r3
                   2318:        jpos    .L300
                   2319: .L298:
                   2320: .L297:
                   2321:  POPW %ap
                   2322:        jmp     .L231
                   2323: .L301:
                   2324: #                      }
                   2325: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2326: #                      break;
                   2327: #              case F_XOR:
                   2328: #                      mask1 = topbits[a+1] >> px31;
                   2329:        addw3   &1,0(%fp),%r0
                   2330:        LLSW3   &2,%r0,%r0
                   2331:        LRSW3   24(%fp),topbits(%r0),%r0
                   2332:        movw    %r0,32(%fp)
                   2333:  MOVW 0x20(%fp),%r1
                   2334: .L304:
                   2335:  ROTW %r4,0(%r8),%r2
                   2336:  ANDW2 %r1,%r2
                   2337:  XORW2 %r2,0(%r7)
                   2338:  ADDW2 %r6, %r8
                   2339:  ADDW2 %r5, %r7
                   2340: .L303:
                   2341: #                      asm(" MOVW 0x20(%fp),%r1");     /* mask1 */
                   2342: #                      do {
                   2343: #                              asm(" ROTW %r4,0(%r8),%r2");
                   2344: #                              asm(" ANDW2 %r1,%r2");
                   2345: #                              asm(" XORW2 %r2,0(%r7)");
                   2346: #                              asm(" ADDW2 %r6, %r8");
                   2347: #                              asm(" ADDW2 %r5, %r7");
                   2348: #                      } while (--i > 0);
                   2349:        subw2   &1,%r3
                   2350:        jpos    .L304
                   2351: .L302:
                   2352:        jmp     .L231
                   2353: .L305:
                   2354:  MOVW 0x20(%fp),%r0
                   2355:  PUSHW %ap
                   2356:  MOVW 0x24(%fp),%ap
                   2357: .L308:
                   2358:  ANDW3 %r0,0(%r8),%r2
                   2359:  ANDW3 %ap,4(%r8),%r1
                   2360:  ORW2 %r2,%r1
                   2361:  ROTW %r4,%r1,%r1
                   2362:  XORW2 %r1,0(%r7)
                   2363:  ADDW2 %r6, %r8
                   2364:  ADDW2 %r5, %r7
                   2365: .L307:
                   2366: #                      break;
                   2367: #              case F_XOR | S_STRADDLE:
                   2368: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   2369: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2370: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask1 in a reg */
                   2371: #      
                   2372: #                      do {
                   2373: #                              asm(" ANDW3 %r0,0(%r8),%r2"); /* x20(fp)=mask1 */
                   2374: #                              asm(" ANDW3 %ap,4(%r8),%r1"); /* x24(fp)=mask2 */
                   2375: #                              asm(" ORW2 %r2,%r1");
                   2376: #                              asm(" ROTW %r4,%r1,%r1");
                   2377: #                              asm(" XORW2 %r1,0(%r7)");
                   2378: #                              asm(" ADDW2 %r6, %r8");
                   2379: #                              asm(" ADDW2 %r5, %r7");
                   2380: #                      } while (--i > 0);
                   2381:        subw2   &1,%r3
                   2382:        jpos    .L308
                   2383: .L306:
                   2384:  POPW %ap
                   2385:        jmp     .L231
                   2386: .L309:
                   2387: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2388: #                      break;
                   2389: #              case F_XOR | D_STRADDLE:
                   2390: #                      if (a <= 16)                    /* very narrow, 17 bits max */
                   2391:        cmpw    0(%fp),&16
                   2392:        jg      .L310
                   2393:  MOVW &0xffff0000,%r2
                   2394:  ORW3 0x28(%fp),0x2c(%fp),%r0
                   2395: .L313:
                   2396:  ROTW %r4,0(%r8),%r1
                   2397:  ANDW2 %r0,%r1
                   2398:  XORH2 %r1,2(%r7)
                   2399:  ANDW2 %r2,%r1
                   2400:  XORW2 %r1,4(%r7)
                   2401:  ADDW2 %r6, %r8
                   2402:  ADDW2 %r5, %r7
                   2403: .L312:
                   2404: #                      {
                   2405: #                      asm(" MOVW &0xffff0000,%r2");
                   2406: #                      asm(" ORW3 0x28(%fp),0x2c(%fp),%r0");   /* compute mask */
                   2407: #                      do {
                   2408: #                              asm(" ROTW %r4,0(%r8),%r1");
                   2409: #                              asm(" ANDW2 %r0,%r1");  /* mask */
                   2410: #                              asm(" XORH2 %r1,2(%r7)");
                   2411: #                              asm(" ANDW2 %r2,%r1");
                   2412: #                              asm(" XORW2 %r1,4(%r7)");
                   2413: #                              asm(" ADDW2 %r6, %r8");
                   2414: #                              asm(" ADDW2 %r5, %r7");
                   2415: #                         } while (--i > 0);
                   2416:        subw2   &1,%r3
                   2417:        jpos    .L313
                   2418: .L311:
                   2419:        jmp     .L314
                   2420: .L310:
                   2421:  MOVW 0x28(%fp),%r0
                   2422:  PUSHW %ap
                   2423:  MOVW 0x2c(%fp),%ap
                   2424: .L317:
                   2425:  ROTW %r4,0(%r8),%r1
                   2426:  ANDW3 %r0,%r1,%r2
                   2427:  XORW2 %r2,0(%r7)
                   2428:  ANDW2 %ap,%r1
                   2429:  XORW2 %r1,4(%r7)
                   2430:  ADDW2 %r6, %r8
                   2431:  ADDW2 %r5, %r7
                   2432: .L316:
                   2433: #                      }
                   2434: #                      else
                   2435: #                      {
                   2436: #                      asm(" MOVW 0x28(%fp),%r0");     /* store mask3 in a reg */
                   2437: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2438: #                      asm(" MOVW 0x2c(%fp),%ap");     /* store mask4 in a reg */
                   2439: #                      do {
                   2440: #                              asm(" ROTW %r4,0(%r8),%r1");
                   2441: #                              asm(" ANDW3 %r0,%r1,%r2");
                   2442: #                              asm(" XORW2 %r2,0(%r7)");
                   2443: #                              asm(" ANDW2 %ap,%r1");
                   2444: #                              asm(" XORW2 %r1,4(%r7)");
                   2445: #                              asm(" ADDW2 %r6, %r8");
                   2446: #                              asm(" ADDW2 %r5, %r7");
                   2447: #                          } while (--i > 0);
                   2448:        subw2   &1,%r3
                   2449:        jpos    .L317
                   2450: .L315:
                   2451:  POPW %ap
                   2452: .L314:
                   2453:        jmp     .L231
                   2454: .L318:
                   2455:  MOVW 0x20(%fp),%r0
                   2456:  PUSHW %ap
                   2457:  MOVW 0x24(%fp),%ap
                   2458: #                      asm(" POPW %ap");       /* restore ap from stack */
                   2459: #                      }
                   2460: #                      break;
                   2461: #              case F_XOR | S_STRADDLE | D_STRADDLE:
                   2462: #                      asm(" MOVW 0x20(%fp),%r0");     /* store mask1 in a reg */
                   2463: #                      asm(" PUSHW %ap");      /* store ap on stack */
                   2464: #                      asm(" MOVW 0x24(%fp),%ap");     /* store mask2 in a reg */
                   2465: #                      if (a > 16){            /* not super narrow */
                   2466:        cmpw    0(%fp),&16
                   2467:        jle     .L319
                   2468: .L322:
                   2469:  ANDW3 %r0,0(%r8),%r1
                   2470:  ANDW3 %ap,4(%r8),%r2
                   2471:  ORW2 %r2,%r1
                   2472:  ROTW %r4,%r1,%r1
                   2473:  ANDW3 0x28(%fp),%r1,%r2
                   2474:  XORW2 %r2,0(%r7)
                   2475:  ANDW2 0x2c(%fp),%r1
                   2476:  XORW2 %r1,4(%r7)
                   2477:  ADDW2 %r6, %r8
                   2478:  ADDW2 %r5, %r7
                   2479: .L321:
                   2480: #                      do {
                   2481: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2482: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2483: #                              asm(" ORW2 %r2,%r1");
                   2484: #                              asm(" ROTW %r4,%r1,%r1");
                   2485: #                              asm(" ANDW3 0x28(%fp),%r1,%r2");
                   2486: #                              asm(" XORW2 %r2,0(%r7)");
                   2487: #                              asm(" ANDW2 0x2c(%fp),%r1");
                   2488: #                              asm(" XORW2 %r1,4(%r7)");
                   2489: #                              asm(" ADDW2 %r6, %r8");
                   2490: #                              asm(" ADDW2 %r5, %r7");
                   2491: #                      } while (--i > 0);
                   2492:        subw2   &1,%r3
                   2493:        jpos    .L322
                   2494: .L320:
                   2495:        jmp     .L323
                   2496: .L319:
                   2497: .L326:
                   2498:  ANDW3 %r0,0(%r8),%r1
                   2499:  ANDW3 %ap,4(%r8),%r2
                   2500:  ORW2 %r2,%r1
                   2501:  ROTW %r4,%r1,%r1
                   2502:  XORH2 %r1,2(%r7)
                   2503:  ANDW2 &0xffff0000,%r1
                   2504:  XORW2 %r1,4(%r7)
                   2505:  ADDW2 %r6, %r8
                   2506:  ADDW2 %r5, %r7
                   2507: .L325:
                   2508: #                      }
                   2509: #                      else
                   2510: #                      {
                   2511: #                      do {
                   2512: #                              asm(" ANDW3 %r0,0(%r8),%r1");
                   2513: #                              asm(" ANDW3 %ap,4(%r8),%r2");
                   2514: #                              asm(" ORW2 %r2,%r1");
                   2515: #                              asm(" ROTW %r4,%r1,%r1");
                   2516: #                              asm(" XORH2 %r1,2(%r7)");
                   2517: #                              asm(" ANDW2 &0xffff0000,%r1");
                   2518: #                              asm(" XORW2 %r1,4(%r7)");
                   2519: #                              asm(" ADDW2 %r6, %r8");
                   2520: #                              asm(" ADDW2 %r5, %r7");
                   2521: #                      } while (--i > 0);
                   2522:        subw2   &1,%r3
                   2523:        jpos    .L326
                   2524: .L324:
                   2525: .L323:
                   2526:  POPW %ap
                   2527:        jmp     .L231
                   2528: .L232:
                   2529:        cmpw    %r0,&0
                   2530:        jl      .L327
                   2531:        cmpw    %r0,&15
                   2532:        jg      .L327
                   2533:        ALSW3   &2,%r0,%r0
                   2534:        jmp     *.L328(%r0)
                   2535:        .data
                   2536:        .align  4
                   2537: #SWBEG
                   2538: .L328:
                   2539:        .word   .L233
                   2540:        .word   .L249
                   2541:        .word   .L275
                   2542:        .word   .L301
                   2543:        .word   .L237
                   2544:        .word   .L253
                   2545:        .word   .L279
                   2546:        .word   .L305
                   2547:        .word   .L241
                   2548:        .word   .L257
                   2549:        .word   .L283
                   2550:        .word   .L309
                   2551:        .word   .L245
                   2552:        .word   .L266
                   2553:        .word   .L292
                   2554:        .word   .L318
                   2555: #SWEND
                   2556:        .text
                   2557: .L327:
                   2558: .L231:
                   2559:        jmp     .L31
                   2560: .L31:
                   2561:        .def    .ef;    .val    .;      .scl    101;    .line   909;    .endef
                   2562:        .ln     909
                   2563:        .set    .F1,64
                   2564:        .set    .R1,6
                   2565:        ret     &.R1
                   2566:        .def    bitblt; .val    .;      .scl    -1;     .endef
                   2567:        .data
                   2568: #              }
                   2569: #              asm(" POPW %ap");       /* restore ap from stack */
                   2570: #              break;
                   2571: #      }
                   2572: #      return;
                   2573: #}

unix.superglobalmegacorp.com

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