/*
Copyright (c) 1990 The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms are permitted
provided that the above copyright notice and this paragraph are
duplicated in all such forms and that any documentation,
and/or other materials related to such
distribution and use acknowledge that the software was developed
by the University of California, Berkeley.  The name of the
University may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */
#include <picolibc.h>

	.file "setjmp.S"

	.section .text
	.align 1
	.global _setjmp
#ifdef __AM33__
#ifdef __AM33_2__
	.am33_2
#else
	.am33
#endif
#endif
_setjmp:
        mov d0,a0
        mov d2,(0,a0)
        mov d3,(4,a0)
	mov mdr,d1
	mov d1,(8,a0)
        mov a2,(12,a0)
        mov a3,(16,a0)
	mov sp,a1
	mov a1,(20,a0)
#ifdef __AM33__
	add 24,a0
	mov r4,(a0+)
	mov r5,(a0+)
	mov r6,(a0+)
	mov r7,(a0+)
#ifdef __AM33_2__
	fmov fs4,(a0+)
	fmov fs5,(a0+)
	fmov fs6,(a0+)
	fmov fs7,(a0+)
	fmov fs8,(a0+)
	fmov fs9,(a0+)
	fmov fs10,(a0+)
	fmov fs11,(a0+)
	fmov fs12,(a0+)
	fmov fs13,(a0+)
	fmov fs14,(a0+)
	fmov fs15,(a0+)
	fmov fs16,(a0+)
	fmov fs17,(a0+)
	fmov fs18,(a0+)
	fmov fs19,(a0+)
#endif
#endif
        sub d0,d0
	rets

	.global _longjmp
_longjmp:
	mov d0,a0
	mov (8,a0),d2
	mov d2,mdr
        mov (0,a0),d2
        mov (4,a0),d3
        mov (12,a0),a2
        mov (16,a0),a3
	mov (20,a0),a1
	mov a1,sp
#ifdef __AM33__
	add 24,a0
	mov (a0+),r4
	mov (a0+),r5
	mov (a0+),r6
	mov (a0+),r7
#ifdef __AM33_2__
	fmov (a0+),fs4
	fmov (a0+),fs5
	fmov (a0+),fs6
	fmov (a0+),fs7
	fmov (a0+),fs8
	fmov (a0+),fs9
	fmov (a0+),fs10
	fmov (a0+),fs11
	fmov (a0+),fs12
	fmov (a0+),fs13
	fmov (a0+),fs14
	fmov (a0+),fs15
	fmov (a0+),fs16
	fmov (a0+),fs17
	fmov (a0+),fs18
	fmov (a0+),fs19
#endif
#endif
	cmp 0,d1
	bne L1
	mov 1,d1
L1: 
	mov d1,d0
	retf [],0
