linkage.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #ifndef __ASM_LINKAGE_H
  2. #define __ASM_LINKAGE_H
  3. #ifdef CONFIG_X86_64
  4. #define __ALIGN .p2align 4,,15
  5. #define __ALIGN_STR ".p2align 4,,15"
  6. #endif
  7. #ifdef CONFIG_X86_32
  8. #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))
  9. /*
  10. * For 32-bit UML - mark functions implemented in assembly that use
  11. * regparm input parameters:
  12. */
  13. #define asmregparm __attribute__((regparm(3)))
  14. #define asmlinkage_protect(n, ret, args...) \
  15. __asmlinkage_protect##n(ret, ##args)
  16. #define __asmlinkage_protect_n(ret, args...) \
  17. __asm__ __volatile__ ("" : "=r" (ret) : "0" (ret), ##args)
  18. #define __asmlinkage_protect0(ret) \
  19. __asmlinkage_protect_n(ret)
  20. #define __asmlinkage_protect1(ret, arg1) \
  21. __asmlinkage_protect_n(ret, "g" (arg1))
  22. #define __asmlinkage_protect2(ret, arg1, arg2) \
  23. __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2))
  24. #define __asmlinkage_protect3(ret, arg1, arg2, arg3) \
  25. __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3))
  26. #define __asmlinkage_protect4(ret, arg1, arg2, arg3, arg4) \
  27. __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \
  28. "g" (arg4))
  29. #define __asmlinkage_protect5(ret, arg1, arg2, arg3, arg4, arg5) \
  30. __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \
  31. "g" (arg4), "g" (arg5))
  32. #define __asmlinkage_protect6(ret, arg1, arg2, arg3, arg4, arg5, arg6) \
  33. __asmlinkage_protect_n(ret, "g" (arg1), "g" (arg2), "g" (arg3), \
  34. "g" (arg4), "g" (arg5), "g" (arg6))
  35. #endif
  36. #ifdef CONFIG_X86_ALIGNMENT_16
  37. #define __ALIGN .align 16,0x90
  38. #define __ALIGN_STR ".align 16,0x90"
  39. #endif
  40. #endif