summary refs log tree commit diff
path: root/sysdeps/i386/i586/lshift.S
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
committerJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
commit0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch)
tree2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /sysdeps/i386/i586/lshift.S
parent7d58530341304d403a6626d7f7a1913165fe2f32 (diff)
downloadglibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.xz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip
2.5-18.1
Diffstat (limited to 'sysdeps/i386/i586/lshift.S')
-rw-r--r--sysdeps/i386/i586/lshift.S37
1 files changed, 36 insertions, 1 deletions
diff --git a/sysdeps/i386/i586/lshift.S b/sysdeps/i386/i586/lshift.S
index 59d587934e..bc73ee6f3c 100644
--- a/sysdeps/i386/i586/lshift.S
+++ b/sysdeps/i386/i586/lshift.S
@@ -1,5 +1,5 @@
 /* Pentium optimized __mpn_lshift --
-   Copyright (C) 1992, 94, 95, 96, 97, 98, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1992,94,95,96,97,98,2000,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
@@ -33,13 +33,21 @@ ENTRY (BP_SYM (__mpn_lshift))
 	ENTER
 
 	pushl	%edi
+	cfi_adjust_cfa_offset (4)
 	pushl	%esi
+	cfi_adjust_cfa_offset (4)
 	pushl	%ebp
+	cfi_adjust_cfa_offset (4)
+	cfi_rel_offset (ebp, 0)
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 
 	movl	RES(%esp),%edi
+	cfi_rel_offset (edi, 12)
 	movl	S(%esp),%esi
+	cfi_rel_offset (esi, 8)
 	movl	SIZE(%esp),%ebx
+	cfi_rel_offset (ebx, 0)
 	movl	CNT(%esp),%ecx
 #if __BOUNDED_POINTERS__
 	shll	$2, %ebx		/* convert limbs to bytes */
@@ -67,9 +75,11 @@ L(normal):
 	xorl	%eax,%eax
 	shldl	%cl,%edx,%eax		/* compute carry limb */
 	pushl	%eax			/* push carry limb onto stack */
+	cfi_adjust_cfa_offset (4)
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 	jz	L(end)
 
@@ -113,6 +123,7 @@ L(oop):	movl	-28(%edi),%eax		/* fetch destination cache line */
 	jnz	L(oop)
 
 L(end):	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	andl	$7,%ebx
 	jz	L(end2)
 L(oop2):
@@ -130,11 +141,20 @@ L(end2):
 	movl	%edx,(%edi)		/* store it */
 
 	popl	%eax			/* pop carry limb */
+	cfi_adjust_cfa_offset (-4)
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret
@@ -144,12 +164,18 @@ L(end2):
    function is documented to work for overlapping source and destination.
 */
 
+	cfi_adjust_cfa_offset (16)
+	cfi_rel_offset (edi, 12)
+	cfi_rel_offset (esi, 8)
+	cfi_rel_offset (ebp, 4)
+	cfi_rel_offset (ebx, 0)
 L(special):
 	movl	(%esi),%edx
 	addl	$4,%esi
 
 	decl	%ebx
 	pushl	%ebx
+	cfi_adjust_cfa_offset (4)
 	shrl	$3,%ebx
 
 	addl	%edx,%edx
@@ -199,6 +225,7 @@ L(Loop):
 
 L(Lend):
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
 	sbbl	%eax,%eax		/* save carry in %eax */
 	andl	$7,%ebx
 	jz	L(Lend2)
@@ -223,9 +250,17 @@ L(L1):	movl	%edx,(%edi)		/* store last limb */
 	negl	%eax
 
 	popl	%ebx
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebx)
 	popl	%ebp
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (ebp)
 	popl	%esi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (esi)
 	popl	%edi
+	cfi_adjust_cfa_offset (-4)
+	cfi_restore (edi)
 
 	LEAVE
 	ret