diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-04-11 19:57:49 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-04-11 19:57:49 +0000 |
commit | 8ee355155102ad7c2e473f179f4879c6e468f19e (patch) | |
tree | 2000ed58ca5f2a4d73a2b538b06244ba73fe8436 | |
parent | 87d5c92d117ad749bfc7dd30a3dd826cecbc563e (diff) | |
download | glibc-8ee355155102ad7c2e473f179f4879c6e468f19e.tar.gz glibc-8ee355155102ad7c2e473f179f4879c6e468f19e.tar.xz glibc-8ee355155102ad7c2e473f179f4879c6e468f19e.zip |
Update.
2001-04-11 David Mosberger <davidm@hpl.hp.com> * sysdeps/ia64/htonl.S: Drop superfluous "alloc". * sysdeps/ia64/htons.S: Likewise. * sysdeps/ia64/memset.S: Add unwind directives. * sysdeps/ia64/strncpy.S: Likewise. * sysdeps/ia64/strcat.S: Likewise. * sysdeps/ia64/memccpy.S: Add unwind directives. Drop superfluous restore of ar.pfs. * sysdeps/ia64/strchr.S: Likewise. * sysdeps/ia64/memmove.S: Likewise. * sysdeps/ia64/memcpy.S: Likewise. * sysdeps/ia64/memcmp.S: Likewise. * sysdeps/ia64/memchr.S: Likewise. * sysdeps/ia64/strcmp.S: Likewise. * sysdeps/ia64/strlen.S: Likewise. * sysdeps/ia64/strcpy.S: Likewise. * sysdeps/ia64/strncmp.S: Likewise.
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | sysdeps/ia64/htonl.S | 10 | ||||
-rw-r--r-- | sysdeps/ia64/htons.S | 10 | ||||
-rw-r--r-- | sysdeps/ia64/memccpy.S | 11 | ||||
-rw-r--r-- | sysdeps/ia64/memchr.S | 10 | ||||
-rw-r--r-- | sysdeps/ia64/memcmp.S | 11 | ||||
-rw-r--r-- | sysdeps/ia64/memcpy.S | 11 | ||||
-rw-r--r-- | sysdeps/ia64/memmove.S | 11 | ||||
-rw-r--r-- | sysdeps/ia64/memset.S | 5 | ||||
-rw-r--r-- | sysdeps/ia64/strcat.S | 8 | ||||
-rw-r--r-- | sysdeps/ia64/strchr.S | 10 | ||||
-rw-r--r-- | sysdeps/ia64/strcmp.S | 6 | ||||
-rw-r--r-- | sysdeps/ia64/strcpy.S | 10 | ||||
-rw-r--r-- | sysdeps/ia64/strlen.S | 9 | ||||
-rw-r--r-- | sysdeps/ia64/strncmp.S | 6 | ||||
-rw-r--r-- | sysdeps/ia64/strncpy.S | 10 |
16 files changed, 95 insertions, 64 deletions
diff --git a/ChangeLog b/ChangeLog index 3289110dd8..3b6b1fe989 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2001-04-11 David Mosberger <davidm@hpl.hp.com> + + * sysdeps/ia64/htonl.S: Drop superfluous "alloc". + * sysdeps/ia64/htons.S: Likewise. + + * sysdeps/ia64/memset.S: Add unwind directives. + * sysdeps/ia64/strncpy.S: Likewise. + * sysdeps/ia64/strcat.S: Likewise. + + * sysdeps/ia64/memccpy.S: Add unwind directives. Drop superfluous + restore of ar.pfs. + * sysdeps/ia64/strchr.S: Likewise. + * sysdeps/ia64/memmove.S: Likewise. + * sysdeps/ia64/memcpy.S: Likewise. + * sysdeps/ia64/memcmp.S: Likewise. + * sysdeps/ia64/memchr.S: Likewise. + * sysdeps/ia64/strcmp.S: Likewise. + * sysdeps/ia64/strlen.S: Likewise. + * sysdeps/ia64/strcpy.S: Likewise. + * sysdeps/ia64/strncmp.S: Likewise. + 2001-04-11 Jakub Jelinek <jakub@redhat.com> * wcsmbs/wchar.h (fgetwc, getwc, getwchar, fputwc, putwc, putwchar, diff --git a/sysdeps/ia64/htonl.S b/sysdeps/ia64/htonl.S index 79be96baad..cc6677515c 100644 --- a/sysdeps/ia64/htonl.S +++ b/sysdeps/ia64/htonl.S @@ -1,5 +1,5 @@ /* Change byte order in 32-bit value. ia64 version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dan Pop <Dan.Pop@cern.ch> @@ -20,14 +20,12 @@ #include <sysdep.h> -#undef ret ENTRY(htonl) - alloc ret0 = ar.pfs, 1, 0, 0, 0 - shl in0 = in0, 32 + shl ret0 = r32, 32 ;; - mux1 ret0 = in0, @rev - br.ret.sptk.many b0 + mux1 ret0 = ret0, @rev + ret END(htonl) weak_alias (htonl, ntohl) diff --git a/sysdeps/ia64/htons.S b/sysdeps/ia64/htons.S index fb5e66e458..74c9951f3b 100644 --- a/sysdeps/ia64/htons.S +++ b/sysdeps/ia64/htons.S @@ -1,5 +1,5 @@ /* Change byte order in 16-bit value. ia64 version. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Dan Pop <Dan.Pop@cern.ch> @@ -20,14 +20,12 @@ #include <sysdep.h> -#undef ret ENTRY(htons) - alloc ret0 = ar.pfs, 1, 0, 0, 0 - shl in0 = in0, 48 + shl ret0 = r32, 48 ;; - mux1 ret0 = in0, @rev - br.ret.sptk.many b0 + mux1 ret0 = ret0, @rev + ret END(htons) weak_alias (htons, ntohs) diff --git a/sysdeps/ia64/memccpy.S b/sysdeps/ia64/memccpy.S index 589c9ccf16..fbb21e4822 100644 --- a/sysdeps/ia64/memccpy.S +++ b/sysdeps/ia64/memccpy.S @@ -1,6 +1,6 @@ /* Optimized version of the memccpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -37,7 +37,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define saved_pr r17 #define saved_lc r18 #define dest r19 @@ -53,15 +52,19 @@ #define value r31 ENTRY(memccpy) - alloc saved_pfs = ar.pfs, 4, 40 - 4, 0, 40 + .prologue + alloc r2 = ar.pfs, 4, 40 - 4, 0, 40 #include "softpipe.h" .rotr r[MEMLAT + 3], tmp1[4], tmp2[4], val[4], tmp3[2], pos0[2] .rotp p[MEMLAT + 6 + 1] mov ret0 = r0 // return NULL if no match + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov dest = in0 // dest mov src = in1 // src extr.u char = in2, 0, 8 // char @@ -143,7 +146,6 @@ ENTRY(memccpy) .foundit: (p6) mov ret0 = dest .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -158,7 +160,6 @@ ENTRY(memccpy) shr.u value = value, 8 br.cloop.sptk .l5 ;; mov ret0 = dest - mov ar.pfs = saved_pfs mov pr = saved_pr, -1 mov ar.lc = saved_lc br.ret.sptk.many b0 diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S index 5ec9b21032..e659c5ee3d 100644 --- a/sysdeps/ia64/memchr.S +++ b/sysdeps/ia64/memchr.S @@ -1,6 +1,6 @@ /* Optimized version of the standard memchr() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -43,7 +43,6 @@ #include <sysdep.h> #undef ret -#define saved_pfs r14 #define saved_pr r15 #define saved_lc r16 #define chr r17 @@ -57,12 +56,16 @@ #define str in0 ENTRY(__memchr) - alloc saved_pfs = ar.pfs, 3, 0, 29, 32 + .prologue + alloc r2 = ar.pfs, 3, 0, 29, 32 #include "softpipe.h" .rotr value[MEMLAT+1], addr[MEMLAT+3], aux[2], poschr[2] .rotp p[MEMLAT+3] + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .save pr, saved_pr mov saved_pr = pr // save the predicates + .body mov ret0 = str and tmp = 7, str // tmp = str % 8 cmp.ne p7, p0 = r0, r0 // clear p7 @@ -118,7 +121,6 @@ ENTRY(__memchr) (p6) adds ret0 = -1, ret0 // if we got here from l1 or l3 (p7) add ret0 = addr[MEMLAT+2], poschr[1] // if we got here from l2 mov pr = saved_pr, -1 - mov ar.pfs = saved_pfs mov ar.lc = saved_lc br.ret.sptk.many b0 diff --git a/sysdeps/ia64/memcmp.S b/sysdeps/ia64/memcmp.S index 2e4f2ec967..c08f0d2b04 100644 --- a/sysdeps/ia64/memcmp.S +++ b/sysdeps/ia64/memcmp.S @@ -1,6 +1,6 @@ /* Optimized version of the standard memcmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ #define OPSIZ 8 #define MEMLAT 2 -#define saved_pfs r14 #define start r15 #define saved_pr r17 #define saved_lc r18 @@ -56,14 +55,18 @@ #define loopcnt r30 ENTRY(memcmp) - alloc saved_pfs = ar.pfs, 3, 37, 0, 40 + .prologue + alloc r2 = ar.pfs, 3, 37, 0, 40 .rotr r[MEMLAT + 2], q[MEMLAT + 5], tmp1[4], tmp2[4], val[2] .rotp p[MEMLAT + 4 + 1] mov ret0 = r0 // by default return value = 0 + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov dest = in0 // dest mov src = in1 // src mov len = in2 // len @@ -126,7 +129,6 @@ ENTRY(memcmp) cmp.ltu p6, p7 = value2, value1 ;; (p6) mov ret0 = -1 (p7) mov ret0 = 1 - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -154,7 +156,6 @@ ENTRY(memcmp) .done: (p6) sub ret0 = value2, value1 // don't execute it if falling thru .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff --git a/sysdeps/ia64/memcpy.S b/sysdeps/ia64/memcpy.S index caa1aa058a..5dcceaafa3 100644 --- a/sysdeps/ia64/memcpy.S +++ b/sysdeps/ia64/memcpy.S @@ -1,6 +1,6 @@ /* Optimized version of the standard memcpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define adest r15 #define saved_pr r17 #define saved_lc r18 @@ -70,13 +69,17 @@ br.cond.sptk .cpyfew ; /* deal with the remaining bytes */ ENTRY(memcpy) - alloc saved_pfs = ar.pfs, 3, 16 - 3, 0, 16 + .prologue + alloc r2 = ar.pfs, 3, 16 - 3, 0, 16 #include "softpipe.h" .rotr r[MEMLAT + 2], q[MEMLAT + 1] .rotp p[MEMLAT + 2] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body or tmp3 = in0, in1 ;; // tmp3 = dest | src or tmp3 = tmp3, in2 // tmp3 = dest | src | len mov dest = in0 // dest @@ -112,7 +115,6 @@ ENTRY(memcpy) (p[MEMLAT]) st8 [adest] = q[MEMLAT], 16 br.ctop.dptk .l0 ;; - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -182,7 +184,6 @@ ENTRY(memcpy) st1 [dest] = value, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff --git a/sysdeps/ia64/memmove.S b/sysdeps/ia64/memmove.S index 3fc38b9537..a3f7edef92 100644 --- a/sysdeps/ia64/memmove.S +++ b/sysdeps/ia64/memmove.S @@ -1,6 +1,6 @@ /* Optimized version of the standard memmove() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,6 @@ #define OP_T_THRES 16 #define OPSIZ 8 -#define saved_pfs r14 #define adest r15 #define saved_pr r17 #define saved_lc r18 @@ -69,13 +68,17 @@ br.cond.sptk .cpyfew ; /* deal with the remaining bytes */ ENTRY(memmove) - alloc saved_pfs = ar.pfs, 3, 29, 0, 32 + .prologue + alloc r2 = ar.pfs, 3, 29, 0, 32 #include "softpipe.h" .rotr r[MEMLAT + 2], q[MEMLAT + 1] .rotp p[MEMLAT + 2] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body or tmp3 = in0, in1 ;; // tmp3 = dest | src or tmp3 = tmp3, in2 // tmp3 = dest | src | len mov dest = in0 // dest @@ -119,7 +122,6 @@ ENTRY(memmove) (p[MEMLAT]) st8 [adest] = q[MEMLAT], 16 br.ctop.dptk .l0 ;; - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 @@ -189,7 +191,6 @@ ENTRY(memmove) st1 [dest] = value, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov pr = saved_pr, -1 // restore the predicate registers mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 diff --git a/sysdeps/ia64/memset.S b/sysdeps/ia64/memset.S index 0ebd9bc72c..0d67b1cfe0 100644 --- a/sysdeps/ia64/memset.S +++ b/sysdeps/ia64/memset.S @@ -1,6 +1,6 @@ /* Optimized version of the standard memset() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -45,8 +45,11 @@ #define wordval loc6 ENTRY(memset) + .prologue alloc save_pfs = ar.pfs, 3, 7, 0, 0 + .save ar.lc, save_lc mov save_lc = ar.lc + .body mov ret0 = dest and tmp = 7, dest cmp.eq p6, p0 = cnt, r0 diff --git a/sysdeps/ia64/strcat.S b/sysdeps/ia64/strcat.S index d8afacbe09..094ebb7d53 100644 --- a/sysdeps/ia64/strcat.S +++ b/sysdeps/ia64/strcat.S @@ -1,6 +1,6 @@ /* IA-64 assembly version of the standard strcat() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -37,14 +37,16 @@ #define src in1 #define dest in0 -#define save_pfs loc0 -#define save_b0 loc1 +#define save_b0 loc0 +#define save_pfs loc1 #define tmp loc2 #define rc ret0 ENTRY(strcat) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) alloc save_pfs = ar.pfs, 2, 3, 2, 0 mov save_b0 = b0 + .body mov out0 = dest mov tmp = gp ;; br.call.sptk.many b0 = strlen# ;; // rc = strlen(dest); diff --git a/sysdeps/ia64/strchr.S b/sysdeps/ia64/strchr.S index 48cbf89fa8..1130fdfa78 100644 --- a/sysdeps/ia64/strchr.S +++ b/sysdeps/ia64/strchr.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strchr() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -33,7 +33,6 @@ #include <sysdep.h> #undef ret -#define saved_pfs r14 #define saved_lc r18 #define poschr r19 #define pos0 r20 @@ -47,8 +46,11 @@ #define chr in1 ENTRY(strchr) - alloc saved_pfs = ar.pfs, 2, 0, 0, 0 + .prologue + alloc r2 = ar.pfs, 2, 0, 0, 0 + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov ret0 = str and tmp = 7, str // tmp = str % 8 mux1 chrx8 = chr, @brcst @@ -94,12 +96,10 @@ ENTRY(strchr) adds ret0 = -15, ret0 ;; // should be -16, but we decrement .restore_and_exit: // ret0 in the next instruction adds ret0 = -1, ret0 // ret0 was pointing 1 char too far - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 .notfound: mov ret0 = r0 // return NULL if null was found - mov ar.pfs = saved_pfs // first mov ar.lc = saved_lc br.ret.sptk.many b0 .recovery: diff --git a/sysdeps/ia64/strcmp.S b/sysdeps/ia64/strcmp.S index 164dd1bd7f..e958c0f20e 100644 --- a/sysdeps/ia64/strcmp.S +++ b/sysdeps/ia64/strcmp.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strcmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -33,13 +33,12 @@ #define s1 in0 #define s2 in1 -#define saved_pfs r14 #define val1 r15 #define val2 r16 ENTRY(strcmp) - alloc saved_pfs = ar.pfs, 2, 0, 0, 0 + alloc r2 = ar.pfs, 2, 0, 0, 0 .loop: ld1 val1 = [s1], 1 ld1 val2 = [s2], 1 @@ -50,6 +49,5 @@ ENTRY(strcmp) cmp.eq.and p6, p0 = val1, val2 (p6) br.cond.sptk .loop sub ret0 = val1, val2 - mov ar.pfs = saved_pfs br.ret.sptk.many b0 END(strcmp) diff --git a/sysdeps/ia64/strcpy.S b/sysdeps/ia64/strcpy.S index 2a2e7e9a4a..a3b75270f6 100644 --- a/sysdeps/ia64/strcpy.S +++ b/sysdeps/ia64/strcpy.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strcpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -34,7 +34,6 @@ #include <sysdep.h> #undef ret -#define saved_pfs r14 #define saved_lc r15 #define saved_pr r16 #define thresh r17 @@ -53,15 +52,19 @@ #define value r31 ENTRY(strcpy) - alloc saved_pfs = ar.pfs, 2, 0, 30, 32 + .prologue + alloc r2 = ar.pfs, 2, 0, 30, 32 #define MEMLAT 2 .rotr r[MEMLAT + 2] .rotp p[MEMLAT + 1] mov ret0 = in0 // return value = dest + .save pr, saved_pr mov saved_pr = pr // save the predicate registers + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body sub tmp = r0, in0 ;; // tmp = -dest mov dest = in0 // dest mov src = in1 // src @@ -127,7 +130,6 @@ ENTRY(strcpy) st1 [dest] = c, 1 br.cloop.dptk .l4 ;; .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter mov pr = saved_pr, -1 // restore the predicate registers br.ret.sptk.many b0 diff --git a/sysdeps/ia64/strlen.S b/sysdeps/ia64/strlen.S index 32079f9b68..9f01c2cf05 100644 --- a/sysdeps/ia64/strlen.S +++ b/sysdeps/ia64/strlen.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strlen() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -36,7 +36,6 @@ #include <sysdep.h> #undef ret -#define saved_pfs r14 #define saved_lc r18 #define str r19 #define pos0 r20 @@ -48,8 +47,11 @@ #define len ret0 ENTRY(strlen) - alloc saved_pfs = ar.pfs, 1, 0, 0, 0 + .prologue + alloc r2 = ar.pfs, 1, 0, 0, 0 + .save ar.lc, saved_lc mov saved_lc = ar.lc // save the loop counter + .body mov str = in0 mov len = r0 // len = 0 and tmp = 7, in0 // tmp = str % 8 @@ -86,7 +88,6 @@ l2: ld8.s val2 = [str], 8 // don't bomb out here add len = len, tmp;; adds len = -16, len .restore_and_exit: - mov ar.pfs = saved_pfs // restore the PFS mov ar.lc = saved_lc // restore the loop counter br.ret.sptk.many b0 .recovery: diff --git a/sysdeps/ia64/strncmp.S b/sysdeps/ia64/strncmp.S index d24bcdf680..430d357d29 100644 --- a/sysdeps/ia64/strncmp.S +++ b/sysdeps/ia64/strncmp.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strncmp() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -35,13 +35,12 @@ #define s2 in1 #define n in2 -#define saved_pfs r14 #define val1 r15 #define val2 r16 ENTRY(strncmp) - alloc saved_pfs = ar.pfs, 3, 0, 0, 0 + alloc r2 = ar.pfs, 3, 0, 0, 0 mov ret0 = r0 cmp.eq p6, p0 = r0, r0 // set p6 cmp.eq p7, p0 = n, r0 // return immediately if n == 0 @@ -58,6 +57,5 @@ ENTRY(strncmp) (p6) br.cond.sptk .loop sub ret0 = val1, val2 .restore_and_exit: - mov ar.pfs = saved_pfs br.ret.sptk.many b0 END(strncmp) diff --git a/sysdeps/ia64/strncpy.S b/sysdeps/ia64/strncpy.S index 96f19c47fa..ae2e9a4561 100644 --- a/sysdeps/ia64/strncpy.S +++ b/sysdeps/ia64/strncpy.S @@ -1,6 +1,6 @@ /* Optimized version of the standard strncpy() function. This file is part of the GNU C Library. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Dan Pop <Dan.Pop@cern.ch>. The GNU C Library is free software; you can redistribute it and/or @@ -33,8 +33,8 @@ #include <sysdep.h> #undef ret -#define saved_pfs loc0 -#define saved_b0 loc1 +#define saved_b0 loc0 +#define saved_pfs loc1 #define saved_pr loc2 #define saved_lc loc3 #define tmp loc4 @@ -47,10 +47,14 @@ #define rc ret0 ENTRY(strncpy) + .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(3) alloc saved_pfs = ar.pfs, 3, 6, 3, 0 mov saved_b0 = b0 + .save pr, saved_pr mov saved_pr = pr + .save ar.lc, saved_lc mov saved_lc = ar.lc + .body cmp.gtu p6, p0 = 24, n (p6) br.cond.spnt .cpyfew mov out0 = src |