• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
37ENTRY(efi_call0)
38	SAVE_XMM
39	subq $32, %rsp
40	call *%rdi
41	addq $32, %rsp
42	RESTORE_XMM
43	ret
44
45ENTRY(efi_call1)
46	SAVE_XMM
47	subq $32, %rsp
48	mov  %rsi, %rcx
49	call *%rdi
50	addq $32, %rsp
51	RESTORE_XMM
52	ret
53
54ENTRY(efi_call2)
55	SAVE_XMM
56	subq $32, %rsp
57	mov  %rsi, %rcx
58	call *%rdi
59	addq $32, %rsp
60	RESTORE_XMM
61	ret
62
63ENTRY(efi_call3)
64	SAVE_XMM
65	subq $32, %rsp
66	mov  %rcx, %r8
67	mov  %rsi, %rcx
68	call *%rdi
69	addq $32, %rsp
70	RESTORE_XMM
71	ret
72
73ENTRY(efi_call4)
74	SAVE_XMM
75	subq $32, %rsp
76	mov %r8, %r9
77	mov %rcx, %r8
78	mov %rsi, %rcx
79	call *%rdi
80	addq $32, %rsp
81	RESTORE_XMM
82	ret
83
84ENTRY(efi_call5)
85	SAVE_XMM
86	subq $48, %rsp
87	mov %r9, 32(%rsp)
88	mov %r8, %r9
89	mov %rcx, %r8
90	mov %rsi, %rcx
91	call *%rdi
92	addq $48, %rsp
93	RESTORE_XMM
94	ret
95
96ENTRY(efi_call6)
97	SAVE_XMM
98	mov (%rsp), %rax
99	mov 8(%rax), %rax
100	subq $48, %rsp
101	mov %r9, 32(%rsp)
102	mov %rax, 40(%rsp)
103	mov %r8, %r9
104	mov %rcx, %r8
105	mov %rsi, %rcx
106	call *%rdi
107	addq $48, %rsp
108	RESTORE_XMM
109	ret
110