| Index: src/mips/code-stubs-mips.cc
|
| diff --git a/src/mips/code-stubs-mips.cc b/src/mips/code-stubs-mips.cc
|
| index cf6c6520e1437381fd94a0ae4b9856aac3ebabf0..e0028f88941e555e733e02ddbf9e934df7b9890e 100644
|
| --- a/src/mips/code-stubs-mips.cc
|
| +++ b/src/mips/code-stubs-mips.cc
|
| @@ -31,7 +31,7 @@
|
|
|
| #include "bootstrapper.h"
|
| #include "code-stubs.h"
|
| -#include "codegen-inl.h"
|
| +#include "codegen.h"
|
| #include "regexp-macro-assembler.h"
|
|
|
| namespace v8 {
|
| @@ -111,63 +111,6 @@ void ConvertToDoubleStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -class FloatingPointHelper : public AllStatic {
|
| - public:
|
| -
|
| - enum Destination {
|
| - kFPURegisters,
|
| - kCoreRegisters
|
| - };
|
| -
|
| -
|
| - // Loads smis from a0 and a1 (right and left in binary operations) into
|
| - // floating point registers. Depending on the destination the values ends up
|
| - // either f14 and f12 or in a2/a3 and a0/a1 respectively. If the destination
|
| - // is floating point registers FPU must be supported. If core registers are
|
| - // requested when FPU is supported f12 and f14 will be scratched.
|
| - static void LoadSmis(MacroAssembler* masm,
|
| - Destination destination,
|
| - Register scratch1,
|
| - Register scratch2);
|
| -
|
| - // Loads objects from a0 and a1 (right and left in binary operations) into
|
| - // floating point registers. Depending on the destination the values ends up
|
| - // either f14 and f12 or in a2/a3 and a0/a1 respectively. If the destination
|
| - // is floating point registers FPU must be supported. If core registers are
|
| - // requested when FPU is supported f12 and f14 will still be scratched. If
|
| - // either a0 or a1 is not a number (not smi and not heap number object) the
|
| - // not_number label is jumped to with a0 and a1 intact.
|
| - static void LoadOperands(MacroAssembler* masm,
|
| - FloatingPointHelper::Destination destination,
|
| - Register heap_number_map,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Label* not_number);
|
| - // Loads the number from object into dst as a 32-bit integer if possible. If
|
| - // the object is not a 32-bit integer control continues at the label
|
| - // not_int32. If FPU is supported double_scratch is used but not scratch2.
|
| - static void LoadNumberAsInteger(MacroAssembler* masm,
|
| - Register object,
|
| - Register dst,
|
| - Register heap_number_map,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - FPURegister double_scratch,
|
| - Label* not_int32);
|
| - private:
|
| - static void LoadNumber(MacroAssembler* masm,
|
| - FloatingPointHelper::Destination destination,
|
| - Register object,
|
| - FPURegister dst,
|
| - Register dst1,
|
| - Register dst2,
|
| - Register heap_number_map,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Label* not_number);
|
| -};
|
| -
|
| -
|
| void FloatingPointHelper::LoadSmis(MacroAssembler* masm,
|
| FloatingPointHelper::Destination destination,
|
| Register scratch1,
|
| @@ -201,14 +144,74 @@ void FloatingPointHelper::LoadNumber(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -void FloatingPointHelper::LoadNumberAsInteger(MacroAssembler* masm,
|
| - Register object,
|
| - Register dst,
|
| - Register heap_number_map,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - FPURegister double_scratch,
|
| - Label* not_int32) {
|
| +void FloatingPointHelper::ConvertNumberToInt32(MacroAssembler* masm,
|
| + Register object,
|
| + Register dst,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + FPURegister double_scratch,
|
| + Label* not_number) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void FloatingPointHelper::ConvertIntToDouble(MacroAssembler* masm,
|
| + Register int_scratch,
|
| + Destination destination,
|
| + FPURegister double_dst,
|
| + Register dst1,
|
| + Register dst2,
|
| + Register scratch2,
|
| + FPURegister single_scratch) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void FloatingPointHelper::LoadNumberAsInt32Double(MacroAssembler* masm,
|
| + Register object,
|
| + Destination destination,
|
| + FPURegister double_dst,
|
| + Register dst1,
|
| + Register dst2,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + FPURegister single_scratch,
|
| + Label* not_int32) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void FloatingPointHelper::LoadNumberAsInt32(MacroAssembler* masm,
|
| + Register object,
|
| + Register dst,
|
| + Register heap_number_map,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + FPURegister double_scratch,
|
| + Label* not_int32) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void FloatingPointHelper::DoubleIs32BitInteger(MacroAssembler* masm,
|
| + Register src1,
|
| + Register src2,
|
| + Register dst,
|
| + Register scratch,
|
| + Label* not_int32) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void FloatingPointHelper::CallCCodeForDoubleOperation(
|
| + MacroAssembler* masm,
|
| + Token::Value op,
|
| + Register heap_number_result,
|
| + Register scratch) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
|
|
| @@ -256,49 +259,107 @@ void ToBooleanStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -// We fall into this code if the operands were Smis, but the result was
|
| -// not (eg. overflow). We branch into this code (to the not_smi label) if
|
| -// the operands were not both Smi. The operands are in lhs and rhs.
|
| -// To call the C-implemented binary fp operation routines we need to end up
|
| -// with the double precision floating point operands in a0 and a1 (for the
|
| -// value in a1) and a2 and a3 (for the value in a0).
|
| -void GenericBinaryOpStub::HandleBinaryOpSlowCases(MacroAssembler* masm,
|
| - Label* not_smi,
|
| - Register lhs,
|
| - Register rhs,
|
| - const Builtins::JavaScript& builtin) {
|
| +Handle<Code> GetTypeRecordingUnaryOpStub(int key,
|
| + TRUnaryOpIC::TypeInfo type_info) {
|
| + TypeRecordingUnaryOpStub stub(key, type_info);
|
| + return stub.GetCode();
|
| +}
|
| +
|
| +
|
| +const char* TypeRecordingUnaryOpStub::GetName() {
|
| UNIMPLEMENTED_MIPS();
|
| + return NULL;
|
| }
|
|
|
|
|
| -// For bitwise ops where the inputs are not both Smis we here try to determine
|
| -// whether both inputs are either Smis or at least heap numbers that can be
|
| -// represented by a 32 bit signed value. We truncate towards zero as required
|
| -// by the ES spec. If this is the case we do the bitwise op and see if the
|
| -// result is a Smi. If so, great, otherwise we try to find a heap number to
|
| -// write the answer into (either by allocating or by overwriting).
|
| -// On entry the operands are in lhs (x) and rhs (y). (Result = x op y).
|
| -// On exit the result is in v0.
|
| -void GenericBinaryOpStub::HandleNonSmiBitwiseOp(MacroAssembler* masm,
|
| - Register lhs,
|
| - Register rhs) {
|
| +// TODO(svenpanne): Use virtual functions instead of switch.
|
| +void TypeRecordingUnaryOpStub::Generate(MacroAssembler* masm) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
|
|
|
|
| -void GenericBinaryOpStub::Generate(MacroAssembler* masm) {
|
| +void TypeRecordingUnaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
|
|
|
|
| -void GenericBinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| +// TODO(svenpanne): Use virtual functions instead of switch.
|
| +void TypeRecordingUnaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
|
|
|
|
| -Handle<Code> GetBinaryOpStub(int key, BinaryOpIC::TypeInfo type_info) {
|
| - GenericBinaryOpStub stub(key, type_info);
|
| - return stub.GetCode();
|
| +void TypeRecordingUnaryOpStub::GenerateSmiStubSub(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateSmiStubBitNot(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateSmiCodeSub(MacroAssembler* masm,
|
| + Label* non_smi,
|
| + Label* slow) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateSmiCodeBitNot(MacroAssembler* masm,
|
| + Label* non_smi) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +// TODO(svenpanne): Use virtual functions instead of switch.
|
| +void TypeRecordingUnaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateHeapNumberStubSub(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateHeapNumberStubBitNot(
|
| + MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateHeapNumberCodeSub(MacroAssembler* masm,
|
| + Label* slow) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateHeapNumberCodeBitNot(
|
| + MacroAssembler* masm, Label* slow) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +// TODO(svenpanne): Use virtual functions instead of switch.
|
| +void TypeRecordingUnaryOpStub::GenerateGenericStub(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateGenericStubSub(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateGenericStubBitNot(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| +void TypeRecordingUnaryOpStub::GenerateGenericCodeFallback(
|
| + MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| }
|
|
|
|
|
| @@ -352,6 +413,7 @@ void TypeRecordingBinaryOpStub::GenerateFPOperation(MacroAssembler* masm,
|
| // requested the code falls through. If number allocation is requested but a
|
| // heap number cannot be allocated the code jumps to the lable gc_required.
|
| void TypeRecordingBinaryOpStub::GenerateSmiCode(MacroAssembler* masm,
|
| + Label* use_runtime,
|
| Label* gc_required,
|
| SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {
|
| UNIMPLEMENTED_MIPS();
|
| @@ -426,6 +488,11 @@ void StackCheckStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void MathPowStub::Generate(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| bool CEntryStub::NeedsImmovableCode() {
|
| return true;
|
| }
|
| @@ -510,8 +577,7 @@ int CompareStub::MinorKey() {
|
| }
|
|
|
|
|
| -// StringCharCodeAtGenerator
|
| -
|
| +// StringCharCodeAtGenerator.
|
| void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
| @@ -684,8 +750,8 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
|
|
|
|
| void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
|
| - Register right,
|
| Register left,
|
| + Register right,
|
| Register scratch1,
|
| Register scratch2,
|
| Register scratch3,
|
| @@ -714,6 +780,11 @@ void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
|
| + UNIMPLEMENTED_MIPS();
|
| +}
|
| +
|
| +
|
| void ICCompareStub::GenerateObjects(MacroAssembler* masm) {
|
| UNIMPLEMENTED_MIPS();
|
| }
|
|
|