diff options
Diffstat (limited to 'sysdeps/i386/strtok.S')
-rw-r--r-- | sysdeps/i386/strtok.S | 102 |
1 files changed, 52 insertions, 50 deletions
diff --git a/sysdeps/i386/strtok.S b/sysdeps/i386/strtok.S index 19f62cf4e0..3d09dd7406 100644 --- a/sysdeps/i386/strtok.S +++ b/sysdeps/i386/strtok.S @@ -1,25 +1,26 @@ /* strtok (str, delim) -- Return next DELIM separated token from STR. -For Intel 80x86, x>=3. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + For Intel 80x86, x>=3. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include <sysdep.h> +#include "asm-syntax.h" /* This file can be used for three variants of the strtok function: @@ -56,15 +57,16 @@ ENTRY (FUNCTION) #if !defined (USE_AS_STRTOK_R) && defined (PIC) pushl %ebx /* Save PIC register. */ - call Lhere -Lhere: popl %ebx - addl $_GLOBAL_OFFSET_TABLE_+[.-Lhere], %ebx + call L(here) +L(here): + popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx #endif /* If the pointer is NULL we have to use the stored value of the last run. */ cmpl $0, %edx - jne L0 + jne L(0) #ifdef USE_AS_STRTOK_R /* The value is stored in the third argument. */ @@ -80,7 +82,7 @@ Lhere: popl %ebx # endif #endif -L0: +L(0): /* First we create a table with flags for all possible characters. For the ASCII (7bit/8bit) or ISO-8859-X character sets which are supported by the C string functions we have 256 characters. @@ -157,28 +159,28 @@ L0: Although all the following instruction only modify %cl we always have a correct zero-extended 32-bit value in %ecx. */ -L2: movb (%eax), %cl /* get byte from stopset */ +L(2): movb (%eax), %cl /* get byte from stopset */ testb %cl, %cl /* is NUL char? */ - jz L1 /* yes => start compare loop */ + jz L(1) /* yes => start compare loop */ movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ movb 1(%eax), %cl /* get byte from stopset */ testb $0xff, %cl /* is NUL char? */ - jz L1 /* yes => start compare loop */ + jz L(1) /* yes => start compare loop */ movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ movb 2(%eax), %cl /* get byte from stopset */ testb $0xff, %cl /* is NUL char? */ - jz L1 /* yes => start compare loop */ + jz L(1) /* yes => start compare loop */ movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ movb 3(%eax), %cl /* get byte from stopset */ addl $4, %eax /* increment stopset pointer */ movb %cl, (%esp,%ecx) /* set corresponding byte in stopset table */ testb $0xff, %cl /* is NUL char? */ - jnz L2 /* no => process next dword from stopset */ + jnz L(2) /* no => process next dword from stopset */ -L1: leal -4(%edx), %eax /* prepare loop */ +L(1): leal -4(%edx), %eax /* prepare loop */ /* We use a neat trick for the following loop. Normally we would have to test for two termination conditions @@ -189,68 +191,68 @@ L1: leal -4(%edx), %eax /* prepare loop */ value in the table. The value of NUL is NUL so the loop terminates for NUL in every case. */ -L3: addl $4, %eax /* adjust pointer for full loop round */ +L(3): addl $4, %eax /* adjust pointer for full loop round */ movb (%eax), %cl /* get byte from string */ testb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jz L4 /* no => start of token */ + jz L(4) /* no => start of token */ movb 1(%eax), %cl /* get byte from string */ testb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jz L5 /* no => start of token */ + jz L(5) /* no => start of token */ movb 2(%eax), %cl /* get byte from string */ testb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jz L6 /* no => start of token */ + jz L(6) /* no => start of token */ movb 3(%eax), %cl /* get byte from string */ testb %cl, (%esp,%ecx) /* is it contained in stopset? */ - jnz L3 /* yes => start of loop */ + jnz L(3) /* yes => start of loop */ incl %eax /* adjust pointer */ -L6: incl %eax -L5: incl %eax +L(6): incl %eax +L(5): incl %eax /* Now we have to terminate the string. */ -L4: leal -4(%eax), %edx /* We use %EDX for the next run. */ +L(4): leal -4(%eax), %edx /* We use %EDX for the next run. */ -L7: addl $4, %edx /* adjust pointer for full loop round */ +L(7): addl $4, %edx /* adjust pointer for full loop round */ movb (%edx), %cl /* get byte from string */ cmpb %cl, (%esp,%ecx) /* is it contained in skipset? */ - je L8 /* yes => return */ + je L(8) /* yes => return */ movb 1(%edx), %cl /* get byte from string */ cmpb %cl, (%esp,%ecx) /* is it contained in skipset? */ - je L9 /* yes => return */ + je L(9) /* yes => return */ movb 2(%edx), %cl /* get byte from string */ cmpb %cl, (%esp,%ecx) /* is it contained in skipset? */ - je L10 /* yes => return */ + je L(10) /* yes => return */ movb 3(%edx), %cl /* get byte from string */ cmpb %cl, (%esp,%ecx) /* is it contained in skipset? */ - jne L7 /* no => start loop again */ + jne L(7) /* no => start loop again */ incl %edx /* adjust pointer */ -L10: incl %edx -L9: incl %edx +L(10): incl %edx +L(9): incl %edx -L8: /* Remove the stopset table. */ +L(8): /* Remove the stopset table. */ addl $256, %esp cmpl %eax, %edx - je LreturnNULL /* There was no token anymore. */ + je L(returnNULL) /* There was no token anymore. */ movb $0, (%edx) /* Terminate string. */ /* Are we at end of string? */ cmpb $0, %cl - je L11 + je L(11) incl %edx -L11: +L(11): /* Store the pointer to the next character. */ #ifdef USE_AS_STRTOK_R @@ -266,7 +268,7 @@ L11: #endif ret -LreturnNULL: +L(returnNULL): xorl %eax, %eax /* Store current pointer for next round. */ |