PPC: Suppress gcc warnings with -Wtype-limits

The hack added by c5b76b3810 was not
enough to avoid warnings with gcc flag -Wtype-limits. Add a new macro
to fix both problems.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
Blue Swirl 2010-09-18 05:53:15 +00:00
parent 95ee3914bf
commit d62d28630d
1 changed files with 25 additions and 25 deletions

View File

@ -1955,14 +1955,14 @@ target_ulong helper_dlmzb (target_ulong high, target_ulong low, uint32_t update_
DO_HANDLE_NAN(result, x) DO_HANDLE_NAN(result, y) DO_HANDLE_NAN(result, z) DO_HANDLE_NAN(result, x) DO_HANDLE_NAN(result, y) DO_HANDLE_NAN(result, z)
/* Saturating arithmetic helpers. */ /* Saturating arithmetic helpers. */
#define SATCVT(from, to, from_type, to_type, min, max, use_min, use_max) \ #define SATCVT(from, to, from_type, to_type, min, max) \
static inline to_type cvt##from##to(from_type x, int *sat) \ static inline to_type cvt##from##to(from_type x, int *sat) \
{ \ { \
to_type r; \ to_type r; \
if (use_min && x < min) { \ if (x < (from_type)min) { \
r = min; \ r = min; \
*sat = 1; \ *sat = 1; \
} else if (use_max && x > max) { \ } else if (x > (from_type)max) { \
r = max; \ r = max; \
*sat = 1; \ *sat = 1; \
} else { \ } else { \
@ -1970,30 +1970,30 @@ target_ulong helper_dlmzb (target_ulong high, target_ulong low, uint32_t update_
} \ } \
return r; \ return r; \
} }
SATCVT(sh, sb, int16_t, int8_t, INT8_MIN, INT8_MAX, 1, 1) #define SATCVTU(from, to, from_type, to_type, min, max) \
SATCVT(sw, sh, int32_t, int16_t, INT16_MIN, INT16_MAX, 1, 1) static inline to_type cvt##from##to(from_type x, int *sat) \
SATCVT(sd, sw, int64_t, int32_t, INT32_MIN, INT32_MAX, 1, 1) { \
to_type r; \
/* Work around gcc problems with the macro version */ if (x > (from_type)max) { \
static inline uint8_t cvtuhub(uint16_t x, int *sat) r = max; \
{ *sat = 1; \
uint8_t r; } else { \
r = x; \
if (x > UINT8_MAX) { } \
r = UINT8_MAX; return r; \
*sat = 1;
} else {
r = x;
} }
return r; SATCVT(sh, sb, int16_t, int8_t, INT8_MIN, INT8_MAX)
} SATCVT(sw, sh, int32_t, int16_t, INT16_MIN, INT16_MAX)
//SATCVT(uh, ub, uint16_t, uint8_t, 0, UINT8_MAX, 0, 1) SATCVT(sd, sw, int64_t, int32_t, INT32_MIN, INT32_MAX)
SATCVT(uw, uh, uint32_t, uint16_t, 0, UINT16_MAX, 0, 1)
SATCVT(ud, uw, uint64_t, uint32_t, 0, UINT32_MAX, 0, 1) SATCVTU(uh, ub, uint16_t, uint8_t, 0, UINT8_MAX)
SATCVT(sh, ub, int16_t, uint8_t, 0, UINT8_MAX, 1, 1) SATCVTU(uw, uh, uint32_t, uint16_t, 0, UINT16_MAX)
SATCVT(sw, uh, int32_t, uint16_t, 0, UINT16_MAX, 1, 1) SATCVTU(ud, uw, uint64_t, uint32_t, 0, UINT32_MAX)
SATCVT(sd, uw, int64_t, uint32_t, 0, UINT32_MAX, 1, 1) SATCVT(sh, ub, int16_t, uint8_t, 0, UINT8_MAX)
SATCVT(sw, uh, int32_t, uint16_t, 0, UINT16_MAX)
SATCVT(sd, uw, int64_t, uint32_t, 0, UINT32_MAX)
#undef SATCVT #undef SATCVT
#undef SATCVTU
#define LVE(name, access, swap, element) \ #define LVE(name, access, swap, element) \
void helper_##name (ppc_avr_t *r, target_ulong addr) \ void helper_##name (ppc_avr_t *r, target_ulong addr) \