diff options
author | Søren Sandmann Pedersen <sandmann@daimi.au.dk> | 2006-03-22 21:37:49 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <sandmann@daimi.au.dk> | 2006-03-22 21:37:49 +0000 |
commit | 5449634e3c9428005aba5b3322ced7e86c62f185 (patch) | |
tree | b3cc6893b51462c4f6cb2e7d54e44b67da66552a | |
parent | 5b3084c64f7bd1232603ffb3e985600b8d045453 (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.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | fb/fbmmx.c | 32 |
2 files changed, 29 insertions, 8 deletions
@@ -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 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; |