| Index: src/mips/builtins-mips.cc
|
| diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc
|
| index 0f126c1a47148c297c46d7dc206e70c1f6ca0d2b..b5007a9ee0aa96397899d438c3aa9605c263cd5c 100644
|
| --- a/src/mips/builtins-mips.cc
|
| +++ b/src/mips/builtins-mips.cc
|
| @@ -1386,6 +1386,53 @@ void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
|
|
|
|
|
| // static
|
| +void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
|
| + int field_index) {
|
| + // ----------- S t a t e -------------
|
| + // -- sp[0] : receiver
|
| + // -----------------------------------
|
| +
|
| + // 1. Pop receiver into a0 and check that it's actually a JSDate object.
|
| + Label receiver_not_date;
|
| + {
|
| + __ Pop(a0);
|
| + __ JumpIfSmi(a0, &receiver_not_date);
|
| + __ GetObjectType(a0, t0, t0);
|
| + __ Branch(&receiver_not_date, ne, t0, Operand(JS_DATE_TYPE));
|
| + }
|
| +
|
| + // 2. Load the specified date field, falling back to the runtime as necessary.
|
| + if (field_index == JSDate::kDateValue) {
|
| + __ Ret(USE_DELAY_SLOT);
|
| + __ lw(v0, FieldMemOperand(a0, JSDate::kValueOffset)); // In delay slot.
|
| + } else {
|
| + if (field_index < JSDate::kFirstUncachedField) {
|
| + Label stamp_mismatch;
|
| + __ li(a1, Operand(ExternalReference::date_cache_stamp(masm->isolate())));
|
| + __ lw(a1, MemOperand(a1));
|
| + __ lw(t0, FieldMemOperand(a0, JSDate::kCacheStampOffset));
|
| + __ Branch(&stamp_mismatch, ne, t0, Operand(a1));
|
| + __ Ret(USE_DELAY_SLOT);
|
| + __ lw(v0, FieldMemOperand(
|
| + a0, JSDate::kValueOffset +
|
| + field_index * kPointerSize)); // In delay slot.
|
| + __ bind(&stamp_mismatch);
|
| + }
|
| + FrameScope scope(masm, StackFrame::INTERNAL);
|
| + __ PrepareCallCFunction(2, t0);
|
| + __ li(a1, Operand(Smi::FromInt(field_index)));
|
| + __ CallCFunction(
|
| + ExternalReference::get_date_field_function(masm->isolate()), 2);
|
| + __ Ret();
|
| + }
|
| +
|
| + // 3. Raise a TypeError if the receiver is not a date.
|
| + __ bind(&receiver_not_date);
|
| + __ TailCallRuntime(Runtime::kThrowNotDateError);
|
| +}
|
| +
|
| +
|
| +// static
|
| void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
|
| // ----------- S t a t e -------------
|
| // -- a0 : argc
|
|
|