Revision: 9848 Author: [email protected] Date: Mon Oct 31 07:39:21 2011 Log: Optimize JS date implementation for smi-only arrays
Review URL: http://codereview.chromium.org/8409010 http://code.google.com/p/v8/source/detail?r=9848 Modified: /branches/bleeding_edge/src/date.js /branches/bleeding_edge/src/runtime.cc ======================================= --- /branches/bleeding_edge/src/date.js Fri Oct 28 01:45:04 2011 +++ /branches/bleeding_edge/src/date.js Mon Oct 31 07:39:21 2011 @@ -294,8 +294,8 @@ } -var ymd_from_time_cache = [$NaN, $NaN, $NaN]; -var ymd_from_time_cached_time = $NaN; +var ymd_from_time_cache = [1970, 0, 1]; +var ymd_from_time_cached_time = 0; function YearFromTime(t) { if (t !== ymd_from_time_cached_time) { ======================================= --- /branches/bleeding_edge/src/runtime.cc Mon Oct 31 02:38:52 2011 +++ /branches/bleeding_edge/src/runtime.cc Mon Oct 31 07:39:21 2011 @@ -7875,19 +7875,14 @@ FixedArrayBase* elms_base = FixedArrayBase::cast(res_array->elements()); RUNTIME_ASSERT(elms_base->length() == 3); - RUNTIME_ASSERT(res_array->GetElementsKind() <= FAST_DOUBLE_ELEMENTS); - - if (res_array->HasFastDoubleElements()) { - FixedDoubleArray* elms = FixedDoubleArray::cast(res_array->elements()); - elms->set(0, year); - elms->set(1, month); - elms->set(2, day); - } else { - FixedArray* elms = FixedArray::cast(res_array->elements()); - elms->set(0, Smi::FromInt(year)); - elms->set(1, Smi::FromInt(month)); - elms->set(2, Smi::FromInt(day)); - } + RUNTIME_ASSERT(res_array->HasFastTypeElements()); + + MaybeObject* maybe = res_array->EnsureWritableFastElements(); + if (maybe->IsFailure()) return maybe; + FixedArray* elms = FixedArray::cast(res_array->elements()); + elms->set(0, Smi::FromInt(year)); + elms->set(1, Smi::FromInt(month)); + elms->set(2, Smi::FromInt(day)); return isolate->heap()->undefined_value(); } -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
