1ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.globl func_add1, func_add1_end
2ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.proc func_add1
3ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidmfunc_add1:
416192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	add r8 = 1, r32
5ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	nop.i 0
6ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	br.ret.sptk.many rp
7ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm}
8ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidmfunc_add1_end:
9ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.endp func_add1
10ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm
11ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.globl func_add3, func_add3_end
12ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.proc func_add3
13ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidmfunc_add3:
1416192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	alloc loc0 = ar.pfs, 2, 1, 2, 0
150d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov r2 = sp
160d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	add sp = -16, sp
170d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
1816192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mii;	ld8 r8 = [in1], 8		// load the function pointer
190d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov r3 = rp
200d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov rp = loc0			// trash rp
21ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm}	;;
2216192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	ld8 r9 = [r8], 8		// load the entry-point
230d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	st8 [r2] = r3
24ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	mov out0 = in0
25ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm}	;;
2616192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mii;	ld8 gp = [r8]			// load the gp
27ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	mov b6 = r9
280d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov out1 = in1
290d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}
3016192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	nop 0
310d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	nop 0
32ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	br.call.sptk rp = b6
33ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm}
3416192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	add r2 = 16, sp
350d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	;;
360d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	ld8 r3 = [r2]			// r3 = saved rp
370d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov ar.pfs = loc0
380d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
3916192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mii;	nop 0
400d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov rp = r3
410d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	adds sp = 16, sp
420d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
4316192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	st8 [sp] = in0			// trash rp save location
440d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	add r8 = 2, r8
45ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	br.ret.sptk.many rp
46ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm}
47ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidmfunc_add3_end:
48ea8a74ba29d4316f5b3337293b75a71a9eeaa8ddhp.com!davidm	.endp func_add3
490d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm
500d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	.globl func_vframe, func_vframe_end
510d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	.proc func_vframe
520d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidmfunc_vframe:
5316192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mii;	alloc r16 = ar.pfs, 1, 2, 0, 0	// 0
540d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov loc0 = rp
550d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov loc1 = sp
560d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
5716192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	sub sp = sp, in0
580d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	st8 [loc1] = r16
590d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov r2 = -99			// 0
600d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
6116192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mii;	nop 0
620d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov rp = r2
630d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov ar.pfs = r0
640d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}
6516192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	mov r16 = r2
660d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	tbit.nz p6, p0 = in0, 4
6716192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm(p6)	br.cond.sptk.many .exit
680d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
6916192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	ld8 r16 = [loc1]
700d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	;;
710d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov r3 = loc0			// 8 move saved rp to r3
720d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov ar.pfs = r16
730d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
7416192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	mov sp = loc1			// 10
750d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	st8 [loc1] = r0			// trash saved pfs
760d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov loc0 = r2
770d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
7816192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	mov r8 = 10
790d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov rp = r3
800d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	br.ret.sptk.many rp
810d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}
8216192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm.exit:
8316192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	ld8 r16 = [loc1]
840d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	;;
850d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	sub sp = 32, sp
860d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov ar.pfs = r16
870d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}	;;
8816192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mmi;	mov sp = loc1
890d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	st8 [loc1] = r0			// trash saved pfs
900d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov rp = loc0
910d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}
9216192f7eac22ab023e8ef34e3691638599907747mostang.com!davidm{.mib;	nop 0
930d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	mov r8 = 4
940d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	br.ret.sptk.many rp
950d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm}
960d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidmfunc_vframe_end:
970d7396a027d2a7e5480dde9deaf5398957adb829mostang.com!davidm	.endp func_vframe
9857e569646368cb730f028ecf1732143474e3e642Jan Kratochvil
9957e569646368cb730f028ecf1732143474e3e642Jan Kratochvil#ifdef __linux__
10057e569646368cb730f028ecf1732143474e3e642Jan Kratochvil        /* We do not need executable stack.  */
10157e569646368cb730f028ecf1732143474e3e642Jan Kratochvil        .section        .note.GNU-stack,"",@progbits
10257e569646368cb730f028ecf1732143474e3e642Jan Kratochvil#endif
103