summaryrefslogtreecommitdiff
path: root/fb
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <sandmann@daimi.au.dk>2006-03-22 21:37:49 +0000
committerSøren Sandmann Pedersen <sandmann@daimi.au.dk>2006-03-22 21:37:49 +0000
commit5449634e3c9428005aba5b3322ced7e86c62f185 (patch)
treeb3cc6893b51462c4f6cb2e7d54e44b67da66552a /fb
parent5b3084c64f7bd1232603ffb3e985600b8d045453 (diff)
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.
Diffstat (limited to 'fb')
-rw-r--r--fb/fbmmx.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/fb/fbmmx.c b/fb/fbmmx.c
index 73c715795..db06ea208 100644
--- a/fb/fbmmx.c
+++ b/fb/fbmmx.c
@@ -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;