diff options
Diffstat (limited to 'sysdeps/i386/i686/memcmp.S')
-rw-r--r-- | sysdeps/i386/i686/memcmp.S | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/sysdeps/i386/i686/memcmp.S b/sysdeps/i386/i686/memcmp.S index ef57acdee8..4bd5394bec 100644 --- a/sysdeps/i386/i686/memcmp.S +++ b/sysdeps/i386/i686/memcmp.S @@ -1,5 +1,5 @@ /* Compare two memory blocks for differences in the first COUNT bytes. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -26,8 +26,11 @@ #define BLK1 PARMS #define BLK2 BLK1+PTR_SIZE #define LEN BLK2+PTR_SIZE -#define ENTRANCE pushl %ebx; ENTER -#define RETURN popl %ebx; LEAVE; ret +#define ENTRANCE pushl %ebx; cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (ebx, 0); ENTER +#define RETURN popl %ebx; cfi_adjust_cfa_offset (-4); \ + cfi_restore (ebx); LEAVE; ret; \ + cfi_adjust_cfa_offset (4); cfi_rel_offset (ebx, 0); /* Load an entry in a jump table into EBX. TABLE is a jump table with relative offsets. INDEX is a register contains the index @@ -77,11 +80,15 @@ L(neq): sbbl $-1, %eax RETURN + cfi_adjust_cfa_offset (4) + cfi_rel_offset (ebx, 0) L(not_1): jl L(bye) /* LEN == 0 */ pushl %esi + cfi_adjust_cfa_offset (4) movl %eax, %esi + cfi_rel_offset (esi, 0) cmpl $32, %ecx; jge L(32bytesormore) /* LEN => 32 */ @@ -128,9 +135,14 @@ L(4bytes): jne L(find_diff) L(0bytes): popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) xorl %eax, %eax RETURN + cfi_adjust_cfa_offset (8) + cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(29bytes): movl -29(%esi), %eax movl -29(%edx), %ecx @@ -171,9 +183,14 @@ L(1bytes): cmpb -1(%edx), %al jne L(set) popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) xorl %eax, %eax RETURN + cfi_adjust_cfa_offset (8) + cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(30bytes): movl -30(%esi), %eax movl -30(%edx), %ecx @@ -217,9 +234,14 @@ L(2bytes): cmpl %ecx, %eax jne L(set) popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) xorl %eax, %eax RETURN + cfi_adjust_cfa_offset (8) + cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) L(31bytes): movl -31(%esi), %eax movl -31(%edx), %ecx @@ -266,9 +288,14 @@ L(3bytes): cmpb -1(%edx), %al jne L(set) popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) xorl %eax, %eax RETURN + cfi_adjust_cfa_offset (8) + cfi_rel_offset (esi, 0) + cfi_rel_offset (ebx, 4) ALIGN (4) /* ECX >= 32. */ L(32bytesormore): @@ -349,7 +376,10 @@ L(set): sbbl %eax, %eax sbbl $-1, %eax popl %esi + cfi_adjust_cfa_offset (-4) + cfi_restore (esi) RETURN +END (BP_SYM (memcmp)) .section .rodata ALIGN (2) @@ -387,7 +417,6 @@ L(table_32bytes) : .long L(30bytes) - . + 0x78 .long L(31bytes) - . + 0x7c -END (BP_SYM (memcmp)) #undef bcmp weak_alias (BP_SYM (memcmp), BP_SYM (bcmp)) |