⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbmmx.c

📁 超强的嵌入式GUI系统
💻 C
📖 第 1 页 / 共 4 页
字号:
    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w--)	{	    s = *src++;	    a = s >> 24;	    if (a == 0xff)		*dst = s;	    else if (a) {		__m64 ms, sa;		ms = load8888(s);		sa = expand_alpha(ms);		*dst = store8888(over(ms, sa, load8888(*dst)));	    }	    dst++;	}    }    _mm_empty();}voidfbCompositeSrc_8888x0565mmx (pixman_operator_t      op,			     PicturePtr pSrc,			     PicturePtr pMask,			     PicturePtr pDst,			     INT16      xSrc,			     INT16      ySrc,			     INT16      xMask,			     INT16      yMask,			     INT16      xDst,			     INT16      yDst,			     CARD16     width,			     CARD16     height){    CARD16	*dstLine, *dst;    CARD32	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    CHECKPOINT();    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	CHECKPOINT();	while (w && (unsigned long)dst & 7)	{	    __m64 vsrc = load8888 (*src);	    __m64 vdest = expand565 (_mm_cvtsi32_si64(*dst), 0);	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);	    *dst = _mm_cvtsi64_si32(vdest);	    w--;	    dst++;	    src++;	}	CHECKPOINT();	while (w >= 4)	{	    __m64 vsrc0, vsrc1, vsrc2, vsrc3;	    __m64 vdest;	    vsrc0 = load8888(*(src + 0));	    vsrc1 = load8888(*(src + 1));	    vsrc2 = load8888(*(src + 2));	    vsrc3 = load8888(*(src + 3));	    vdest = *(__m64 *)dst;	    	    vdest = pack565(over(vsrc0, expand_alpha(vsrc0), expand565(vdest, 0)), vdest, 0);	    vdest = pack565(over(vsrc1, expand_alpha(vsrc1), expand565(vdest, 1)), vdest, 1);	    vdest = pack565(over(vsrc2, expand_alpha(vsrc2), expand565(vdest, 2)), vdest, 2);	    vdest = pack565(over(vsrc3, expand_alpha(vsrc3), expand565(vdest, 3)), vdest, 3);	    	    *(__m64 *)dst = vdest;	    w -= 4;	    dst += 4;	    src += 4;	}	CHECKPOINT();	while (w)	{	    __m64 vsrc = load8888 (*src);	    __m64 vdest = expand565 (_mm_cvtsi32_si64(*dst), 0);	    vdest = pack565(over(vsrc, expand_alpha(vsrc), vdest), vdest, 0);	    *dst = _mm_cvtsi64_si32(vdest);	    w--;	    dst++;	    src++;	}    }    _mm_empty();}voidfbCompositeSolidMask_nx8x8888mmx (pixman_operator_t      op,				  PicturePtr pSrc,				  PicturePtr pMask,				  PicturePtr pDst,				  INT16      xSrc,				  INT16      ySrc,				  INT16      xMask,				  INT16      yMask,				  INT16      xDst,				  INT16      yDst,				  CARD16     width,				  CARD16     height){    CARD32	src, srca;    CARD32	*dstLine, *dst;    CARD8	*maskLine, *mask;    FbStride	dstStride, maskStride;    CARD16	w;    __m64	vsrc, vsrca;    ullong	srcsrc;    CHECKPOINT();    fbComposeGetSolid(pSrc, pDst, src);    srca = src >> 24;    if (srca == 0)	return;    srcsrc = (ullong)src << 32 | src;    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);    vsrc = load8888 (src);    vsrca = expand_alpha (vsrc);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	mask = maskLine;	maskLine += maskStride;	w = width;	CHECKPOINT();	while (w && (unsigned long)dst & 7)	{	    ullong m = *mask;	    if (m)	    {		__m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), load8888(*dst));		*dst = store8888(vdest);	    }	    w--;	    mask++;	    dst++;	}	CHECKPOINT();	while (w >= 2)	{	    ullong m0, m1;	    m0 = *mask;	    m1 = *(mask + 1);	    if (srca == 0xff && (m0 & m1) == 0xff)	    {		*(ullong *)dst = srcsrc;	    }	    else if (m0 | m1)	    {		__m64 vdest;		__m64 dest0, dest1;		vdest = *(__m64 *)dst;		dest0 = in_over(vsrc, vsrca, expand_alpha_rev (M64(m0)), expand8888(vdest, 0));		dest1 = in_over(vsrc, vsrca, expand_alpha_rev (M64(m1)), expand8888(vdest, 1));		*(__m64 *)dst = pack8888(dest0, dest1);	    }	    mask += 2;	    dst += 2;	    w -= 2;	}	CHECKPOINT();	while (w)	{	    ullong m = *mask;	    if (m)	    {		__m64 vdest = load8888(*dst);		vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), vdest);		*dst = store8888(vdest);	    }	    w--;	    mask++;	    dst++;	}    }    _mm_empty();}voidfbCompositeSolidMaskSrc_nx8x8888mmx (pixman_operator_t      op,				     PicturePtr pSrc,				     PicturePtr pMask,				     PicturePtr pDst,				     INT16      xSrc,				     INT16      ySrc,				     INT16      xMask,				     INT16      yMask,				     INT16      xDst,				     INT16      yDst,				     CARD16     width,				     CARD16     height){    CARD32	src, srca;    CARD32	*dstLine, *dst;    CARD8	*maskLine, *mask;    FbStride	dstStride, maskStride;    CARD16	w;    __m64	vsrc, vsrca;    ullong	srcsrc;    CHECKPOINT();    fbComposeGetSolid(pSrc, pDst, src);    srca = src >> 24;    if (srca == 0)    {	if (fbSolidFillmmx (pDst->pDrawable, xDst, yDst, width, height, 0))	    return;    }    srcsrc = (ullong)src << 32 | src;    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);    vsrc = load8888 (src);    vsrca = expand_alpha (vsrc);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	mask = maskLine;	maskLine += maskStride;	w = width;	CHECKPOINT();	while (w && (unsigned long)dst & 7)	{	    ullong m = *mask;	    if (m)	    {		  __m64 vdest = in(vsrc, expand_alpha_rev (M64(m)));		  *dst = store8888(vdest);	    }	    else	    {		  *dst = 0;	    }	    w--;	    mask++;	    dst++;	}	CHECKPOINT();	while (w >= 2)	{	    ullong m0, m1;	    m0 = *mask;	    m1 = *(mask + 1);	    if (srca == 0xff && (m0 & m1) == 0xff)	    {		*(ullong *)dst = srcsrc;	    }	    else if (m0 | m1)	    {		__m64 vdest;		__m64 dest0, dest1;		vdest = *(__m64 *)dst;		dest0 = in(vsrc, expand_alpha_rev (M64(m0)));		dest1 = in(vsrc, expand_alpha_rev (M64(m1)));		*(__m64 *)dst = pack8888(dest0, dest1);	    }	    else	    {		*dst = 0;	    }	    mask += 2;	    dst += 2;	    w -= 2;	}	CHECKPOINT();	while (w)	{	    ullong m = *mask;	    if (m)	    {		__m64 vdest = load8888(*dst);		vdest = in(vsrc, expand_alpha_rev (M64(m)));		*dst = store8888(vdest);	    }	    else	    {		*dst = 0;	    }	    w--;	    mask++;	    dst++;	}    }    _mm_empty();}voidfbCompositeSolidMask_nx8x0565mmx (pixman_operator_t      op,				  PicturePtr pSrc,				  PicturePtr pMask,				  PicturePtr pDst,				  INT16      xSrc,				  INT16      ySrc,				  INT16      xMask,				  INT16      yMask,				  INT16      xDst,				  INT16      yDst,				  CARD16     width,				  CARD16     height){    CARD32	src, srca;    CARD16	*dstLine, *dst;    CARD8	*maskLine, *mask;    FbStride	dstStride, maskStride;    CARD16	w;    __m64	vsrc, vsrca;    ullong srcsrcsrcsrc, src16;    __m64 vsrc16;    CHECKPOINT();    fbComposeGetSolid(pSrc, pDst, src);    srca = src >> 24;    if (srca == 0)	return;    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    fbComposeGetStart (pMask, xMask, yMask, CARD8, maskStride, maskLine, 1);    vsrc = load8888 (src);    vsrca = expand_alpha (vsrc);    vsrc16 = pack565(vsrc, _mm_setzero_si64(), 0);    src16 = *(ullong*)(void*)(&vsrc16);    srcsrcsrcsrc = (ullong)src16 << 48 | (ullong)src16 << 32 |	(ullong)src16 << 16 | (ullong)src16;    while (height--)    {	dst = dstLine;	dstLine += dstStride;	mask = maskLine;	maskLine += maskStride;	w = width;	CHECKPOINT();	while (w && (unsigned long)dst & 7)	{	    ullong m = *mask;	    if (m)	    {		__m64 vd = _mm_cvtsi32_si64 (*dst);		__m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), expand565(vd, 0));		*dst = _mm_cvtsi64_si32 (pack565(vdest, _mm_setzero_si64(), 0));	    }	    w--;	    mask++;	    dst++;	}	CHECKPOINT();	while (w >= 4)	{	    ullong m0, m1, m2, m3;	    m0 = *mask;	    m1 = *(mask + 1);	    m2 = *(mask + 2);	    m3 = *(mask + 3);	    if (srca == 0xff && (m0 & m1 & m2 & m3) == 0xff)	    {		*(ullong *)dst = srcsrcsrcsrc;	    }	    else if (m0 | m1 | m2 | m3)	    {		__m64 vdest;		__m64 vm0, vm1, vm2, vm3;		vdest = *(__m64 *)dst;		vm0 = M64(m0);		vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm0), expand565(vdest, 0)), vdest, 0);		vm1 = M64(m1);		vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm1), expand565(vdest, 1)), vdest, 1);		vm2 = M64(m2);		vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm2), expand565(vdest, 2)), vdest, 2);		vm3 = M64(m3);		vdest = pack565(in_over(vsrc, vsrca, expand_alpha_rev(vm3), expand565(vdest, 3)), vdest, 3);		*(__m64 *)dst = vdest;	    }	    w -= 4;	    mask += 4;	    dst += 4;	}	CHECKPOINT();	while (w)	{	    ullong m = *mask;	    if (m)	    {		__m64 vd = _mm_cvtsi32_si64 (*dst);		__m64 vdest = in_over(vsrc, vsrca, expand_alpha_rev (M64(m)), expand565(vd, 0));		*dst = _mm_cvtsi64_si32 (pack565(vdest, _mm_setzero_si64(), 0));	    }	    w--;	    mask++;	    dst++;	}    }    _mm_empty();}voidfbCompositeSrc_8888RevNPx0565mmx (pixman_operator_t      op,				  PicturePtr pSrc,				  PicturePtr pMask,				  PicturePtr pDst,				  INT16      xSrc,				  INT16      ySrc,				  INT16      xMask,				  INT16      yMask,				  INT16      xDst,				  INT16      yDst,				  CARD16     width,				  CARD16     height){    CARD16	*dstLine, *dst;    CARD32	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    CHECKPOINT();    fbComposeGetStart (pDst, xDst, yDst, CARD16, dstStride, dstLine, 1);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    assert (pSrc->pDrawable == pMask->pDrawable);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	CHECKPOINT();	while (w && (unsigned long)dst & 7)	{	    __m64 vsrc = load8888 (*src);	    __m64 vdest = expand565 (_mm_cvtsi32_si64 (*dst), 0);	    vdest = pack565(over_rev_non_pre(vsrc, vdest), vdest, 0);	    *dst = _mm_cvtsi64_si32 (vdest);	    w--;	    dst++;	    src++;	}	CHECKPOINT();	while (w >= 4)	{	    CARD32 s0, s1, s2, s3;	    unsigned char a0, a1, a2, a3;	    s0 = *src;	    s1 = *(src + 1);	    s2 = *(src + 2);	    s3 = *(src + 3);	    a0 = (s0 >> 24);	    a1 = (s1 >> 24);	    a2 = (s2 >> 24);	    a3 = (s3 >> 24);	    if ((a0 & a1 & a2 & a3) == 0xFF)	    {		__m64 vdest;		vdest = pack565(invert_colors(load8888(s0)), _mm_setzero_si64(), 0);		vdest = pack565(invert_colors(load8888(s1)), vdest, 1);		vdest = pack565(invert_colors(load8888(s2)), vdest, 2);		vdest = pack565(invert_colors(load8888(s3)), vdest, 3);		*(__m64 *)dst = vdest;	    }	    else if (a0 | a1 | a2 | a3)	    {		__m64 vdest = *(__m64 *)dst;		vdest = pack565(over_rev_non_pre(load8888(s0), expand565(vdest, 0)), vdest, 0);	        vdest = pack565(over_rev_non_pre(load8888(s1), expand565(vdest, 1)), vdest, 1);		vdest = pack565(over_rev_non_pre(load8888(s2), expand565(vdest, 2)), vdest, 2);		vdest = pack565(over_rev_non_pre(load8888(s3), expand565(vdest, 3)), vdest, 3);		*(__m64 *)dst = vdest;	    }	    w -= 4;	    dst += 4;	    src += 4;	}	CHECKPOINT();	while (w)	{	    __m64 vsrc = load8888 (*src);	    __m64 vdest = expand565 (_mm_cvtsi32_si64 (*dst), 0);	    vdest = pack565(over_rev_non_pre(vsrc, vdest), vdest, 0);	    *dst = _mm_cvtsi64_si32 (vdest);	    w--;	    dst++;	    src++;	}    }    _mm_empty();}/* "8888RevNP" is GdkPixbuf's format: ABGR, non premultiplied */voidfbCompositeSrc_8888RevNPx8888mmx (pixman_operator_t      op,				  PicturePtr pSrc,				  PicturePtr pMask,				  PicturePtr pDst,				  INT16      xSrc,				  INT16      ySrc,				  INT16      xMask,				  INT16      yMask,				  INT16      xDst,				  INT16      yDst,				  CARD16     width,				  CARD16     height){    CARD32	*dstLine, *dst;    CARD32	*srcLine, *src;    FbStride	dstStride, srcStride;    CARD16	w;    CHECKPOINT();    fbComposeGetStart (pDst, xDst, yDst, CARD32, dstStride, dstLine, 1);    fbComposeGetStart (pSrc, xSrc, ySrc, CARD32, srcStride, srcLine, 1);    assert (pSrc->pDrawable == pMask->pDrawable);    while (height--)    {	dst = dstLine;	dstLine += dstStride;	src = srcLine;	srcLine += srcStride;	w = width;	while (w && (unsigned long)dst & 7)	{	    __m64 s = load8888 (*src);	    __m64 d = load8888 (*dst);	    *dst = store8888 (over_rev_non_pre (s, d));	    w--;	    dst++;	    src++;	}	while (w >= 2)	{	    ullong s0, s1;	    unsigned char a0, a1;	    __m64 d0, d1;	    s0 = *src;	    s1 = *(src + 1);	    a0 = (s0 >> 24);	    a1 = (s1 >> 24);	    if ((a0 & a1) == 0xFF)	    {		d0 = invert_colors(load8888(s0));		d1 = invert_colors(load8888(s1));		*(__m64 *)dst = pack8888 (d0, d1);	    }	    else if (a0 | a1)	    {		__m64 vdest = *(__m64 *)dst;		d0 = over_rev_non_pre (load8888(s0), expand8888 (vdest, 0));		d1 = over_rev_non_pre (load8888(s1), expand8888 (vdest, 1));		*(__m64 *)dst = pack8888 (d0, d1);	    }	    w -= 2;	    dst += 2;	    src += 2;	}	while (w)	{	    __m64 s = load8888 (*src);	    __m64 d = load8888 (*dst);	    *dst = store8888 (over_rev_non_pre (s, d));	    w--;	    dst++;	    src++;	}    }    _mm_empty();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -