Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(698)

Side by Side Diff: third_party/WebKit/Source/platform/wtf/dtoa/fixed-dtoa.cc

Issue 2839663003: Replace ASSERT with DHCECK_op in platform/wtf (Closed)
Patch Set: wtf Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 uint32_t part = static_cast<uint32_t>(accumulator & kMask32); 48 uint32_t part = static_cast<uint32_t>(accumulator & kMask32);
49 accumulator >>= 32; 49 accumulator >>= 32;
50 accumulator = accumulator + (low_bits_ >> 32) * multiplicand; 50 accumulator = accumulator + (low_bits_ >> 32) * multiplicand;
51 low_bits_ = (accumulator << 32) + part; 51 low_bits_ = (accumulator << 32) + part;
52 accumulator >>= 32; 52 accumulator >>= 32;
53 accumulator = accumulator + (high_bits_ & kMask32) * multiplicand; 53 accumulator = accumulator + (high_bits_ & kMask32) * multiplicand;
54 part = static_cast<uint32_t>(accumulator & kMask32); 54 part = static_cast<uint32_t>(accumulator & kMask32);
55 accumulator >>= 32; 55 accumulator >>= 32;
56 accumulator = accumulator + (high_bits_ >> 32) * multiplicand; 56 accumulator = accumulator + (high_bits_ >> 32) * multiplicand;
57 high_bits_ = (accumulator << 32) + part; 57 high_bits_ = (accumulator << 32) + part;
58 ASSERT((accumulator >> 32) == 0); 58 DCHECK_EQ((accumulator >> 32), 0u);
59 } 59 }
60 60
61 void Shift(int shift_amount) { 61 void Shift(int shift_amount) {
62 ASSERT(-64 <= shift_amount && shift_amount <= 64); 62 DCHECK_LE(-64, shift_amount);
63 DCHECK_LE(shift_amount, 64);
63 if (shift_amount == 0) { 64 if (shift_amount == 0) {
64 return; 65 return;
65 } else if (shift_amount == -64) { 66 } else if (shift_amount == -64) {
66 high_bits_ = low_bits_; 67 high_bits_ = low_bits_;
67 low_bits_ = 0; 68 low_bits_ = 0;
68 } else if (shift_amount == 64) { 69 } else if (shift_amount == 64) {
69 low_bits_ = high_bits_; 70 low_bits_ = high_bits_;
70 high_bits_ = 0; 71 high_bits_ = 0;
71 } else if (shift_amount <= 0) { 72 } else if (shift_amount <= 0) {
72 high_bits_ <<= -shift_amount; 73 high_bits_ <<= -shift_amount;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // 0 <= fractionals * 2^exponent < 1 226 // 0 <= fractionals * 2^exponent < 1
226 // The buffer holds the result. 227 // The buffer holds the result.
227 // The function will round its result. During the rounding-process digits no t 228 // The function will round its result. During the rounding-process digits no t
228 // generated by this function might be updated, and the decimal-point variab le 229 // generated by this function might be updated, and the decimal-point variab le
229 // might be updated. If this function generates the digits 99 and the buffer 230 // might be updated. If this function generates the digits 99 and the buffer
230 // already contained "199" (thus yielding a buffer of "19999") then a 231 // already contained "199" (thus yielding a buffer of "19999") then a
231 // rounding-up will change the contents of the buffer to "20000". 232 // rounding-up will change the contents of the buffer to "20000".
232 static void FillFractionals(uint64_t fractionals, int exponent, 233 static void FillFractionals(uint64_t fractionals, int exponent,
233 int fractional_count, Vector<char> buffer, 234 int fractional_count, Vector<char> buffer,
234 int* length, int* decimal_point) { 235 int* length, int* decimal_point) {
235 ASSERT(-128 <= exponent && exponent <= 0); 236 DCHECK_LE(-128, exponent);
237 DCHECK_LE(exponent, 0);
236 // 'fractionals' is a fixed-point number, with binary point at bit 238 // 'fractionals' is a fixed-point number, with binary point at bit
237 // (-exponent). Inside the function the non-converted remainder of fract ionals 239 // (-exponent). Inside the function the non-converted remainder of fract ionals
238 // is a fixed-point number, with binary point at bit 'point'. 240 // is a fixed-point number, with binary point at bit 'point'.
239 if (-exponent <= 64) { 241 if (-exponent <= 64) {
240 // One 64 bit number is sufficient. 242 // One 64 bit number is sufficient.
241 ASSERT(fractionals >> 56 == 0); 243 ASSERT(fractionals >> 56 == 0);
242 int point = -exponent; 244 int point = -exponent;
243 for (int i = 0; i < fractional_count; ++i) { 245 for (int i = 0; i < fractional_count; ++i) {
244 if (fractionals == 0) break; 246 if (fractionals == 0) break;
245 // Instead of multiplying by 10 we multiply by 5 and adjust the point 247 // Instead of multiplying by 10 we multiply by 5 and adjust the point
(...skipping 11 matching lines...) Expand all
257 char digit = static_cast<char>(fractionals >> point); 259 char digit = static_cast<char>(fractionals >> point);
258 buffer[*length] = '0' + digit; 260 buffer[*length] = '0' + digit;
259 (*length)++; 261 (*length)++;
260 fractionals -= static_cast<uint64_t>(digit) << point; 262 fractionals -= static_cast<uint64_t>(digit) << point;
261 } 263 }
262 // If the first bit after the point is set we have to round up. 264 // If the first bit after the point is set we have to round up.
263 if (((fractionals >> (point - 1)) & 1) == 1) { 265 if (((fractionals >> (point - 1)) & 1) == 1) {
264 RoundUp(buffer, length, decimal_point); 266 RoundUp(buffer, length, decimal_point);
265 } 267 }
266 } else { // We need 128 bits. 268 } else { // We need 128 bits.
267 ASSERT(64 < -exponent && -exponent <= 128); 269 DCHECK_LT(64, -exponent);
270 DCHECK_LE(-exponent, 128);
268 UInt128 fractionals128 = UInt128(fractionals, 0); 271 UInt128 fractionals128 = UInt128(fractionals, 0);
269 fractionals128.Shift(-exponent - 64); 272 fractionals128.Shift(-exponent - 64);
270 int point = 128; 273 int point = 128;
271 for (int i = 0; i < fractional_count; ++i) { 274 for (int i = 0; i < fractional_count; ++i) {
272 if (fractionals128.IsZero()) break; 275 if (fractionals128.IsZero()) break;
273 // As before: instead of multiplying by 10 we multiply by 5 and adjust the 276 // As before: instead of multiplying by 10 we multiply by 5 and adjust the
274 // point location. 277 // point location.
275 // This multiplication will not overflow for the same reasons as before. 278 // This multiplication will not overflow for the same reasons as before.
276 fractionals128.Multiply(5); 279 fractionals128.Multiply(5);
277 point--; 280 point--;
278 char digit = static_cast<char>(fractionals128.DivModPowerOf2(poi nt)); 281 char digit = static_cast<char>(fractionals128.DivModPowerOf2(poi nt));
279 buffer[*length] = '0' + digit; 282 buffer[*length] = '0' + digit;
280 (*length)++; 283 (*length)++;
284
tkent 2017/05/08 14:31:04 This change is unnecessary.
Hwanseung Lee 2017/05/08 23:31:13 Done.
281 } 285 }
282 if (fractionals128.BitAt(point - 1) == 1) { 286 if (fractionals128.BitAt(point - 1) == 1) {
283 RoundUp(buffer, length, decimal_point); 287 RoundUp(buffer, length, decimal_point);
284 } 288 }
285 } 289 }
286 } 290 }
287 291
288 292
289 // Removes leading and trailing zeros. 293 // Removes leading and trailing zeros.
290 // If leading zeros are removed then the decimal point position is adjusted. 294 // If leading zeros are removed then the decimal point position is adjusted.
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 FillDigits64(integrals, buffer, length); 379 FillDigits64(integrals, buffer, length);
376 } else { 380 } else {
377 FillDigits32(static_cast<uint32_t>(integrals), buffer, length); 381 FillDigits32(static_cast<uint32_t>(integrals), buffer, length);
378 } 382 }
379 *decimal_point = *length; 383 *decimal_point = *length;
380 FillFractionals(fractionals, exponent, fractional_count, 384 FillFractionals(fractionals, exponent, fractional_count,
381 buffer, length, decimal_point); 385 buffer, length, decimal_point);
382 } else if (exponent < -128) { 386 } else if (exponent < -128) {
383 // This configuration (with at most 20 digits) means that all digits must be 387 // This configuration (with at most 20 digits) means that all digits must be
384 // 0. 388 // 0.
385 ASSERT(fractional_count <= 20); 389 DCHECK_LE(fractional_count, 20);
386 buffer[0] = '\0'; 390 buffer[0] = '\0';
387 *length = 0; 391 *length = 0;
388 *decimal_point = -fractional_count; 392 *decimal_point = -fractional_count;
389 } else { 393 } else {
390 *decimal_point = 0; 394 *decimal_point = 0;
391 FillFractionals(significand, exponent, fractional_count, 395 FillFractionals(significand, exponent, fractional_count,
392 buffer, length, decimal_point); 396 buffer, length, decimal_point);
393 } 397 }
394 TrimZeros(buffer, length, decimal_point); 398 TrimZeros(buffer, length, decimal_point);
395 buffer[*length] = '\0'; 399 buffer[*length] = '\0';
396 if ((*length) == 0) { 400 if ((*length) == 0) {
397 // The string is empty and the decimal_point thus has no importance. Mimick 401 // The string is empty and the decimal_point thus has no importance. Mimick
398 // Gay's dtoa and and set it to -fractional_count. 402 // Gay's dtoa and and set it to -fractional_count.
399 *decimal_point = -fractional_count; 403 *decimal_point = -fractional_count;
400 } 404 }
401 return true; 405 return true;
402 } 406 }
403 407
404 } // namespace double_conversion 408 } // namespace double_conversion
405 409
406 } // namespace WTF 410 } // namespace WTF
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698