Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/x86/platform/efi/efi_stub_64.S
10820 views
1
/*
2
* Function calling ABI conversion from Linux to EFI for x86_64
3
*
4
* Copyright (C) 2007 Intel Corp
5
* Bibo Mao <[email protected]>
6
* Huang Ying <[email protected]>
7
*/
8
9
#include <linux/linkage.h>
10
11
#define SAVE_XMM \
12
mov %rsp, %rax; \
13
subq $0x70, %rsp; \
14
and $~0xf, %rsp; \
15
mov %rax, (%rsp); \
16
mov %cr0, %rax; \
17
clts; \
18
mov %rax, 0x8(%rsp); \
19
movaps %xmm0, 0x60(%rsp); \
20
movaps %xmm1, 0x50(%rsp); \
21
movaps %xmm2, 0x40(%rsp); \
22
movaps %xmm3, 0x30(%rsp); \
23
movaps %xmm4, 0x20(%rsp); \
24
movaps %xmm5, 0x10(%rsp)
25
26
#define RESTORE_XMM \
27
movaps 0x60(%rsp), %xmm0; \
28
movaps 0x50(%rsp), %xmm1; \
29
movaps 0x40(%rsp), %xmm2; \
30
movaps 0x30(%rsp), %xmm3; \
31
movaps 0x20(%rsp), %xmm4; \
32
movaps 0x10(%rsp), %xmm5; \
33
mov 0x8(%rsp), %rsi; \
34
mov %rsi, %cr0; \
35
mov (%rsp), %rsp
36
37
ENTRY(efi_call0)
38
SAVE_XMM
39
subq $32, %rsp
40
call *%rdi
41
addq $32, %rsp
42
RESTORE_XMM
43
ret
44
ENDPROC(efi_call0)
45
46
ENTRY(efi_call1)
47
SAVE_XMM
48
subq $32, %rsp
49
mov %rsi, %rcx
50
call *%rdi
51
addq $32, %rsp
52
RESTORE_XMM
53
ret
54
ENDPROC(efi_call1)
55
56
ENTRY(efi_call2)
57
SAVE_XMM
58
subq $32, %rsp
59
mov %rsi, %rcx
60
call *%rdi
61
addq $32, %rsp
62
RESTORE_XMM
63
ret
64
ENDPROC(efi_call2)
65
66
ENTRY(efi_call3)
67
SAVE_XMM
68
subq $32, %rsp
69
mov %rcx, %r8
70
mov %rsi, %rcx
71
call *%rdi
72
addq $32, %rsp
73
RESTORE_XMM
74
ret
75
ENDPROC(efi_call3)
76
77
ENTRY(efi_call4)
78
SAVE_XMM
79
subq $32, %rsp
80
mov %r8, %r9
81
mov %rcx, %r8
82
mov %rsi, %rcx
83
call *%rdi
84
addq $32, %rsp
85
RESTORE_XMM
86
ret
87
ENDPROC(efi_call4)
88
89
ENTRY(efi_call5)
90
SAVE_XMM
91
subq $48, %rsp
92
mov %r9, 32(%rsp)
93
mov %r8, %r9
94
mov %rcx, %r8
95
mov %rsi, %rcx
96
call *%rdi
97
addq $48, %rsp
98
RESTORE_XMM
99
ret
100
ENDPROC(efi_call5)
101
102
ENTRY(efi_call6)
103
SAVE_XMM
104
mov (%rsp), %rax
105
mov 8(%rax), %rax
106
subq $48, %rsp
107
mov %r9, 32(%rsp)
108
mov %rax, 40(%rsp)
109
mov %r8, %r9
110
mov %rcx, %r8
111
mov %rsi, %rcx
112
call *%rdi
113
addq $48, %rsp
114
RESTORE_XMM
115
ret
116
ENDPROC(efi_call6)
117
118