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