linux/arch/x86/kernel/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
  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
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.