On Wed, Mar 22, 2017 at 9:48 AM, Christophe Milard
<christophe.mil...@linaro.org> wrote:
> Largely inspired from its north api counterpart, the drv/spec/hint.h
> file is added. Also includes the __constructor__ attributes that many
> driver interface items will need.
>
> Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
> ---
>  include/odp/drv/spec/hints.h | 119 
> +++++++++++++++++++++++++++++++++++++++++++
>  platform/Makefile.inc        |   1 +
>  2 files changed, 120 insertions(+)
>  create mode 100644 include/odp/drv/spec/hints.h
>
> diff --git a/include/odp/drv/spec/hints.h b/include/odp/drv/spec/hints.h
> new file mode 100644
> index 0000000..ddae22e
> --- /dev/null
> +++ b/include/odp/drv/spec/hints.h
> @@ -0,0 +1,119 @@
> +/* Copyright (c) 2017, Linaro Limited
> + * All rights reserved.
> + *
> + * SPDX-License-Identifier:     BSD-3-Clause
> + */
> +
> +/**
> + * @file
> + *
> + * ODPDRV compiler hints
> + */
> +
> +#ifndef ODPDRV_API_HINTS_H_
> +#define ODPDRV_API_HINTS_H_
> +#include <odp/visibility_begin.h>
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +/** @addtogroup odpdrv_compiler_optim
> + *  Macros that will give hints to the compiler.
> + *  @{
> + */
> +
> +#ifdef __GNUC__
> +
> +/** Define a function that should be run at early init (constructor)
> + */
> +#define ODPDRV_CONSTRUCTOR __attribute__((__constructor__))
> +
> +/** Define a function that does not return
> + */
> +#define ODPDRV_NORETURN __attribute__((__noreturn__))
> +
> +/** Define a weak symbol
> + * This is primarily useful in defining library functions that can be
> + * overridden in user code.
> + */
> +#define ODPDRV_WEAK_SYMBOL __attribute__((__weak__))
> +
> +/**
> + * Hot code section
> + */
> +#define ODPDRV_HOT_CODE    __attribute__((__hot__))
> +
> +/**
> + * Cold code section
> + */
> +#define ODPDRV_COLD_CODE   __attribute__((__cold__))
> +
> +/**
> + * Printf format attribute
> + */
> +#define ODPDRV_PRINTF_FORMAT(x, y) __attribute__((format(printf, (x), (y))))
> +
> +/**
> + * Indicate deprecated variables, functions or types
> + */
> +#define ODPDRV_DEPRECATED __attribute__((__deprecated__))
> +
> +/**
> + * Intentionally unused variables of functions
> + */
> +#define ODPDRV_UNUSED     __attribute__((__unused__))
> +
> +/**
> + * Branch likely taken
> + */
> +#define odpdrv_likely(x)   __builtin_expect((x), 1)
> +
> +/**
> + * Branch unlikely taken
> + */
> +#define odpdrv_unlikely(x) __builtin_expect((x), 0)
> +
> +/*
> + * __builtin_prefetch (const void *addr, rw, locality)
> + *
> + * rw 0..1       (0: read, 1: write)
> + * locality 0..3 (0: don't leave to cache, 3: leave on all cache levels)
> + */
> +
> +/**
> + * Cache prefetch address
> + */
> +#define odpdrv_prefetch(x)         __builtin_prefetch((x), 0, 3)
> +
> +/**
> + * Cache prefetch address for storing
> + */
> +#define odpdrv_prefetch_store(x)   __builtin_prefetch((x), 1, 3)
> +
> +#else
> +
> +#define ODPDRV_CONSTRUCTOR
> +#define ODPDRV_NORETURN
> +#define ODPDRV_WEAK_SYMBOL
> +#define ODPDRV_HOT_CODE
> +#define ODPDRV_COLD_CODE
> +#define ODPDRV_DEPRECATED
> +#define ODPDRV_UNUSED
> +#define odpdrv_likely(x)
> +#define odpdrv_unlikely(x)

These have to be defined as:
#define odpdrv_likely(x) (x)
#define odpdrv_unlikely(x) (x)

> +#define odpdrv_prefetch(x)
> +#define odpdrv_prefetch_store(x)
> +
> +#endif
> +
> +/**
> + * @}
> + */
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#include <odp/visibility_end.h>
> +#endif
> diff --git a/platform/Makefile.inc b/platform/Makefile.inc
> index 874cf88..e439e3c 100644
> --- a/platform/Makefile.inc
> +++ b/platform/Makefile.inc
> @@ -69,6 +69,7 @@ odpdrvspecinclude_HEADERS = \
>                   $(top_srcdir)/include/odp/drv/spec/byteorder.h \
>                   $(top_srcdir)/include/odp/drv/spec/compiler.h \
>                   $(top_srcdir)/include/odp/drv/spec/driver.h \
> +                 $(top_srcdir)/include/odp/drv/spec/hints.h \
>                   $(top_srcdir)/include/odp/drv/spec/shm.h \
>                   $(top_srcdir)/include/odp/drv/spec/spinlock.h \
>                   $(top_srcdir)/include/odp/drv/spec/std_types.h \
> --
> 2.7.4
>

Reply via email to