linux/arch/x86/platform/efi/efi_stub_64.S
<<
>>
Prefs
   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#include <asm/segment.h>
  11#include <asm/msr.h>
  12#include <asm/processor-flags.h>
  13#include <asm/page_types.h>
  14#include <asm/frame.h>
  15
  16#define SAVE_XMM                        \
  17        mov %rsp, %rax;                 \
  18        subq $0x70, %rsp;               \
  19        and $~0xf, %rsp;                \
  20        mov %rax, (%rsp);               \
  21        mov %cr0, %rax;                 \
  22        clts;                           \
  23        mov %rax, 0x8(%rsp);            \
  24        movaps %xmm0, 0x60(%rsp);       \
  25        movaps %xmm1, 0x50(%rsp);       \
  26        movaps %xmm2, 0x40(%rsp);       \
  27        movaps %xmm3, 0x30(%rsp);       \
  28        movaps %xmm4, 0x20(%rsp);       \
  29        movaps %xmm5, 0x10(%rsp)
  30
  31#define RESTORE_XMM                     \
  32        movaps 0x60(%rsp), %xmm0;       \
  33        movaps 0x50(%rsp), %xmm1;       \
  34        movaps 0x40(%rsp), %xmm2;       \
  35        movaps 0x30(%rsp), %xmm3;       \
  36        movaps 0x20(%rsp), %xmm4;       \
  37        movaps 0x10(%rsp), %xmm5;       \
  38        mov 0x8(%rsp), %rsi;            \
  39        mov %rsi, %cr0;                 \
  40        mov (%rsp), %rsp
  41
  42ENTRY(efi_call)
  43        FRAME_BEGIN
  44        SAVE_XMM
  45        mov (%rsp), %rax
  46        mov 8(%rax), %rax
  47        subq $48, %rsp
  48        mov %r9, 32(%rsp)
  49        mov %rax, 40(%rsp)
  50        mov %r8, %r9
  51        mov %rcx, %r8
  52        mov %rsi, %rcx
  53        call *%rdi
  54        addq $48, %rsp
  55        RESTORE_XMM
  56        FRAME_END
  57        ret
  58ENDPROC(efi_call)
  59