| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #if V8_TARGET_ARCH_MIPS64 |     5 #if V8_TARGET_ARCH_MIPS64 | 
|     6  |     6  | 
|     7 #include "src/code-stubs.h" |     7 #include "src/code-stubs.h" | 
|     8 #include "src/api-arguments.h" |     8 #include "src/api-arguments.h" | 
|     9 #include "src/bootstrapper.h" |     9 #include "src/bootstrapper.h" | 
|    10 #include "src/codegen.h" |    10 #include "src/codegen.h" | 
| (...skipping 1254 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1265  |  1265  | 
|  1266   // Restore callee-saved fpu registers. |  1266   // Restore callee-saved fpu registers. | 
|  1267   __ MultiPopFPU(kCalleeSavedFPU); |  1267   __ MultiPopFPU(kCalleeSavedFPU); | 
|  1268  |  1268  | 
|  1269   // Restore callee saved registers from the stack. |  1269   // Restore callee saved registers from the stack. | 
|  1270   __ MultiPop(kCalleeSaved | ra.bit()); |  1270   __ MultiPop(kCalleeSaved | ra.bit()); | 
|  1271   // Return. |  1271   // Return. | 
|  1272   __ Jump(ra); |  1272   __ Jump(ra); | 
|  1273 } |  1273 } | 
|  1274  |  1274  | 
|  1275  |  | 
|  1276 void LoadIndexedStringStub::Generate(MacroAssembler* masm) { |  | 
|  1277   // Return address is in ra. |  | 
|  1278   Label miss; |  | 
|  1279  |  | 
|  1280   Register receiver = LoadDescriptor::ReceiverRegister(); |  | 
|  1281   Register index = LoadDescriptor::NameRegister(); |  | 
|  1282   Register scratch = a5; |  | 
|  1283   Register result = v0; |  | 
|  1284   DCHECK(!scratch.is(receiver) && !scratch.is(index)); |  | 
|  1285   DCHECK(!scratch.is(LoadWithVectorDescriptor::VectorRegister())); |  | 
|  1286  |  | 
|  1287   StringCharAtGenerator char_at_generator(receiver, index, scratch, result, |  | 
|  1288                                           &miss,  // When not a string. |  | 
|  1289                                           &miss,  // When not a number. |  | 
|  1290                                           &miss,  // When index out of range. |  | 
|  1291                                           RECEIVER_IS_STRING); |  | 
|  1292   char_at_generator.GenerateFast(masm); |  | 
|  1293   __ Ret(); |  | 
|  1294  |  | 
|  1295   StubRuntimeCallHelper call_helper; |  | 
|  1296   char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper); |  | 
|  1297  |  | 
|  1298   __ bind(&miss); |  | 
|  1299   PropertyAccessCompiler::TailCallBuiltin( |  | 
|  1300       masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); |  | 
|  1301 } |  | 
|  1302  |  | 
|  1303  |  | 
|  1304 void FunctionPrototypeStub::Generate(MacroAssembler* masm) { |  1275 void FunctionPrototypeStub::Generate(MacroAssembler* masm) { | 
|  1305   Label miss; |  1276   Label miss; | 
|  1306   Register receiver = LoadDescriptor::ReceiverRegister(); |  1277   Register receiver = LoadDescriptor::ReceiverRegister(); | 
|  1307   // Ensure that the vector and slot registers won't be clobbered before |  1278   // Ensure that the vector and slot registers won't be clobbered before | 
|  1308   // calling the miss handler. |  1279   // calling the miss handler. | 
|  1309   DCHECK(!AreAliased(a4, a5, LoadWithVectorDescriptor::VectorRegister(), |  1280   DCHECK(!AreAliased(a4, a5, LoadWithVectorDescriptor::VectorRegister(), | 
|  1310                      LoadWithVectorDescriptor::SlotRegister())); |  1281                      LoadWithVectorDescriptor::SlotRegister())); | 
|  1311  |  1282  | 
|  1312   NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, a4, |  1283   NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, a4, | 
|  1313                                                           a5, &miss); |  1284                                                           a5, &miss); | 
| (...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1991   __ CallRuntime(Runtime::kStringCharCodeAtRT); |  1962   __ CallRuntime(Runtime::kStringCharCodeAtRT); | 
|  1992  |  1963  | 
|  1993   __ Move(result_, v0); |  1964   __ Move(result_, v0); | 
|  1994  |  1965  | 
|  1995   call_helper.AfterCall(masm); |  1966   call_helper.AfterCall(masm); | 
|  1996   __ jmp(&exit_); |  1967   __ jmp(&exit_); | 
|  1997  |  1968  | 
|  1998   __ Abort(kUnexpectedFallthroughFromCharCodeAtSlowCase); |  1969   __ Abort(kUnexpectedFallthroughFromCharCodeAtSlowCase); | 
|  1999 } |  1970 } | 
|  2000  |  1971  | 
|  2001  |  | 
|  2002 // ------------------------------------------------------------------------- |  | 
|  2003 // StringCharFromCodeGenerator |  | 
|  2004  |  | 
|  2005 void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) { |  | 
|  2006   // Fast case of Heap::LookupSingleCharacterStringFromCode. |  | 
|  2007   __ JumpIfNotSmi(code_, &slow_case_); |  | 
|  2008   __ Branch(&slow_case_, hi, code_, |  | 
|  2009             Operand(Smi::FromInt(String::kMaxOneByteCharCode))); |  | 
|  2010  |  | 
|  2011   __ LoadRoot(result_, Heap::kSingleCharacterStringCacheRootIndex); |  | 
|  2012   // At this point code register contains smi tagged one_byte char code. |  | 
|  2013   __ SmiScale(at, code_, kPointerSizeLog2); |  | 
|  2014   __ Daddu(result_, result_, at); |  | 
|  2015   __ ld(result_, FieldMemOperand(result_, FixedArray::kHeaderSize)); |  | 
|  2016   __ LoadRoot(at, Heap::kUndefinedValueRootIndex); |  | 
|  2017   __ Branch(&slow_case_, eq, result_, Operand(at)); |  | 
|  2018   __ bind(&exit_); |  | 
|  2019 } |  | 
|  2020  |  | 
|  2021  |  | 
|  2022 void StringCharFromCodeGenerator::GenerateSlow( |  | 
|  2023     MacroAssembler* masm, |  | 
|  2024     const RuntimeCallHelper& call_helper) { |  | 
|  2025   __ Abort(kUnexpectedFallthroughToCharFromCodeSlowCase); |  | 
|  2026  |  | 
|  2027   __ bind(&slow_case_); |  | 
|  2028   call_helper.BeforeCall(masm); |  | 
|  2029   __ push(code_); |  | 
|  2030   __ CallRuntime(Runtime::kStringCharFromCode); |  | 
|  2031   __ Move(result_, v0); |  | 
|  2032  |  | 
|  2033   call_helper.AfterCall(masm); |  | 
|  2034   __ Branch(&exit_); |  | 
|  2035  |  | 
|  2036   __ Abort(kUnexpectedFallthroughFromCharFromCodeSlowCase); |  | 
|  2037 } |  | 
|  2038  |  | 
|  2039 void StringHelper::GenerateFlatOneByteStringEquals( |  1972 void StringHelper::GenerateFlatOneByteStringEquals( | 
|  2040     MacroAssembler* masm, Register left, Register right, Register scratch1, |  1973     MacroAssembler* masm, Register left, Register right, Register scratch1, | 
|  2041     Register scratch2, Register scratch3) { |  1974     Register scratch2, Register scratch3) { | 
|  2042   Register length = scratch1; |  1975   Register length = scratch1; | 
|  2043  |  1976  | 
|  2044   // Compare lengths. |  1977   // Compare lengths. | 
|  2045   Label strings_not_equal, check_zero_length; |  1978   Label strings_not_equal, check_zero_length; | 
|  2046   __ ld(length, FieldMemOperand(left, String::kLengthOffset)); |  1979   __ ld(length, FieldMemOperand(left, String::kLengthOffset)); | 
|  2047   __ ld(scratch2, FieldMemOperand(right, String::kLengthOffset)); |  1980   __ ld(scratch2, FieldMemOperand(right, String::kLengthOffset)); | 
|  2048   __ Branch(&check_zero_length, eq, length, Operand(scratch2)); |  1981   __ Branch(&check_zero_length, eq, length, Operand(scratch2)); | 
| (...skipping 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3619                            kStackUnwindSpace, kInvalidStackOffset, |  3552                            kStackUnwindSpace, kInvalidStackOffset, | 
|  3620                            return_value_operand, NULL); |  3553                            return_value_operand, NULL); | 
|  3621 } |  3554 } | 
|  3622  |  3555  | 
|  3623 #undef __ |  3556 #undef __ | 
|  3624  |  3557  | 
|  3625 }  // namespace internal |  3558 }  // namespace internal | 
|  3626 }  // namespace v8 |  3559 }  // namespace v8 | 
|  3627  |  3560  | 
|  3628 #endif  // V8_TARGET_ARCH_MIPS64 |  3561 #endif  // V8_TARGET_ARCH_MIPS64 | 
| OLD | NEW |