Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Apr 2003 16:28:29 -0700 (PDT)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 29563 for review
Message-ID:  <200304232328.h3NNSTHi073685@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=29563

Change 29563 by peter@peter_daintree on 2003/04/23 16:27:33

	initial shot at setjmp/longjmp

Affected files ...

.. //depot/projects/hammer/lib/libc/x86_64/gen/Makefile.inc#3 edit
.. //depot/projects/hammer/lib/libc/x86_64/gen/setjmp.S#2 edit

Differences ...

==== //depot/projects/hammer/lib/libc/x86_64/gen/Makefile.inc#3 (text+ko) ====

@@ -1,4 +1,4 @@
 #	@(#)Makefile.inc	8.1 (Berkeley) 6/4/93
 # $FreeBSD: src/lib/libc/i386/gen/Makefile.inc,v 1.18 2002/11/16 06:39:11 deischen Exp $
 
-SRCS+=	frexp.c infinity.c isinf.c
+SRCS+=	setjmp.S frexp.c infinity.c isinf.c

==== //depot/projects/hammer/lib/libc/x86_64/gen/setjmp.S#2 (text+ko) ====

@@ -53,51 +53,57 @@
 #include "SYS.h"
 
 ENTRY(setjmp)
-	movl	4(%esp),%ecx
+	pushq	%rdi
+	movq	%rdi,%rcx
 	PIC_PROLOGUE
-	leal	28(%ecx), %eax
-	pushl	%eax			/* (sigset_t*)oset */
-	pushl	$0			/* (sigset_t*)set  */
-	pushl	$1			/* SIG_BLOCK       */
+	leaq	72(%rcx),%rdi		/* (sigset_t*)oset */
+	movq	$0,%rsi			/* (sigset_t*)set  */
+	movq	$1,%rdx			/* SIG_BLOCK       */
 	call	PIC_PLT(CNAME(_sigprocmask))
-	addl	$12,%esp
 	PIC_EPILOGUE
-	movl	4(%esp),%ecx
-	movl	0(%esp),%edx
-	movl	%edx, 0(%ecx)
-	movl	%ebx, 4(%ecx)
-	movl	%esp, 8(%ecx)
-	movl	%ebp,12(%ecx)
-	movl	%esi,16(%ecx)
-	movl	%edi,20(%ecx)
-	fnstcw	24(%ecx)
-	xorl	%eax,%eax
+	popq	%rdi
+	movq	%rdi,%rcx
+	movq	0(%rsp),%rdx		/* retval */
+	movq	%rdx, 0(%rcx)		/* retval */
+	movq	%rbx, 8(%rcx)
+	movq	%rsp,16(%rcx)
+	movq	%rbp,24(%rcx)
+	movq	%r12,32(%rcx)
+	movq	%r13,40(%rcx)
+	movq	%r14,48(%rcx)
+	movq	%r15,56(%rcx)
+	fnstcw	64(%rcx)
+	xorq	%rax,%rax
 	ret
 
 	.weak CNAME(longjmp)
 	.set CNAME(longjmp),CNAME(__longjmp)
 ENTRY(__longjmp)
-	movl	4(%esp),%edx
+	pushq	%rdi
+	pushq	%rsi
+	movq	%rdi,%rdx
 	PIC_PROLOGUE
-	pushl	$0			/* (sigset_t*)oset */
-	leal	28(%edx), %eax
-	pushl	%eax			/* (sigset_t*)set  */
-	pushl	$3			/* SIG_SETMASK     */
+	movq	$0,%rdi			/* (sigset_t*)oset */
+	leaq	72(%rdx),%rsi		/* (sigset_t*)set  */
+	movq	$3,%rdx			/* SIG_SETMASK     */
 	call	PIC_PLT(CNAME(_sigprocmask))
-	addl	$12,%esp
 	PIC_EPILOGUE
-	movl	4(%esp),%edx
-	movl	8(%esp),%eax
-	movl	0(%edx),%ecx
-	movl	4(%edx),%ebx
-	movl	8(%edx),%esp
-	movl	12(%edx),%ebp
-	movl	16(%edx),%esi
-	movl	20(%edx),%edi
+	popq	%rsi
+	popq	%rdi			/* jmpbuf */
+	movq	%rdi,%rdx
+	movq	%rsi,%rax		/* retval */
+	movq	0(%rdx),%rcx
+	movq	8(%rdx),%rbx
+	movq	16(%rdx),%rsp
+	movq	24(%rdx),%rbp
+	movq	32(%rdx),%r12
+	movq	40(%rdx),%r13
+	movq	48(%rdx),%r14
+	movq	56(%rdx),%r15
 	fninit
-	fldcw	24(%edx)
-	testl	%eax,%eax
+	fldcw	64(%rdx)
+	testq	%rax,%rax
 	jnz	1f
-	incl	%eax
-1:	movl	%ecx,0(%esp)
+	incq	%rax
+1:	movq	%rcx,0(%rsp)
 	ret



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200304232328.h3NNSTHi073685>