diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Headers/arm_acle.h | 47 | ||||
-rw-r--r-- | clang/lib/Sema/SemaARM.cpp | 6 |
2 files changed, 39 insertions, 14 deletions
diff --git a/clang/lib/Headers/arm_acle.h b/clang/lib/Headers/arm_acle.h index 5cfa3d0..aabcbe0 100644 --- a/clang/lib/Headers/arm_acle.h +++ b/clang/lib/Headers/arm_acle.h @@ -29,16 +29,47 @@ extern "C" { /* 7 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */ /* 7.3 Memory barriers */ -void __dmb(unsigned int); -void __dsb(unsigned int); -void __isb(unsigned int); +#if !__has_builtin(__dmb) +#define __dmb(i) __builtin_arm_dmb(i) +#endif +#if !__has_builtin(__dsb) +#define __dsb(i) __builtin_arm_dsb(i) +#endif +#if !__has_builtin(__isb) +#define __isb(i) __builtin_arm_isb(i) +#endif /* 7.4 Hints */ -void __wfi(void); -void __wfe(void); -void __sev(void); -void __sevl(void); -void __yield(void); + +#if !__has_builtin(__wfi) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfi(void) { + __builtin_arm_wfi(); +} +#endif + +#if !__has_builtin(__wfe) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfe(void) { + __builtin_arm_wfe(); +} +#endif + +#if !__has_builtin(__sev) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sev(void) { + __builtin_arm_sev(); +} +#endif + +#if !__has_builtin(__sevl) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sevl(void) { + __builtin_arm_sevl(); +} +#endif + +#if !__has_builtin(__yield) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) __yield(void) { + __builtin_arm_yield(); +} +#endif #if defined(__ARM_32BIT_STATE) && __ARM_32BIT_STATE #define __dbg(t) __builtin_arm_dbg(t) diff --git a/clang/lib/Sema/SemaARM.cpp b/clang/lib/Sema/SemaARM.cpp index c1cfea0..de6cf1a 100644 --- a/clang/lib/Sema/SemaARM.cpp +++ b/clang/lib/Sema/SemaARM.cpp @@ -1010,11 +1010,8 @@ bool SemaARM::CheckARMBuiltinFunctionCall(const TargetInfo &TI, case ARM::BI__builtin_arm_vcvtr_d: return SemaRef.BuiltinConstantArgRange(TheCall, 1, 0, 1); case ARM::BI__builtin_arm_dmb: - case ARM::BI__dmb: case ARM::BI__builtin_arm_dsb: - case ARM::BI__dsb: case ARM::BI__builtin_arm_isb: - case ARM::BI__isb: case ARM::BI__builtin_arm_dbg: return SemaRef.BuiltinConstantArgRange(TheCall, 0, 0, 15); case ARM::BI__builtin_arm_cdp: @@ -1111,11 +1108,8 @@ bool SemaARM::CheckAArch64BuiltinFunctionCall(const TargetInfo &TI, switch (BuiltinID) { default: return false; case AArch64::BI__builtin_arm_dmb: - case AArch64::BI__dmb: case AArch64::BI__builtin_arm_dsb: - case AArch64::BI__dsb: case AArch64::BI__builtin_arm_isb: - case AArch64::BI__isb: l = 0; u = 15; break; |