int diofb_mono_windowmove(struct diofb *fb, u_int16_t sx, u_int16_t sy, u_int16_t dx, u_int16_t dy, u_int16_t cx, u_int16_t cy, int16_t rop, int16_t planemask /* ignored */) { int width; /* add to get to same position in next line */ unsigned int *psrcLine, *pdstLine; /* pointers to line with current src and dst */ unsigned int *psrc; /* pointer to current src longword */ unsigned int *pdst; /* pointer to current dst longword */ /* following used for looping through a line */ unsigned int startmask, endmask; /* masks for writing ends of dst */ int nlMiddle; /* whole longwords in dst */ int nl; /* temp copy of nlMiddle */ int xoffSrc; /* offset (>= 0, < 32) from which to fetch whole longwords fetched in src */ int nstart; /* number of ragged bits at start of dst */ int nend; /* number of ragged bits at end of dst */ int srcStartOver; /* pulling nstart bits from src overflows into the next word? */ width = fb->fbwidth >> 5; if (sy < dy) { /* start at last scanline of rectangle */ psrcLine = ((u_int *)fb->fbkva) + ((sy + cy - 1) * width); pdstLine = ((u_int *)fb->fbkva) + ((dy + cy - 1) * width); width = -width; } else { /* start at first scanline */ psrcLine = ((u_int *)fb->fbkva) + (sy * width); pdstLine = ((u_int *)fb->fbkva) + (dy * width); } /* x direction doesn't matter for < 1 longword */ if (cx <= 32) { int srcBit, dstBit; /* bit offset of src and dst */ pdstLine += (dx >> 5); psrcLine += (sx >> 5); psrc = psrcLine; pdst = pdstLine; srcBit = sx & 0x1f; dstBit = dx & 0x1f; while (cy--) { getandputrop(psrc, srcBit, dstBit, cx, pdst, rop); pdst += width; psrc += width; } } else {
void ite_dio_windowmove1bpp(struct ite_data *ip, int sy, int sx, int dy, int dx, int h, int w, int func) { int width; /* add to get to same position in next line */ unsigned int *psrcLine, *pdstLine; /* pointers to line with current src and dst */ unsigned int *psrc; /* pointer to current src longword */ unsigned int *pdst; /* pointer to current dst longword */ /* following used for looping through a line */ unsigned int startmask, endmask; /* masks for writing ends of dst */ int nlMiddle; /* whole longwords in dst */ int nl; /* temp copy of nlMiddle */ unsigned int tmpSrc; /* place to store full source word */ int xoffSrc; /* offset (>= 0, < 32) from which to fetch whole longwords fetched in src */ int nstart; /* number of ragged bits at start of dst */ int nend; /* number of ragged bits at end of dst */ int srcStartOver; /* pulling nstart bits from src overflows into the next word? */ if (h == 0 || w == 0) return; width = ip->fbwidth >> 5; psrcLine = ((unsigned int *) ip->fbbase) + (sy * width); pdstLine = ((unsigned int *) ip->fbbase) + (dy * width); /* x direction doesn't matter for < 1 longword */ if (w <= 32) { int srcBit, dstBit; /* bit offset of src and dst */ pdstLine += (dx >> 5); psrcLine += (sx >> 5); psrc = psrcLine; pdst = pdstLine; srcBit = sx & 0x1f; dstBit = dx & 0x1f; while (h--) { getandputrop(psrc, srcBit, dstBit, w, pdst, func); pdst += width; psrc += width; } } else {