memfillcolor() used to write longs in host byte
order which is wrong. have to always use little
endian.
to simplify, moved little endian conversion into
memsetl() and memsets() avoiding code duplication.
memsets(void *vp, ushort val, int n)
{
ushort *p, *ep;
memsets(void *vp, ushort val, int n)
{
ushort *p, *ep;
+ uchar b[2];
+
+ /* make little endian */
+ b[0] = val;
+ b[1] = val>>8;
+ val = *(ushort*)b;
memsetl(void *vp, ulong val, int n)
{
ulong *p, *ep;
memsetl(void *vp, ulong val, int n)
{
ulong *p, *ep;
+ uchar b[4];
+
+ /* make little endian */
+ b[0] = val;
+ b[1] = val>>8;
+ b[2] = val>>16;
+ b[3] = val>>24;
+ val = *(ulong*)b;
uchar *p, *ep;
uchar a,b,c;
uchar *p, *ep;
uchar a,b,c;
a = val;
b = val>>8;
c = val>>16;
a = val;
b = val>>8;
c = val>>16;
+
+ p = vp;
+ ep = p+3*n;
- *p++ = a;
- *p++ = b;
- *p++ = c;
+ p[0] = a;
+ p[1] = b;
+ p[2] = c;
+ p += 3;
break;
case CMap:
p = img->cmap->cmap2rgb+3*ov;
break;
case CMap:
p = img->cmap->cmap2rgb+3*ov;
- r = *p++;
- g = *p++;
- b = *p;
+ r = p[0];
+ g = p[1];
+ b = p[2];
*/
m = Simplesrc|Simplemask|Fullmask;
if((par->state&m)==m && (par->srgba&0xFF) == 0xFF && (op ==S || op == SoverD)){
*/
m = Simplesrc|Simplemask|Fullmask;
if((par->state&m)==m && (par->srgba&0xFF) == 0xFF && (op ==S || op == SoverD)){
int d, dwid, ppb, np, nb;
int d, dwid, ppb, np, nb;
DBG print("memopt, dst %p, dst->data->bdata %p\n", dst, dst->data->bdata);
dwid = dst->width*sizeof(ulong);
DBG print("memopt, dst %p, dst->data->bdata %p\n", dst, dst->data->bdata);
dwid = dst->width*sizeof(ulong);
memset(dp, v, dx);
return 1;
case 16:
memset(dp, v, dx);
return 1;
case 16:
- p[0] = v; /* make little endian */
- p[1] = v>>8;
- v = *(ushort*)p;
-DBG print("dp=%p; dx=%d; for(y=0; y<%d; y++, dp+=%d)\nmemsets(dp, v, dx);\n",
- dp, dx, dy, dwid);
for(y=0; y<dy; y++, dp+=dwid)
memsets(dp, v, dx);
return 1;
for(y=0; y<dy; y++, dp+=dwid)
memsets(dp, v, dx);
return 1;
memset24(dp, v, dx);
return 1;
case 32:
memset24(dp, v, dx);
return 1;
case 32:
- p[0] = v; /* make little endian */
- p[1] = v>>8;
- p[2] = v>>16;
- p[3] = v>>24;
- v = *(ulong*)p;
for(y=0; y<dy; y++, dp+=dwid)
memsetl(dp, v, dx);
return 1;
for(y=0; y<dy; y++, dp+=dwid)
memsetl(dp, v, dx);
return 1;
static int
chardraw(Memdrawparam *par)
{
static int
chardraw(Memdrawparam *par)
{
int i, ddepth, dy, dx, x, bx, ex, y, npack, bsh, depth, op;
int i, ddepth, dy, dx, x, bx, ex, y, npack, bsh, depth, op;
- ulong v, maskwid, dstwid;
+ ulong bits, v, maskwid, dstwid;
uchar *wp, *rp, *q, *wc;
ushort *ws;
ulong *wl;
uchar *wp, *rp, *q, *wc;
ushort *ws;
ulong *wl;