From ada634ac0fbf6affb0401ce6c297ec890610eed3 Mon Sep 17 00:00:00 2001 From: nagachika Date: Wed, 10 Aug 2016 16:19:50 +0000 Subject: merge revision(s) 55573: [Backport #12209] * pack.c (pack_pack): use union instead of bare variable to ease optimizations and avoid assigning x87 floating point number. [ruby-core:74496] [Bug #12209] * pack.c (pack_unpack): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@55854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 +++ pack.c | 203 +++++++++++++++++--------------------------------------------- version.h | 6 +- 3 files changed, 65 insertions(+), 152 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c2c0fa6fb..f034bdd448 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Aug 11 01:09:43 2016 NARUSE, Yui + + * pack.c (pack_pack): use union instead of bare variable to ease + optimizations and avoid assigning x87 floating point number. + [ruby-core:74496] [Bug #12209] + + * pack.c (pack_unpack): ditto. + Tue Aug 2 01:34:12 2016 Eric Wong * lib/webrick/httpservlet/cgihandler.rb (do_GET): delete HTTP_PROXY diff --git a/pack.c b/pack.c index 9b4aa6a93f..5598967678 100644 --- a/pack.c +++ b/pack.c @@ -68,59 +68,18 @@ static const char endstr[] = "sSiIlLqQjJ"; # define NATINT_LEN(type,len) ((int)sizeof(type)) #endif -#define define_swapx(x, xtype) \ -static xtype \ -TOKEN_PASTE(swap,x)(xtype z) \ -{ \ - xtype r; \ - xtype *zp; \ - unsigned char *s, *t; \ - int i; \ - \ - zp = xmalloc(sizeof(xtype)); \ - *zp = z; \ - s = (unsigned char*)zp; \ - t = xmalloc(sizeof(xtype)); \ - for (i=0; i 0) { - float f; - FLOAT_CONVWITH(ftmp); + FLOAT_CONVWITH(tmp); from = NEXTFROM; - f = (float)RFLOAT_VALUE(rb_to_float(from)); - f = HTOVF(f,ftmp); - rb_str_buf_cat(res, (char*)&f, sizeof(float)); + tmp.f = (float)RFLOAT_VALUE(rb_to_float(from)); + HTOVF(tmp); + rb_str_buf_cat(res, tmp.buf, sizeof(float)); } break; case 'E': /* double precision float in VAX byte-order */ while (len-- > 0) { - double d; - DOUBLE_CONVWITH(dtmp); - + DOUBLE_CONVWITH(tmp); from = NEXTFROM; - d = RFLOAT_VALUE(rb_to_float(from)); - d = HTOVD(d,dtmp); - rb_str_buf_cat(res, (char*)&d, sizeof(double)); + tmp.d = RFLOAT_VALUE(rb_to_float(from)); + HTOVD(tmp); + rb_str_buf_cat(res, tmp.buf, sizeof(double)); } break; @@ -765,25 +681,22 @@ pack_pack(VALUE ary, VALUE fmt) case 'g': /* single precision float in network byte-order */ while (len-- > 0) { - float f; - FLOAT_CONVWITH(ftmp); - + FLOAT_CONVWITH(tmp); from = NEXTFROM; - f = (float)RFLOAT_VALUE(rb_to_float(from)); - f = HTONF(f,ftmp); - rb_str_buf_cat(res, (char*)&f, sizeof(float)); + tmp.f = (float)RFLOAT_VALUE(rb_to_float(from)); + HTONF(tmp); + rb_str_buf_cat(res, tmp.buf, sizeof(float)); } break; case 'G': /* double precision float in network byte-order */ while (len-- > 0) { - double d; - DOUBLE_CONVWITH(dtmp); + DOUBLE_CONVWITH(tmp); from = NEXTFROM; - d = RFLOAT_VALUE(rb_to_float(from)); - d = HTOND(d,dtmp); - rb_str_buf_cat(res, (char*)&d, sizeof(double)); + tmp.d = RFLOAT_VALUE(rb_to_float(from)); + HTOND(tmp); + rb_str_buf_cat(res, tmp.buf, sizeof(double)); } break; @@ -1580,13 +1493,11 @@ pack_unpack(VALUE str, VALUE fmt) case 'e': PACK_LENGTH_ADJUST_SIZE(sizeof(float)); while (len-- > 0) { - float tmp; - FLOAT_CONVWITH(ftmp); - - memcpy(&tmp, s, sizeof(float)); + FLOAT_CONVWITH(tmp); + memcpy(tmp.buf, s, sizeof(float)); s += sizeof(float); - tmp = VTOHF(tmp,ftmp); - UNPACK_PUSH(DBL2NUM((double)tmp)); + VTOHF(tmp); + UNPACK_PUSH(DBL2NUM(tmp.f)); } PACK_ITEM_ADJUST(); break; @@ -1594,13 +1505,11 @@ pack_unpack(VALUE str, VALUE fmt) case 'E': PACK_LENGTH_ADJUST_SIZE(sizeof(double)); while (len-- > 0) { - double tmp; - DOUBLE_CONVWITH(dtmp); - - memcpy(&tmp, s, sizeof(double)); + DOUBLE_CONVWITH(tmp); + memcpy(tmp.buf, s, sizeof(double)); s += sizeof(double); - tmp = VTOHD(tmp,dtmp); - UNPACK_PUSH(DBL2NUM(tmp)); + VTOHD(tmp); + UNPACK_PUSH(DBL2NUM(tmp.d)); } PACK_ITEM_ADJUST(); break; @@ -1620,13 +1529,11 @@ pack_unpack(VALUE str, VALUE fmt) case 'g': PACK_LENGTH_ADJUST_SIZE(sizeof(float)); while (len-- > 0) { - float tmp; - FLOAT_CONVWITH(ftmp); - - memcpy(&tmp, s, sizeof(float)); + FLOAT_CONVWITH(tmp); + memcpy(tmp.buf, s, sizeof(float)); s += sizeof(float); - tmp = NTOHF(tmp,ftmp); - UNPACK_PUSH(DBL2NUM((double)tmp)); + NTOHF(tmp); + UNPACK_PUSH(DBL2NUM(tmp.f)); } PACK_ITEM_ADJUST(); break; @@ -1634,13 +1541,11 @@ pack_unpack(VALUE str, VALUE fmt) case 'G': PACK_LENGTH_ADJUST_SIZE(sizeof(double)); while (len-- > 0) { - double tmp; - DOUBLE_CONVWITH(dtmp); - - memcpy(&tmp, s, sizeof(double)); + DOUBLE_CONVWITH(tmp); + memcpy(tmp.buf, s, sizeof(double)); s += sizeof(double); - tmp = NTOHD(tmp,dtmp); - UNPACK_PUSH(DBL2NUM(tmp)); + NTOHD(tmp); + UNPACK_PUSH(DBL2NUM(tmp.d)); } PACK_ITEM_ADJUST(); break; diff --git a/version.h b/version.h index d8c6429ab8..a8ee5b298f 100644 --- a/version.h +++ b/version.h @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.3.2" -#define RUBY_RELEASE_DATE "2016-08-02" -#define RUBY_PATCHLEVEL 144 +#define RUBY_RELEASE_DATE "2016-08-11" +#define RUBY_PATCHLEVEL 145 #define RUBY_RELEASE_YEAR 2016 #define RUBY_RELEASE_MONTH 8 -#define RUBY_RELEASE_DAY 2 +#define RUBY_RELEASE_DAY 11 #include "ruby/version.h" -- cgit v1.2.3