Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/ia64/ia64 PR port-ia64/51261



details:   https://anonhg.NetBSD.org/src/rev/ff02060d2dbe
branches:  trunk
changeset: 817019:ff02060d2dbe
user:      scole <scole%NetBSD.org@localhost>
date:      Fri Aug 05 16:53:36 2016 +0000

description:
PR port-ia64/51261

Use common/lib/libc/arch/ia64/string/bzero.S and other string functions

diffstat:

 sys/arch/ia64/ia64/support.S |  87 ++++---------------------------------------
 1 files changed, 8 insertions(+), 79 deletions(-)

diffs (140 lines):

diff -r b7c4c97306a8 -r ff02060d2dbe sys/arch/ia64/ia64/support.S
--- a/sys/arch/ia64/ia64/support.S      Fri Aug 05 16:51:56 2016 +0000
+++ b/sys/arch/ia64/ia64/support.S      Fri Aug 05 16:53:36 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: support.S,v 1.6 2010/08/08 18:18:58 chs Exp $  */
+/*     $NetBSD: support.S,v 1.7 2016/08/05 16:53:36 scole Exp $        */
 
 /*-
  * Copyright (c) 1998 Doug Rabson
@@ -769,84 +769,10 @@
        st8     [loc2]=r0                       // kill the fault handler.
        mov     ar.pfs=loc0                     // restore ar.pfs
        mov     rp=loc1                         // restore ra.
-       br.ret.sptk.few rp                      // ret0 left over from bcopy
+       br.ret.sptk.few rp                      // ret0 left over from copystr
 END(copyoutstr)
 
 /*
- * Not the fastest bcopy in the world.
- */
-ENTRY(bcopy, 3)
-       mov     ret0=r0                         // return zero for copy{in,out}
-       ;;
-       cmp.le  p6,p0=in2,r0                    // bail if len <= 0
-(p6)   br.ret.spnt.few rp
-
-       sub     r14=in1,in0 ;;                  // check for overlap
-       cmp.ltu p6,p0=r14,in2                   // dst-src < len
-(p6)   br.cond.spnt.few 5f
-
-       extr.u  r14=in0,0,3                     // src & 7
-       extr.u  r15=in1,0,3 ;;                  // dst & 7
-       cmp.eq  p6,p0=r14,r15                   // different alignment?
-(p6)   br.cond.spnt.few 2f                     // branch if same alignment
-
-1:     ld1     r14=[in0],1 ;;                  // copy bytewise
-       st1     [in1]=r14,1
-       add     in2=-1,in2 ;;                   // len--
-       cmp.ne  p6,p0=r0,in2
-(p6)   br.cond.dptk.few 1b                     // loop
-       br.ret.sptk.few rp                      // done
-
-2:     cmp.eq  p6,p0=r14,r0                    // aligned?
-(p6)   br.cond.sptk.few 4f
-
-3:     ld1     r14=[in0],1 ;;                  // copy bytewise
-       st1     [in1]=r14,1
-       extr.u  r15=in0,0,3                     // src & 7
-       add     in2=-1,in2 ;;                   // len--
-       cmp.eq  p6,p0=r0,in2                    // done?
-       cmp.eq  p7,p0=r0,r15 ;;                 // aligned now?
-(p6)   br.ret.spnt.few rp                      // return if done
-(p7)   br.cond.spnt.few 4f                     // go to main copy
-       br.cond.sptk.few 3b                     // more bytes to copy
-
-       // At this point, in2 is non-zero
-
-4:     mov     r14=8 ;;
-       cmp.ltu p6,p0=in2,r14 ;;                // len < 8?
-(p6)   br.cond.spnt.few 1b                     // byte copy the end
-       ld8     r15=[in0],8 ;;                  // copy word
-       st8     [in1]=r15,8
-       add     in2=-8,in2 ;;                   // len -= 8
-       cmp.ne  p6,p0=r0,in2                    // done?
-(p6)   br.cond.spnt.few 4b                     // again
-
-       br.ret.sptk.few rp                      // return
-
-       // Don't bother optimising overlap case
-
-5:     add     in0=in0,in2
-       add     in1=in1,in2 ;;
-       add     in0=-1,in0
-       add     in1=-1,in1 ;;
-
-6:     ld1     r14=[in0],-1 ;;
-       st1     [in1]=r14,-1
-       add     in2=-1,in2 ;;
-       cmp.ne  p6,p0=r0,in2
-(p6)   br.cond.spnt.few 6b
-
-       br.ret.sptk.few rp
-END(bcopy)
-
-ENTRY(memcpy,3)
-       mov     r14=in0 ;;
-       mov     in0=in1 ;;
-       mov     in1=r14
-       br.cond.sptk.few bcopy
-END(memcpy)
-
-/*
  * int kcopy(const void *from, void *to, size_t len);
  * Copy len bytes, abort on fault.
  */
@@ -876,12 +802,13 @@
        mov     out0=in0
        mov     out1=in1
        mov     out2=in2
+       mov     ret0=r0                         // XXX netbsd kcopy same as freebsd?
        ;;
        br.call.sptk.few rp=bcopy               // do the copy.
        st8     [loc2]=r0                       // kill the fault handler.
        mov     ar.pfs=loc0                     // restore ar.pfs
        mov     rp=loc1                         // restore ra.
-       br.ret.sptk.few rp                      // ret0 left over from bcopy
+       br.ret.sptk.few rp
 END(kcopy)
 
 ENTRY(copyin, 3)
@@ -914,12 +841,13 @@
        mov     out0=in0
        mov     out1=in1
        mov     out2=in2
+       mov     ret0=r0                         // return zero for copy{in,out}
        ;;
        br.call.sptk.few rp=bcopy               // do the copy.
        st8     [loc2]=r0                       // kill the fault handler.
        mov     ar.pfs=loc0                     // restore ar.pfs
        mov     rp=loc1                         // restore ra.
-       br.ret.sptk.few rp                      // ret0 left over from bcopy
+       br.ret.sptk.few rp
 END(copyin)
 
 ENTRY(copyout, 3)
@@ -952,12 +880,13 @@
        mov     out0=in0
        mov     out1=in1
        mov     out2=in2
+       mov     ret0=r0                         // return zero for copy{in,out}
        ;;
        br.call.sptk.few rp=bcopy               // do the copy.
        st8     [loc2]=r0                       // kill the fault handler.
        mov     ar.pfs=loc0                     // restore ar.pfs
        mov     rp=loc1                         // restore ra.
-       br.ret.sptk.few rp                      // ret0 left over from bcopy
+       br.ret.sptk.few rp
 END(copyout)
 
 ENTRY(copyerr, 0)



Home | Main Index | Thread Index | Old Index