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 /fb | |
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.
Diffstat (limited to 'fb')
-rw-r--r-- | fb/fbmmx.c | 32 |
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; |