--- strncpy.S.orig Wed Nov 6 17:16:31 2002 +++ strncpy.S Wed Nov 6 18:47:25 2002 @@ -48,6 +48,7 @@ #define sh1 r29 #define loopcnt r30 #define value r31 +#define tmp2 r14 ENTRY(strncpy) .prologue @@ -62,6 +63,7 @@ mov saved_pr = pr // save the predicate registers .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + mov ar.ec = 0 .body cmp.geu p6, p5 = 24, in2 (p6) br.cond.spnt .short_len @@ -209,15 +211,21 @@ mov pr = saved_pr, -1 // restore the predicate registers br.ret.sptk.many b0 .recovery2: + sub tmp2=len,thresh + ;; + cmp.ge p8,p9=-8, tmp2 add tmp = -8, asrc ;; - ld8 r[0] = [tmp] +(p8) mov r[0] = r0 +(p9) ld8 r[0] = [tmp] br.cond.sptk .back2 .recovery3: - add tmp = -MEMLAT * 8, src ;; + add tmp = -(MEMLAT+1) * 8, src ;; ld8 r[MEMLAT] = [tmp] br.cond.sptk .back3 .recovery4: - add tmp = -(MEMLAT - 1) * 8, src ;; - ld8 r[MEMLAT - 1] = [tmp] + cmp.eq p8,p9=0, len + add tmp = -(MEMLAT) * 8, src ;; +(p8) mov r[MEMLAT - 1] = r0 +(p9) ld8 r[MEMLAT - 1] = [tmp] br.cond.sptk .back4 END(strncpy)