From ff2a5847b9898b99f9c513a73232b6b9f9a8212b Mon Sep 17 00:00:00 2001 From: Jakub Zawadzki Date: Tue, 17 Dec 2013 22:16:06 +0000 Subject: sign_ext.h: use G_GINT64_CONSTANT(), add sample for alternative method of sign extension. Alternative method looks much nicer in dissasembly. svn path=/trunk/; revision=54202 --- wsutil/sign_ext.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'wsutil/sign_ext.h') diff --git a/wsutil/sign_ext.h b/wsutil/sign_ext.h index ef911829ae..00f84e0188 100644 --- a/wsutil/sign_ext.h +++ b/wsutil/sign_ext.h @@ -41,10 +41,20 @@ ws_sign_ext32(guint32 val, int no_of_bits) static inline guint64 ws_sign_ext64(guint64 val, int no_of_bits) { - if (val & (1LL << (no_of_bits-1))) - val |= (-1 << no_of_bits); + if (val & (G_GINT64_CONSTANT(1) << (no_of_bits-1))) + val |= (G_GINT64_CONSTANT(-1) << no_of_bits); return val; } _U_ +/* +static inline guint64 +ws_sign_ext64(guint64 val, int no_of_bits) +{ + gint64 sval = (val << (64 - no_of_bits)); + + return (guint64) (sval >> (64 - no_of_bits)); +} +*/ + #endif /* __WSUTIL_SIGN_EXT_H__ */ -- cgit v1.2.1