| Index: src/mips/macro-assembler-mips.h
|
| diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h
|
| index 3b3cfdb8acf80deb52b0f4bf1ae10090601d29ee..8f0b3b113edb03e687eaed04e3cc2a95256e9a9c 100644
|
| --- a/src/mips/macro-assembler-mips.h
|
| +++ b/src/mips/macro-assembler-mips.h
|
| @@ -90,6 +90,13 @@ enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET };
|
| enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK };
|
| enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved };
|
|
|
| +Register GetRegisterThatIsNotOneOf(Register reg1,
|
| + Register reg2 = no_reg,
|
| + Register reg3 = no_reg,
|
| + Register reg4 = no_reg,
|
| + Register reg5 = no_reg,
|
| + Register reg6 = no_reg);
|
| +
|
| bool AreAliased(Register r1, Register r2, Register r3, Register r4);
|
|
|
|
|
| @@ -788,14 +795,72 @@ class MacroAssembler: public Assembler {
|
| Register scratch);
|
|
|
| // Performs a truncating conversion of a floating point number as used by
|
| + // the JS bitwise operations. See ECMA-262 9.5: ToInt32. Goes to 'done' if it
|
| + // succeeds, otherwise falls through if result is saturated. On return
|
| + // 'result' either holds answer, or is clobbered on fall through.
|
| + //
|
| + // Only public for the test code in test-code-stubs-arm.cc.
|
| + void TryInlineTruncateDoubleToI(Register result,
|
| + DoubleRegister input,
|
| + Label* done);
|
| +
|
| + // Performs a truncating conversion of a floating point number as used by
|
| // the JS bitwise operations. See ECMA-262 9.5: ToInt32.
|
| - // Exits with 'result' holding the answer and all other registers clobbered.
|
| - void EmitECMATruncate(Register result,
|
| - FPURegister double_input,
|
| - FPURegister single_scratch,
|
| - Register scratch,
|
| - Register scratch2,
|
| - Register scratch3);
|
| + // Exits with 'result' holding the answer.
|
| + void TruncateDoubleToI(Register result, DoubleRegister double_input);
|
| +
|
| + // Performs a truncating conversion of a heap number as used by
|
| + // the JS bitwise operations. See ECMA-262 9.5: ToInt32. 'result' and 'input'
|
| + // must be different registers. Exits with 'result' holding the answer.
|
| + void TruncateHeapNumberToI(Register result, Register object);
|
| +
|
| + // Converts the smi or heap number in object to an int32 using the rules
|
| + // for ToInt32 as described in ECMAScript 9.5.: the value is truncated
|
| + // and brought into the range -2^31 .. +2^31 - 1. 'result' and 'input' must be
|
| + // different registers.
|
| + void TruncateNumberToI(Register object,
|
| + Register result,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + Label* not_int32);
|
| +
|
| + // Loads the number from object into dst register.
|
| + // If |object| is neither smi nor heap number, |not_number| is jumped to
|
| + // with |object| still intact.
|
| + void LoadNumber(Register object,
|
| + FPURegister dst,
|
| + Register heap_number_map,
|
| + Register scratch,
|
| + Label* not_number);
|
| +
|
| + // Loads the number from object into double_dst in the double format.
|
| + // Control will jump to not_int32 if the value cannot be exactly represented
|
| + // by a 32-bit integer.
|
| + // Floating point value in the 32-bit integer range that are not exact integer
|
| + // won't be loaded.
|
| + void LoadNumberAsInt32Double(Register object,
|
| + DoubleRegister double_dst,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + FPURegister double_scratch,
|
| + Label* not_int32);
|
| +
|
| + // Loads the number from object into dst as a 32-bit integer.
|
| + // Control will jump to not_int32 if the object cannot be exactly represented
|
| + // by a 32-bit integer.
|
| + // Floating point value in the 32-bit integer range that are not exact integer
|
| + // won't be converted.
|
| + void LoadNumberAsInt32(Register object,
|
| + Register dst,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + FPURegister double_scratch0,
|
| + FPURegister double_scratch1,
|
| + Label* not_int32);
|
|
|
| // Enter exit frame.
|
| // argc - argument count to be dropped by LeaveExitFrame.
|
| @@ -986,16 +1051,13 @@ class MacroAssembler: public Assembler {
|
|
|
| // Check to see if maybe_number can be stored as a double in
|
| // FastDoubleElements. If it can, store it at the index specified by key in
|
| - // the FastDoubleElements array elements. Otherwise jump to fail, in which
|
| - // case scratch2, scratch3 and scratch4 are unmodified.
|
| + // the FastDoubleElements array elements. Otherwise jump to fail.
|
| void StoreNumberToDoubleElements(Register value_reg,
|
| Register key_reg,
|
| - // All regs below here overwritten.
|
| Register elements_reg,
|
| Register scratch1,
|
| Register scratch2,
|
| Register scratch3,
|
| - Register scratch4,
|
| Label* fail,
|
| int elements_offset = 0);
|
|
|
| @@ -1233,7 +1295,6 @@ class MacroAssembler: public Assembler {
|
| ExternalReference thunk_ref,
|
| Register thunk_last_arg,
|
| int stack_space,
|
| - bool returns_handle,
|
| int return_value_offset_from_fp);
|
|
|
| // Jump to the builtin routine.
|
| @@ -1281,7 +1342,6 @@ class MacroAssembler: public Assembler {
|
| // Calls Abort(msg) if the condition cc is not satisfied.
|
| // Use --debug_code to enable.
|
| void Assert(Condition cc, BailoutReason reason, Register rs, Operand rt);
|
| - void AssertRegisterIsRoot(Register reg, Heap::RootListIndex index);
|
| void AssertFastElements(Register elements);
|
|
|
| // Like Assert(), but always enabled.
|
| @@ -1368,11 +1428,9 @@ class MacroAssembler: public Assembler {
|
| // Abort execution if argument is not a name, enabled via --debug-code.
|
| void AssertName(Register object);
|
|
|
| - // Abort execution if argument is not the root value with the given index,
|
| + // Abort execution if reg is not the root value with the given index,
|
| // enabled via --debug-code.
|
| - void AssertRootValue(Register src,
|
| - Heap::RootListIndex root_value_index,
|
| - BailoutReason reason);
|
| + void AssertIsRoot(Register reg, Heap::RootListIndex index);
|
|
|
| // ---------------------------------------------------------------------------
|
| // HeapNumber utilities.
|
|
|