Commit | Line | Data |
---|---|---|
5b83683f HY |
1 | /* |
2 | * Function calling ABI conversion from Linux to EFI for x86_64 | |
3 | * | |
4 | * Copyright (C) 2007 Intel Corp | |
5 | * Bibo Mao <bibo.mao@intel.com> | |
6 | * Huang Ying <ying.huang@intel.com> | |
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 | |
9f331119 | 44 | ENDPROC(efi_call0) |
5b83683f HY |
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 | |
9f331119 | 54 | ENDPROC(efi_call1) |
5b83683f HY |
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 | |
9f331119 | 64 | ENDPROC(efi_call2) |
5b83683f HY |
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 | |
9f331119 | 75 | ENDPROC(efi_call3) |
5b83683f HY |
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 | |
9f331119 | 87 | ENDPROC(efi_call4) |
5b83683f HY |
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 | |
9f331119 | 100 | ENDPROC(efi_call5) |
5b83683f HY |
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 | |
9f331119 | 116 | ENDPROC(efi_call6) |