1#ifndef XTF_X86_64_HYPERCALL_H 
    2#define XTF_X86_64_HYPERCALL_H 
   10#define _hypercall64_0(type, hcall)                                     \ 
   14            "call hypercall_page + %c[offset]"                          \
 
   16            : [offset] "i" (hcall * 32)                                 \
 
   21#define _hypercall64_1(type, hcall, a1)                                 \ 
   23        long res, _a1 = (long)(a1);                                     \ 
   25            "call hypercall_page + %c[offset]"                          \
 
   26            : "=a" (res), "+D" (_a1)                                    \
 
   27            : [offset] "i" (hcall * 32)                                 \
 
   32#define _hypercall64_2(type, hcall, a1, a2)                             \ 
   34        long res, _a1 = (long)(a1), _a2 = (long)(a2);                   \ 
   36            "call hypercall_page + %c[offset]"                          \
 
   37            : "=a" (res), "+D" (_a1), "+S" (_a2)                        \
 
   38            : [offset] "i" (hcall * 32)                                 \
 
   43#define _hypercall64_3(type, hcall, a1, a2, a3)                         \ 
   45        long res, _a1 = (long)(a1), _a2 = (long)(a2), _a3 = (long)(a3); \ 
   47            "call hypercall_page + %c[offset]"                          \
 
   48            : "=a" (res), "+D" (_a1), "+S" (_a2), "+d" (_a3)            \
 
   49            : [offset] "i" (hcall * 32)                                 \
 
   54#define _hypercall64_4(type, hcall, a1, a2, a3, a4)                     \ 
   56        long res, _a1 = (long)(a1), _a2 = (long)(a2), _a3 = (long)(a3); \ 
   57        register long _a4 asm ("r10") = (long)(a4);                     \
 
   59            "call hypercall_page + %c[offset]"                          \
 
   60            : "=a" (res), "+D" (_a1), "+S" (_a2), "+d" (_a3),           \
 
   62            : [offset] "i" (hcall * 32)                                 \
 
   67#define _hypercall64_5(type, hcall, a1, a2, a3, a4, a5)                 \ 
   69        long res, _a1 = (long)(a1), _a2 = (long)(a2), _a3 = (long)(a3); \ 
   70        register long _a4 asm ("r10") = (long)(a4);                     \
 
   71        register long _a5 asm ("r8") = (long)(a5);                      \
 
   73            "call hypercall_page + %c[offset]"                          \
 
   74            : "=a" (res), "+D" (_a1), "+S" (_a2), "+d" (_a3),           \
 
   75              "+r" (_a4), "+r" (_a5)                                    \
 
   76            : [offset] "i" (hcall * 32)                                 \