OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 4079 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4090 // ConsString. | 4090 // ConsString. |
4091 // Check whether the right hand side is the empty string (i.e. if | 4091 // Check whether the right hand side is the empty string (i.e. if |
4092 // this is really a flat string in a cons string). If that is not | 4092 // this is really a flat string in a cons string). If that is not |
4093 // the case we would rather go to the runtime system now to flatten | 4093 // the case we would rather go to the runtime system now to flatten |
4094 // the string. | 4094 // the string. |
4095 Label assure_seq_string; | 4095 Label assure_seq_string; |
4096 __ CompareRoot(FieldOperand(object_, ConsString::kSecondOffset), | 4096 __ CompareRoot(FieldOperand(object_, ConsString::kSecondOffset), |
4097 Heap::kEmptyStringRootIndex); | 4097 Heap::kEmptyStringRootIndex); |
4098 __ j(not_equal, &call_runtime_); | 4098 __ j(not_equal, &call_runtime_); |
4099 // Get the first of the two parts. | 4099 // Get the first of the two parts. |
4100 ASSERT(!kScratchRegister.is(scratch_)); | |
4101 __ movq(object_, FieldOperand(object_, ConsString::kFirstOffset)); | 4100 __ movq(object_, FieldOperand(object_, ConsString::kFirstOffset)); |
4102 __ jmp(&assure_seq_string, Label::kNear); | 4101 __ jmp(&assure_seq_string, Label::kNear); |
4103 | 4102 |
4104 // SlicedString, unpack and add offset. | 4103 // SlicedString, unpack and add offset. |
4105 __ bind(&sliced_string); | 4104 __ bind(&sliced_string); |
4106 __ addq(index_, FieldOperand(object_, SlicedString::kOffsetOffset)); | 4105 __ addq(index_, FieldOperand(object_, SlicedString::kOffsetOffset)); |
4107 __ movq(object_, FieldOperand(object_, SlicedString::kParentOffset)); | 4106 __ movq(object_, FieldOperand(object_, SlicedString::kParentOffset)); |
4108 | 4107 |
4109 // Assure that we are dealing with a sequential string. Go to runtime if not. | 4108 // Assure that we are dealing with a sequential string. Go to runtime if not. |
4110 // Note that if the original string is a cons or slice with an external | 4109 // Note that if the original string is a cons or slice with an external |
(...skipping 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6023 __ bind(&element_done); | 6022 __ bind(&element_done); |
6024 __ ret(0); | 6023 __ ret(0); |
6025 } | 6024 } |
6026 } | 6025 } |
6027 | 6026 |
6028 #undef __ | 6027 #undef __ |
6029 | 6028 |
6030 } } // namespace v8::internal | 6029 } } // namespace v8::internal |
6031 | 6030 |
6032 #endif // V8_TARGET_ARCH_X64 | 6031 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |