#define _hypercall32_1(type, hcall, a1) \
({ \
- long __res, __ign1; \
+ long _res = (long)(hcall), _a1 = (long)(a1); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=b" (__ign1) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)) \
+ : "+a" (_res), "+b" (_a1) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall32_2(type, hcall, a1, a2) \
({ \
- long __res, __ign1, __ign2; \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=b" (__ign1), "=c" (__ign2) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)) \
+ : "+a" (_res), "+b" (_a1), "+c" (_a2) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall32_3(type, hcall, a1, a2, a3) \
({ \
- long __res, __ign1, __ign2, __ign3; \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2), \
+ _a3 = (long)(a3); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=b" (__ign1), "=c" (__ign2), "=d" (__ign3) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)), "3" ((long)(a3)) \
+ : "+a" (_res), "+b" (_a1), "+c" (_a2), "+d" (_a3) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall32_4(type, hcall, a1, a2, a3, a4) \
({ \
- long __res, __ign1, __ign2, __ign3, __ign4; \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2), \
+ _a3 = (long)(a3), _a4 = (long)(a4); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=b" (__ign1), "=c" (__ign2), "=d" (__ign3),\
- "=S" (__ign4) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)), "3" ((long)(a3)), \
- "4" ((long)(a4)) \
+ : "+a" (_res), "+b" (_a1), "+c" (_a2), "+d" (_a3), \
+ "+S" (_a4) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#endif /* XTF_X86_32_HYPERCALL_H */
#define _hypercall64_1(type, hcall, a1) \
({ \
- long __res, __ign1; \
+ long _res = (long)(hcall), _a1 = (long)(a1); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=D" (__ign1) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)) \
+ : "+a" (_res), "+D" (_a1) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall64_2(type, hcall, a1, a2) \
({ \
- long __res, __ign1, __ign2; \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=D" (__ign1), "=S" (__ign2) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)) \
+ : "+a" (_res), "+D" (_a1), "+S" (_a2) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall64_3(type, hcall, a1, a2, a3) \
({ \
- long __res, __ign1, __ign2, __ign3; \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2), \
+ _a3 = (long)(a3); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=D" (__ign1), "=S" (__ign2), "=d" (__ign3) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)), "3" ((long)(a3)) \
+ : "+a" (_res), "+D" (_a1), "+S" (_a2), "+d" (_a3) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#define _hypercall64_4(type, hcall, a1, a2, a3, a4) \
({ \
- long __res, __ign1, __ign2, __ign3, __ign4; \
- register long _a4 asm ("r10") = ((long)(a4)); \
+ long _res = (long)(hcall), _a1 = (long)(a1), _a2 = (long)(a2), \
+ _a3 = (long)(a3); \
+ register long _a4 asm ("r10") = (long)(a4); \
asm volatile ( \
"call hypercall_page + %c[offset]" \
- : "=a" (__res), "=D" (__ign1), "=S" (__ign2), "=d" (__ign3),\
- "=&r" (__ign4) \
- : [offset] "i" (hcall * 32), \
- "1" ((long)(a1)), "2" ((long)(a2)), "3" ((long)(a3)), \
- "4" (_a4) \
+ : "+a" (_res), "+D" (_a1), "+S" (_a2), "+d" (_a3), \
+ "+r" (_a4) \
+ : [offset] "i" (hcall * 32) \
: "memory" ); \
- (type)__res; \
+ (type)_res; \
})
#endif /* XTF_X86_64_HYPERCALL_H */