vserver 2.0 rc7
[linux-2.6.git] / arch / sparc64 / lib / U3memcpy.S
index 8fe195a..7cae9cc 100644 (file)
@@ -6,6 +6,7 @@
 #ifdef __KERNEL__
 #include <asm/visasm.h>
 #include <asm/asi.h>
+#define GLOBAL_SPARE   %g7
 #else
 #define ASI_BLK_P 0xf0
 #define FPRS_FEF  0x04
@@ -17,6 +18,7 @@
 #define VISEntryHalf rd %fprs, %o5; wr %g0, FPRS_FEF, %fprs
 #define VISExitHalf and %o5, FPRS_FEF, %o5; wr %o5, 0x0, %fprs
 #endif
+#define GLOBAL_SPARE   %g5
 #endif
 
 #ifndef EX_LD
@@ -84,7 +86,7 @@ FUNC_NAME:    /* %o0=dst, %o1=src, %o2=len */
        cmp             %g2, 0
        tne             %xcc, 5
        PREAMBLE
-       mov             %o0, %g5
+       mov             %o0, %o4
        cmp             %o2, 0
        be,pn           %XCC, 85f
         or             %o0, %o1, %o3
@@ -109,7 +111,7 @@ FUNC_NAME:  /* %o0=dst, %o1=src, %o2=len */
         * of bytes to copy to make 'dst' 64-byte aligned.  We pre-
         * subtract this from 'len'.
         */
-        sub            %o0, %o1, %o4
+        sub            %o0, %o1, GLOBAL_SPARE
        sub             %g2, 0x40, %g2
        sub             %g0, %g2, %g2
        sub             %o2, %g2, %o2
@@ -119,11 +121,11 @@ FUNC_NAME:        /* %o0=dst, %o1=src, %o2=len */
 
 1:     subcc           %g1, 0x1, %g1
        EX_LD(LOAD(ldub, %o1 + 0x00, %o3))
-       EX_ST(STORE(stb, %o3, %o1 + %o4))
+       EX_ST(STORE(stb, %o3, %o1 + GLOBAL_SPARE))
        bgu,pt          %XCC, 1b
         add            %o1, 0x1, %o1
 
-       add             %o1, %o4, %o0
+       add             %o1, GLOBAL_SPARE, %o0
 
 2:     cmp             %g2, 0x0
        and             %o1, 0x7, %g1
@@ -149,7 +151,7 @@ FUNC_NAME:  /* %o0=dst, %o1=src, %o2=len */
 
 3:     LOAD(prefetch, %o1 + 0x000, #one_read)
        LOAD(prefetch, %o1 + 0x040, #one_read)
-       andn            %o2, (0x40 - 1), %o4
+       andn            %o2, (0x40 - 1), GLOBAL_SPARE
        LOAD(prefetch, %o1 + 0x080, #one_read)
        LOAD(prefetch, %o1 + 0x0c0, #one_read)
        LOAD(prefetch, %o1 + 0x100, #one_read)
@@ -173,10 +175,10 @@ FUNC_NAME:        /* %o0=dst, %o1=src, %o2=len */
        faligndata      %f10, %f12, %f26
        EX_LD(LOAD(ldd, %o1 + 0x040, %f0))
 
-       subcc           %o4, 0x80, %o4
+       subcc           GLOBAL_SPARE, 0x80, GLOBAL_SPARE
        add             %o1, 0x40, %o1
        bgu,pt          %XCC, 1f
-        srl            %o4, 6, %o3
+        srl            GLOBAL_SPARE, 6, %o3
        ba,pt           %xcc, 2f
         nop
 
@@ -315,9 +317,9 @@ FUNC_NAME:  /* %o0=dst, %o1=src, %o2=len */
         sub            %o0, %o1, %o3
 
 72:
-       andn            %o2, 0xf, %o4
+       andn            %o2, 0xf, GLOBAL_SPARE
        and             %o2, 0xf, %o2
-1:     subcc           %o4, 0x10, %o4
+1:     subcc           GLOBAL_SPARE, 0x10, GLOBAL_SPARE
        EX_LD(LOAD(ldx, %o1 + 0x00, %o5))
        EX_LD(LOAD(ldx, %o1 + 0x08, %g1))
        EX_ST(STORE(stx, %o5, %o1 + %o3))
@@ -372,10 +374,10 @@ FUNC_NAME:        /* %o0=dst, %o1=src, %o2=len */
        andn            %o1, 0x7, %o1
        EX_LD(LOAD(ldx, %o1, %g2))
        sub             %o3, %g1, %o3
-       andn            %o2, 0x7, %o4
+       andn            %o2, 0x7, GLOBAL_SPARE
        sllx            %g2, %g1, %g2
 1:     EX_LD(LOAD(ldx, %o1 + 0x8, %g3))
-       subcc           %o4, 0x8, %o4
+       subcc           GLOBAL_SPARE, 0x8, GLOBAL_SPARE
        add             %o1, 0x8, %o1
        srlx            %g3, %o3, %o5
        or              %o5, %g2, %o5
@@ -405,7 +407,7 @@ FUNC_NAME:  /* %o0=dst, %o1=src, %o2=len */
         add            %o1, 4, %o1
 
 85:    retl
-        mov            EX_RETVAL(%g5), %o0
+        mov            EX_RETVAL(%o4), %o0
 
        .align          32
 90:
@@ -415,6 +417,6 @@ FUNC_NAME:  /* %o0=dst, %o1=src, %o2=len */
        bgu,pt          %XCC, 90b
         add            %o1, 1, %o1
        retl
-        mov            EX_RETVAL(%g5), %o0
+        mov            EX_RETVAL(%o4), %o0
 
        .size           FUNC_NAME, .-FUNC_NAME