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