Rewrote some potentially compiler specific code:

* added ATTR_FORCE_INLINE to osdcomm.h
* added ATTR_NONNULL
* moved U64 S64 fram mamecore.h to osdcomm.h
* define SETJMP_GNUC_PROTECT() in osdcomm.h for use in ppc602, ppc603
This commit is contained in:
Couriersud 2008-03-02 00:35:58 +00:00
parent 492612b6c9
commit 7df031fb4f
7 changed files with 62 additions and 52 deletions

View File

@ -239,10 +239,8 @@ static int ppc602_execute(int cycles)
change_pc(ppc.npc);
#ifdef __GNUC__
// MinGW's optimizer kills setjmp()/longjmp()
(void)__builtin_return_address(1);
#endif
SETJMP_GNUC_PROTECT();
exception_type = setjmp(ppc.exception_jmpbuf);
if (exception_type)

View File

@ -247,10 +247,8 @@ static int ppc603_execute(int cycles)
change_pc(ppc.npc);
#ifdef __GNUC__
// MinGW's optimizer kills setjmp()/longjmp()
(void)__builtin_return_address(1);
#endif
SETJMP_GNUC_PROTECT();
exception_type = setjmp(ppc.exception_jmpbuf);
if (exception_type)

View File

@ -42,7 +42,7 @@
-------------------------------------------------*/
#define mul_32x32_hi _mul_32x32_hi
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_mul_32x32_hi(INT32 val1, INT32 val2)
{
register INT32 result;
@ -65,7 +65,7 @@ _mul_32x32_hi(INT32 val1, INT32 val2)
-------------------------------------------------*/
#define mulu_32x32_hi _mulu_32x32_hi
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_mulu_32x32_hi(UINT32 val1, UINT32 val2)
{
register UINT32 result;
@ -90,7 +90,7 @@ _mulu_32x32_hi(UINT32 val1, UINT32 val2)
#if !defined(__ppc64__) && !defined(__PPC64__) && !defined(_ARCH_PPC64)
#define mul_32x32_shift _mul_32x32_shift
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_mul_32x32_shift(INT32 val1, INT32 val2, UINT8 shift)
{
register INT32 result;
@ -124,7 +124,7 @@ _mul_32x32_shift(INT32 val1, INT32 val2, UINT8 shift)
#if !defined(__ppc64__) && !defined(__PPC64__) && !defined(_ARCH_PPC64)
#define mulu_32x32_shift _mulu_32x32_shift
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_mulu_32x32_shift(UINT32 val1, UINT32 val2, UINT8 shift)
{
register UINT32 result;
@ -223,7 +223,7 @@ _mulu_32x32_shift(UINT32 val1, UINT32 val2, UINT8 shift)
-------------------------------------------------*/
#define recip_approx _recip_approx
INLINE float __attribute__((const, always_inline))
INLINE float ATTR_CONST ATTR_FORCE_INLINE
_recip_approx(float value)
{
register float result;
@ -249,7 +249,7 @@ _recip_approx(float value)
-------------------------------------------------*/
#define count_leading_zeros _count_leading_zeros
INLINE UINT8 __attribute__((const, always_inline))
INLINE UINT8 ATTR_CONST ATTR_FORCE_INLINE
_count_leading_zeros(UINT32 value)
{
register UINT32 result;
@ -270,7 +270,7 @@ _count_leading_zeros(UINT32 value)
-------------------------------------------------*/
#define count_leading_ones _count_leading_ones
INLINE UINT8 __attribute__((const, always_inline))
INLINE UINT8 ATTR_CONST ATTR_FORCE_INLINE
_count_leading_ones(UINT32 value)
{
register UINT32 result;
@ -299,7 +299,7 @@ _count_leading_ones(UINT32 value)
-------------------------------------------------*/
#define compare_exchange32 _compare_exchange32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
{
register INT32 result;
@ -333,7 +333,7 @@ _compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
#if defined(__ppc64__) || defined(__PPC64__)
#define compare_exchange64 _compare_exchange64
INLINE INT64 __attribute__((nonnull(1), always_inline))
INLINE INT64 ATTR_NONNULL ATTR_FORCE_INLINE
_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
{
register INT64 result;
@ -365,7 +365,7 @@ _compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-------------------------------------------------*/
#define atomic_exchange32 _atomic_exchange32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
{
register INT32 result;
@ -393,7 +393,7 @@ _atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-------------------------------------------------*/
#define atomic_add32 _atomic_add32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_add32(INT32 volatile *ptr, INT32 delta)
{
register INT32 result;
@ -422,7 +422,7 @@ _atomic_add32(INT32 volatile *ptr, INT32 delta)
-------------------------------------------------*/
#define atomic_increment32 _atomic_increment32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_increment32(INT32 volatile *ptr)
{
register INT32 result;
@ -450,7 +450,7 @@ _atomic_increment32(INT32 volatile *ptr)
-------------------------------------------------*/
#define atomic_decrement32 _atomic_decrement32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_decrement32(INT32 volatile *ptr)
{
register INT32 result;

View File

@ -33,7 +33,7 @@
#ifndef __x86_64__
#define mul_32x32 _mul_32x32
INLINE INT64 __attribute__((const, always_inline))
INLINE INT64 ATTR_CONST ATTR_FORCE_INLINE
_mul_32x32(INT32 a, INT32 b)
{
register INT64 result;
@ -59,7 +59,7 @@ _mul_32x32(INT32 a, INT32 b)
#ifndef __x86_64__
#define mulu_32x32 _mulu_32x32
INLINE UINT64 __attribute__((const, always_inline))
INLINE UINT64 ATTR_CONST ATTR_FORCE_INLINE
_mulu_32x32(UINT32 a, UINT32 b)
{
register UINT64 result;
@ -84,7 +84,7 @@ _mulu_32x32(UINT32 a, UINT32 b)
-------------------------------------------------*/
#define mul_32x32_hi _mul_32x32_hi
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_mul_32x32_hi(INT32 a, INT32 b)
{
register INT32 result, temp;
@ -109,7 +109,7 @@ _mul_32x32_hi(INT32 a, INT32 b)
-------------------------------------------------*/
#define mulu_32x32_hi _mulu_32x32_hi
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_mulu_32x32_hi(UINT32 a, UINT32 b)
{
register UINT32 result, temp;
@ -136,7 +136,7 @@ _mulu_32x32_hi(UINT32 a, UINT32 b)
#ifndef __x86_64__
#define mul_32x32_shift _mul_32x32_shift
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_mul_32x32_shift(INT32 a, INT32 b, UINT8 shift)
{
register INT32 result;
@ -166,7 +166,7 @@ _mul_32x32_shift(INT32 a, INT32 b, UINT8 shift)
#ifndef __x86_64__
#define mulu_32x32_shift _mulu_32x32_shift
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_mulu_32x32_shift(UINT32 a, UINT32 b, UINT8 shift)
{
register UINT32 result;
@ -194,7 +194,7 @@ _mulu_32x32_shift(UINT32 a, UINT32 b, UINT8 shift)
#ifndef __x86_64__
#define div_64x32 _div_64x32
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_div_64x32(INT64 a, INT32 b)
{
register INT32 result, temp;
@ -221,7 +221,7 @@ _div_64x32(INT64 a, INT32 b)
#ifndef __x86_64__
#define divu_64x32 _divu_64x32
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_divu_64x32(UINT64 a, UINT32 b)
{
register UINT32 result, temp;
@ -249,7 +249,7 @@ _divu_64x32(UINT64 a, UINT32 b)
#ifndef __x86_64__
#define div_64x32_rem _div_64x32_rem
INLINE INT32 __attribute__((always_inline))
INLINE INT32 ATTR_FORCE_INLINE
_div_64x32_rem(INT64 dividend, INT32 divisor, INT32 *remainder)
{
register INT32 quotient;
@ -277,7 +277,7 @@ _div_64x32_rem(INT64 dividend, INT32 divisor, INT32 *remainder)
#ifndef __x86_64__
#define divu_64x32_rem _divu_64x32_rem
INLINE UINT32 __attribute__((always_inline))
INLINE UINT32 ATTR_FORCE_INLINE
_divu_64x32_rem(UINT64 dividend, UINT32 divisor, UINT32 *remainder)
{
register UINT32 quotient;
@ -305,7 +305,7 @@ _divu_64x32_rem(UINT64 dividend, UINT32 divisor, UINT32 *remainder)
#ifndef __x86_64__
#define div_32x32_shift _div_32x32_shift
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_div_32x32_shift(INT32 a, INT32 b, UINT8 shift)
{
register INT32 result;
@ -337,7 +337,7 @@ _div_32x32_shift(INT32 a, INT32 b, UINT8 shift)
#ifndef __x86_64__
#define divu_32x32_shift _divu_32x32_shift
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_divu_32x32_shift(UINT32 a, UINT32 b, UINT8 shift)
{
register INT32 result;
@ -368,7 +368,7 @@ _divu_32x32_shift(UINT32 a, UINT32 b, UINT8 shift)
#ifndef __x86_64__
#define mod_64x32 _mod_64x32
INLINE INT32 __attribute__((const, always_inline))
INLINE INT32 ATTR_CONST ATTR_FORCE_INLINE
_mod_64x32(INT64 a, INT32 b)
{
register INT32 result, temp;
@ -395,7 +395,7 @@ _mod_64x32(INT64 a, INT32 b)
#ifndef __x86_64__
#define modu_64x32 _modu_64x32
INLINE UINT32 __attribute__((const, always_inline))
INLINE UINT32 ATTR_CONST ATTR_FORCE_INLINE
_modu_64x32(UINT64 a, UINT32 b)
{
register UINT32 result, temp;
@ -422,7 +422,7 @@ _modu_64x32(UINT64 a, UINT32 b)
#ifdef __SSE2__
#define recip_approx _recip_approx
INLINE float __attribute__((const))
INLINE float ATTR_CONST
_recip_approx(float value)
{
__m128 value_xmm = _mm_set_ss(value);
@ -445,7 +445,7 @@ _recip_approx(float value)
-------------------------------------------------*/
#define count_leading_zeros _count_leading_zeros
INLINE UINT8 __attribute__((const, always_inline))
INLINE UINT8 ATTR_CONST ATTR_FORCE_INLINE
_count_leading_zeros(UINT32 value)
{
register UINT32 result;
@ -470,7 +470,7 @@ _count_leading_zeros(UINT32 value)
-------------------------------------------------*/
#define count_leading_ones _count_leading_ones
INLINE UINT8 __attribute__((const, always_inline))
INLINE UINT8 ATTR_CONST ATTR_FORCE_INLINE
_count_leading_ones(UINT32 value)
{
register UINT32 result;
@ -504,7 +504,7 @@ _count_leading_ones(UINT32 value)
-------------------------------------------------*/
#define compare_exchange32 _compare_exchange32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
{
register INT32 result;
@ -531,7 +531,7 @@ _compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
#ifdef __x86_64__
#define compare_exchange64 _compare_exchange64
INLINE INT64 __attribute__((nonnull(1), always_inline))
INLINE INT64 ATTR_NONNULL ATTR_FORCE_INLINE
_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
{
register INT64 result;
@ -557,7 +557,7 @@ _compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-------------------------------------------------*/
#define atomic_exchange32 _atomic_exchange32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
{
register INT32 result;
@ -580,7 +580,7 @@ _atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-------------------------------------------------*/
#define atomic_add32 _atomic_add32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_add32(INT32 volatile *ptr, INT32 delta)
{
register INT32 result = delta;
@ -604,7 +604,7 @@ _atomic_add32(INT32 volatile *ptr, INT32 delta)
-------------------------------------------------*/
#define atomic_increment32 _atomic_increment32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_increment32(INT32 volatile *ptr)
{
register INT32 result = 1;
@ -628,7 +628,7 @@ _atomic_increment32(INT32 volatile *ptr)
-------------------------------------------------*/
#define atomic_decrement32 _atomic_decrement32
INLINE INT32 __attribute__((nonnull(1), always_inline))
INLINE INT32 ATTR_NONNULL ATTR_FORCE_INLINE
_atomic_decrement32(INT32 volatile *ptr)
{
register INT32 result = -1;

View File

@ -180,15 +180,6 @@ typedef union
#define DEGREE_TO_RADIAN(x) ((M_PI / 180.0) * (x))
/* U64 and S64 are used to wrap long integer constants. */
#ifdef __GNUC__
#define U64(val) val##ULL
#define S64(val) val##LL
#else
#define U64(val) val
#define S64(val) val
#endif
/* Useful macros to deal with bit shuffling encryptions */
#define BIT(x,n) (((x)>>(n))&1)

View File

@ -647,7 +647,14 @@ void options_output_help(core_options *opts, void (*output)(const char *))
/* otherwise, output entries for all non-deprecated items */
else if ((data->flags & (OPTION_DEPRECATED | OPTION_INTERNAL)) == 0 && data->description != NULL)
output_printf(output, "-%-20s%s\n", astring_c(data->links[0].name), data->description);
{
if (data->flags & OPTION_BOOLEAN)
output_printf(output, "-[no]%-16s%s\n", astring_c(data->links[0].name), data->description);
else if (data->flags & OPTION_COMMAND)
output_printf(output, "-%-20s%s\n", astring_c(data->links[0].name), data->description);
else
output_printf(output, "-%s %s\n%21s%s\n", astring_c(data->links[0].name), astring_c(data->links[0].name), "",data->description);
}
}
}

View File

@ -39,9 +39,12 @@
#define ATTR_MALLOC __attribute__((malloc))
#define ATTR_PURE __attribute__((pure))
#define ATTR_CONST __attribute__((const))
#define ATTR_FORCE_INLINE __attribute__((always_inline))
#define ATTR_NONNULL __attribute__((nonnull(1)))
#define UNEXPECTED(exp) __builtin_expect((exp), 0)
#define TYPES_COMPATIBLE(a,b) __builtin_types_compatible_p(a, b)
#define RESTRICT __restrict__
#define SETJMP_GNUC_PROTECT() (void)__builtin_return_address(1)
#else
#define ATTR_UNUSED
#define ATTR_NORETURN
@ -49,9 +52,12 @@
#define ATTR_MALLOC
#define ATTR_PURE
#define ATTR_CONST
#define ATTR_FORCE_INLINE
#define ATTR_NONNULL
#define UNEXPECTED(exp) (exp)
#define TYPES_COMPATIBLE(a,b) 1
#define RESTRICT
#define SETJMP_GNUC_PROTECT() do {} while (0)
#endif
@ -130,6 +136,16 @@ __extension__ typedef signed long long INT64;
#endif
/* U64 and S64 are used to wrap long integer constants. */
#ifdef __GNUC__
#define U64(val) val##ULL
#define S64(val) val##LL
#else
#define U64(val) val
#define S64(val) val
#endif
/* Highly useful macro for compile-time knowledge of an array size */
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))