1234567891011121314151617181920212223242526272829303132333435363738 |
- /*
- * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
- *
- * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
- */
- #include <sysdep.h>
- ;@ r0 = jump buffer from which regs will be restored
- ;@ r1 = value that setjmp( ) will return due to this longjmp
- ENTRY(__longjmp)
- ld_s r13, [r0]
- ld_s r14, [r0,4]
- ld r15, [r0,8]
- ld r16, [r0,12]
- ld r17, [r0,16]
- ld r18, [r0,20]
- ld r19, [r0,24]
- ld r20, [r0,28]
- ld r21, [r0,32]
- ld r22, [r0,36]
- ld r23, [r0,40]
- ld r24, [r0,44]
- ld r25, [r0,48]
- ld blink, [r0,60] ; load it early enough to not stall the pipeline
- ld fp, [r0,52]
- ld sp, [r0,56]
- mov.f r0, r1 ; get the setjmp return value(due to longjmp) in place
- j.d [blink] ; to caller of setjmp location, right after the call
- mov.z r0, 1 ; can't let setjmp return 0 when it is due to longjmp
- END(__longjmp)
- libc_hidden_def(__longjmp)
|