Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/perf/arch/x86/tests/regs_load.S
26292 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#include <linux/linkage.h>
3
4
#define AX 0
5
#define BX 1 * 8
6
#define CX 2 * 8
7
#define DX 3 * 8
8
#define SI 4 * 8
9
#define DI 5 * 8
10
#define BP 6 * 8
11
#define SP 7 * 8
12
#define IP 8 * 8
13
#define FLAGS 9 * 8
14
#define CS 10 * 8
15
#define SS 11 * 8
16
#define DS 12 * 8
17
#define ES 13 * 8
18
#define FS 14 * 8
19
#define GS 15 * 8
20
#define R8 16 * 8
21
#define R9 17 * 8
22
#define R10 18 * 8
23
#define R11 19 * 8
24
#define R12 20 * 8
25
#define R13 21 * 8
26
#define R14 22 * 8
27
#define R15 23 * 8
28
29
.text
30
#ifdef HAVE_ARCH_X86_64_SUPPORT
31
SYM_FUNC_START(perf_regs_load)
32
movq %rax, AX(%rdi)
33
movq %rbx, BX(%rdi)
34
movq %rcx, CX(%rdi)
35
movq %rdx, DX(%rdi)
36
movq %rsi, SI(%rdi)
37
movq %rdi, DI(%rdi)
38
movq %rbp, BP(%rdi)
39
40
leaq 8(%rsp), %rax /* exclude this call. */
41
movq %rax, SP(%rdi)
42
43
movq 0(%rsp), %rax
44
movq %rax, IP(%rdi)
45
46
movq $0, FLAGS(%rdi)
47
movq $0, CS(%rdi)
48
movq $0, SS(%rdi)
49
movq $0, DS(%rdi)
50
movq $0, ES(%rdi)
51
movq $0, FS(%rdi)
52
movq $0, GS(%rdi)
53
54
movq %r8, R8(%rdi)
55
movq %r9, R9(%rdi)
56
movq %r10, R10(%rdi)
57
movq %r11, R11(%rdi)
58
movq %r12, R12(%rdi)
59
movq %r13, R13(%rdi)
60
movq %r14, R14(%rdi)
61
movq %r15, R15(%rdi)
62
ret
63
SYM_FUNC_END(perf_regs_load)
64
#else
65
SYM_FUNC_START(perf_regs_load)
66
push %edi
67
movl 8(%esp), %edi
68
movl %eax, AX(%edi)
69
movl %ebx, BX(%edi)
70
movl %ecx, CX(%edi)
71
movl %edx, DX(%edi)
72
movl %esi, SI(%edi)
73
pop %eax
74
movl %eax, DI(%edi)
75
movl %ebp, BP(%edi)
76
77
leal 4(%esp), %eax /* exclude this call. */
78
movl %eax, SP(%edi)
79
80
movl 0(%esp), %eax
81
movl %eax, IP(%edi)
82
83
movl $0, FLAGS(%edi)
84
movl $0, CS(%edi)
85
movl $0, SS(%edi)
86
movl $0, DS(%edi)
87
movl $0, ES(%edi)
88
movl $0, FS(%edi)
89
movl $0, GS(%edi)
90
ret
91
SYM_FUNC_END(perf_regs_load)
92
#endif
93
94
/*
95
* We need to provide note.GNU-stack section, saying that we want
96
* NOT executable stack. Otherwise the final linking will assume that
97
* the ELF stack should not be restricted at all and set it RWX.
98
*/
99
.section .note.GNU-stack,"",@progbits
100
101