Browse Source
A new release of VDSP means syncing random updates to the libgloss headers. Signed-off-by: Mike Frysinger <vapier@gentoo.org>binutils-2_21-branch
83 changed files with 967 additions and 420 deletions
@ -0,0 +1,295 @@ |
|||
/*
|
|||
* The authors hereby grant permission to use, copy, modify, distribute, |
|||
* and license this software and its documentation for any purpose, provided |
|||
* that existing copyright notices are retained in all copies and that this |
|||
* notice is included verbatim in any distributions. No written agreement, |
|||
* license, or royalty fee is required for any of the authorized uses. |
|||
* Modifications to this software may be copyrighted by their authors |
|||
* and need not follow the licensing terms described here, provided that |
|||
* the new terms are clearly indicated on the first page of each file where |
|||
* they apply. |
|||
*/ |
|||
|
|||
#ifdef _MISRA_RULES |
|||
#pragma diag(push) |
|||
#pragma diag(suppress:misra_rule_2_4) |
|||
#pragma diag(suppress:misra_rule_5_3) |
|||
#pragma diag(suppress:misra_rule_6_3) |
|||
#pragma diag(suppress:misra_rule_8_1) |
|||
#pragma diag(suppress:misra_rule_8_8) |
|||
#pragma diag(suppress:misra_rule_8_5) |
|||
#pragma diag(suppress:misra_rule_19_7) |
|||
#pragma diag(suppress:misra_rule_19_15) |
|||
#pragma diag(suppress:misra_rule_20_2) |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
#if !defined(__NO_BUILTIN) |
|||
|
|||
/* VDSP -> GCC glue */ |
|||
#define __builtin_NOP() __asm__ __volatile__ ("NOP;") |
|||
#define __builtin_cli() ({ unsigned int __rval; __asm__ __volatile__ ("cli %0;" : "=r"(__rval)); __rval; }) |
|||
#define __builtin_sti(x) __asm__ __volatile__ ("sti %0;" : : "r"(x)) |
|||
#define __builtin_idle() __asm__ __volatile__ ("IDLE;") |
|||
#define __builtin_raise(x) __asm__ __volatile__ ("raise %0;" : : "r"(x)) |
|||
#define __builtin_excpt(x) __asm__ __volatile__ ("excpt %0;" : : "r"(x)) |
|||
#define __builtin_prefetch(x) __asm__ __volatile__ ("PREFETCH[%0];" : : "p"(x)) |
|||
#define __builtin_prefetchmodup(x) ({ void *__p = &(x); __asm__ __volatile__ ("PREFETCH[%0++];" : "+p"(__p)); __p; }) |
|||
#define __builtin_flushinv(x) __asm__ __volatile__ ("FLUSHINV[%0];" : : "p"(x)) |
|||
#define __builtin_flushinvmodup(x) ({ void *__p = &(x); __asm__ __volatile__ ("FLUSHINV[%0++];" : "+p"(__p)); __p; }) |
|||
#define __builtin_flush(x) __asm__ __volatile__ ("FLUSH[%0];" : : "p"(x)) |
|||
#define __builtin_flushmodup(x) ({ void *__p = &(x); __asm__ __volatile__ ("FLUSH[%0++];" : "+p"(__p)); __p; }) |
|||
#define __builtin_iflush(x) __asm__ __volatile__ ("IFLUSH[%0];" : : "p"(x)) |
|||
#define __builtin_iflushmodup(x) ({ void *__p = &(x); __asm__ __volatile__ ("IFLUSH[%0++];" : "+p"(__p)); __p; }) |
|||
#define __builtin_csync() __builtin_bfin_csync() |
|||
#define __builtin_ssync() __builtin_bfin_ssync() |
|||
|
|||
#endif /* __NO_BUILTIN */ |
|||
|
|||
|
|||
#if !defined(__NO_BUILTIN) && !defined(__NO_SHORTNAMES) |
|||
|
|||
#if (!defined(__DEFINED_NOP) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_NOP)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_NOP)))) |
|||
|
|||
#define __DEFINED_NOP |
|||
|
|||
/* Insert a normal 16 bit NOP, which is treated as volatile.
|
|||
*/ |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void NOP(void) { |
|||
__builtin_NOP(); |
|||
} |
|||
|
|||
#endif /* __DEFINED_NOP */ |
|||
|
|||
#if (!defined(__DEFINED_CLI) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_CLI)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_CLI)))) |
|||
|
|||
#define __DEFINED_CLI |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static unsigned int cli(void) { |
|||
unsigned int __rval = __builtin_cli(); |
|||
return __rval; |
|||
} |
|||
|
|||
#endif /* __DEFINED_CLI */ |
|||
|
|||
#if (!defined(__DEFINED_STI) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_STI)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_STI)))) |
|||
|
|||
#define __DEFINED_STI |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void sti(unsigned int __a) { |
|||
__builtin_sti(__a); |
|||
} |
|||
|
|||
#endif /* __DEFINED_STI */ |
|||
|
|||
#if (!defined(__DEFINED_IDLE) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_IDLE)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_IDLE)))) |
|||
|
|||
#define __DEFINED_IDLE |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void idle(void) { |
|||
__builtin_idle(); |
|||
} |
|||
|
|||
#endif /* __DEFINED_IDLE */ |
|||
|
|||
#if (!defined(__DEFINED_RAISE_INTR) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_RAISE_INTR)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_RAISE_INTR)))) |
|||
|
|||
#define __DEFINED_RAISE_INTR |
|||
|
|||
#define raise_intr(A) (__builtin_raise((A))) |
|||
|
|||
#endif /* __DEFINED_RAISE_INTR */ |
|||
|
|||
#if (!defined(__DEFINED_EXCPT) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_EXCPT)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_EXCPT)))) |
|||
|
|||
#define __DEFINED_EXCPT |
|||
|
|||
#define excpt(A) (__builtin_excpt((A))) |
|||
|
|||
#endif /* __DEFINED_EXCPT */ |
|||
|
|||
#if (!defined(__DEFINED_PREFETCH) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_PREFETCH)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_PREFETCH)))) |
|||
|
|||
#define __DEFINED_PREFETCH |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void prefetch(void * __a) { |
|||
__builtin_prefetch(__a); |
|||
} |
|||
|
|||
#endif /* __DEFINED_PREFETCH */ |
|||
|
|||
#if (!defined(__DEFINED_PREFETCHMODUP) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_PREFETCHMODUP)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_PREFETCHMODUP)))) |
|||
|
|||
#define __DEFINED_PREFETCHMODUP |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void * prefetchmodup(void * __a) { |
|||
void * __rval = __builtin_prefetchmodup(__a); |
|||
return __rval; |
|||
} |
|||
|
|||
#endif /* __DEFINED_PREFETCHMODUP */ |
|||
|
|||
#if (!defined(__DEFINED_FLUSHINV) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_FLUSHINV)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_FLUSHINV)))) |
|||
|
|||
#define __DEFINED_FLUSHINV |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void flushinv(void * __a) { |
|||
__builtin_flushinv(__a); |
|||
} |
|||
|
|||
#endif /* __DEFINED_FLUSHINV */ |
|||
|
|||
#if (!defined(__DEFINED_FLUSHINVMODUP) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_FLUSHINVMODUP)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_FLUSHINVMODUP)))) |
|||
|
|||
#define __DEFINED_FLUSHINVMODUP |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void * flushinvmodup(void * __a) { |
|||
void * __rval = __builtin_flushinvmodup(__a); |
|||
return __rval; |
|||
} |
|||
|
|||
#endif /* __DEFINED_FLUSHINVMODUP */ |
|||
|
|||
#if (!defined(__DEFINED_FLUSH) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_FLUSH)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_FLUSH)))) |
|||
|
|||
#define __DEFINED_FLUSH |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void flush(void * __a) { |
|||
__builtin_flush(__a); |
|||
} |
|||
|
|||
#endif /* __DEFINED_FLUSH */ |
|||
|
|||
#if (!defined(__DEFINED_FLUSHMODUP) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_FLUSHMODUP)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_FLUSHMODUP)))) |
|||
|
|||
#define __DEFINED_FLUSHMODUP |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void * flushmodup(void * __a) { |
|||
void * __rval = __builtin_flushmodup(__a); |
|||
return __rval; |
|||
} |
|||
|
|||
#endif /* __DEFINED_FLUSHMODUP */ |
|||
|
|||
#if (!defined(__DEFINED_IFLUSH) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_IFLUSH)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_IFLUSH)))) |
|||
|
|||
#define __DEFINED_IFLUSH |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void iflush(void * __a) { |
|||
__builtin_iflush(__a); |
|||
} |
|||
|
|||
#endif /* __DEFINED_IFLUSH */ |
|||
|
|||
#if (!defined(__DEFINED_IFLUSHMODUP) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_IFLUSHMODUP)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_IFLUSHMODUP)))) |
|||
|
|||
#define __DEFINED_IFLUSHMODUP |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void * iflushmodup(void * __a) { |
|||
void * __rval = __builtin_iflushmodup(__a); |
|||
return __rval; |
|||
} |
|||
|
|||
#endif /* __DEFINED_IFLUSHMODUP */ |
|||
|
|||
#if (!defined(__DEFINED_CSYNC) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_CSYNC)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_CSYNC)))) |
|||
|
|||
#define __DEFINED_CSYNC |
|||
|
|||
/* generate a csync instruction protected by CLI/STI for anomaly 05-00-0312;
|
|||
** you can generate an unprotected csync by using csync_int |
|||
*/ |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void csync(void) { |
|||
__builtin_csync(); |
|||
} |
|||
|
|||
#endif /* __DEFINED_CSYNC */ |
|||
|
|||
#if (!defined(__DEFINED_SSYNC) && \ |
|||
((defined(__SPECIFIC_NAMES) && defined(__ENABLE_SSYNC)) || \ |
|||
(!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_SSYNC)))) |
|||
|
|||
#define __DEFINED_SSYNC |
|||
|
|||
/* generate a ssync instruction protected by CLI/STI for anomaly 05-00-0312;
|
|||
** you can generate an unprotected ssync by using ssync_int |
|||
*/ |
|||
|
|||
#pragma inline |
|||
#pragma always_inline |
|||
static void ssync(void) { |
|||
__builtin_ssync(); |
|||
} |
|||
|
|||
#endif /* __DEFINED_SSYNC */ |
|||
|
|||
#endif /* __NO_BUILTIN */ |
|||
|
|||
#ifdef _MISRA_RULES |
|||
#pragma diag(pop) |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
Loading…
Reference in new issue