Wed Mar 22 16:28:46 2006 Søren Sandmann <sandmann@redhat.com>

Use inline assembly for copy area, since gcc doesn't generate movq
    instructions.
This commit is contained in:
Søren Sandmann Pedersen 2006-03-22 21:37:49 +00:00
parent 5b3084c64f
commit 5449634e3c
2 changed files with 29 additions and 8 deletions

View File

@ -1,3 +1,8 @@
Wed Mar 22 16:28:46 2006 Søren Sandmann <sandmann@redhat.com>
* fb/fbmmx.c (fbCopyAreammx): Use inline assembly for copy area,
since gcc doesn't generate movq instructions.
Wed Mar 22 16:05:09 2006 Søren Sandmann <sandmann@redhat.com>
* fb/fbmmx.c (fbSolidFillmmx): Use inline assembly for solid

View File

@ -2235,14 +2235,30 @@ fbCopyAreammx (DrawablePtr pSrc,
while (w >= 64)
{
*(__m64 *)(d + 0) = *(__m64 *)(s + 0);
*(__m64 *)(d + 8) = *(__m64 *)(s + 8);
*(__m64 *)(d + 16) = *(__m64 *)(s + 16);
*(__m64 *)(d + 24) = *(__m64 *)(s + 24);
*(__m64 *)(d + 32) = *(__m64 *)(s + 32);
*(__m64 *)(d + 40) = *(__m64 *)(s + 40);
*(__m64 *)(d + 48) = *(__m64 *)(s + 48);
*(__m64 *)(d + 56) = *(__m64 *)(s + 56);
__asm__ (
"movq (%1), %%mm0\n"
"movq 8(%1), %%mm1\n"
"movq 16(%1), %%mm2\n"
"movq 24(%1), %%mm3\n"
"movq 32(%1), %%mm4\n"
"movq 40(%1), %%mm5\n"
"movq 48(%1), %%mm6\n"
"movq 56(%1), %%mm7\n"
"movq %%mm0, (%0)\n"
"movq %%mm1, 8(%0)\n"
"movq %%mm2, 16(%0)\n"
"movq %%mm3, 24(%0)\n"
"movq %%mm4, 32(%0)\n"
"movq %%mm5, 40(%0)\n"
"movq %%mm6, 48(%0)\n"
"movq %%mm7, 56(%0)\n"
:
: "r" (d), "r" (s)
: "memory",
"%mm0", "%mm1", "%mm2", "%mm3",
"%mm4", "%mm5", "%mm6", "%mm7");
w -= 64;
s += 64;
d += 64;