|
|
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: #}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.