Ginstall_cursor.S revision 5abc74b276e25e964deb4da1a9026c5ba4f4c13f
15abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/* libunwind - a platform-independent unwind library
25abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm   Copyright (C) 2001-2003 Hewlett-Packard Co
35abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
45abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
55abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmThis file is part of libunwind.
65abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
75abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmPermission is hereby granted, free of charge, to any person obtaining
85abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidma copy of this software and associated documentation files (the
95abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm"Software"), to deal in the Software without restriction, including
105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmwithout limitation the rights to use, copy, modify, merge, publish,
115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmdistribute, sublicense, and/or sell copies of the Software, and to
125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmpermit persons to whom the Software is furnished to do so, subject to
135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmthe following conditions:
145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmThe above copyright notice and this permission notice shall be
165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmincluded in all copies or substantial portions of the Software.
175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#include "ucontext_i.h"
275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#ifdef UNW_LOCAL_ONLY
295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# include "Lcursor_i.h"
305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# define ia64_install_cursor	_ULia64_install_cursor
315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#else
325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# include "Gcursor_i.h"
335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm# define ia64_install_cursor	_Uia64_install_cursor
345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif
355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define SYS_sigreturn	1181
375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#ifndef UNW_REMOTE_ONLY
395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/*  ia64_install_cursor (const cursor *c, long pri_unat, long *extra)
415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm  Restores the machine-state represented by C and thereby resumes execution
435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm  in that frame.  If the frame or one of its descendants was interrupted
445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm  by a signal, all registers are restored (including the signal mask).
455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm  Otherwise, only the preserved registers, the global-pointer (r1), and
465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm  the exception-arguments (r15-r18) are restored.  */
475abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
485abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define pRet	p6
495abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#define pSig	p7
505abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
515abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	.align 32
525abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	.hidden ia64_install_cursor
535abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	.global ia64_install_cursor
545abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	.proc ia64_install_cursor
555abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidmia64_install_cursor:
565abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	alloc r3 = ar.pfs, 3, 0, 0, 0
575abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	invala
585abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r2 = FR_LOC_OFF, in0
595abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
615abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r16 = [r2], LOC_SIZE	// r16 = loc[IA64_REG_FR16]
625abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m r10 = ar.rsc		// (ar.rsc: ~ 12 cycle latency)
635abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = FR_LOC_OFF + 16, in0
645abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
655abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
665abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r17 = [r2], 2*LOC_SIZE	// r17 = loc[IA64_REG_FR17]
675abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r18 = [r3], 2*LOC_SIZE	// r18 = loc[IA64_REG_FR18]
685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r16 = -4, r16
695abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r19 = [r2], 2*LOC_SIZE	// r19 = loc[IA64_REG_FR19]
725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r20 = [r3], 2*LOC_SIZE	// r20 = loc[IA64_REG_FR20]
735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r17 = -4, r17
745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f16 = [r16]		// f16 restored (don't touch no more)
775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f17 = [r17]		// f17 restored (don't touch no more)
785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r18 = -4, r18
795abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r21 = [r2], 2*LOC_SIZE	// r21 = loc[IA64_REG_FR21]
815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r22 = [r3], 2*LOC_SIZE	// r22 = loc[IA64_REG_FR22]
825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r19 = -4, r19
835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
845abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f18 = [r18]		// f18 restored (don't touch no more)
865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f19 = [r19]		// f19 restored (don't touch no more)
875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r20 = -4, r20
885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r23 = [r2], 2*LOC_SIZE	// r23 = loc[IA64_REG_FR23]
905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r24 = [r3], 2*LOC_SIZE	// r24 = loc[IA64_REG_FR24]
915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r21 = -4, r21
925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f20 = [r20]		// f20 restored (don't touch no more)
955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f21 = [r21]		// f21 restored (don't touch no more)
965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r22 = -4, r22
975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r25 = [r2], 2*LOC_SIZE	// r25 = loc[IA64_REG_FR25]
995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r26 = [r3], 2*LOC_SIZE	// r26 = loc[IA64_REG_FR26]
1005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r23 = -4, r23
1015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f22 = [r22]		// f22 restored (don't touch no more)
1045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f23 = [r23]		// f23 restored (don't touch no more)
1055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r24 = -4, r24
1065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r27 = [r2], 2*LOC_SIZE	// r27 = loc[IA64_REG_FR27]
1085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r28 = [r3], 2*LOC_SIZE	// r28 = loc[IA64_REG_FR28]
1095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r25 = -4, r25
1105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f24 = [r24]		// f24 restored (don't touch no more)
1135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f25 = [r25]		// f25 restored (don't touch no more)
1145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r26 = -4, r26
1155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r29 = [r2], 2*LOC_SIZE	// r29 = loc[IA64_REG_FR29]
1175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r30 = [r3], 2*LOC_SIZE	// r30 = loc[IA64_REG_FR30]
1185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r27 = -4, r27
1195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f26 = [r26]		// f26 restored (don't touch no more)
1225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f27 = [r27]		// f27 restored (don't touch no more)
1235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r28 = -4, r28
1245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r31 = [r2]			// r31 = loc[IA64_REG_FR31]
1265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.unat = in1
1275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r29 = -4, r29
1285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f28 = [r28]		// f28 restored (don't touch no more)
1315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f29 = [r29]		// f29 restored (don't touch no more)
1325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r30 = -4, r30
1335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r1 = [in2], 8		// gp restored (don't touch no more)
1355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r8 = SIGCONTEXT_ADDR_OFF, in0
1365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r31 = -4, r31
1375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r8 = [r8]			// r8 = sigcontext_addr
1405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r11 = 0x1c, r10		// clear all but rsc.be and rsc.pl
1415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r2 = PFS_LOC_OFF, in0
1425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f30 = [r30]		// f30 restored (don't touch no more)
1445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f31 = [r31]		// f31 restored (don't touch no more)
1455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = 8, in2
1465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1475abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1485abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8.fill r4 = [in2], 16		// r4 restored (don't touch no more)
1495abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8.fill r5 = [r3], 16		// r5 restored (don't touch no more)
1505abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	cmp.eq pRet, pSig = r0, r8	// sigcontext_addr == NULL?
1515abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1525abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8.fill r6 = [in2], 16		// r6 restored (don't touch no more)
1535abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8.fill r7 = [r3]		// r7 restored (don't touch no more)
1545abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = IP_OFF, in0
1555abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1565abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1575abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r14 = [r2], (B1_LOC_OFF - PFS_LOC_OFF)	// r14 = pfs_loc
1585abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r15 = [r3]			// r15 = ip
1595abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = (B2_LOC_OFF - IP_OFF), r3
1605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1615abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1625abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r16 = [r2], (B3_LOC_OFF - B1_LOC_OFF)	// r16 = b1_loc
1635abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r17= [r3], (B4_LOC_OFF - B2_LOC_OFF)	// r17 = b2_loc
1645abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r14 = -4, r14
1655abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1665abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1675abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r18 = [r2], (B5_LOC_OFF - B3_LOC_OFF)	// r18 = b3_loc
1685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r19 = [r3], (F2_LOC_OFF - B4_LOC_OFF)	// r19 = b4_loc
1695abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r16 = -4, r16
1705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r20 = [r2], (F3_LOC_OFF - B5_LOC_OFF)	// r20 = b5_loc
1735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r21 = [r3], (F4_LOC_OFF - F2_LOC_OFF)	// r21 = f2_loc
1745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r17 = -4, r17
1755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r16 = [r16]			// r16 = *b1_loc
1785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r17 = [r17]			// r17 = *b2_loc
1795abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r18 = -4, r18
1805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r22 = [r2], (F5_LOC_OFF - F3_LOC_OFF)	// r21 = f3_loc
1825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r23 = [r3], (UNAT_LOC_OFF - F4_LOC_OFF)	// r22 = f4_loc
1835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r19 = -4, r19
1845abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r18 = [r18]			// r18 = *b3_loc
1875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r19 = [r19]			// r19 = *b4_loc
1885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r20 = -4, r20
1895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r24 = [r2], (LC_LOC_OFF - F5_LOC_OFF)	// r24 = f5_loc
1915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r25 = [r3], (FPSR_LOC_OFF - UNAT_LOC_OFF)	// r25 = unat_loc
1925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r21 = -4, r21
1935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
1945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r22 = -4, r22
1965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r23 = -4, r23
1975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r24 = -4, r24
1985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
1995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r20 = [r20]			// r20 = *b5_loc
2005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f2 = [r21]		// f2 restored (don't touch no more)
2015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b1 = r16			// b1 restored (don't touch no more)
2025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f3 = [r22]		// f3 restored (don't touch no more)
2055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f4 = [r23]		// f4 restored (don't touch no more)
2065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b2 = r17			// b2 restored (don't touch no more)
2075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r26 = [r2], (RNAT_LOC_OFF - LC_LOC_OFF)	// r26 = lc_loc
2095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r27 = [r3]			// r27 = fpsr_loc
2105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r25 = -4, r25
2115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = (PSP_OFF - FPSR_LOC_OFF), r3
2135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
2145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
2155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f5 = [r24]		// f5 restored (don't touch no more)
2185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pRet)	ld8 r25 = [r25]			// r25 = *unat_loc
2195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b3 = r18			// b3 restored (don't touch no more)
2205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r28 = [r2], (BSP_OFF - RNAT_LOC_OFF)	// r28 = rnat_loc
2225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r29 = [r3], (PR_OFF - PSP_OFF)		// r29 = sp
2235abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b4 = r19			// b4 restored (don't touch no more)
2245abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2255abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r26 = -4, r26
2265abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r27 = -4, r27
2275abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b5 = r20			// b5 restored (don't touch no more)
2285abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2295abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2305abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r26 = [r26]			// r26 = *lc_loc
2315abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r27 = [r27]			// r27 = *fpsr_loc
2325abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	and r28 = -4, r28
2335abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2345abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r30 = [r2]			// r30 = bsp
2355abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r31 = [r3]			// r31 = pr
2365abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov rp = r15
2375abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2385abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2395abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r28 = [r28]			// r28 = rnat
2405abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.rsc = r11		// put RSE into enforced lazy mode
2415abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.i ar.lc = r26		// lc restored (don't touch no more)
2425abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2435abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2445abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	loadrs				// drop dirty partition
2455abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2465abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.bspstore = r30		// restore register backing-store
2475abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = 8, in2			// r3 = &extra[r16]
2485abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2495abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2505abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pRet)	mov.m ar.fpsr = r27		// fpsr restored (don't touch no more)
2515abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.rnat = r28
2525abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm(pSig)	br.cond.dpnt.many .next
2535abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2545abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/****** Return via br.ret: */
2555abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2565abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r14 = [r14]			// r14 = *pfs_loc
2575abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r15 = [in2], 16		// r15 restored (don't touch no more)
2585abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov pr = r31, -1		// pr restored (don't touch no more)
2595abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2605abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2615abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r16 = [r3], 16		// r16 restored (don't touch no more)
2625abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r17 = [in2]			// r17 restored (don't touch no more)
2635abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop.i 0
2645abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2655abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2665abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r18 = [r3]			// r18 restored (don't touch no more)
2675abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.rsc = r10		// restore original ar.rsc
2685abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov sp = r29
2695abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2705abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.m ar.unat = r25		// unat restored (don't touch no more)
2715abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov.i ar.pfs = r14
2725abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	br.ret.sptk.many rp
2735abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2745abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2755abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm/****** Return via sigreturn(): */
2765abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2775abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm.next:	mov.m ar.rsc = r10		// restore original ar.rsc
2785abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r2 = (SC_FR + 6*16), r8
2795abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r3 = (SC_FR + 7*16), r8
2805abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2815abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2825abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f6 = [r2], 32
2835abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f7 = [r3], 32
2845abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
2855abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2865abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2875abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f8 = [r2], 32
2885abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f9 = [r3], 32
2895abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
2905abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2915abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2925abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f10 = [r2], 32
2935abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f11 = [r3], 32
2945abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
2955abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
2965abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
2975abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f12 = [r2], 32
2985abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f13 = [r3], 32
2995abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	nop 0
3005abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
3015abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
3025abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f14 = [r2], 32
3035abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ldf.fill f15 = [r3], 32
3045abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov sp = r29
3055abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
3065abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
3075abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#if NEW_SYSCALL
3085abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	add r2 = 8, tp;;
3095abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	ld8 r2 = [r2]
3105abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov r15 = SYS_sigreturn
3115abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov b7 = r2
3125abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	br.call.sptk.many b6 = b7
3135abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	;;
3145abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#else
3155abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	mov r15 = SYS_sigreturn
3165abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	break 0x100000
3175abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif
3185abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	break 0				// bug out if sigreturn() returns
3195abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
3205abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm	.endp ia64_install_cursor
3215abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm
3225abc74b276e25e964deb4da1a9026c5ba4f4c13fhomeip.net!davidm#endif /* !UNW_REMOTE_ONLY */
323