Home | History | Annotate | Line # | Download | only in ia64
      1 /*	$NetBSD: setjmp.S,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
      5  * This program and the accompanying materials are licensed and made
      6 available
      7  * under the terms and conditions of the BSD License which accompanies
      8 this
      9  * distribution.  The full text of the license may be found at
     10  * http://opensource.org/licenses/bsd-license.php.
     11  *
     12  * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
     13 BASIS,
     14  * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
     15  * IMPLIED.
     16  */
     17 	.text
     18 	.globl	setjmp
     19 	.type	setjmp, @function
     20 setjmp:
     21 	alloc	loc0 = ar.pfs, 1, 2, 1, 0
     22 	;;
     23 	mov	r14 = ar.unat
     24 	mov	r15 = ar.bsp
     25 	add	r10 = 0x10*20, in0
     26 	;;
     27 	stf.spill.nta	[in0] = f2, 0x10
     28 	st8.spill.nta	[r10] = r4, 8
     29 	mov		r21 = b1
     30 	;;
     31 	stf.spill.nta	[in0] = f3, 0x10
     32 	st8.spill.nta	[r10] = r5, 8
     33 	mov		r22 = b2
     34 	;;
     35 	stf.spill.nta	[in0] = f4, 0x10
     36 	st8.spill.nta	[r10] = r6, 8
     37 	mov		r23 = b3
     38 	;;
     39 	stf.spill.nta	[in0] = f5, 0x10
     40 	st8.spill.nta	[r10] = r7, 8
     41 	mov		r24 = b4
     42 	;;
     43 	stf.spill.nta	[in0] = f16, 0x10
     44 	st8.spill.nta	[r10] = sp, 8
     45 	mov		r25 = b5
     46 	;;
     47 	stf.spill.nta	[in0] = f17, 0x10
     48 	st8.nta		[r10] = loc1, 8
     49 	mov		r16 = pr
     50 	;;
     51 	stf.spill.nta	[in0] = f18, 0x10
     52 	st8.nta		[r10] = r21, 8
     53 	mov		r17 = ar.lc
     54 	;;
     55 	stf.spill.nta	[in0] = f19, 0x10
     56 	st8.nta		[r10] = r22, 8
     57 	;;
     58 	stf.spill.nta	[in0] = f20, 0x10
     59 	st8.nta		[r10] = r23, 8
     60 	;;
     61 	stf.spill.nta	[in0] = f21, 0x10
     62 	st8.nta		[r10] = r24, 8
     63 	;;
     64 	stf.spill.nta	[in0] = f22, 0x10
     65 	st8.nta		[r10] = r25, 8
     66 	;;
     67 	stf.spill.nta	[in0] = f23, 0x10
     68 	mov		r18 = ar.unat
     69 	;;
     70 	stf.spill.nta	[in0] = f24, 0x10
     71 	st8.nta		[r10] = r14, 8
     72 	;;
     73 	stf.spill.nta	[in0] = f25, 0x10
     74 	st8.nta		[r10] = r18, 8
     75 	;;
     76 	stf.spill.nta	[in0] = f26, 0x10
     77 	st8.nta		[r10] = loc0, 8
     78 	;;
     79 	stf.spill.nta	[in0] = f27, 0x10
     80 	st8.nta		[r10] = r15, 8
     81 	mov		r8 = 0
     82 	;;
     83 	stf.spill.nta	[in0] = f28, 0x10
     84 	mov		r19 = ar.fpsr
     85 	;;
     86 	stf.spill.nta	[in0] = f29, 0x10
     87 	st8.nta		[r10] = r16, 8
     88 	mov		ar.pfs = loc0
     89 	;;
     90 	stf.spill.nta	[in0] = f30, 0x10
     91 	st8.nta		[r10] = r17, 8
     92 	mov		b0 = loc1
     93 	;;
     94 	stf.spill.nta	[in0] = f31, 0x10
     95 	st8.nta		[r10] = r19
     96 	;;
     97 	mov		ar.unat = r14
     98 	br.ret.sptk	b0
     99 	;;
    100 
    101 	.globl	longjmp
    102 	.type	longjmp, @function
    103 	.regstk 2, 0, 0, 0
    104 longjmp:
    105 	add		r10 = 0x10*20 + 8*14, in0
    106 	movl		r2  = ~((((1<<14) - 1) << 16) | 3)
    107 	;;
    108 	ld8.nt1		r14 = [r10], -8*2
    109 	mov		r15 = ar.bspstore
    110 	;;
    111 	ld8.nt1		r17 = [r10], -8
    112 	mov		r16 = ar.rsc
    113 	cmp.leu		p6  = r14, r15
    114 	;;
    115 	ld8.nt1		r18 = [r10], -8
    116 	ld8.nt1		r25 = [r10], -8
    117 	and		r2  = r16, r2
    118 	;;
    119 	ldf.fill.nt1	f2  = [in0], 0x10
    120 	ld8.nt1		r24 = [r10], -8
    121 	mov		b5  = r25
    122 	;;
    123 	mov		ar.rsc = r2
    124 	ld8.nt1		r23 = [r10], -8
    125 	mov		b4 = r24
    126 	;;
    127 	ldf.fill.nt1	f3 = [in0], 0x10
    128 	mov		ar.unat = r17
    129 (p6)	br.spnt.many	_skip_flushrs
    130 	;;
    131 	flushrs
    132 	mov		r15 = ar.bsp
    133 	;;
    134 _skip_flushrs:
    135 	mov		r31 = ar.rnat
    136 	loadrs
    137 	;;
    138 	ldf.fill.nt1	f4  = [in0], 0x10
    139 	ld8.nt1		r22 = [r10], -8
    140 	dep		r2  = -1, r14, 3, 6
    141 	;;
    142 	ldf.fill.nt1	f5  = [in0], 0x10
    143 	ld8.nt1		r21 = [r10], -8
    144 	cmp.ltu		p6  = r2, r15
    145 	;;
    146 	ld8.nt1		r20 = [r10], -0x10
    147 (p6)	ld8.nta		r31 = [r2]
    148 	mov		b3  = r23
    149 	;;
    150 	ldf.fill.nt1	f16 = [in0], 0x10
    151 	ld8.fill.nt1	r7  = [r10], -8
    152 	mov		b2  = r22
    153 	;;
    154 	ldf.fill.nt1	f17 = [in0], 0x10
    155 	ld8.fill.nt1	r6  = [r10], -8
    156 	mov		b1  = r21
    157 	;;
    158 	ldf.fill.nt1	f18 = [in0], 0x10
    159 	ld8.fill.nt1	r5  = [r10], -8
    160 	mov		b0  = r20
    161 	;;
    162 	ldf.fill.nt1	f19 = [in0], 0x10
    163 	ld8.fill.nt1	r4  = [r10], 8*13
    164 	;;
    165 	ldf.fill.nt1	f20 = [in0], 0x10
    166 	ld8.nt1		r19 = [r10], 0x10
    167 	;;
    168 	ldf.fill.nt1	f21 = [in0], 0x10
    169 	ld8.nt1		r26 = [r10], 8
    170 	mov		ar.pfs = r19
    171 	;;
    172 	ldf.fill.nt1	f22 = [in0], 0x10
    173 	ld8.nt1		r27 = [r10], 8
    174 	mov		pr  = r26, -1
    175 	;;
    176 	ldf.fill.nt1	f23 = [in0], 0x10
    177 	ld8.nt1		r28 = [r10], -17*8 - 0x10
    178 	mov		ar.lc = r27
    179 	;;
    180 	ldf.fill.nt1	f24 = [in0], 0x10
    181 	ldf.fill.nt1	f25 = [in0], 0x10
    182 	mov		r8  = in1
    183 	;;
    184 	ldf.fill.nt1	f26 = [in0], 0x10
    185 	ldf.fill.nt1	f31 = [r10], -0x10
    186 	;;
    187 	ldf.fill.nt1	f27 = [in0], 0x10
    188 	ldf.fill.nt1	f30 = [r10], -0x10
    189 	;;
    190 	ldf.fill.nt1	f28 = [in0]
    191 	ldf.fill.nt1	f29 = [r10], 0x10*3 + 8*4
    192 	;;
    193 	ld8.fill.nt1	sp  = [r10]
    194 	mov		ar.unat = r18
    195 	;;
    196 	mov		ar.bspstore = r14
    197 	mov		ar.rnat = r31
    198 	;;
    199 	invala
    200 	mov		ar.rsc = r16
    201 	br.ret.sptk	b0
    202