From 4b67cc371eefb4fd28f7b0800ee44313513b7997 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Sun, 11 Oct 2009 15:01:39 +0400 Subject: [PATCH] introduce "overflow" helpers Suggested-by: H. Peter Anvin Signed-off-by: Cyrill Gorcunov --- nasmlib.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/nasmlib.h b/nasmlib.h index 689485b..441ea20 100644 --- a/nasmlib.h +++ b/nasmlib.h @@ -383,4 +383,31 @@ const char *prefix_name(int); extern const uint8_t zero_buffer[ZERO_BUF_SIZE]; size_t fwritezero(size_t bytes, FILE *fp); +static inline bool overflow_general(int64_t value, int bytes) +{ + int sbit = (bytes << 3) - 1; + int64_t vmax = ((int64_t)2 << sbit) - 1; + int64_t vmin = -((int64_t)1 << sbit); + + return value < vmin || value > vmax; +} + +static inline bool overflow_signed(int64_t value, int bytes) +{ + int sbit = (bytes << 3) - 1; + int64_t vmax = ((int64_t)1 << sbit) - 1; + int64_t vmin = -((int64_t)1 << sbit); + + return value < vmin || value > vmax; +} + +static inline bool overflow_unsigned(int64_t value, int bytes) +{ + int sbit = (bytes << 3) - 1; + int64_t vmax = ((int64_t)2 << sbit) - 1; + int64_t vmin = 0; + + return value < vmin || value > vmax; +} + #endif -- 2.7.4