|  | @@ -1,115 +0,0 @@
 | 
	
		
			
				|  |  | -#ifndef COMPILER_H
 | 
	
		
			
				|  |  | -#define COMPILER_H
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#ifndef __ASSEMBLY__
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#include <stdlib.h>
 | 
	
		
			
				|  |  | -#include <string.h>
 | 
	
		
			
				|  |  | -#include <inttypes.h>
 | 
	
		
			
				|  |  | -#include <stdarg.h>
 | 
	
		
			
				|  |  | -#include <stdbool.h>
 | 
	
		
			
				|  |  | -#include <errno.h>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/* Use builtin memcpy and memset optimizations */
 | 
	
		
			
				|  |  | -#define memset(s,c,n)	__builtin_memset(s,c,n)
 | 
	
		
			
				|  |  | -#define memcpy(d,s,n)	__builtin_memcpy(d,s,n)
 | 
	
		
			
				|  |  | -#define mempcpy(d,s,n)	__builtin_mempcpy(d,s,n)
 | 
	
		
			
				|  |  | -#define memmove(d,s,n)	__builtin_memmove(d,s,n)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -extern volatile void *memcpy_bytewise(volatile void *dst,
 | 
	
		
			
				|  |  | -				      const volatile void *src, size_t len);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/*
 | 
	
		
			
				|  |  | - * The odd argument order allows memcpy() and mempcpy() to be implemented
 | 
	
		
			
				|  |  | - * as tail calls
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -extern void *__memxcpy_aligned(void *retval,
 | 
	
		
			
				|  |  | -			      const void * restrict src, size_t len,
 | 
	
		
			
				|  |  | -			      void * restrict dst);
 | 
	
		
			
				|  |  | -extern void *__memxcpy_bytewise(void *retval,
 | 
	
		
			
				|  |  | -				const volatile void * restrict src, size_t len,
 | 
	
		
			
				|  |  | -				void * restrict dst);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define likely(x)	__builtin_expect(!!(x), 1)
 | 
	
		
			
				|  |  | -#define unlikely(x)	__builtin_expect(!!(x), 0)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/* Handy composite pointer types */
 | 
	
		
			
				|  |  | -typedef union xptr {
 | 
	
		
			
				|  |  | -    uint32_t *l;
 | 
	
		
			
				|  |  | -    uint16_t *w;
 | 
	
		
			
				|  |  | -    uint8_t  *b;
 | 
	
		
			
				|  |  | -    void     *v;
 | 
	
		
			
				|  |  | -    size_t    a;
 | 
	
		
			
				|  |  | -} xptr_t;
 | 
	
		
			
				|  |  | -typedef union xcptr {
 | 
	
		
			
				|  |  | -    const uint32_t *l;
 | 
	
		
			
				|  |  | -    const uint16_t *w;
 | 
	
		
			
				|  |  | -    const uint8_t  *b;
 | 
	
		
			
				|  |  | -    const void     *v;
 | 
	
		
			
				|  |  | -    size_t          a;
 | 
	
		
			
				|  |  | -} xcptr_t;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/* The container_of construct: if p is a pointer to member m of
 | 
	
		
			
				|  |  | -   container class c, then return a pointer to the container of which
 | 
	
		
			
				|  |  | -   *p is a member. */
 | 
	
		
			
				|  |  | -#ifndef container_of
 | 
	
		
			
				|  |  | -# define container_of(p, c, m) ((c *)((char *)(p) - offsetof(c,m)))
 | 
	
		
			
				|  |  | -#endif
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define offset_diff(c, m1, m2) ((ptrdiff_t)offsetof(c,m2) - \
 | 
	
		
			
				|  |  | -				(ptrdiff_t)offsetof(c,m1))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define min(a,b) (((a) < (b)) ? (a) : (b))
 | 
	
		
			
				|  |  | -#define max(a,b) (((a) > (b)) ? (a) : (b))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define ARRAY_SIZE (sizeof(a)/sizeof(a[0]))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define alignof(a) __alignof__(a)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define no_return void __attribute__((noreturn))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define ___section(s,a,...) __attribute__((__section__(s)))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define __hot		__attribute__((__hot__))
 | 
	
		
			
				|  |  | -#define __cold		__attribute__((__cold__))
 | 
	
		
			
				|  |  | -#define __aligned(x)	__attribute__((__aligned__(x)))
 | 
	
		
			
				|  |  | -#define __unused	__attribute__((__unused__))
 | 
	
		
			
				|  |  | -#define __must_inline	__attribute__((__always_inline__))
 | 
	
		
			
				|  |  | -#define __noinline	__attribute__ ((__noinline__))
 | 
	
		
			
				|  |  | -#define __constfunc	__attribute__((__const__))
 | 
	
		
			
				|  |  | -#define __purefunc	__attribute__((__pure__))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define __fmt_printf(fstr,farg)	__attribute__((__format__(__printf__,fstr,farg)))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define __is_constant(expr)	__builtin_constant_p(expr)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#else /* __ASSEMBLY__ */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define ___section(s,a,...)	.pushsection s, a, ## __VA_ARGS__
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#endif /* __ASSEMBLY__ */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define __text_hot	___section(".text.hot","ax")
 | 
	
		
			
				|  |  | -#define __rodata_hot	___section(".rodata.hot","a")
 | 
	
		
			
				|  |  | -#define __data_hot	___section(".data.hot","aw")
 | 
	
		
			
				|  |  | -#define __rwtext	___section(".rwtext","awx")
 | 
	
		
			
				|  |  | -#define __sdata		___section(".sdata","aw")
 | 
	
		
			
				|  |  | -#define __string_hot	___section(".rodata.hot.str","aMS")
 | 
	
		
			
				|  |  | -#define __sbss		___section(".sbss.hot","aw",@nobits)
 | 
	
		
			
				|  |  | -#define __bss_hot	___section(".bss.hot","aw",@nobits)
 | 
	
		
			
				|  |  | -#define __esplink_head	___section(".dram.esplink.head","aw",@nobits)
 | 
	
		
			
				|  |  | -#define __esplink	___section(".dram.bss.esplink","aw",@nobits)
 | 
	
		
			
				|  |  | -#define __dram_text	___section(".dram.text","ax")
 | 
	
		
			
				|  |  | -#define __dram_rodata	___section(".dram.rodata","a")
 | 
	
		
			
				|  |  | -#define __dram_string	___section(".dram.rodata.str","aMS")
 | 
	
		
			
				|  |  | -#define __dram_data	___section(".dram.data","aw")
 | 
	
		
			
				|  |  | -#define __dram_bss	___section(".dram.bss","aw",@nobits)
 | 
	
		
			
				|  |  | -#define __dram_noinit	___section(".dram.noinit","aw",@nobits)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#ifndef __ASSEMBLY__
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#define hotstr(x) ({ static __string_hot const char _str[] = (x); _str; })
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#endif /* __ASSEMBLY__ */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#endif /* COMPILER_H */
 |