Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sparc64/sparc64 Make bcopy a 32-bit friendly.



details:   https://anonhg.NetBSD.org/src/rev/41e43aa8252d
branches:  trunk
changeset: 512776:41e43aa8252d
user:      eeh <eeh%NetBSD.org@localhost>
date:      Mon Jul 16 18:59:33 2001 +0000

description:
Make bcopy a 32-bit friendly.

diffstat:

 sys/arch/sparc64/sparc64/locore.s |  512 ++++++++++++++++++-------------------
 1 files changed, 247 insertions(+), 265 deletions(-)

diffs (truncated from 645 to 300 lines):

diff -r e92f68ab0f7f -r 41e43aa8252d sys/arch/sparc64/sparc64/locore.s
--- a/sys/arch/sparc64/sparc64/locore.s Mon Jul 16 18:33:13 2001 +0000
+++ b/sys/arch/sparc64/sparc64/locore.s Mon Jul 16 18:59:33 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: locore.s,v 1.125 2001/07/11 23:02:56 eeh Exp $ */
+/*     $NetBSD: locore.s,v 1.126 2001/07/16 18:59:33 eeh Exp $ */
 
 /*
  * Copyright (c) 1996-2001 Eduardo Horvath
@@ -4066,6 +4066,21 @@
        DLFLUSH(%g5, %g6)
        LDPTR   [%g5], %g5              ! We have a pointer to the handler
        DLFLUSH2(%g6)
+#if DEBUG
+       brnz,pt %g5, 1f
+        nop
+       STACKFRAME(-CC64FSZ)            ! Get a clean register window
+       mov     %g2, %o1
+
+       LOAD_ASCIZ(%o0, "interrupt_vector: vector %lx NULL\r\n")
+       GLOBTOLOC
+       call    prom_printf
+        clr    %g4
+       LOCTOGLOB
+       restore
+        nop
+1:     
+#endif
 #ifdef DEBUG
        tst     %g5
        tz      56
@@ -9396,7 +9411,7 @@
 #endif
         cmp    %o2, BCOPY_SMALL
 Lbcopy_start:
-       bge,pt  %xcc, 2f        ! if >= this many, go be fancy.
+!      bge,pt  %xcc, 2f        ! if >= this many, go be fancy.
         cmp    %o2, 256
 
        mov     %o1, %o5        ! Save memcpy return value
@@ -9422,7 +9437,7 @@
         * Plenty of data to copy, so try to do it optimally.
         */
 2:
-#if 1
+#if 0
        ! If it is big enough, use VIS instructions
        bge     Lbcopy_block
         nop
@@ -9435,99 +9450,99 @@
 
        save    %sp, -CC64FSZ, %sp
        
-       mov     %i0, %o0
-       mov     %i1, %o1
-       
-       mov     %i2, %o2
-       btst    1, %o1
+       mov     %i0, %l0
+       mov     %i1, %l1
+       
+       mov     %i2, %l2
+       btst    1, %l1
        
        bz,pt   %icc, 4f
-        btst   2, %o1
-       ldub    [%o0], %o4                              ! Load 1st byte
-       
-       deccc   1, %o2
+        btst   2, %l1
+       ldub    [%l0], %l4                              ! Load 1st byte
+       
+       deccc   1, %l2
        ble,pn  %xcc, Lbcopy_finish                     ! XXXX
-        inc    1, %o0
-       
-       stb     %o4, [%o1]                              ! Store 1st byte
-       inc     1, %o1                                  ! Update address
-       btst    2, %o1
+        inc    1, %l0
+       
+       stb     %l4, [%l1]                              ! Store 1st byte
+       inc     1, %l1                                  ! Update address
+       btst    2, %l1
 4:     
        bz,pt   %icc, 4f
        
-        btst   1, %o0
+        btst   1, %l0
        bz,a    1f
-        lduh   [%o0], %o4                              ! Load short
-
-       ldub    [%o0], %o4                              ! Load bytes
-       
-       ldub    [%o0+1], %o3
-       sllx    %o4, 8, %o4
-       or      %o3, %o4, %o4
+        lduh   [%l0], %l4                              ! Load short
+
+       ldub    [%l0], %l4                              ! Load bytes
+       
+       ldub    [%l0+1], %l3
+       sllx    %l4, 8, %l4
+       or      %l3, %l4, %l4
        
 1:     
-       deccc   2, %o2
+       deccc   2, %l2
        ble,pn  %xcc, Lbcopy_finish                     ! XXXX
-        inc    2, %o0
-       sth     %o4, [%o1]                              ! Store 1st short
-       
-       inc     2, %o1
+        inc    2, %l0
+       sth     %l4, [%l1]                              ! Store 1st short
+       
+       inc     2, %l1
 4:
-       btst    4, %o1
+       btst    4, %l1
        bz,pt   %xcc, 4f
        
-        btst   3, %o0
+        btst   3, %l0
        bz,a,pt %xcc, 1f
-        lduw   [%o0], %o4                              ! Load word -1
-
-       btst    1, %o0
+        lduw   [%l0], %l4                              ! Load word -1
+
+       btst    1, %l0
        bz,a,pt %icc, 2f
-        lduh   [%o0], %o4
-       
-       ldub    [%o0], %o4
-       
-       lduh    [%o0+1], %o3
-       sllx    %o4, 16, %o4
-       or      %o4, %o3, %o4
-       
-       ldub    [%o0+3], %o3
-       sllx    %o4, 8, %o4
+        lduh   [%l0], %l4
+       
+       ldub    [%l0], %l4
+       
+       lduh    [%l0+1], %l3
+       sllx    %l4, 16, %l4
+       or      %l4, %l3, %l4
+       
+       ldub    [%l0+3], %l3
+       sllx    %l4, 8, %l4
        ba,pt   %icc, 1f
