/* * Copyright 2014, General Dynamics C4 Systems * * This software may be distributed and modified according to the terms of * the GNU General Public License version 2. Note that NO WARRANTY is provided. * See "LICENSE_GPLv2.txt" for details. * * @TAG(GD_GPL) */ #ifndef __UTIL_H #define __UTIL_H #define MASK(n) (BIT(n)-1ul) #define IS_ALIGNED(n, b) (!((n) & MASK(b))) #define ROUND_DOWN(n, b) (((n) >> (b)) << (b)) #define ROUND_UP(n, b) (((((n) - 1ul) >> (b)) + 1ul) << (b)) #define CTZ(x) __builtin_ctz(x) #define CLZ(x) __builtin_clz(x) #ifndef __ASSEMBLER__ #define NULL ((void *)0) #define NORETURN __attribute__((__noreturn__)) #define CONST __attribute__((__const__)) #define PURE __attribute__((__pure__)) #define ALIGN(n) __attribute__((__aligned__(n))) #ifdef __clang__ #define VISIBLE __attribute__((visibility("default"))) #else #define VISIBLE __attribute__((externally_visible)) #endif #define FORCE_INLINE __attribute__((always_inline)) #define SECTION(sec) __attribute__((__section__(sec))) #define UNUSED __attribute__((unused)) #define FASTCALL __attribute__((fastcall)) #define OFFSETOF(type, member) \ __builtin_offsetof(type, member) #ifdef __GNUC__ /* Borrowed from linux/include/linux/compiler.h */ #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else #define likely(x) (!!(x)) #define unlikely(x) (!!(x)) #endif /* need that for compiling with c99 instead of gnu99 */ #define asm __asm__ /* Evaluate a Kconfig-provided configuration setting at compile-time. */ #define config_set(macro) _is_set_(macro) #define _macrotest_1 , #define _is_set_(value) _is_set__(_macrotest_##value) #define _is_set__(comma) _is_set___(comma 1, 0) #define _is_set___(_, v, ...) v /** MODIFIES: FNSPEC halt_spec: "\ \ {} Call halt_'proc {}" */ void halt(void) NORETURN; void memzero(void *s, unsigned int n); void *memset(void *s, unsigned int c, unsigned int n); void *memcpy(void* ptr_dst, const void* ptr_src, unsigned int n); int strncmp(const char *s1, const char *s2, int n); int CONST char_to_int(char c); int PURE str_to_int(const char* str); #endif /* !__ASSEMBLER__ */ #endif /* __UTIL_H */