51 #include <config_auto.h>
55 #include "allheaders.h"
59 l_int32 dy, l_int32 dw, l_int32 dh,
62 l_int32 dy, l_int32 dw, l_int32 dh,
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_int32 dy, l_int32 dw, l_int32 dh,
74 l_int32 op, l_uint32 *datas, l_int32 swpl,
75 l_int32 sx, l_int32 sy);
77 l_uint32 *datas, l_int32 wpls,
80 #define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) )
82 static const l_int32 SHIFT_LEFT = 0;
83 static const l_int32 SHIFT_RIGHT = 1;
85 static const l_uint32 lmask32[] = {0x0,
86 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000,
87 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000,
88 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000,
89 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000,
90 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000,
91 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00,
92 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0,
93 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff};
95 static const l_uint32 rmask32[] = {0x0,
96 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
97 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
98 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
99 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
100 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
101 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
102 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
103 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff};
139 l_int32 dhangw, dhangh;
158 dhangw = dx + dw - dpixw;
167 dhangh = dy + dh - dpixh;
172 if ((dw <= 0) || (dh <= 0))
229 lwmask = lmask32[lwbits];
230 pfword = datad + dwpl * dy + (dx >> 5);
239 for (i = 0; i < dh; i++) {
240 lined = pfword + i * dwpl;
241 for (j = 0; j < nfullw; j++)
244 *lined = COMBINE_PARTIAL(*lined, 0x0, lwmask);
248 for (i = 0; i < dh; i++) {
249 lined = pfword + i * dwpl;
250 for (j = 0; j < nfullw; j++)
251 *lined++ = 0xffffffff;
253 *lined = COMBINE_PARTIAL(*lined, 0xffffffff, lwmask);
257 for (i = 0; i < dh; i++) {
258 lined = pfword + i * dwpl;
259 for (j = 0; j < nfullw; j++) {
264 *lined = COMBINE_PARTIAL(*lined, ~(*lined), lwmask);
268 lept_stderr(
"Operation %d not permitted here!\n", op);
317 if ((dx & 31) == 0) {
322 dfwbits = 32 - (dx & 31);
323 dfwmask = rmask32[dfwbits];
324 pdfwpart = datad + dwpl * dy + (dx >> 5);
332 dfwmask &= lmask32[32 - dfwbits + dw];
336 if (dfwpart2b == 1) {
340 dnfullw = (dw - dfwbits) >> 5;
346 pdfwfull = pdfwpart + 1;
348 pdfwfull = datad + dwpl * dy + (dx >> 5);
353 dlwbits = (dx + dw) & 31;
354 if (dfwpart2b == 1 || dlwbits == 0) {
358 dlwmask = lmask32[dlwbits];
360 pdlwpart = pdfwpart + 1 + dnfullw;
362 pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw;
374 for (i = 0; i < dh; i++) {
375 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, dfwmask);
382 for (i = 0; i < dh; i++) {
383 for (j = 0; j < dnfullw; j++)
384 *(pdfwfull + j) = 0x0;
391 for (i = 0; i < dh; i++) {
392 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, dlwmask);
400 for (i = 0; i < dh; i++) {
401 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0xffffffff, dfwmask);
408 for (i = 0; i < dh; i++) {
409 for (j = 0; j < dnfullw; j++)
410 *(pdfwfull + j) = 0xffffffff;
417 for (i = 0; i < dh; i++) {
418 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0xffffffff, dlwmask);
426 for (i = 0; i < dh; i++) {
427 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*pdfwpart), dfwmask);
434 for (i = 0; i < dh; i++) {
435 for (j = 0; j < dnfullw; j++)
436 *(pdfwfull + j) = ~(*(pdfwfull + j));
443 for (i = 0; i < dh; i++) {
444 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pdlwpart), dlwmask);
450 lept_stderr(
"Operation %d not permitted here!\n", op);
502 l_int32 dhangw, shangw, dhangh, shangh;
529 dhangw = dx + dw - dpixw;
532 shangw = sx + dw - spixw;
547 dhangh = dy + dh - dpixh;
550 shangh = sy + dh - spixh;
555 if ((dw <= 0) || (dh <= 0))
559 lept_stderr(
"dx = %d, dy = %d, dw = %d, dh = %d, sx = %d, sy = %d\n",
560 dx, dy, dw, dh, sx, sy);
566 if (((dx & 31) == 0) && ((sx & 31) == 0))
568 datas, swpl, sx, sy);
569 else if ((dx & 31) == (sx & 31))
571 datas, swpl, sx, sy);
574 datas, swpl, sx, sy);
623 l_uint32 *lines, *lined;
633 lwmask = lmask32[lwbits];
634 psfword = datas + swpl * sy + (sx >> 5);
635 pdfword = datad + dwpl * dy + (dx >> 5);
643 for (i = 0; i < dh; i++) {
644 lines = psfword + i * swpl;
645 lined = pdfword + i * dwpl;
646 for (j = 0; j < nfullw; j++) {
652 *lined = COMBINE_PARTIAL(*lined, *lines, lwmask);
656 for (i = 0; i < dh; i++) {
657 lines = psfword + i * swpl;
658 lined = pdfword + i * dwpl;
659 for (j = 0; j < nfullw; j++) {
665 *lined = COMBINE_PARTIAL(*lined, ~(*lines), lwmask);
669 for (i = 0; i < dh; i++) {
670 lines = psfword + i * swpl;
671 lined = pdfword + i * dwpl;
672 for (j = 0; j < nfullw; j++) {
673 *lined = (*lines | *lined);
678 *lined = COMBINE_PARTIAL(*lined, (*lines | *lined), lwmask);
682 for (i = 0; i < dh; i++) {
683 lines = psfword + i * swpl;
684 lined = pdfword + i * dwpl;
685 for (j = 0; j < nfullw; j++) {
686 *lined = (*lines & *lined);
691 *lined = COMBINE_PARTIAL(*lined, (*lines & *lined), lwmask);
695 for (i = 0; i < dh; i++) {
696 lines = psfword + i * swpl;
697 lined = pdfword + i * dwpl;
698 for (j = 0; j < nfullw; j++) {
699 *lined = (*lines ^ *lined);
704 *lined = COMBINE_PARTIAL(*lined, (*lines ^ *lined), lwmask);
708 for (i = 0; i < dh; i++) {
709 lines = psfword + i * swpl;
710 lined = pdfword + i * dwpl;
711 for (j = 0; j < nfullw; j++) {
712 *lined = (~(*lines) | *lined);
717 *lined = COMBINE_PARTIAL(*lined, (~(*lines) | *lined), lwmask);
721 for (i = 0; i < dh; i++) {
722 lines = psfword + i * swpl;
723 lined = pdfword + i * dwpl;
724 for (j = 0; j < nfullw; j++) {
725 *lined = (~(*lines) & *lined);
730 *lined = COMBINE_PARTIAL(*lined, (~(*lines) & *lined), lwmask);
734 for (i = 0; i < dh; i++) {
735 lines = psfword + i * swpl;
736 lined = pdfword + i * dwpl;
737 for (j = 0; j < nfullw; j++) {
738 *lined = (*lines | ~(*lined));
743 *lined = COMBINE_PARTIAL(*lined, (*lines | ~(*lined)), lwmask);
747 for (i = 0; i < dh; i++) {
748 lines = psfword + i * swpl;
749 lined = pdfword + i * dwpl;
750 for (j = 0; j < nfullw; j++) {
751 *lined = (*lines & ~(*lined));
756 *lined = COMBINE_PARTIAL(*lined, (*lines & ~(*lined)), lwmask);
760 for (i = 0; i < dh; i++) {
761 lines = psfword + i * swpl;
762 lined = pdfword + i * dwpl;
763 for (j = 0; j < nfullw; j++) {
764 *lined = ~(*lines | *lined);
769 *lined = COMBINE_PARTIAL(*lined, ~(*lines | *lined), lwmask);
773 for (i = 0; i < dh; i++) {
774 lines = psfword + i * swpl;
775 lined = pdfword + i * dwpl;
776 for (j = 0; j < nfullw; j++) {
777 *lined = ~(*lines & *lined);
782 *lined = COMBINE_PARTIAL(*lined, ~(*lines & *lined), lwmask);
787 for (i = 0; i < dh; i++) {
788 lines = psfword + i * swpl;
789 lined = pdfword + i * dwpl;
790 for (j = 0; j < nfullw; j++) {
791 *lined = ~(*lines ^ *lined);
796 *lined = COMBINE_PARTIAL(*lined, ~(*lines ^ *lined), lwmask);
865 if ((dx & 31) == 0) {
870 dfwbits = 32 - (dx & 31);
871 dfwmask = rmask32[dfwbits];
872 pdfwpart = datad + dwpl * dy + (dx >> 5);
873 psfwpart = datas + swpl * sy + (sx >> 5);
881 dfwmask &= lmask32[32 - dfwbits + dw];
885 if (dfwpart2b == 1) {
889 dnfullw = (dw - dfwbits) >> 5;
895 pdfwfull = pdfwpart + 1;
896 psfwfull = psfwpart + 1;
898 pdfwfull = datad + dwpl * dy + (dx >> 5);
899 psfwfull = datas + swpl * sy + (sx >> 5);
905 dlwbits = (dx + dw) & 31;
906 if (dfwpart2b == 1 || dlwbits == 0) {
910 dlwmask = lmask32[dlwbits];
912 pdlwpart = pdfwpart + 1 + dnfullw;
913 pslwpart = psfwpart + 1 + dnfullw;
915 pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw;
916 pslwpart = datas + swpl * sy + (sx >> 5) + dnfullw;
929 for (i = 0; i < dh; i++) {
930 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, dfwmask);
938 for (i = 0; i < dh; i++) {
939 for (j = 0; j < dnfullw; j++)
940 *(pdfwfull + j) = *(psfwfull + j);
948 for (i = 0; i < dh; i++) {
949 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, dlwmask);
958 for (i = 0; i < dh; i++) {
959 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart), dfwmask);
967 for (i = 0; i < dh; i++) {
968 for (j = 0; j < dnfullw; j++)
969 *(pdfwfull + j) = ~(*(psfwfull + j));
977 for (i = 0; i < dh; i++) {
978 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart), dlwmask);
987 for (i = 0; i < dh; i++) {
988 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
989 (*psfwpart | *pdfwpart), dfwmask);
997 for (i = 0; i < dh; i++) {
998 for (j = 0; j < dnfullw; j++)
999 *(pdfwfull + j) |= *(psfwfull + j);
1007 for (i = 0; i < dh; i++) {
1008 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1009 (*pslwpart | *pdlwpart), dlwmask);
1018 for (i = 0; i < dh; i++) {
1019 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1020 (*psfwpart & *pdfwpart), dfwmask);
1028 for (i = 0; i < dh; i++) {
1029 for (j = 0; j < dnfullw; j++)
1030 *(pdfwfull + j) &= *(psfwfull + j);
1038 for (i = 0; i < dh; i++) {
1039 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1040 (*pslwpart & *pdlwpart), dlwmask);
1049 for (i = 0; i < dh; i++) {
1050 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1051 (*psfwpart ^ *pdfwpart), dfwmask);
1059 for (i = 0; i < dh; i++) {
1060 for (j = 0; j < dnfullw; j++)
1061 *(pdfwfull + j) ^= *(psfwfull + j);
1069 for (i = 0; i < dh; i++) {
1070 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1071 (*pslwpart ^ *pdlwpart), dlwmask);
1080 for (i = 0; i < dh; i++) {
1081 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1082 (~(*psfwpart) | *pdfwpart), dfwmask);
1090 for (i = 0; i < dh; i++) {
1091 for (j = 0; j < dnfullw; j++)
1092 *(pdfwfull + j) |= ~(*(psfwfull + j));
1100 for (i = 0; i < dh; i++) {
1101 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1102 (~(*pslwpart) | *pdlwpart), dlwmask);
1111 for (i = 0; i < dh; i++) {
1112 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1113 (~(*psfwpart) & *pdfwpart), dfwmask);
1121 for (i = 0; i < dh; i++) {
1122 for (j = 0; j < dnfullw; j++)
1123 *(pdfwfull + j) &= ~(*(psfwfull + j));
1131 for (i = 0; i < dh; i++) {
1132 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1133 (~(*pslwpart) & *pdlwpart), dlwmask);
1142 for (i = 0; i < dh; i++) {
1143 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1144 (*psfwpart | ~(*pdfwpart)), dfwmask);
1152 for (i = 0; i < dh; i++) {
1153 for (j = 0; j < dnfullw; j++)
1154 *(pdfwfull + j) = *(psfwfull + j) | ~(*(pdfwfull + j));
1162 for (i = 0; i < dh; i++) {
1163 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1164 (*pslwpart | ~(*pdlwpart)), dlwmask);
1173 for (i = 0; i < dh; i++) {
1174 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1175 (*psfwpart & ~(*pdfwpart)), dfwmask);
1183 for (i = 0; i < dh; i++) {
1184 for (j = 0; j < dnfullw; j++)
1185 *(pdfwfull + j) = *(psfwfull + j) & ~(*(pdfwfull + j));
1193 for (i = 0; i < dh; i++) {
1194 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1195 (*pslwpart & ~(*pdlwpart)), dlwmask);
1204 for (i = 0; i < dh; i++) {
1205 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1206 ~(*psfwpart | *pdfwpart), dfwmask);
1214 for (i = 0; i < dh; i++) {
1215 for (j = 0; j < dnfullw; j++)
1216 *(pdfwfull + j) = ~(*(psfwfull + j) | *(pdfwfull + j));
1224 for (i = 0; i < dh; i++) {
1225 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1226 ~(*pslwpart | *pdlwpart), dlwmask);
1235 for (i = 0; i < dh; i++) {
1236 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1237 ~(*psfwpart & *pdfwpart), dfwmask);
1245 for (i = 0; i < dh; i++) {
1246 for (j = 0; j < dnfullw; j++)
1247 *(pdfwfull + j) = ~(*(psfwfull + j) & *(pdfwfull + j));
1255 for (i = 0; i < dh; i++) {
1256 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1257 ~(*pslwpart & *pdlwpart), dlwmask);
1267 for (i = 0; i < dh; i++) {
1268 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1269 ~(*psfwpart ^ *pdfwpart), dfwmask);
1277 for (i = 0; i < dh; i++) {
1278 for (j = 0; j < dnfullw; j++)
1279 *(pdfwfull + j) = ~(*(psfwfull + j) ^ *(pdfwfull + j));
1287 for (i = 0; i < dh; i++) {
1288 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1289 ~(*pslwpart ^ *pdlwpart), dlwmask);
1396 l_int32 srightshift;
1401 l_int32 sfwshiftdir;
1420 shang = 32 - (sx & 31);
1424 dhang = 32 - (dx & 31);
1426 lept_stderr(
"shang = %d, dhang = %d\n", shang, dhang);
1429 if (shang == 0 && dhang == 0) {
1434 srightmask = rmask32[0];
1437 sleftshift = dhang - shang;
1439 sleftshift = 32 - (shang - dhang);
1440 srightshift = 32 - sleftshift;
1441 srightmask = rmask32[sleftshift];
1445 lept_stderr(
"sleftshift = %d, srightshift = %d\n", sleftshift, srightshift);
1450 if ((dx & 31) == 0) {
1455 dfwbits = 32 - (dx & 31);
1456 dfwmask = rmask32[dfwbits];
1457 pdfwpart = datad + dwpl * dy + (dx >> 5);
1458 psfwpart = datas + swpl * sy + (sx >> 5);
1459 sfwbits = 32 - (sx & 31);
1460 if (dfwbits > sfwbits) {
1461 sfwshiftdir = SHIFT_LEFT;
1468 sfwshiftdir = SHIFT_RIGHT;
1473 if (dw >= dfwbits) {
1477 dfwmask &= lmask32[32 - dfwbits + dw];
1481 if (dfwpart2b == 1) {
1485 dnfullw = (dw - dfwbits) >> 5;
1490 pdfwfull = datad + dwpl * dy + ((dx + dhang) >> 5);
1491 psfwfull = datas + swpl * sy + ((sx + dhang) >> 5);
1496 dlwbits = (dx + dw) & 31;
1497 if (dfwpart2b == 1 || dlwbits == 0) {
1501 dlwmask = lmask32[dlwbits];
1502 pdlwpart = datad + dwpl * dy + ((dx + dhang) >> 5) + dnfullw;
1503 pslwpart = datas + swpl * sy + ((sx + dhang) >> 5) + dnfullw;
1504 if (dlwbits <= srightshift)
1519 for (i = 0; i < dh; i++)
1521 if (sfwshiftdir == SHIFT_LEFT) {
1522 sword = *psfwpart << sleftshift;
1524 sword = COMBINE_PARTIAL(sword,
1525 *(psfwpart + 1) >> srightshift,
1528 sword = *psfwpart >> srightshift;
1531 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, sword, dfwmask);
1539 for (i = 0; i < dh; i++) {
1540 for (j = 0; j < dnfullw; j++) {
1541 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1542 *(psfwfull + j + 1) >> srightshift,
1544 *(pdfwfull + j) = sword;
1553 for (i = 0; i < dh; i++) {
1554 sword = *pslwpart << sleftshift;
1556 sword = COMBINE_PARTIAL(sword,
1557 *(pslwpart + 1) >> srightshift,
1560 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, sword, dlwmask);
1569 for (i = 0; i < dh; i++)
1571 if (sfwshiftdir == SHIFT_LEFT) {
1572 sword = *psfwpart << sleftshift;
1574 sword = COMBINE_PARTIAL(sword,
1575 *(psfwpart + 1) >> srightshift,
1578 sword = *psfwpart >> srightshift;
1581 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~sword, dfwmask);
1589 for (i = 0; i < dh; i++) {
1590 for (j = 0; j < dnfullw; j++) {
1591 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1592 *(psfwfull + j + 1) >> srightshift,
1594 *(pdfwfull + j) = ~sword;
1603 for (i = 0; i < dh; i++) {
1604 sword = *pslwpart << sleftshift;
1606 sword = COMBINE_PARTIAL(sword,
1607 *(pslwpart + 1) >> srightshift,
1610 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~sword, dlwmask);
1619 for (i = 0; i < dh; i++)
1621 if (sfwshiftdir == SHIFT_LEFT) {
1622 sword = *psfwpart << sleftshift;
1624 sword = COMBINE_PARTIAL(sword,
1625 *(psfwpart + 1) >> srightshift,
1628 sword = *psfwpart >> srightshift;
1631 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1632 (sword | *pdfwpart), dfwmask);
1640 for (i = 0; i < dh; i++) {
1641 for (j = 0; j < dnfullw; j++) {
1642 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1643 *(psfwfull + j + 1) >> srightshift,
1645 *(pdfwfull + j) |= sword;
1654 for (i = 0; i < dh; i++) {
1655 sword = *pslwpart << sleftshift;
1657 sword = COMBINE_PARTIAL(sword,
1658 *(pslwpart + 1) >> srightshift,
1661 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1662 (sword | *pdlwpart), dlwmask);
1671 for (i = 0; i < dh; i++)
1673 if (sfwshiftdir == SHIFT_LEFT) {
1674 sword = *psfwpart << sleftshift;
1676 sword = COMBINE_PARTIAL(sword,
1677 *(psfwpart + 1) >> srightshift,
1680 sword = *psfwpart >> srightshift;
1683 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1684 (sword & *pdfwpart), dfwmask);
1692 for (i = 0; i < dh; i++) {
1693 for (j = 0; j < dnfullw; j++) {
1694 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1695 *(psfwfull + j + 1) >> srightshift,
1697 *(pdfwfull + j) &= sword;
1706 for (i = 0; i < dh; i++) {
1707 sword = *pslwpart << sleftshift;
1709 sword = COMBINE_PARTIAL(sword,
1710 *(pslwpart + 1) >> srightshift,
1713 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1714 (sword & *pdlwpart), dlwmask);
1723 for (i = 0; i < dh; i++)
1725 if (sfwshiftdir == SHIFT_LEFT) {
1726 sword = *psfwpart << sleftshift;
1728 sword = COMBINE_PARTIAL(sword,
1729 *(psfwpart + 1) >> srightshift,
1732 sword = *psfwpart >> srightshift;
1735 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1736 (sword ^ *pdfwpart), dfwmask);
1744 for (i = 0; i < dh; i++) {
1745 for (j = 0; j < dnfullw; j++) {
1746 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1747 *(psfwfull + j + 1) >> srightshift,
1749 *(pdfwfull + j) ^= sword;
1758 for (i = 0; i < dh; i++) {
1759 sword = *pslwpart << sleftshift;
1761 sword = COMBINE_PARTIAL(sword,
1762 *(pslwpart + 1) >> srightshift,
1765 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1766 (sword ^ *pdlwpart), dlwmask);
1775 for (i = 0; i < dh; i++)
1777 if (sfwshiftdir == SHIFT_LEFT) {
1778 sword = *psfwpart << sleftshift;
1780 sword = COMBINE_PARTIAL(sword,
1781 *(psfwpart + 1) >> srightshift,
1784 sword = *psfwpart >> srightshift;
1787 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1788 (~sword | *pdfwpart), dfwmask);
1796 for (i = 0; i < dh; i++) {
1797 for (j = 0; j < dnfullw; j++) {
1798 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1799 *(psfwfull + j + 1) >> srightshift,
1801 *(pdfwfull + j) |= ~sword;
1810 for (i = 0; i < dh; i++) {
1811 sword = *pslwpart << sleftshift;
1813 sword = COMBINE_PARTIAL(sword,
1814 *(pslwpart + 1) >> srightshift,
1817 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1818 (~sword | *pdlwpart), dlwmask);
1827 for (i = 0; i < dh; i++)
1829 if (sfwshiftdir == SHIFT_LEFT) {
1830 sword = *psfwpart << sleftshift;
1832 sword = COMBINE_PARTIAL(sword,
1833 *(psfwpart + 1) >> srightshift,
1836 sword = *psfwpart >> srightshift;
1839 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1840 (~sword & *pdfwpart), dfwmask);
1848 for (i = 0; i < dh; i++) {
1849 for (j = 0; j < dnfullw; j++) {
1850 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1851 *(psfwfull + j + 1) >> srightshift,
1853 *(pdfwfull + j) &= ~sword;
1862 for (i = 0; i < dh; i++) {
1863 sword = *pslwpart << sleftshift;
1865 sword = COMBINE_PARTIAL(sword,
1866 *(pslwpart + 1) >> srightshift,
1869 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1870 (~sword & *pdlwpart), dlwmask);
1879 for (i = 0; i < dh; i++)
1881 if (sfwshiftdir == SHIFT_LEFT) {
1882 sword = *psfwpart << sleftshift;
1884 sword = COMBINE_PARTIAL(sword,
1885 *(psfwpart + 1) >> srightshift,
1888 sword = *psfwpart >> srightshift;
1891 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1892 (sword | ~(*pdfwpart)), dfwmask);
1900 for (i = 0; i < dh; i++) {
1901 for (j = 0; j < dnfullw; j++) {
1902 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1903 *(psfwfull + j + 1) >> srightshift,
1905 *(pdfwfull + j) = sword | ~(*(pdfwfull + j));
1914 for (i = 0; i < dh; i++) {
1915 sword = *pslwpart << sleftshift;
1917 sword = COMBINE_PARTIAL(sword,
1918 *(pslwpart + 1) >> srightshift,
1921 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1922 (sword | ~(*pdlwpart)), dlwmask);
1931 for (i = 0; i < dh; i++)
1933 if (sfwshiftdir == SHIFT_LEFT) {
1934 sword = *psfwpart << sleftshift;
1936 sword = COMBINE_PARTIAL(sword,
1937 *(psfwpart + 1) >> srightshift,
1940 sword = *psfwpart >> srightshift;
1943 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1944 (sword & ~(*pdfwpart)), dfwmask);
1952 for (i = 0; i < dh; i++) {
1953 for (j = 0; j < dnfullw; j++) {
1954 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
1955 *(psfwfull + j + 1) >> srightshift,
1957 *(pdfwfull + j) = sword & ~(*(pdfwfull + j));
1966 for (i = 0; i < dh; i++) {
1967 sword = *pslwpart << sleftshift;
1969 sword = COMBINE_PARTIAL(sword,
1970 *(pslwpart + 1) >> srightshift,
1973 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
1974 (sword & ~(*pdlwpart)), dlwmask);
1983 for (i = 0; i < dh; i++)
1985 if (sfwshiftdir == SHIFT_LEFT) {
1986 sword = *psfwpart << sleftshift;
1988 sword = COMBINE_PARTIAL(sword,
1989 *(psfwpart + 1) >> srightshift,
1992 sword = *psfwpart >> srightshift;
1995 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
1996 ~(sword | *pdfwpart), dfwmask);
2004 for (i = 0; i < dh; i++) {
2005 for (j = 0; j < dnfullw; j++) {
2006 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
2007 *(psfwfull + j + 1) >> srightshift,
2009 *(pdfwfull + j) = ~(sword | *(pdfwfull + j));
2018 for (i = 0; i < dh; i++) {
2019 sword = *pslwpart << sleftshift;
2021 sword = COMBINE_PARTIAL(sword,
2022 *(pslwpart + 1) >> srightshift,
2025 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
2026 ~(sword | *pdlwpart), dlwmask);
2035 for (i = 0; i < dh; i++)
2037 if (sfwshiftdir == SHIFT_LEFT) {
2038 sword = *psfwpart << sleftshift;
2040 sword = COMBINE_PARTIAL(sword,
2041 *(psfwpart + 1) >> srightshift,
2044 sword = *psfwpart >> srightshift;
2047 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
2048 ~(sword & *pdfwpart), dfwmask);
2056 for (i = 0; i < dh; i++) {
2057 for (j = 0; j < dnfullw; j++) {
2058 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
2059 *(psfwfull + j + 1) >> srightshift,
2061 *(pdfwfull + j) = ~(sword & *(pdfwfull + j));
2070 for (i = 0; i < dh; i++) {
2071 sword = *pslwpart << sleftshift;
2073 sword = COMBINE_PARTIAL(sword,
2074 *(pslwpart + 1) >> srightshift,
2077 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
2078 ~(sword & *pdlwpart), dlwmask);
2088 for (i = 0; i < dh; i++)
2090 if (sfwshiftdir == SHIFT_LEFT) {
2091 sword = *psfwpart << sleftshift;
2093 sword = COMBINE_PARTIAL(sword,
2094 *(psfwpart + 1) >> srightshift,
2097 sword = *psfwpart >> srightshift;
2100 *pdfwpart = COMBINE_PARTIAL(*pdfwpart,
2101 ~(sword ^ *pdfwpart), dfwmask);
2109 for (i = 0; i < dh; i++) {
2110 for (j = 0; j < dnfullw; j++) {
2111 sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift,
2112 *(psfwfull + j + 1) >> srightshift,
2114 *(pdfwfull + j) = ~(sword ^ *(pdfwfull + j));
2123 for (i = 0; i < dh; i++) {
2124 sword = *pslwpart << sleftshift;
2126 sword = COMBINE_PARTIAL(sword,
2127 *(pslwpart + 1) >> srightshift,
2130 *pdlwpart = COMBINE_PARTIAL(*pdlwpart,
2131 ~(sword ^ *pdlwpart), dlwmask);
2220 if (x >= pixw || w <= 0)
2230 if ((x & 31) == 0) {
2235 fwbits = 32 - (x & 31);
2236 fwmask = rmask32[fwbits];
2238 pdfwpart = data + wpl * (pixh - 1) + (x >> 5);
2239 psfwpart = data + wpl * (pixh - 1 - shift) + (x >> 5);
2241 pdfwpart = data + (x >> 5);
2242 psfwpart = data - wpl * shift + (x >> 5);
2251 fwmask &= lmask32[32 - fwbits + w];
2255 if (fwpart2b == 1) {
2259 nfullw = (w - fwbits) >> 5;
2265 pdfwfull = pdfwpart + 1;
2266 psfwfull = psfwpart + 1;
2267 }
else if (shift >= 0) {
2268 pdfwfull = data + wpl * (pixh - 1) + (x >> 5);
2269 psfwfull = data + wpl * (pixh - 1 - shift) + (x >> 5);
2271 pdfwfull = data + (x >> 5);
2272 psfwfull = data - wpl * shift + (x >> 5);
2278 lwbits = (x + w) & 31;
2279 if (fwpart2b == 1 || lwbits == 0) {
2283 lwmask = lmask32[lwbits];
2285 pdlwpart = pdfwpart + 1 + nfullw;
2286 pslwpart = psfwpart + 1 + nfullw;
2287 }
else if (shift >= 0) {
2288 pdlwpart = data + wpl * (pixh - 1) + (x >> 5) + nfullw;
2289 pslwpart = data + wpl * (pixh - 1 - shift) + (x >> 5) + nfullw;
2291 pdlwpart = data + (x >> 5) + nfullw;
2292 pslwpart = data - wpl * shift + (x >> 5) + nfullw;
2301 dirwpl = (shift >= 0) ? -wpl : wpl;
2302 absshift = L_ABS(shift);
2303 vlimit = L_MAX(0, pixh - absshift);
2312 for (i = 0; i < vlimit; i++) {
2313 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, fwmask);
2319 for (i = vlimit; i < pixh; i++) {
2320 *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, fwmask);
2327 for (i = 0; i < vlimit; i++) {
2328 for (j = 0; j < nfullw; j++)
2329 *(pdfwfull + j) = *(psfwfull + j);
2335 for (i = vlimit; i < pixh; i++) {
2336 for (j = 0; j < nfullw; j++)
2337 *(pdfwfull + j) = 0x0;
2344 for (i = 0; i < vlimit; i++) {
2345 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, lwmask);
2351 for (i = vlimit; i < pixh; i++) {
2352 *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, lwmask);
2402 if (h <= 0 || y > pixh)
2408 for (i = y; i < y + h; i++) {
2409 line = data + i * wpl;
2441 l_int32 j, firstdw, wpl, rshift, lshift;
2442 l_uint32 *lined, *lines;
2450 firstdw = shift / 32;
2451 wpl = L_MIN(wpls, wpld - firstdw);
2452 lined += firstdw + wpl - 1;
2454 rshift = shift & 31;
2456 for (j = 0; j < wpl; j++)
2457 *lined-- = *lines--;
2460 for (j = 0; j < firstdw; j++)
2463 lshift = 32 - rshift;
2464 for (j = 1; j < wpl; j++) {
2465 *lined-- = *(lines - 1) << lshift | *lines >> rshift;
2468 *lined = *lines >> rshift;
2471 *lined &= ~lmask32[rshift];
2473 for (j = 0; j < firstdw; j++)
2478 firstdw = (-shift) / 32;
2479 wpl = L_MIN(wpls - firstdw, wpld);
2481 lshift = (-shift) & 31;
2483 for (j = 0; j < wpl; j++)
2484 *lined++ = *lines++;
2487 for (j = 0; j < firstdw; j++)
2490 rshift = 32 - lshift;
2491 for (j = 1; j < wpl; j++) {
2492 *lined++ = *lines << lshift | *(lines + 1) >> rshift;
2495 *lined = *lines << lshift;
2499 *lined &= ~rmask32[lshift];
2502 for (j = 0; j < firstdw; j++)
void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift)
rasteropHipLow()
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 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 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()
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()
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()
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()
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 shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift)
shiftDataHorizontalLow()
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 lept_stderr(const char *fmt,...)
lept_stderr()