Here are some comments.
http://codereview.chromium.org/619005/diff/1/3 File src/conversions.cc (left): http://codereview.chromium.org/619005/diff/1/3#oldcode684 src/conversions.cc:684: // efficiently, we probably have to modify dtoa. Could you quickly do a check if you are generating 3 0s or 3 9s in a row, and only then check to see if you should truncate them? http://codereview.chromium.org/619005/diff/1/7 File src/diy_fp.h (right): http://codereview.chromium.org/619005/diff/1/7#newcode63 src/diy_fp.h:63: } How about a private constructor DiyFp(a, b) f_(a.f - b.f), e_(a.e_) { ASSERT ... } Could this be more efficient? Then Minus(a, b) { return DiyFp(a,b); } http://codereview.chromium.org/619005/diff/1/7#newcode85 src/diy_fp.h:85: } Can we do an assembly language version for ia32, and keep the portable version for all other platforms? Then we have 80-bit FP in hardware. http://codereview.chromium.org/619005/diff/1/7#newcode97 src/diy_fp.h:97: Could you add a while (!(f & top12bits)) { f <<= 12; e -= 12; }, for example, to speed up the loop? http://codereview.chromium.org/619005/diff/1/8 File src/double.h (right): http://codereview.chromium.org/619005/diff/1/8#newcode46 src/double.h:46: converter_t tmp; tmp.d = d; return tmp.n; If this was done with a reference, or a macro, could it be done in-place (ie #define DOUBLE_TO_UINT64(d) \ reinterpret_cast<converter_t *>(& (d))->n or inline uint_64t& double_to_uint(double &d){ return reinterpret_cast<converter_t *>(& (d))->n; } Or is this unsave due to the spec and pointer aliasing optimizations? http://codereview.chromium.org/619005/diff/1/8#newcode58 src/double.h:58: Double() : d_(0.0) {} Would all the methods work faster if d64_ was a uint64_t, and the constructor was Double(double d) : d64_(double_to_uint64(d)) {}? http://codereview.chromium.org/619005/diff/1/4 File src/grisu3.cc (right): http://codereview.chromium.org/619005/diff/1/4#newcode322 src/grisu3.cc:322: // fractionals.f >>= 1; fractionals.e++; // idempotent idempotent means if you do something more than once, the result is the same as if you do it only once. I think you mean "leaves value unchanged". http://codereview.chromium.org/619005/diff/1/9 File src/powers_ten.h (right): http://codereview.chromium.org/619005/diff/1/9#newcode41 src/powers_ten.h:41: GRISU_UINT64_C(0xbf29dcab,a82fdeae) , GRISU_UINT64_C(0xeef453d6,923bd65a) , GRISU_UINT64_C(0x9558b466,1b6565f8) , GRISU_UINT64_C(0xbaaee17f,a23ebf76) , GRISU_UINT64_C(0xe95a99df,8ace6f54) , GRISU_UINT64_C(0x91d8a02b,b6c10594) , GRISU_UINT64_C(0xb64ec836,a47146fa) , GRISU_UINT64_C(0xe3e27a44,4d8d98b8) , GRISU_UINT64_C(0x8e6d8c6a,b0787f73) , GRISU_UINT64_C(0xb208ef85,5c969f50) , GRISU_UINT64_C(0xde8b2b66,b3bc4724) , GRISU_UINT64_C(0x8b16fb20,3055ac76) , GRISU_UINT64_C(0xaddcb9e8,3c6b1794) , GRISU_UINT64_C(0xd953e862,4b85dd79) , GRISU_UINT64_C(0x87d4713d,6f33aa6c) , GRISU_UINT64_C(0xa9c98d8c,cb009506) , GRISU_UINT64_C(0xd43bf0ef,fdc0ba48) , GRISU_UINT64_C(0x84a57695,fe98746d) , GRISU_UINT64_C(0xa5ced43b,7e3e9188) , GRISU_UINT64_C(0xcf42894a,5dce35ea) , GRISU_UINT64_C(0x818995ce,7aa0e1b2) , GRISU_UINT64_C(0xa1ebfb42,19491a1f) , GRISU_UINT64_C(0xca66fa12,9f9b60a7) , GRISU_UINT64_C(0xfd00b897,478238d1) , GRISU_UINT64_C(0x9e20735e,8cb16382) , GRISU_UINT64_C(0xc5a89036,2fddbc63) , GRISU_UINT64_C(0xf712b443,bbd52b7c) , GRISU_UINT64_C(0x9a6bb0aa,55653b2d) , GRISU_UINT64_C(0xc1069cd4,eabe89f9) , GRISU_UINT64_C(0xf148440a,256e2c77) , GRISU_UINT64_C(0x96cd2a86,5764dbca) , GRISU_UINT64_C(0xbc807527,ed3e12bd) , GRISU_UINT64_C(0xeba09271,e88d976c) , GRISU_UINT64_C(0x93445b87,31587ea3) , GRISU_UINT64_C(0xb8157268,fdae9e4c) , GRISU_UINT64_C(0xe61acf03,3d1a45df) , GRISU_UINT64_C(0x8fd0c162,06306bac) , GRISU_UINT64_C(0xb3c4f1ba,87bc8697) , GRISU_UINT64_C(0xe0b62e29,29aba83c) , GRISU_UINT64_C(0x8c71dcd9,ba0b4926) , GRISU_UINT64_C(0xaf8e5410,288e1b6f) , GRISU_UINT64_C(0xdb71e914,32b1a24b) , GRISU_UINT64_C(0x892731ac,9faf056f) , GRISU_UINT64_C(0xab70fe17,c79ac6ca) , GRISU_UINT64_C(0xd64d3d9d,b981787d) , GRISU_UINT64_C(0x85f04682,93f0eb4e) , GRISU_UINT64_C(0xa76c5823,38ed2622) , GRISU_UINT64_C(0xd1476e2c,07286faa) , GRISU_UINT64_C(0x82cca4db,847945ca) , GRISU_UINT64_C(0xa37fce12,6597973d) , GRISU_UINT64_C(0xcc5fc196,fefd7d0c) , GRISU_UINT64_C(0xff77b1fc,bebcdc4f) , GRISU_UINT64_C(0x9faacf3d,f73609b1) , GRISU_UINT64_C(0xc795830d,75038c1e) , GRISU_UINT64_C(0xf97ae3d0,d2446f25) , GRISU_UINT64_C(0x9becce62,836ac577) , GRISU_UINT64_C(0xc2e801fb,244576d5) , GRISU_UINT64_C(0xf3a20279,ed56d48a) , GRISU_UINT64_C(0x9845418c,345644d7) , GRISU_UINT64_C(0xbe5691ef,416bd60c) , GRISU_UINT64_C(0xedec366b,11c6cb8f) , GRISU_UINT64_C(0x94b3a202,eb1c3f39) , GRISU_UINT64_C(0xb9e08a83,a5e34f08) , GRISU_UINT64_C(0xe858ad24,8f5c22ca) , GRISU_UINT64_C(0x91376c36,d99995be) , GRISU_UINT64_C(0xb5854744,8ffffb2e) , Could this be formatted into 80-character lines? http://codereview.chromium.org/619005 -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
