OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // | 4 // |
5 // The intrinsic code below is executed before a method has built its frame. | 5 // The intrinsic code below is executed before a method has built its frame. |
6 // The return address is on the stack and the arguments below it. | 6 // The return address is on the stack and the arguments below it. |
7 // Registers EDX (arguments descriptor) and ECX (function) must be preserved. | 7 // Registers EDX (arguments descriptor) and ECX (function) must be preserved. |
8 // Each intrinsification method returns true if the corresponding | 8 // Each intrinsification method returns true if the corresponding |
9 // Dart method was intrinsified. | 9 // Dart method was intrinsified. |
10 | 10 |
(...skipping 1923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 StringEquality(assembler, kOneByteStringCid); | 1934 StringEquality(assembler, kOneByteStringCid); |
1935 } | 1935 } |
1936 | 1936 |
1937 | 1937 |
1938 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { | 1938 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { |
1939 StringEquality(assembler, kTwoByteStringCid); | 1939 StringEquality(assembler, kTwoByteStringCid); |
1940 } | 1940 } |
1941 | 1941 |
1942 | 1942 |
1943 void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { | 1943 void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { |
1944 if (FLAG_use_jscre) { | |
1945 return; | |
1946 } | |
1947 static const intptr_t kRegExpParamOffset = 3 * kWordSize; | 1944 static const intptr_t kRegExpParamOffset = 3 * kWordSize; |
1948 static const intptr_t kStringParamOffset = 2 * kWordSize; | 1945 static const intptr_t kStringParamOffset = 2 * kWordSize; |
1949 // start_index smi is located at offset 1. | 1946 // start_index smi is located at offset 1. |
1950 | 1947 |
1951 // Incoming registers: | 1948 // Incoming registers: |
1952 // EAX: Function. (Will be loaded with the specialized matcher function.) | 1949 // EAX: Function. (Will be loaded with the specialized matcher function.) |
1953 // ECX: Unknown. (Must be GC safe on tail call.) | 1950 // ECX: Unknown. (Must be GC safe on tail call.) |
1954 // EDX: Arguments descriptor. (Will be preserved.) | 1951 // EDX: Arguments descriptor. (Will be preserved.) |
1955 | 1952 |
1956 // Load the specialized function pointer into EAX. Leverage the fact the | 1953 // Load the specialized function pointer into EAX. Leverage the fact the |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2016 Isolate::current_tag_offset()); | 2013 Isolate::current_tag_offset()); |
2017 // Set return value to Isolate::current_tag_. | 2014 // Set return value to Isolate::current_tag_. |
2018 __ movl(EAX, current_tag_addr); | 2015 __ movl(EAX, current_tag_addr); |
2019 __ ret(); | 2016 __ ret(); |
2020 } | 2017 } |
2021 | 2018 |
2022 #undef __ | 2019 #undef __ |
2023 } // namespace dart | 2020 } // namespace dart |
2024 | 2021 |
2025 #endif // defined TARGET_ARCH_IA32 | 2022 #endif // defined TARGET_ARCH_IA32 |
OLD | NEW |