-        or     %o4, %o3, %o4
+        or     %l4, %l3, %l4
        
 2:
-       lduh    [%o0+2], %o3
-       sllx    %o4, 16, %o4
-       or      %o4, %o3, %o4
+       lduh    [%l0+2], %l3
+       sllx    %l4, 16, %l4
+       or      %l4, %l3, %l4
        
 1:     
-       deccc   4, %o2
+       deccc   4, %l2
        ble,pn  %xcc, Lbcopy_finish             ! XXXX
-        inc    4, %o0
-       
-       st      %o4, [%o1]                              ! Store word
-       inc     4, %o1
+        inc    4, %l0
+       
+       st      %l4, [%l1]                              ! Store word
+       inc     4, %l1
 4:
        !!
        !! We are now 32-bit aligned in the dest.
        !!
-Lbcopy__common:        
-
-       and     %o0, 7, %o4                             ! Shift amount
-       andn    %o0, 7, %o0                             ! Source addr
-       
-       brz,pt  %o4, Lbcopy_noshift8                    ! No shift version...
-
-        sllx   %o4, 3, %o4                             ! In bits
-       mov     8<<3, %o3
-       
-       ldx     [%o0], %l0                              ! Load word -1
-       sub     %o3, %o4, %o3                           ! Reverse shift
-       deccc   16*8, %o2                               ! Have enough room?
-       
-       sllx    %l0, %o4, %l0
+Lbcopy_common: 
+
+       and     %l0, 7, %l4                             ! Shift amount
+       andn    %l0, 7, %l0                             ! Source addr
+       
+       brz,pt  %l4, Lbcopy_noshift8                    ! No shift version...
+
+        sllx   %l4, 3, %l4                             ! In bits
+       mov     8<<3, %l3
+       
+       ldx     [%l0], %o0                              ! Load word -1
+       sub     %l3, %l4, %l3                           ! Reverse shift
+       deccc   12*8, %l2                               ! Have enough room?
+       
+       sllx    %o0, %l4, %o0
        bl,pn   %xcc, 2f
-        and    %o3, 0x38, %o3
+        and    %l3, 0x38, %l3
 Lbcopy_unrolled8:
 
        /*
@@ -9536,249 +9551,216 @@
         * 3 dependent operations on the data.
         */ 
 
-!      ldx     [%o0+0*8], %l0                          ! Already done
-!      sllx    %l0, %o4, %l0                           ! Already done
-       ldx     [%o0+1*8], %l1
-       ldx     [%o0+2*8], %l2
-       ldx     [%o0+3*8], %l3
-       ldx     [%o0+4*8], %l4
-       ldx     [%o0+5*8], %l5
-       ldx     [%o0+6*8], %l6
+!      ldx     [%l0+0*8], %o0                          ! Already done
+!      sllx    %o0, %l4, %o0                           ! Already done
+       ldx     [%l0+1*8], %o1
+       ldx     [%l0+2*8], %o2
+       ldx     [%l0+3*8], %o3
+       ldx     [%l0+4*8], %o4
        ba,pt   %icc, 1f
-        ldx    [%o0+7*8], %l7
+        ldx    [%l0+5*8], %o5
        .align  8
 1:
-       srlx    %l1, %o3, %g1
-       inc     8*8, %o0
-       
-       sllx    %l1, %o4, %l1
-       or      %g1, %l0, %o5
-       ldx     [%o0+0*8], %l0
-       
-       stx     %o5, [%o1+0*8]
-       srlx    %l2, %o3, %g1
-
-       sllx    %l2, %o4, %l2
-       or      %g1, %l1, %o5
-       ldx     [%o0+1*8], %l1
-       
-       stx     %o5, [%o1+1*8]
-       srlx    %l3, %o3, %g1
-       
-       sllx    %l3, %o4, %l3
-       or      %g1, %l2, %o5
-       ldx     [%o0+2*8], %l2
-       
-       stx     %o5, [%o1+2*8]
-       srlx    %l4, %o3, %g1
-       
-       sllx    %l4, %o4, %l4   
-       or      %g1, %l3, %o5
-       ldx     [%o0+3*8], %l3
-       
-       stx     %o5, [%o1+3*8]
-       srlx    %l5, %o3, %g1
-       
-       sllx    %l5, %o4, %l5
-       or      %g1, %l4, %o5
-       ldx     [%o0+4*8], %l4
-       
-       stx     %o5, [%o1+4*8]
-       srlx    %l6, %o3, %g1
-       
-       sllx    %l6, %o4, %l6
-       or      %g1, %l5, %o5
-       ldx     [%o0+5*8], %l5
-       
-       stx     %o5, [%o1+5*8]
-       srlx    %l7, %o3, %g1
-       
-       sllx    %l7, %o4, %l7
-       or      %g1, %l6, %o5
-       ldx     [%o0+6*8], %l6
-       
-       stx     %o5, [%o1+6*8]
-       srlx    %l0, %o3, %g1
-       deccc   8*8, %o2                                ! Have enough room?
-       
-       sllx    %l0, %o4, %l0                           ! Next loop
-       or      %g1, %l7, %o5
-       ldx     [%o0+7*8], %l7
-       
-       stx     %o5, [%o1+7*8]
+       srlx    %o1, %l3, %g1
+       inc     8*8, %l0
+       



Home | Main Index | Thread Index | Old Index