48 #ifdef SVCALL_AS_NORMAL_FUNCTION
49 #define SVCALL(number, return_type, signature) return_type signature
53 #if defined (__CC_ARM)
54 #define SVCALL(number, return_type, signature) return_type __svc(number) signature
55 #elif defined (__GNUC__)
57 #define GCC_CAST_CPP (uint16_t)
61 #define SVCALL(number, return_type, signature) \
62 _Pragma("GCC diagnostic push") \
63 _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \
64 __attribute__((naked)) \
65 __attribute__((unused)) \
66 static return_type signature \
70 "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \
73 _Pragma("GCC diagnostic pop")
75 #elif defined (__ICCARM__)
76 #define PRAGMA(x) _Pragma(#x)
77 #define SVCALL(number, return_type, signature) \
78 PRAGMA(swi_number = (number)) \
79 __swi return_type signature;
81 #define SVCALL(number, return_type, signature) return_type signature
85 #endif // SVCALL_AS_NORMAL_FUNCTION