> -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > Yang Rong > Sent: Tuesday, October 20, 2015 4:39 PM > To: [email protected] > Cc: Yang, Rong R > Subject: [Beignet] [PATCH] LibOcl: Fix float convert to long/ulong bug. > > If the float overflow, convert to long/ulong is undef. So must use > long/ulong's > max and min value > as return value. > Also refine long to other integer type sat convert. Use to statement to avoid > generate if/else/endif. > > Signed-off-by: Yang Rong <[email protected]> > --- > backend/src/libocl/script/ocl_convert.sh | 24 +++++++++++++++++++++--- > 1 file changed, 21 insertions(+), 3 deletions(-) > > diff --git a/backend/src/libocl/script/ocl_convert.sh > b/backend/src/libocl/script/ocl_convert.sh > index 4f720fe..432bd41 100755 > --- a/backend/src/libocl/script/ocl_convert.sh > +++ b/backend/src/libocl/script/ocl_convert.sh > @@ -161,7 +161,8 @@ else > echo ' > #define DEF(DSTTYPE, SRCTYPE, MIN, MAX) \ > OVERLOADABLE DSTTYPE convert_ ## DSTTYPE ## _sat(SRCTYPE x) { \ > - return x >= MAX ? (DSTTYPE)MAX : x <= MIN ? (DSTTYPE)MIN : x; \ > + x = x >= MAX ? MAX : x; \ > + return x <= MIN ? (DSTTYPE)MIN : (DSTTYPE)x; \ > } > ' > fi > @@ -173,8 +174,25 @@ DEF(short, long, -32768, 32767); > DEF(ushort, long, 0, 65535); > DEF(int, long, -0x7fffffff-1, 0x7fffffff); > DEF(uint, long, 0, 0xffffffffu); > -DEF(long, float, -9.223372036854776e+18f, 9.223372036854776e+18f); > -DEF(ulong, float, 0, 1.8446744073709552e+19f); > +#undef DEF > +' > + > +if [ $1"a" = "-pa" ]; then > + echo " > +#define DEF(DSTTYPE, SRCTYPE, SRC_MIN, SRC_MAX, DST_MIN, DST_MAX) \ > +OVERLOADABLE DSTTYPE convert_ ## DSTTYPE ## _sat(SRCTYPE x);" > +else > + echo ' > +#define DEF(DSTTYPE, SRCTYPE, SRC_MIN, SRC_MAX, DST_MIN, DST_MAX) \ > +OVERLOADABLE DSTTYPE convert_ ## DSTTYPE ## _sat(SRCTYPE x) { \ > + return x >= SRC_MAX ? DST_MAX : x <= SRC_MIN ? (DSTTYPE)DST_MIN : > (DSTTYPE)x; \
Why don't you use two sentences here?suppose this kind of writing would generate if-else blocks? Other parts LGTM. Thanks! Ruiling > +} > +' > +fi > + > +echo ' > +DEF(long, float, -0x1.0p63, 0x1.0p63, 0x8000000000000000, > 0x7fffffffffffffff); > +DEF(ulong, float, 0, 0x1.0p64, 0, 0xffffffffffffffff); > #undef DEF > ' > > -- > 1.9.1 > > _______________________________________________ > Beignet mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
