| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 2126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2137 // Test if left operand is a string. | 2137 // Test if left operand is a string. |
| 2138 __ JumpIfSmi(left, &call_runtime); | 2138 __ JumpIfSmi(left, &call_runtime); |
| 2139 __ GetObjectType(left, a2, a2); | 2139 __ GetObjectType(left, a2, a2); |
| 2140 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); | 2140 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); |
| 2141 | 2141 |
| 2142 // Test if right operand is a string. | 2142 // Test if right operand is a string. |
| 2143 __ JumpIfSmi(right, &call_runtime); | 2143 __ JumpIfSmi(right, &call_runtime); |
| 2144 __ GetObjectType(right, a2, a2); | 2144 __ GetObjectType(right, a2, a2); |
| 2145 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); | 2145 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); |
| 2146 | 2146 |
| 2147 StringAddStub string_add_stub((StringAddFlags) | 2147 StringAddStub string_add_stub( |
| 2148 (ERECT_FRAME | NO_STRING_CHECK_IN_STUB)); | 2148 (StringAddFlags)(STRING_ADD_CHECK_NONE | STRING_ADD_ERECT_FRAME)); |
| 2149 GenerateRegisterArgsPush(masm); | 2149 GenerateRegisterArgsPush(masm); |
| 2150 __ TailCallStub(&string_add_stub); | 2150 __ TailCallStub(&string_add_stub); |
| 2151 | 2151 |
| 2152 __ bind(&call_runtime); | 2152 __ bind(&call_runtime); |
| 2153 GenerateTypeTransition(masm); | 2153 GenerateTypeTransition(masm); |
| 2154 } | 2154 } |
| 2155 | 2155 |
| 2156 | 2156 |
| 2157 void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) { | 2157 void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) { |
| 2158 ASSERT(Max(left_type_, right_type_) == BinaryOpIC::INT32); | 2158 ASSERT(Max(left_type_, right_type_) == BinaryOpIC::INT32); |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2555 Label left_not_string, call_runtime; | 2555 Label left_not_string, call_runtime; |
| 2556 | 2556 |
| 2557 Register left = a1; | 2557 Register left = a1; |
| 2558 Register right = a0; | 2558 Register right = a0; |
| 2559 | 2559 |
| 2560 // Check if left argument is a string. | 2560 // Check if left argument is a string. |
| 2561 __ JumpIfSmi(left, &left_not_string); | 2561 __ JumpIfSmi(left, &left_not_string); |
| 2562 __ GetObjectType(left, a2, a2); | 2562 __ GetObjectType(left, a2, a2); |
| 2563 __ Branch(&left_not_string, ge, a2, Operand(FIRST_NONSTRING_TYPE)); | 2563 __ Branch(&left_not_string, ge, a2, Operand(FIRST_NONSTRING_TYPE)); |
| 2564 | 2564 |
| 2565 StringAddStub string_add_left_stub((StringAddFlags) | 2565 StringAddStub string_add_left_stub( |
| 2566 (ERECT_FRAME | NO_STRING_CHECK_LEFT_IN_STUB)); | 2566 (StringAddFlags)(STRING_ADD_CHECK_RIGHT | STRING_ADD_ERECT_FRAME)); |
| 2567 GenerateRegisterArgsPush(masm); | 2567 GenerateRegisterArgsPush(masm); |
| 2568 __ TailCallStub(&string_add_left_stub); | 2568 __ TailCallStub(&string_add_left_stub); |
| 2569 | 2569 |
| 2570 // Left operand is not a string, test right. | 2570 // Left operand is not a string, test right. |
| 2571 __ bind(&left_not_string); | 2571 __ bind(&left_not_string); |
| 2572 __ JumpIfSmi(right, &call_runtime); | 2572 __ JumpIfSmi(right, &call_runtime); |
| 2573 __ GetObjectType(right, a2, a2); | 2573 __ GetObjectType(right, a2, a2); |
| 2574 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); | 2574 __ Branch(&call_runtime, ge, a2, Operand(FIRST_NONSTRING_TYPE)); |
| 2575 | 2575 |
| 2576 StringAddStub string_add_right_stub((StringAddFlags) | 2576 StringAddStub string_add_right_stub( |
| 2577 (ERECT_FRAME | NO_STRING_CHECK_RIGHT_IN_STUB)); | 2577 (StringAddFlags)(STRING_ADD_CHECK_LEFT | STRING_ADD_ERECT_FRAME)); |
| 2578 GenerateRegisterArgsPush(masm); | 2578 GenerateRegisterArgsPush(masm); |
| 2579 __ TailCallStub(&string_add_right_stub); | 2579 __ TailCallStub(&string_add_right_stub); |
| 2580 | 2580 |
| 2581 // At least one argument is not a string. | 2581 // At least one argument is not a string. |
| 2582 __ bind(&call_runtime); | 2582 __ bind(&call_runtime); |
| 2583 } | 2583 } |
| 2584 | 2584 |
| 2585 | 2585 |
| 2586 void BinaryOpStub_GenerateHeapResultAllocation(MacroAssembler* masm, | 2586 void BinaryOpStub_GenerateHeapResultAllocation(MacroAssembler* masm, |
| 2587 Register result, | 2587 Register result, |
| (...skipping 3281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5869 | 5869 |
| 5870 // Stack on entry: | 5870 // Stack on entry: |
| 5871 // sp[0]: second argument (right). | 5871 // sp[0]: second argument (right). |
| 5872 // sp[4]: first argument (left). | 5872 // sp[4]: first argument (left). |
| 5873 | 5873 |
| 5874 // Load the two arguments. | 5874 // Load the two arguments. |
| 5875 __ lw(a0, MemOperand(sp, 1 * kPointerSize)); // First argument. | 5875 __ lw(a0, MemOperand(sp, 1 * kPointerSize)); // First argument. |
| 5876 __ lw(a1, MemOperand(sp, 0 * kPointerSize)); // Second argument. | 5876 __ lw(a1, MemOperand(sp, 0 * kPointerSize)); // Second argument. |
| 5877 | 5877 |
| 5878 // Make sure that both arguments are strings if not known in advance. | 5878 // Make sure that both arguments are strings if not known in advance. |
| 5879 if ((flags_ & NO_STRING_ADD_FLAGS) != 0) { | 5879 // Otherwise, at least one of the arguments is definitely a string, |
| 5880 // and we convert the one that is not known to be a string. |
| 5881 if ((flags_ & STRING_ADD_CHECK_BOTH) == STRING_ADD_CHECK_BOTH) { |
| 5880 __ JumpIfEitherSmi(a0, a1, &call_runtime); | 5882 __ JumpIfEitherSmi(a0, a1, &call_runtime); |
| 5881 // Load instance types. | 5883 // Load instance types. |
| 5882 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); | 5884 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); |
| 5883 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); | 5885 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); |
| 5884 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); | 5886 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); |
| 5885 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); | 5887 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); |
| 5886 STATIC_ASSERT(kStringTag == 0); | 5888 STATIC_ASSERT(kStringTag == 0); |
| 5887 // If either is not a string, go to runtime. | 5889 // If either is not a string, go to runtime. |
| 5888 __ Or(t4, t0, Operand(t1)); | 5890 __ Or(t4, t0, Operand(t1)); |
| 5889 __ And(t4, t4, Operand(kIsNotStringMask)); | 5891 __ And(t4, t4, Operand(kIsNotStringMask)); |
| 5890 __ Branch(&call_runtime, ne, t4, Operand(zero_reg)); | 5892 __ Branch(&call_runtime, ne, t4, Operand(zero_reg)); |
| 5891 } else { | 5893 } else if ((flags_ & STRING_ADD_CHECK_LEFT) == STRING_ADD_CHECK_LEFT) { |
| 5892 // Here at least one of the arguments is definitely a string. | 5894 ASSERT((flags_ & STRING_ADD_CHECK_RIGHT) == 0); |
| 5893 // We convert the one that is not known to be a string. | 5895 GenerateConvertArgument( |
| 5894 if ((flags_ & NO_STRING_CHECK_LEFT_IN_STUB) == 0) { | 5896 masm, 1 * kPointerSize, a0, a2, a3, t0, t1, &call_builtin); |
| 5895 ASSERT((flags_ & NO_STRING_CHECK_RIGHT_IN_STUB) != 0); | 5897 builtin_id = Builtins::STRING_ADD_RIGHT; |
| 5896 GenerateConvertArgument( | 5898 } else if ((flags_ & STRING_ADD_CHECK_RIGHT) == STRING_ADD_CHECK_RIGHT) { |
| 5897 masm, 1 * kPointerSize, a0, a2, a3, t0, t1, &call_builtin); | 5899 ASSERT((flags_ & STRING_ADD_CHECK_LEFT) == 0); |
| 5898 builtin_id = Builtins::STRING_ADD_RIGHT; | 5900 GenerateConvertArgument( |
| 5899 } else if ((flags_ & NO_STRING_CHECK_RIGHT_IN_STUB) == 0) { | 5901 masm, 0 * kPointerSize, a1, a2, a3, t0, t1, &call_builtin); |
| 5900 ASSERT((flags_ & NO_STRING_CHECK_LEFT_IN_STUB) != 0); | 5902 builtin_id = Builtins::STRING_ADD_LEFT; |
| 5901 GenerateConvertArgument( | |
| 5902 masm, 0 * kPointerSize, a1, a2, a3, t0, t1, &call_builtin); | |
| 5903 builtin_id = Builtins::STRING_ADD_LEFT; | |
| 5904 } | |
| 5905 } | 5903 } |
| 5906 | 5904 |
| 5907 // Both arguments are strings. | 5905 // Both arguments are strings. |
| 5908 // a0: first string | 5906 // a0: first string |
| 5909 // a1: second string | 5907 // a1: second string |
| 5910 // t0: first string instance type (if flags_ == NO_STRING_ADD_FLAGS) | 5908 // t0: first string instance type (if flags_ == NO_STRING_ADD_FLAGS) |
| 5911 // t1: second string instance type (if flags_ == NO_STRING_ADD_FLAGS) | 5909 // t1: second string instance type (if flags_ == NO_STRING_ADD_FLAGS) |
| 5912 { | 5910 { |
| 5913 Label strings_not_empty; | 5911 Label strings_not_empty; |
| 5914 // Check if either of the strings are empty. In that case return the other. | 5912 // Check if either of the strings are empty. In that case return the other. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 5945 // Look at the length of the result of adding the two strings. | 5943 // Look at the length of the result of adding the two strings. |
| 5946 Label string_add_flat_result, longer_than_two; | 5944 Label string_add_flat_result, longer_than_two; |
| 5947 // Adding two lengths can't overflow. | 5945 // Adding two lengths can't overflow. |
| 5948 STATIC_ASSERT(String::kMaxLength < String::kMaxLength * 2); | 5946 STATIC_ASSERT(String::kMaxLength < String::kMaxLength * 2); |
| 5949 __ Addu(t2, a2, Operand(a3)); | 5947 __ Addu(t2, a2, Operand(a3)); |
| 5950 // Use the string table when adding two one character strings, as it | 5948 // Use the string table when adding two one character strings, as it |
| 5951 // helps later optimizations to return a string here. | 5949 // helps later optimizations to return a string here. |
| 5952 __ Branch(&longer_than_two, ne, t2, Operand(2)); | 5950 __ Branch(&longer_than_two, ne, t2, Operand(2)); |
| 5953 | 5951 |
| 5954 // Check that both strings are non-external ASCII strings. | 5952 // Check that both strings are non-external ASCII strings. |
| 5955 if (flags_ != NO_STRING_ADD_FLAGS) { | 5953 if ((flags_ & STRING_ADD_CHECK_BOTH) != STRING_ADD_CHECK_BOTH) { |
| 5956 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); | 5954 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); |
| 5957 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); | 5955 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); |
| 5958 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); | 5956 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); |
| 5959 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); | 5957 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); |
| 5960 } | 5958 } |
| 5961 __ JumpIfBothInstanceTypesAreNotSequentialAscii(t0, t1, t2, t3, | 5959 __ JumpIfBothInstanceTypesAreNotSequentialAscii(t0, t1, t2, t3, |
| 5962 &call_runtime); | 5960 &call_runtime); |
| 5963 | 5961 |
| 5964 // Get the two characters forming the sub string. | 5962 // Get the two characters forming the sub string. |
| 5965 __ lbu(a2, FieldMemOperand(a0, SeqOneByteString::kHeaderSize)); | 5963 __ lbu(a2, FieldMemOperand(a0, SeqOneByteString::kHeaderSize)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 5989 // Check if resulting string will be flat. | 5987 // Check if resulting string will be flat. |
| 5990 __ Branch(&string_add_flat_result, lt, t2, Operand(ConsString::kMinLength)); | 5988 __ Branch(&string_add_flat_result, lt, t2, Operand(ConsString::kMinLength)); |
| 5991 // Handle exceptionally long strings in the runtime system. | 5989 // Handle exceptionally long strings in the runtime system. |
| 5992 STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0); | 5990 STATIC_ASSERT((String::kMaxLength & 0x80000000) == 0); |
| 5993 ASSERT(IsPowerOf2(String::kMaxLength + 1)); | 5991 ASSERT(IsPowerOf2(String::kMaxLength + 1)); |
| 5994 // kMaxLength + 1 is representable as shifted literal, kMaxLength is not. | 5992 // kMaxLength + 1 is representable as shifted literal, kMaxLength is not. |
| 5995 __ Branch(&call_runtime, hs, t2, Operand(String::kMaxLength + 1)); | 5993 __ Branch(&call_runtime, hs, t2, Operand(String::kMaxLength + 1)); |
| 5996 | 5994 |
| 5997 // If result is not supposed to be flat, allocate a cons string object. | 5995 // If result is not supposed to be flat, allocate a cons string object. |
| 5998 // If both strings are ASCII the result is an ASCII cons string. | 5996 // If both strings are ASCII the result is an ASCII cons string. |
| 5999 if (flags_ != NO_STRING_ADD_FLAGS) { | 5997 if ((flags_ & STRING_ADD_CHECK_BOTH) != STRING_ADD_CHECK_BOTH) { |
| 6000 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); | 5998 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); |
| 6001 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); | 5999 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); |
| 6002 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); | 6000 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); |
| 6003 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); | 6001 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); |
| 6004 } | 6002 } |
| 6005 Label non_ascii, allocated, ascii_data; | 6003 Label non_ascii, allocated, ascii_data; |
| 6006 STATIC_ASSERT(kTwoByteStringTag == 0); | 6004 STATIC_ASSERT(kTwoByteStringTag == 0); |
| 6007 // Branch to non_ascii if either string-encoding field is zero (non-ASCII). | 6005 // Branch to non_ascii if either string-encoding field is zero (non-ASCII). |
| 6008 __ And(t4, t0, Operand(t1)); | 6006 __ And(t4, t0, Operand(t1)); |
| 6009 __ And(t4, t4, Operand(kStringEncodingMask)); | 6007 __ And(t4, t4, Operand(kStringEncodingMask)); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6072 // Locate the first characters' locations. | 6070 // Locate the first characters' locations. |
| 6073 // a0: first string | 6071 // a0: first string |
| 6074 // a1: second string | 6072 // a1: second string |
| 6075 // a2: length of first string | 6073 // a2: length of first string |
| 6076 // a3: length of second string | 6074 // a3: length of second string |
| 6077 // t0: first string instance type (if flags_ == NO_STRING_ADD_FLAGS) | 6075 // t0: first string instance type (if flags_ == NO_STRING_ADD_FLAGS) |
| 6078 // t1: second string instance type (if flags_ == NO_STRING_ADD_FLAGS) | 6076 // t1: second string instance type (if flags_ == NO_STRING_ADD_FLAGS) |
| 6079 // t2: sum of lengths. | 6077 // t2: sum of lengths. |
| 6080 Label first_prepared, second_prepared; | 6078 Label first_prepared, second_prepared; |
| 6081 __ bind(&string_add_flat_result); | 6079 __ bind(&string_add_flat_result); |
| 6082 if (flags_ != NO_STRING_ADD_FLAGS) { | 6080 if ((flags_ & STRING_ADD_CHECK_BOTH) != STRING_ADD_CHECK_BOTH) { |
| 6083 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); | 6081 __ lw(t0, FieldMemOperand(a0, HeapObject::kMapOffset)); |
| 6084 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); | 6082 __ lw(t1, FieldMemOperand(a1, HeapObject::kMapOffset)); |
| 6085 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); | 6083 __ lbu(t0, FieldMemOperand(t0, Map::kInstanceTypeOffset)); |
| 6086 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); | 6084 __ lbu(t1, FieldMemOperand(t1, Map::kInstanceTypeOffset)); |
| 6087 } | 6085 } |
| 6088 // Check whether both strings have same encoding | 6086 // Check whether both strings have same encoding |
| 6089 __ Xor(t3, t0, Operand(t1)); | 6087 __ Xor(t3, t0, Operand(t1)); |
| 6090 __ And(t3, t3, Operand(kStringEncodingMask)); | 6088 __ And(t3, t3, Operand(kStringEncodingMask)); |
| 6091 __ Branch(&call_runtime, ne, t3, Operand(zero_reg)); | 6089 __ Branch(&call_runtime, ne, t3, Operand(zero_reg)); |
| 6092 | 6090 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6158 // t2: first character of result. | 6156 // t2: first character of result. |
| 6159 StringHelper::GenerateCopyCharacters(masm, t2, t3, a2, t0, false); | 6157 StringHelper::GenerateCopyCharacters(masm, t2, t3, a2, t0, false); |
| 6160 // t2: next character of result. | 6158 // t2: next character of result. |
| 6161 StringHelper::GenerateCopyCharacters(masm, t2, a1, a3, t0, false); | 6159 StringHelper::GenerateCopyCharacters(masm, t2, a1, a3, t0, false); |
| 6162 | 6160 |
| 6163 __ IncrementCounter(counters->string_add_native(), 1, a2, a3); | 6161 __ IncrementCounter(counters->string_add_native(), 1, a2, a3); |
| 6164 __ DropAndRet(2); | 6162 __ DropAndRet(2); |
| 6165 | 6163 |
| 6166 // Just jump to runtime to add the two strings. | 6164 // Just jump to runtime to add the two strings. |
| 6167 __ bind(&call_runtime); | 6165 __ bind(&call_runtime); |
| 6168 if ((flags_ & ERECT_FRAME) != 0) { | 6166 if ((flags_ & STRING_ADD_ERECT_FRAME) != 0) { |
| 6169 GenerateRegisterArgsPop(masm); | 6167 GenerateRegisterArgsPop(masm); |
| 6170 // Build a frame. | 6168 // Build a frame. |
| 6171 { | 6169 { |
| 6172 FrameScope scope(masm, StackFrame::INTERNAL); | 6170 FrameScope scope(masm, StackFrame::INTERNAL); |
| 6173 GenerateRegisterArgsPush(masm); | 6171 GenerateRegisterArgsPush(masm); |
| 6174 __ CallRuntime(Runtime::kStringAdd, 2); | 6172 __ CallRuntime(Runtime::kStringAdd, 2); |
| 6175 } | 6173 } |
| 6176 __ Ret(); | 6174 __ Ret(); |
| 6177 } else { | 6175 } else { |
| 6178 __ TailCallRuntime(Runtime::kStringAdd, 2, 1); | 6176 __ TailCallRuntime(Runtime::kStringAdd, 2, 1); |
| 6179 } | 6177 } |
| 6180 | 6178 |
| 6181 if (call_builtin.is_linked()) { | 6179 if (call_builtin.is_linked()) { |
| 6182 __ bind(&call_builtin); | 6180 __ bind(&call_builtin); |
| 6183 if ((flags_ & ERECT_FRAME) != 0) { | 6181 if ((flags_ & STRING_ADD_ERECT_FRAME) != 0) { |
| 6184 GenerateRegisterArgsPop(masm); | 6182 GenerateRegisterArgsPop(masm); |
| 6185 // Build a frame. | 6183 // Build a frame. |
| 6186 { | 6184 { |
| 6187 FrameScope scope(masm, StackFrame::INTERNAL); | 6185 FrameScope scope(masm, StackFrame::INTERNAL); |
| 6188 GenerateRegisterArgsPush(masm); | 6186 GenerateRegisterArgsPush(masm); |
| 6189 __ InvokeBuiltin(builtin_id, CALL_FUNCTION); | 6187 __ InvokeBuiltin(builtin_id, CALL_FUNCTION); |
| 6190 } | 6188 } |
| 6191 __ Ret(); | 6189 __ Ret(); |
| 6192 } else { | 6190 } else { |
| 6193 __ InvokeBuiltin(builtin_id, JUMP_FUNCTION); | 6191 __ InvokeBuiltin(builtin_id, JUMP_FUNCTION); |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7625 __ bind(&fast_elements_case); | 7623 __ bind(&fast_elements_case); |
| 7626 GenerateCase(masm, FAST_ELEMENTS); | 7624 GenerateCase(masm, FAST_ELEMENTS); |
| 7627 } | 7625 } |
| 7628 | 7626 |
| 7629 | 7627 |
| 7630 #undef __ | 7628 #undef __ |
| 7631 | 7629 |
| 7632 } } // namespace v8::internal | 7630 } } // namespace v8::internal |
| 7633 | 7631 |
| 7634 #endif // V8_TARGET_ARCH_MIPS | 7632 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |