Index: src/mips/stub-cache-mips.cc |
diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc |
index c819ce2259158dbce7d626e9fda7986296281abb..c028358c21ee3039a063351f2b79653eacc46f22 100644 |
--- a/src/mips/stub-cache-mips.cc |
+++ b/src/mips/stub-cache-mips.cc |
@@ -1923,194 +1923,6 @@ Handle<Code> CallStubCompiler::CompileStringFromCharCodeCall( |
} |
-Handle<Code> CallStubCompiler::CompileMathFloorCall( |
- Handle<Object> object, |
- Handle<JSObject> holder, |
- Handle<Cell> cell, |
- Handle<JSFunction> function, |
- Handle<String> name, |
- Code::StubType type) { |
- const int argc = arguments().immediate(); |
- // If the object is not a JSObject or we got an unexpected number of |
- // arguments, bail out to the regular call. |
- if (!object->IsJSObject() || argc != 1) return Handle<Code>::null(); |
- |
- Label miss, slow; |
- HandlerFrontendHeader(object, holder, name, RECEIVER_MAP_CHECK, &miss); |
- if (!cell.is_null()) { |
- ASSERT(cell->value() == *function); |
- GenerateLoadFunctionFromCell(cell, function, &miss); |
- } |
- |
- // Load the (only) argument into v0. |
- __ lw(v0, MemOperand(sp, 0 * kPointerSize)); |
- |
- // If the argument is a smi, just return. |
- STATIC_ASSERT(kSmiTag == 0); |
- __ SmiTst(v0, t0); |
- __ DropAndRet(argc + 1, eq, t0, Operand(zero_reg)); |
- |
- __ CheckMap(v0, a1, Heap::kHeapNumberMapRootIndex, &slow, DONT_DO_SMI_CHECK); |
- |
- Label wont_fit_smi, no_fpu_error, restore_fcsr_and_return; |
- |
- // If fpu is enabled, we use the floor instruction. |
- |
- // Load the HeapNumber value. |
- __ ldc1(f0, FieldMemOperand(v0, HeapNumber::kValueOffset)); |
- |
- // Backup FCSR. |
- __ cfc1(a3, FCSR); |
- // Clearing FCSR clears the exception mask with no side-effects. |
- __ ctc1(zero_reg, FCSR); |
- // Convert the argument to an integer. |
- __ floor_w_d(f0, f0); |
- |
- // Start checking for special cases. |
- // Get the argument exponent and clear the sign bit. |
- __ lw(t1, FieldMemOperand(v0, HeapNumber::kValueOffset + kPointerSize)); |
- __ And(t2, t1, Operand(~HeapNumber::kSignMask)); |
- __ srl(t2, t2, HeapNumber::kMantissaBitsInTopWord); |
- |
- // Retrieve FCSR and check for fpu errors. |
- __ cfc1(t5, FCSR); |
- __ And(t5, t5, Operand(kFCSRExceptionFlagMask)); |
- __ Branch(&no_fpu_error, eq, t5, Operand(zero_reg)); |
- |
- // Check for NaN, Infinity, and -Infinity. |
- // They are invariant through a Math.Floor call, so just |
- // return the original argument. |
- __ Subu(t3, t2, Operand(HeapNumber::kExponentMask |
- >> HeapNumber::kMantissaBitsInTopWord)); |
- __ Branch(&restore_fcsr_and_return, eq, t3, Operand(zero_reg)); |
- // We had an overflow or underflow in the conversion. Check if we |
- // have a big exponent. |
- // If greater or equal, the argument is already round and in v0. |
- __ Branch(&restore_fcsr_and_return, ge, t3, |
- Operand(HeapNumber::kMantissaBits)); |
- __ Branch(&wont_fit_smi); |
- |
- __ bind(&no_fpu_error); |
- // Move the result back to v0. |
- __ mfc1(v0, f0); |
- // Check if the result fits into a smi. |
- __ Addu(a1, v0, Operand(0x40000000)); |
- __ Branch(&wont_fit_smi, lt, a1, Operand(zero_reg)); |
- // Tag the result. |
- STATIC_ASSERT(kSmiTag == 0); |
- __ sll(v0, v0, kSmiTagSize); |
- |
- // Check for -0. |
- __ Branch(&restore_fcsr_and_return, ne, v0, Operand(zero_reg)); |
- // t1 already holds the HeapNumber exponent. |
- __ And(t0, t1, Operand(HeapNumber::kSignMask)); |
- // If our HeapNumber is negative it was -0, so load its address and return. |
- // Else v0 is loaded with 0, so we can also just return. |
- __ Branch(&restore_fcsr_and_return, eq, t0, Operand(zero_reg)); |
- __ lw(v0, MemOperand(sp, 0 * kPointerSize)); |
- |
- __ bind(&restore_fcsr_and_return); |
- // Restore FCSR and return. |
- __ ctc1(a3, FCSR); |
- |
- __ DropAndRet(argc + 1); |
- |
- __ bind(&wont_fit_smi); |
- // Restore FCSR and fall to slow case. |
- __ ctc1(a3, FCSR); |
- |
- __ bind(&slow); |
- // We do not have to patch the receiver because the function makes no use of |
- // it. |
- GenerateJumpFunctionIgnoreReceiver(function); |
- |
- HandlerFrontendFooter(&miss); |
- |
- // Return the generated code. |
- return GetCode(type, name); |
-} |
- |
- |
-Handle<Code> CallStubCompiler::CompileMathAbsCall( |
- Handle<Object> object, |
- Handle<JSObject> holder, |
- Handle<Cell> cell, |
- Handle<JSFunction> function, |
- Handle<String> name, |
- Code::StubType type) { |
- const int argc = arguments().immediate(); |
- // If the object is not a JSObject or we got an unexpected number of |
- // arguments, bail out to the regular call. |
- if (!object->IsJSObject() || argc != 1) return Handle<Code>::null(); |
- |
- Label miss; |
- |
- HandlerFrontendHeader(object, holder, name, RECEIVER_MAP_CHECK, &miss); |
- if (!cell.is_null()) { |
- ASSERT(cell->value() == *function); |
- GenerateLoadFunctionFromCell(cell, function, &miss); |
- } |
- |
- // Load the (only) argument into v0. |
- __ lw(v0, MemOperand(sp, 0 * kPointerSize)); |
- |
- // Check if the argument is a smi. |
- Label not_smi; |
- STATIC_ASSERT(kSmiTag == 0); |
- __ JumpIfNotSmi(v0, ¬_smi); |
- |
- // Do bitwise not or do nothing depending on the sign of the |
- // argument. |
- __ sra(t0, v0, kBitsPerInt - 1); |
- __ Xor(a1, v0, t0); |
- |
- // Add 1 or do nothing depending on the sign of the argument. |
- __ Subu(v0, a1, t0); |
- |
- // If the result is still negative, go to the slow case. |
- // This only happens for the most negative smi. |
- Label slow; |
- __ Branch(&slow, lt, v0, Operand(zero_reg)); |
- |
- // Smi case done. |
- __ DropAndRet(argc + 1); |
- |
- // Check if the argument is a heap number and load its exponent and |
- // sign. |
- __ bind(¬_smi); |
- __ CheckMap(v0, a1, Heap::kHeapNumberMapRootIndex, &slow, DONT_DO_SMI_CHECK); |
- __ lw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); |
- |
- // Check the sign of the argument. If the argument is positive, |
- // just return it. |
- Label negative_sign; |
- __ And(t0, a1, Operand(HeapNumber::kSignMask)); |
- __ Branch(&negative_sign, ne, t0, Operand(zero_reg)); |
- __ DropAndRet(argc + 1); |
- |
- // If the argument is negative, clear the sign, and return a new |
- // number. |
- __ bind(&negative_sign); |
- __ Xor(a1, a1, Operand(HeapNumber::kSignMask)); |
- __ lw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); |
- __ LoadRoot(t2, Heap::kHeapNumberMapRootIndex); |
- __ AllocateHeapNumber(v0, t0, t1, t2, &slow); |
- __ sw(a1, FieldMemOperand(v0, HeapNumber::kExponentOffset)); |
- __ sw(a3, FieldMemOperand(v0, HeapNumber::kMantissaOffset)); |
- __ DropAndRet(argc + 1); |
- |
- __ bind(&slow); |
- // We do not have to patch the receiver because the function makes no use of |
- // it. |
- GenerateJumpFunctionIgnoreReceiver(function); |
- |
- HandlerFrontendFooter(&miss); |
- |
- // Return the generated code. |
- return GetCode(type, name); |
-} |
- |
- |
Handle<Code> CallStubCompiler::CompileFastApiCall( |
const CallOptimization& optimization, |
Handle<Object> object, |