File: ia64-dyn-asm.S

package info (click to toggle)
libunwind 1.1-3.2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 7,540 kB
  • ctags: 5,665
  • sloc: ansic: 31,521; sh: 18,062; asm: 1,851; makefile: 866; cpp: 118
file content (102 lines) | stat: -rw-r--r-- 1,776 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
	.globl func_add1, func_add1_end
	.proc func_add1
func_add1:
{.mib;	add r8 = 1, r32
	nop.i 0
	br.ret.sptk.many rp
}
func_add1_end:
	.endp func_add1

	.globl func_add3, func_add3_end
	.proc func_add3
func_add3:
{.mmi;	alloc loc0 = ar.pfs, 2, 1, 2, 0
	mov r2 = sp
	add sp = -16, sp
}	;;
{.mii;	ld8 r8 = [in1], 8		// load the function pointer
	mov r3 = rp
	mov rp = loc0			// trash rp
}	;;
{.mmi;	ld8 r9 = [r8], 8		// load the entry-point
	st8 [r2] = r3
	mov out0 = in0
}	;;
{.mii;	ld8 gp = [r8]			// load the gp
	mov b6 = r9
	mov out1 = in1
}
{.mib;	nop 0
	nop 0
	br.call.sptk rp = b6
}
{.mmi;	add r2 = 16, sp
	;;
	ld8 r3 = [r2]			// r3 = saved rp
	mov ar.pfs = loc0
}	;;
{.mii;	nop 0
	mov rp = r3
	adds sp = 16, sp
}	;;
{.mib;	st8 [sp] = in0			// trash rp save location
	add r8 = 2, r8
	br.ret.sptk.many rp
}
func_add3_end:
	.endp func_add3

	.globl func_vframe, func_vframe_end
	.proc func_vframe
func_vframe:
{.mii;	alloc r16 = ar.pfs, 1, 2, 0, 0	// 0
	mov loc0 = rp
	mov loc1 = sp
}	;;
{.mmi;	sub sp = sp, in0
	st8 [loc1] = r16
	mov r2 = -99			// 0
}	;;
{.mii;	nop 0
	mov rp = r2
	mov ar.pfs = r0
}
{.mib;	mov r16 = r2
	tbit.nz p6, p0 = in0, 4
(p6)	br.cond.sptk.many .exit
}	;;
{.mmi;	ld8 r16 = [loc1]
	;;
	mov r3 = loc0			// 8 move saved rp to r3
	mov ar.pfs = r16
}	;;
{.mmi;	mov sp = loc1			// 10
	st8 [loc1] = r0			// trash saved pfs
	mov loc0 = r2
}	;;
{.mib;	mov r8 = 10
	mov rp = r3
	br.ret.sptk.many rp
}
.exit:
{.mmi;	ld8 r16 = [loc1]
	;;
	sub sp = 32, sp
	mov ar.pfs = r16
}	;;
{.mmi;	mov sp = loc1
	st8 [loc1] = r0			// trash saved pfs
	mov rp = loc0
}
{.mib;	nop 0
	mov r8 = 4
	br.ret.sptk.many rp
}
func_vframe_end:
	.endp func_vframe

#ifdef __linux__
        /* We do not need executable stack.  */
        .section        .note.GNU-stack,"",@progbits
#endif