51 #include "allheaders.h" 55 l_int32 dy, l_int32 dw, l_int32 dh,
58 l_int32 dy, l_int32 dw, l_int32 dh,
61 l_int32 dy, l_int32 dw, l_int32 dh,
62 l_int32 op, l_uint32 *datas, l_int32 swpl,
63 l_int32 sx, l_int32 sy);
65 l_int32 dy, l_int32 dw, l_int32 dh,
66 l_int32 op, l_uint32 *datas, l_int32 swpl,
67 l_int32 sx, l_int32 sy);
69 l_int32 dy, l_int32 dw, l_int32 dh,
70 l_int32 op, l_uint32 *datas, l_int32 swpl,
71 l_int32 sx, l_int32 sy);
73 l_uint32 *datas, l_int32 wpls,
76 #define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) ) 78 static const l_int32 SHIFT_LEFT = 0;
79 static const l_int32 SHIFT_RIGHT = 1;
81 static const l_uint32 lmask32[] = {0x0,
82 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000,
83 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000,
84 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000,
85 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000,
86 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000,
87 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00,
88 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0,
89 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff};
91 static const l_uint32 rmask32[] = {0x0,
92 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
93 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
94 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
95 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
96 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
97 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
98 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
99 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff};
135 l_int32 dhangw, dhangh;
154 dhangw = dx + dw - dpixw;
163 dhangh = dy + dh - dpixh;
168 if ((dw <= 0) || (dh <= 0))
225 lwmask = lmask32[lwbits];
226 pfword = datad + dwpl * dy + (dx >> 5);
235 for (i = 0; i < dh; i++) {
236 lined = pfword + i * dwpl;
237 for (j = 0; j < nfullw; j++)
240 *lined = COMBINE_PARTIAL(*lined, 0x0, lwmask);
244 for (i = 0; i < dh; i++) {
245 lined = pfword + i * dwpl;
246 for (j = 0; j < nfullw; j++)
247 *lined++ = 0xffffffff;
249 *lined = COMBINE_PARTIAL(*lined, 0xffffffff, lwmask);
253 for (i = 0; i < dh; i++) {
254 lined = pfword + i * dwpl;
255 for (j = 0; j < nfullw; j++) {
260 *lined = COMBINE_PARTIAL(*lined, ~(*lined), lwmask);
264 fprintf(stderr,
"Operation %d not permitted here!\n", op);
313 if ((dx & 31) == 0) {
318 dfwbits = 32 - (dx & 31);
319 dfwmask = rmask32[dfwbits];
320 pdfwpart = datad + dwpl * dy + (dx >> 5);
328 dfwmask &= lmask32[32 - dfwbits + dw];
332 if (dfwpart2b == 1) {
336 dnfullw = (dw - dfwbits) >> 5;
342 pdfwfull = pdfwpart + 1;
344 pdfwfull = datad + dwpl * dy + (dx >> 5);
349 dlwbits = (dx + dw) & 31;
350 if (dfwpart2b == 1 || dlwbits == 0) {
354 dlwmask = lmask32[dlwbits];
356 pdlwpart = pdfwpart + 1 + dnfullw;
358 pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw;
370 for (i = 0; i < dh; i++) {
371 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, dfwmask);
378 for (i = 0; i < dh; i++) {
379 for (j = 0; j < dnfullw; j++)
380 *(pdfwfull + j) = 0x0;
387 for (i = 0; i < dh; i++) {
388 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, dlwmask);
396 for (i = 0; i < dh; i++) {
397 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0xffffffff, dfwmask);
404 for (i = 0; i < dh; i++) {
405 for (j = 0; j < dnfullw; j++)
406 *(pdfwfull + j) = 0xffffffff;
413 for (i = 0; i < dh; i++) {
414 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0xffffffff, dlwmask);
422 for (i = 0; i < dh; i++) {
423 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*pdfwpart), dfwmask);
430 for (i = 0; i < dh; i++) {
431 for (j = 0; j < dnfullw; j++)
432 *(pdfwfull + j) = ~(*(pdfwfull + j));
439 for (i = 0; i < dh; i++) {
440 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pdlwpart), dlwmask);
446 fprintf(stderr,
"Operation %d not permitted here!\n", op);
498 l_int32 dhangw, shangw, dhangh, shangh;
526 dhangw = dx + dw - dpixw;
529 shangw = sx + dw - spixw;
544 dhangh = dy + dh - dpixh;
547 shangh = sy + dh - spixh;
552 if ((dw <= 0) || (dh <= 0))
558 if (((dx & 31) == 0) && ((sx & 31) == 0))
560 datas, swpl, sx, sy);
561 else if ((dx & 31) == (sx & 31))
563 datas, swpl, sx, sy);
566 datas, swpl, sx, sy);
615 l_uint32 *lines, *lined;
625 lwmask = lmask32[lwbits];
626 psfword = datas + swpl * sy + (sx >> 5);
627 pdfword = datad + dwpl * dy + (dx >> 5);
635 for (i = 0; i < dh; i++) {
636 lines = psfword + i * swpl;
637 lined = pdfword + i * dwpl;
638 for (j = 0; j < nfullw; j++) {
644 *lined = COMBINE_PARTIAL(*lined, *lines, lwmask);
648 for (i = 0; i < dh; i++) {
649 lines = psfword + i * swpl;
650 lined = pdfword + i * dwpl;
651 for (j = 0; j < nfullw; j++) {
657 *lined = COMBINE_PARTIAL(*lined, ~(*lines), lwmask);
661 for (i = 0; i < dh; i++) {
662 lines = psfword + i * swpl;
663 lined = pdfword + i * dwpl;
664 for (j = 0; j < nfullw; j++) {
665 *lined = (*lines | *lined);
670 *lined = COMBINE_PARTIAL(*lined, (*lines | *lined), lwmask);
674 for (i = 0; i < dh; i++) {
675 lines = psfword + i * swpl;
676 lined = pdfword + i * dwpl;
677 for (j = 0; j < nfullw; j++) {
678 *lined = (*lines & *lined);
683 *lined = COMBINE_PARTIAL(*lined, (*lines & *lined), lwmask);
687 for (i = 0; i < dh; i++) {
688 lines = psfword + i * swpl;
689 lined = pdfword + i * dwpl;
690 for (j = 0; j < nfullw; j++) {
691 *lined = (*lines ^ *lined);
696 *lined = COMBINE_PARTIAL(*lined, (*lines ^ *lined), lwmask);
700 for (i = 0; i < dh; i++) {
701 lines = psfword + i * swpl;
702 lined = pdfword + i * dwpl;
703 for (j = 0; j < nfullw; j++) {
704 *lined = (~(*lines) | *lined);
709 *lined = COMBINE_PARTIAL(*lined, (~(*lines) | *lined), lwmask);
713 for (i = 0; i < dh; i++) {
714 lines = psfword + i * swpl;
715 lined = pdfword + i * dwpl;
716 for (j = 0; j < nfullw; j++) {
717 *lined = (~(*lines) & *lined);
722 *lined = COMBINE_PARTIAL(*lined, (~(*lines) & *lined), lwmask);
726 for (i = 0; i < dh; i++) {
727 lines = psfword + i * swpl;
728 lined = pdfword + i * dwpl;
729 for (j = 0; j < nfullw; j++) {
730 *lined = (*lines | ~(*lined));
735 *lined = COMBINE_PARTIAL(*lined, (*lines | ~(*lined)), lwmask);
739 for (i = 0; i < dh; i++) {
740 lines = psfword + i * swpl;
741 lined = pdfword + i * dwpl;
742 for (j = 0; j < nfullw; j++) {
743 *lined = (*lines & ~(*lined));
748 *lined = COMBINE_PARTIAL(*lined, (*lines & ~(*lined)), lwmask);
752 for (i = 0; i < dh; i++) {
753 lines = psfword + i * swpl;
754 lined = pdfword + i * dwpl;
755 for (j = 0; j < nfullw; j++) {
756 *lined = ~(*lines | *lined);
761 *lined = COMBINE_PARTIAL(*lined, ~(*lines | *lined), lwmask);
765 for (i = 0; i < dh; i++) {
766 lines = psfword + i * swpl;
767 lined = pdfword + i * dwpl;
768 for (j = 0; j < nfullw; j++) {
769 *lined = ~(*lines & *lined);
774 *lined = COMBINE_PARTIAL(*lined, ~(*lines & *lined), lwmask);
779 for (i = 0; i < dh; i++) {
780 lines = psfword + i * swpl;
781 lined = pdfword + i * dwpl;
782 for (j = 0; j < nfullw; j++) {
783 *lined = ~(*lines ^ *lined);
788 *lined = COMBINE_PARTIAL(*lined, ~(*lines ^ *lined), lwmask);
792 fprintf(stderr,
"Operation %d invalid\n", op);
857 if ((dx & 31) == 0) {
862 dfwbits = 32 - (dx & 31);
863 dfwmask = rmask32[dfwbits];
864 pdfwpart = datad + dwpl * dy + (dx >> 5);
865 psfwpart = datas + swpl * sy + (sx >> 5);
873 dfwmask &= lmask32[32 - dfwbits + dw];
877 if (dfwpart2b == 1) {
881 dnfullw = (dw - dfwbits) >> 5;
887 pdfwfull = pdfwpart + 1;
888 psfwfull = psfwpart + 1;
890 pdfwfull = datad + dwpl * dy + (dx >> 5);
891 psfwfull = datas + swpl * sy + (sx >> 5);
897 dlwbits = (dx + dw) & 31;
898 if (dfwpart2b == 1 || dlwbits == 0) {
902 dlwmask = lmask32[dlwbits];
904 pdlwpart = pdfwpart + 1 + dnfullw;
905 pslwpart = psfwpart + 1 + dnfullw;
907 pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw;
908 pslwpart = datas + swpl * sy + (sx >> 5) + dnfullw;
921 for (i = 0; i < dh; i++) {
922 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, dfwmask);
930 for (i = 0; i < dh; i++) {
931 for (j = 0; j < dnfullw; j++)
932 *(pdfwfull + j) = *(psfwfull + j);
940 for (i = 0; i < dh; i++) {
941 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, dlwmask);
950 for (i = 0; i < dh; i++) {
951 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart), dfwmask);
959 for (i = 0; i < dh; i++) {
960 for (j = 0; j < dnfullw; j++)
961 *(pdfwfull + j) = ~(*(psfwfull + j));
969 for (i = 0; i < dh; i++) {
970 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart), dlwmask);
979 for (i = 0; i < dh; i++) {
980 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
981 (*psfwpart | *pdfwpart), dfwmask);
989 for (i = 0; i < dh; i++) {
990 for (j = 0; j < dnfullw; j++)
991 *(pdfwfull + j) |= *(psfwfull + j);
999 for (i = 0; i < dh; i++) {
1000 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1001 (*pslwpart | *pdlwpart), dlwmask);
1010 for (i = 0; i < dh; i++) {
1011 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1012 (*psfwpart & *pdfwpart), dfwmask);
1020 for (i = 0; i < dh; i++) {
1021 for (j = 0; j < dnfullw; j++)
1022 *(pdfwfull + j) &= *(psfwfull + j);
1030 for (i = 0; i < dh; i++) {
1031 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1032 (*pslwpart & *pdlwpart), dlwmask);
1041 for (i = 0; i < dh; i++) {
1042 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1043 (*psfwpart ^ *pdfwpart), dfwmask);
1051 for (i = 0; i < dh; i++) {
1052 for (j = 0; j < dnfullw; j++)
1053 *(pdfwfull + j) ^= *(psfwfull + j);
1061 for (i = 0; i < dh; i++) {
1062 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1063 (*pslwpart ^ *pdlwpart), dlwmask);
1072 for (i = 0; i < dh; i++) {
1073 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1074 (~(*psfwpart) | *pdfwpart), dfwmask);
1082 for (i = 0; i < dh; i++) {
1083 for (j = 0; j < dnfullw; j++)
1084 *(pdfwfull + j) |= ~(*(psfwfull + j));
1092 for (i = 0; i < dh; i++) {
1093 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1094 (~(*pslwpart) | *pdlwpart), dlwmask);
1103 for (i = 0; i < dh; i++) {
1104 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1105 (~(*psfwpart) & *pdfwpart), dfwmask);
1113 for (i = 0; i < dh; i++) {
1114 for (j = 0; j < dnfullw; j++)
1115 *(pdfwfull + j) &= ~(*(psfwfull + j));
1123 for (i = 0; i < dh; i++) {
1124 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1125 (~(*pslwpart) & *pdlwpart), dlwmask);
1134 for (i = 0; i < dh; i++) {
1135 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1136 (*psfwpart | ~(*pdfwpart)), dfwmask);
1144 for (i = 0; i < dh; i++) {
1145 for (j = 0; j < dnfullw; j++)
1146 *(pdfwfull + j) = *(psfwfull + j) | ~(*(pdfwfull + j));
1154 for (i = 0; i < dh; i++) {
1155 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1156 (*pslwpart | ~(*pdlwpart)), dlwmask);
1165 for (i = 0; i < dh; i++) {
1166 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1167 (*psfwpart & ~(*pdfwpart)), dfwmask);
1175 for (i = 0; i < dh; i++) {
1176 for (j = 0; j < dnfullw; j++)
1177 *(pdfwfull + j) = *(psfwfull + j) & ~(*(pdfwfull + j));
1185 for (i = 0; i < dh; i++) {
1186 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1187 (*pslwpart & ~(*pdlwpart)), dlwmask);
1196 for (i = 0; i < dh; i++) {
1197 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1198 ~(*psfwpart | *pdfwpart), dfwmask);
1206 for (i = 0; i < dh; i++) {
1207 for (j = 0; j < dnfullw; j++)
1208 *(pdfwfull + j) = ~(*(psfwfull + j) | *(pdfwfull + j));
1216 for (i = 0; i < dh; i++) {
1217 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1218 ~(*pslwpart | *pdlwpart), dlwmask);
1227 for (i = 0; i < dh; i++) {
1228 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1229 ~(*psfwpart & *pdfwpart), dfwmask);
1237 for (i = 0; i < dh; i++) {
1238 for (j = 0; j < dnfullw; j++)
1239 *(pdfwfull + j) = ~(*(psfwfull + j) & *(pdfwfull + j));
1247 for (i = 0; i < dh; i++) {
1248 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1249 ~(*pslwpart & *pdlwpart), dlwmask);
1259 for (i = 0; i < dh; i++) {
1260 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1261 ~(*psfwpart ^ *pdfwpart), dfwmask);
1269 for (i = 0; i < dh; i++) {
1270 for (j = 0; j < dnfullw; j++)
1271 *(pdfwfull + j) = ~(*(psfwfull + j) ^ *(pdfwfull + j));
1279 for (i = 0; i < dh; i++) {
1280 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1281 ~(*pslwpart ^ *pdlwpart), dlwmask);
1288 fprintf(stderr,
"Operation %x invalid\n", op);
1377 l_int32 srightshift;
1382 l_int32 sfwshiftdir;
1401 shang = 32 - (sx & 31);
1405 dhang = 32 - (dx & 31);
1407 if (shang == 0 && dhang == 0) {
1412 srightmask = rmask32[0];
1415 sleftshift = dhang - shang;
1417 sleftshift = 32 - (shang - dhang);
1418 srightshift = 32 - sleftshift;
1419 srightmask = rmask32[sleftshift];
1424 if ((dx & 31) == 0) {
1429 dfwbits = 32 - (dx & 31);
1430 dfwmask = rmask32[dfwbits];
1431 pdfwpart = datad + dwpl * dy + (dx >> 5);
1432 psfwpart = datas + swpl * sy + (sx >> 5);
1433 sfwbits = 32 - (sx & 31);
1434 if (dfwbits > sfwbits) {
1435 sfwshiftdir = SHIFT_LEFT;
1441 sfwshiftdir = SHIFT_RIGHT;
1446 if (dw >= dfwbits) {
1450 dfwmask &= lmask32[32 - dfwbits + dw];
1454 if (dfwpart2b == 1) {
1458 dnfullw = (dw - dfwbits) >> 5;
1463 pdfwfull = datad + dwpl * dy + ((dx + dhang) >> 5);
1464 psfwfull = datas + swpl * sy + ((sx + dhang) >> 5);
1469 dlwbits = (dx + dw) & 31;
1470 if (dfwpart2b == 1 || dlwbits == 0) {
1474 dlwmask = lmask32[dlwbits];
1475 pdlwpart = datad + dwpl * dy + ((dx + dhang) >> 5) + dnfullw;
1476 pslwpart = datas + swpl * sy + ((sx + dhang) >> 5) + dnfullw;
1477 if (dlwbits <= srightshift)
1492 for (i = 0; i < dh; i++)
1494 if (sfwshiftdir == SHIFT_LEFT) {
1495 sword = *psfwpart << sleftshift;
1497 sword = COMBINE_PARTIAL(sword,
1498 *(psfwpart + 1) >> srightshift,
1501 sword = *psfwpart >> srightshift;
1504 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, sword, dfwmask);
1512 for (i = 0; i < dh; i++) {
1513 for (j = 0; j < dnfullw; j++) {
1514 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1515 *(psfwfull + j + 1) >> srightshift,
1517 *(pdfwfull + j) = sword;
1526 for (i = 0; i < dh; i++) {
1527 sword = *pslwpart << sleftshift;
1529 sword = COMBINE_PARTIAL(sword,
1530 *(pslwpart + 1) >> srightshift,
1533 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, sword, dlwmask);
1542 for (i = 0; i < dh; i++)
1544 if (sfwshiftdir == SHIFT_LEFT) {
1545 sword = *psfwpart << sleftshift;
1547 sword = COMBINE_PARTIAL(sword,
1548 *(psfwpart + 1) >> srightshift,
1551 sword = *psfwpart >> srightshift;
1554 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~sword, dfwmask);
1562 for (i = 0; i < dh; i++) {
1563 for (j = 0; j < dnfullw; j++) {
1564 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1565 *(psfwfull + j + 1) >> srightshift,
1567 *(pdfwfull + j) = ~sword;
1576 for (i = 0; i < dh; i++) {
1577 sword = *pslwpart << sleftshift;
1579 sword = COMBINE_PARTIAL(sword,
1580 *(pslwpart + 1) >> srightshift,
1583 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~sword, dlwmask);
1592 for (i = 0; i < dh; i++)
1594 if (sfwshiftdir == SHIFT_LEFT) {
1595 sword = *psfwpart << sleftshift;
1597 sword = COMBINE_PARTIAL(sword,
1598 *(psfwpart + 1) >> srightshift,
1601 sword = *psfwpart >> srightshift;
1604 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1605 (sword | *pdfwpart), dfwmask);
1613 for (i = 0; i < dh; i++) {
1614 for (j = 0; j < dnfullw; j++) {
1615 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1616 *(psfwfull + j + 1) >> srightshift,
1618 *(pdfwfull + j) |= sword;
1627 for (i = 0; i < dh; i++) {
1628 sword = *pslwpart << sleftshift;
1630 sword = COMBINE_PARTIAL(sword,
1631 *(pslwpart + 1) >> srightshift,
1634 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1635 (sword | *pdlwpart), dlwmask);
1644 for (i = 0; i < dh; i++)
1646 if (sfwshiftdir == SHIFT_LEFT) {
1647 sword = *psfwpart << sleftshift;
1649 sword = COMBINE_PARTIAL(sword,
1650 *(psfwpart + 1) >> srightshift,
1653 sword = *psfwpart >> srightshift;
1656 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1657 (sword & *pdfwpart), dfwmask);
1665 for (i = 0; i < dh; i++) {
1666 for (j = 0; j < dnfullw; j++) {
1667 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1668 *(psfwfull + j + 1) >> srightshift,
1670 *(pdfwfull + j) &= sword;
1679 for (i = 0; i < dh; i++) {
1680 sword = *pslwpart << sleftshift;
1682 sword = COMBINE_PARTIAL(sword,
1683 *(pslwpart + 1) >> srightshift,
1686 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1687 (sword & *pdlwpart), dlwmask);
1696 for (i = 0; i < dh; i++)
1698 if (sfwshiftdir == SHIFT_LEFT) {
1699 sword = *psfwpart << sleftshift;
1701 sword = COMBINE_PARTIAL(sword,
1702 *(psfwpart + 1) >> srightshift,
1705 sword = *psfwpart >> srightshift;
1708 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1709 (sword ^ *pdfwpart), dfwmask);
1717 for (i = 0; i < dh; i++) {
1718 for (j = 0; j < dnfullw; j++) {
1719 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1720 *(psfwfull + j + 1) >> srightshift,
1722 *(pdfwfull + j) ^= sword;
1731 for (i = 0; i < dh; i++) {
1732 sword = *pslwpart << sleftshift;
1734 sword = COMBINE_PARTIAL(sword,
1735 *(pslwpart + 1) >> srightshift,
1738 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1739 (sword ^ *pdlwpart), dlwmask);
1748 for (i = 0; i < dh; i++)
1750 if (sfwshiftdir == SHIFT_LEFT) {
1751 sword = *psfwpart << sleftshift;
1753 sword = COMBINE_PARTIAL(sword,
1754 *(psfwpart + 1) >> srightshift,
1757 sword = *psfwpart >> srightshift;
1760 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1761 (~sword | *pdfwpart), dfwmask);
1769 for (i = 0; i < dh; i++) {
1770 for (j = 0; j < dnfullw; j++) {
1771 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1772 *(psfwfull + j + 1) >> srightshift,
1774 *(pdfwfull + j) |= ~sword;
1783 for (i = 0; i < dh; i++) {
1784 sword = *pslwpart << sleftshift;
1786 sword = COMBINE_PARTIAL(sword,
1787 *(pslwpart + 1) >> srightshift,
1790 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1791 (~sword | *pdlwpart), dlwmask);
1800 for (i = 0; i < dh; i++)
1802 if (sfwshiftdir == SHIFT_LEFT) {
1803 sword = *psfwpart << sleftshift;
1805 sword = COMBINE_PARTIAL(sword,
1806 *(psfwpart + 1) >> srightshift,
1809 sword = *psfwpart >> srightshift;
1812 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1813 (~sword & *pdfwpart), dfwmask);
1821 for (i = 0; i < dh; i++) {
1822 for (j = 0; j < dnfullw; j++) {
1823 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1824 *(psfwfull + j + 1) >> srightshift,
1826 *(pdfwfull + j) &= ~sword;
1835 for (i = 0; i < dh; i++) {
1836 sword = *pslwpart << sleftshift;
1838 sword = COMBINE_PARTIAL(sword,
1839 *(pslwpart + 1) >> srightshift,
1842 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1843 (~sword & *pdlwpart), dlwmask);
1852 for (i = 0; i < dh; i++)
1854 if (sfwshiftdir == SHIFT_LEFT) {
1855 sword = *psfwpart << sleftshift;
1857 sword = COMBINE_PARTIAL(sword,
1858 *(psfwpart + 1) >> srightshift,
1861 sword = *psfwpart >> srightshift;
1864 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1865 (sword | ~(*pdfwpart)), dfwmask);
1873 for (i = 0; i < dh; i++) {
1874 for (j = 0; j < dnfullw; j++) {
1875 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1876 *(psfwfull + j + 1) >> srightshift,
1878 *(pdfwfull + j) = sword | ~(*(pdfwfull + j));
1887 for (i = 0; i < dh; i++) {
1888 sword = *pslwpart << sleftshift;
1890 sword = COMBINE_PARTIAL(sword,
1891 *(pslwpart + 1) >> srightshift,
1894 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1895 (sword | ~(*pdlwpart)), dlwmask);
1904 for (i = 0; i < dh; i++)
1906 if (sfwshiftdir == SHIFT_LEFT) {
1907 sword = *psfwpart << sleftshift;
1909 sword = COMBINE_PARTIAL(sword,
1910 *(psfwpart + 1) >> srightshift,
1913 sword = *psfwpart >> srightshift;
1916 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1917 (sword & ~(*pdfwpart)), dfwmask);
1925 for (i = 0; i < dh; i++) {
1926 for (j = 0; j < dnfullw; j++) {
1927 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1928 *(psfwfull + j + 1) >> srightshift,
1930 *(pdfwfull + j) = sword & ~(*(pdfwfull + j));
1939 for (i = 0; i < dh; i++) {
1940 sword = *pslwpart << sleftshift;
1942 sword = COMBINE_PARTIAL(sword,
1943 *(pslwpart + 1) >> srightshift,
1946 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1947 (sword & ~(*pdlwpart)), dlwmask);
1956 for (i = 0; i < dh; i++)
1958 if (sfwshiftdir == SHIFT_LEFT) {
1959 sword = *psfwpart << sleftshift;
1961 sword = COMBINE_PARTIAL(sword,
1962 *(psfwpart + 1) >> srightshift,
1965 sword = *psfwpart >> srightshift;
1968 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1969 ~(sword | *pdfwpart), dfwmask);
1977 for (i = 0; i < dh; i++) {
1978 for (j = 0; j < dnfullw; j++) {
1979 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1980 *(psfwfull + j + 1) >> srightshift,
1982 *(pdfwfull + j) = ~(sword | *(pdfwfull + j));
1991 for (i = 0; i < dh; i++) {
1992 sword = *pslwpart << sleftshift;
1994 sword = COMBINE_PARTIAL(sword,
1995 *(pslwpart + 1) >> srightshift,
1998 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1999 ~(sword | *pdlwpart), dlwmask);
2008 for (i = 0; i < dh; i++)
2010 if (sfwshiftdir == SHIFT_LEFT) {
2011 sword = *psfwpart << sleftshift;
2013 sword = COMBINE_PARTIAL(sword,
2014 *(psfwpart + 1) >> srightshift,
2017 sword = *psfwpart >> srightshift;
2020 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
2021 ~(sword & *pdfwpart), dfwmask);
2029 for (i = 0; i < dh; i++) {
2030 for (j = 0; j < dnfullw; j++) {
2031 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
2032 *(psfwfull + j + 1) >> srightshift,
2034 *(pdfwfull + j) = ~(sword & *(pdfwfull + j));
2043 for (i = 0; i < dh; i++) {
2044 sword = *pslwpart << sleftshift;
2046 sword = COMBINE_PARTIAL(sword,
2047 *(pslwpart + 1) >> srightshift,
2050 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
2051 ~(sword & *pdlwpart), dlwmask);
2061 for (i = 0; i < dh; i++)
2063 if (sfwshiftdir == SHIFT_LEFT) {
2064 sword = *psfwpart << sleftshift;
2066 sword = COMBINE_PARTIAL(sword,
2067 *(psfwpart + 1) >> srightshift,
2070 sword = *psfwpart >> srightshift;
2073 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
2074 ~(sword ^ *pdfwpart), dfwmask);
2082 for (i = 0; i < dh; i++) {
2083 for (j = 0; j < dnfullw; j++) {
2084 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
2085 *(psfwfull + j + 1) >> srightshift,
2087 *(pdfwfull + j) = ~(sword ^ *(pdfwfull + j));
2096 for (i = 0; i < dh; i++) {
2097 sword = *pslwpart << sleftshift;
2099 sword = COMBINE_PARTIAL(sword,
2100 *(pslwpart + 1) >> srightshift,
2103 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
2104 ~(sword ^ *pdlwpart), dlwmask);
2111 fprintf(stderr,
"Operation %x invalid\n", op);
2193 if (x >= pixw || w <= 0)
2203 if ((x & 31) == 0) {
2208 fwbits = 32 - (x & 31);
2209 fwmask = rmask32[fwbits];
2211 pdfwpart = data + wpl * (pixh - 1) + (x >> 5);
2212 psfwpart = data + wpl * (pixh - 1 - shift) + (x >> 5);
2214 pdfwpart = data + (x >> 5);
2215 psfwpart = data - wpl * shift + (x >> 5);
2224 fwmask &= lmask32[32 - fwbits + w];
2228 if (fwpart2b == 1) {
2232 nfullw = (w - fwbits) >> 5;
2238 pdfwfull = pdfwpart + 1;
2239 psfwfull = psfwpart + 1;
2240 }
else if (shift >= 0) {
2241 pdfwfull = data + wpl * (pixh - 1) + (x >> 5);
2242 psfwfull = data + wpl * (pixh - 1 - shift) + (x >> 5);
2244 pdfwfull = data + (x >> 5);
2245 psfwfull = data - wpl * shift + (x >> 5);
2251 lwbits = (x + w) & 31;
2252 if (fwpart2b == 1 || lwbits == 0) {
2256 lwmask = lmask32[lwbits];
2258 pdlwpart = pdfwpart + 1 + nfullw;
2259 pslwpart = psfwpart + 1 + nfullw;
2260 }
else if (shift >= 0) {
2261 pdlwpart = data + wpl * (pixh - 1) + (x >> 5) + nfullw;
2262 pslwpart = data + wpl * (pixh - 1 - shift) + (x >> 5) + nfullw;
2264 pdlwpart = data + (x >> 5) + nfullw;
2265 pslwpart = data - wpl * shift + (x >> 5) + nfullw;
2274 dirwpl = (shift >= 0) ? -wpl : wpl;
2275 absshift = L_ABS(shift);
2276 vlimit = L_MAX(0, pixh - absshift);
2285 for (i = 0; i < vlimit; i++) {
2286 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, fwmask);
2292 for (i = vlimit; i < pixh; i++) {
2293 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, fwmask);
2300 for (i = 0; i < vlimit; i++) {
2301 for (j = 0; j < nfullw; j++)
2302 *(pdfwfull + j) = *(psfwfull + j);
2308 for (i = vlimit; i < pixh; i++) {
2309 for (j = 0; j < nfullw; j++)
2310 *(pdfwfull + j) = 0x0;
2317 for (i = 0; i < vlimit; i++) {
2318 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, lwmask);
2324 for (i = vlimit; i < pixh; i++) {
2325 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, lwmask);
2375 if (h <= 0 || y > pixh)
2381 for (i = y; i < y + h; i++) {
2382 line = data + i * wpl;
2414 l_int32 j, firstdw, wpl, rshift, lshift;
2415 l_uint32 *lined, *lines;
2423 firstdw = shift / 32;
2424 wpl = L_MIN(wpls, wpld - firstdw);
2425 lined += firstdw + wpl - 1;
2427 rshift = shift & 31;
2429 for (j = 0; j < wpl; j++)
2430 *lined-- = *lines--;
2433 for (j = 0; j < firstdw; j++)
2436 lshift = 32 - rshift;
2437 for (j = 1; j < wpl; j++) {
2438 *lined-- = *(lines - 1) << lshift | *lines >> rshift;
2441 *lined = *lines >> rshift;
2444 *lined &= ~lmask32[rshift];
2446 for (j = 0; j < firstdw; j++)
2451 firstdw = (-shift) / 32;
2452 wpl = L_MIN(wpls - firstdw, wpld);
2454 lshift = (-shift) & 31;
2456 for (j = 0; j < wpl; j++)
2457 *lined++ = *lines++;
2460 for (j = 0; j < firstdw; j++)
2463 rshift = 32 - lshift;
2464 for (j = 1; j < wpl; j++) {
2465 *lined++ = *lines << lshift | *(lines + 1) >> rshift;
2468 *lined = *lines << lshift;
2472 *lined &= ~rmask32[lshift];
2475 for (j = 0; j < firstdw; j++)
void rasteropLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy)
rasteropLow()
static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op)
rasteropUniWordAlignedLow()
static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op)
rasteropUniGeneralLow()
static void shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift)
shiftDataHorizontalLow()
void rasteropVipLow(l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift)
rasteropVipLow()
void rasteropUniLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op)
rasteropUniLow()
static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy)
rasteropGeneralLow()
static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy)
rasteropVAlignedLow()
void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift)
rasteropHipLow()
static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy)
rasteropWordAlignedLow()