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.
This commit is contained in:
Ulrich Drepper 2001-04-11 19:57:49 +00:00
parent 87d5c92d11
commit 8ee3551551
16 changed files with 95 additions and 64 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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:

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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)

View File

@ -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