… | |
… | |
558 | #elif defined(__ARM_ARCH_7__ ) || defined(__ARM_ARCH_7A__ ) \ |
558 | #elif defined(__ARM_ARCH_7__ ) || defined(__ARM_ARCH_7A__ ) \ |
559 | || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7R__ ) |
559 | || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7R__ ) |
560 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb" : : : "memory") |
560 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb" : : : "memory") |
561 | #elif __sparc || __sparc__ |
561 | #elif __sparc || __sparc__ |
562 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad | " : : : "memory") |
562 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad | " : : : "memory") |
563 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
563 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
564 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
564 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
|
|
565 | #elif defined(__s390__) || defined(__s390x__) |
|
|
566 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("bcr 15,0" : : : "memory") |
565 | #endif |
567 | #endif |
566 | #endif |
568 | #endif |
567 | #endif |
569 | #endif |
568 | |
570 | |
569 | #ifndef ECB_MEMORY_FENCE |
571 | #ifndef ECB_MEMORY_FENCE |
… | |
… | |
854 | |
856 | |
855 | #if ECB_GCC_VERSION(4,5) |
857 | #if ECB_GCC_VERSION(4,5) |
856 | #define ecb_unreachable() __builtin_unreachable () |
858 | #define ecb_unreachable() __builtin_unreachable () |
857 | #else |
859 | #else |
858 | /* this seems to work fine, but gcc always emits a warning for it :/ */ |
860 | /* this seems to work fine, but gcc always emits a warning for it :/ */ |
859 | ecb_function_ void ecb_unreachable (void) ecb_noreturn; |
861 | ecb_inline void ecb_unreachable (void) ecb_noreturn; |
860 | ecb_function_ void ecb_unreachable (void) { } |
862 | ecb_inline void ecb_unreachable (void) { } |
861 | #endif |
863 | #endif |
862 | |
864 | |
863 | /* try to tell the compiler that some condition is definitely true */ |
865 | /* try to tell the compiler that some condition is definitely true */ |
864 | #define ecb_assume(cond) do { if (!(cond)) ecb_unreachable (); } while (0) |
866 | #define ecb_assume(cond) do { if (!(cond)) ecb_unreachable (); } while (0) |
865 | |
867 | |
866 | ecb_function_ unsigned char ecb_byteorder_helper (void) ecb_const; |
868 | ecb_inline unsigned char ecb_byteorder_helper (void) ecb_const; |
867 | ecb_function_ unsigned char |
869 | ecb_inline unsigned char |
868 | ecb_byteorder_helper (void) |
870 | ecb_byteorder_helper (void) |
869 | { |
871 | { |
870 | const uint32_t u = 0x11223344; |
872 | const uint32_t u = 0x11223344; |
871 | return *(unsigned char *)&u; |
873 | return *(unsigned char *)&u; |
872 | } |
874 | } |
873 | |
875 | |
874 | ecb_function_ ecb_bool ecb_big_endian (void) ecb_const; |
876 | ecb_inline ecb_bool ecb_big_endian (void) ecb_const; |
875 | ecb_function_ ecb_bool ecb_big_endian (void) { return ecb_byteorder_helper () == 0x11; } |
877 | ecb_inline ecb_bool ecb_big_endian (void) { return ecb_byteorder_helper () == 0x11; } |
876 | ecb_function_ ecb_bool ecb_little_endian (void) ecb_const; |
878 | ecb_inline ecb_bool ecb_little_endian (void) ecb_const; |
877 | ecb_function_ ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == 0x44; } |
879 | ecb_inline ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == 0x44; } |
878 | |
880 | |
879 | #if ECB_GCC_VERSION(3,0) || ECB_C99 |
881 | #if ECB_GCC_VERSION(3,0) || ECB_C99 |
880 | #define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0)) |
882 | #define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0)) |
881 | #else |
883 | #else |
882 | #define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n))) |
884 | #define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n))) |
… | |
… | |
3299 | void noinline |
3301 | void noinline |
3300 | ev_timer_again (EV_P_ ev_timer *w) |
3302 | ev_timer_again (EV_P_ ev_timer *w) |
3301 | { |
3303 | { |
3302 | EV_FREQUENT_CHECK; |
3304 | EV_FREQUENT_CHECK; |
3303 | |
3305 | |
3304 | clear_pending (EV_A_ w); |
3306 | clear_pending (EV_A_ (W)w); |
3305 | |
3307 | |
3306 | if (ev_is_active (w)) |
3308 | if (ev_is_active (w)) |
3307 | { |
3309 | { |
3308 | if (w->repeat) |
3310 | if (w->repeat) |
3309 | { |
3311 | { |