1 /// @file 2 /// Contains an implementation of longjmp for the Itanium-based architecture. 3 /// 4 /// Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 5 /// This program and the accompanying materials 6 /// are licensed and made available under the terms and conditions of the BSD License 7 /// which accompanies this distribution. The full text of the license may be found at 8 /// http://opensource.org/licenses/bsd-license.php. 9 /// 10 /// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 /// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 /// 13 /// Module Name: longjmp.s 14 /// 15 /// 16 17 .auto 18 .text 19 20 ASM_GLOBAL InternalAssertJumpBuffer 21 .type InternalAssertJumpBuffer, @function 22 23 .proc SetJump 24 .type SetJump, @function 25 SetJump:: 26 alloc loc0 = ar.pfs, 1, 2, 1, 0 27 mov loc1 = b0 28 mov out0 = in0 29 30 brl.call.sptk.many b0 = InternalAssertJumpBuffer 31 32 mov r14 = ar.unat 33 mov r15 = ar.bsp 34 add r10 = 0x10*20, in0 35 36 stf.spill.nta [in0] = f2, 0x10 37 st8.spill.nta [r10] = r4, 8 38 mov r21 = b1 39 40 stf.spill.nta [in0] = f3, 0x10 41 st8.spill.nta [r10] = r5, 8 42 mov r22 = b2 43 44 stf.spill.nta [in0] = f4, 0x10 45 st8.spill.nta [r10] = r6, 8 46 mov r23 = b3 47 48 stf.spill.nta [in0] = f5, 0x10 49 st8.spill.nta [r10] = r7, 8 50 mov r24 = b4 51 52 stf.spill.nta [in0] = f16, 0x10 53 st8.spill.nta [r10] = sp, 8 54 mov r25 = b5 55 56 stf.spill.nta [in0] = f17, 0x10 57 st8.nta [r10] = loc1, 8 58 mov r16 = pr 59 60 stf.spill.nta [in0] = f18, 0x10 61 st8.nta [r10] = r21, 8 62 mov r17 = ar.lc 63 64 stf.spill.nta [in0] = f19, 0x10 65 st8.nta [r10] = r22, 8 66 67 stf.spill.nta [in0] = f20, 0x10 68 st8.nta [r10] = r23, 8 69 70 stf.spill.nta [in0] = f21, 0x10 71 st8.nta [r10] = r24, 8 72 73 stf.spill.nta [in0] = f22, 0x10 74 st8.nta [r10] = r25, 8 75 76 stf.spill.nta [in0] = f23, 0x10 77 mov r18 = ar.unat 78 79 stf.spill.nta [in0] = f24, 0x10 80 st8.nta [r10] = r14, 8 // UNAT 81 82 stf.spill.nta [in0] = f25, 0x10 83 st8.nta [r10] = r18, 8 // UNAT after spill 84 85 stf.spill.nta [in0] = f26, 0x10 86 st8.nta [r10] = loc0, 8 // PFS 87 88 stf.spill.nta [in0] = f27, 0x10 89 st8.nta [r10] = r15, 8 // BSP 90 mov r8 = 0 91 92 stf.spill.nta [in0] = f28, 0x10 93 mov r19 = ar.fpsr 94 95 stf.spill.nta [in0] = f29, 0x10 96 st8.nta [r10] = r16, 8 // PR 97 mov ar.pfs = loc0 98 99 stf.spill.nta [in0] = f30, 0x10 100 st8.nta [r10] = r17, 8 // LC 101 mov b0 = loc1 102 103 stf.spill.nta [in0] = f31, 0x10 104 st8.nta [r10] = r19 // FPSR 105 106 mov ar.unat = r14 107 br.ret.sptk b0 108 .endp SetJump 109