| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64. |
| 6 #if defined(TARGET_ARCH_ARM64) | 6 #if defined(TARGET_ARCH_ARM64) |
| 7 | 7 |
| 8 #include "vm/intrinsifier.h" | 8 #include "vm/intrinsifier.h" |
| 9 | 9 |
| 10 #include "vm/assembler.h" | 10 #include "vm/assembler.h" |
| (...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1199 __ fmuld(V0, V0, V1); | 1199 __ fmuld(V0, V0, V1); |
| 1200 const Class& double_class = Class::Handle( | 1200 const Class& double_class = Class::Handle( |
| 1201 Isolate::Current()->object_store()->double_class()); | 1201 Isolate::Current()->object_store()->double_class()); |
| 1202 __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); | 1202 __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); |
| 1203 __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); | 1203 __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); |
| 1204 __ ret(); | 1204 __ ret(); |
| 1205 __ Bind(&fall_through); | 1205 __ Bind(&fall_through); |
| 1206 } | 1206 } |
| 1207 | 1207 |
| 1208 | 1208 |
| 1209 void Intrinsifier::Double_fromInteger(Assembler* assembler) { | 1209 void Intrinsifier::DoubleFromInteger(Assembler* assembler) { |
| 1210 Label fall_through; | 1210 Label fall_through; |
| 1211 | 1211 |
| 1212 __ ldr(R0, Address(SP, 0 * kWordSize)); | 1212 __ ldr(R0, Address(SP, 0 * kWordSize)); |
| 1213 __ tsti(R0, kSmiTagMask); | 1213 __ tsti(R0, kSmiTagMask); |
| 1214 __ b(&fall_through, NE); | 1214 __ b(&fall_through, NE); |
| 1215 // Is Smi. | 1215 // Is Smi. |
| 1216 __ SmiUntag(R0); | 1216 __ SmiUntag(R0); |
| 1217 __ scvtfd(V0, R0); | 1217 __ scvtfd(V0, R0); |
| 1218 const Class& double_class = Class::Handle( | 1218 const Class& double_class = Class::Handle( |
| 1219 Isolate::Current()->object_store()->double_class()); | 1219 Isolate::Current()->object_store()->double_class()); |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1400 ASSERT(kSmiTagShift == 1); | 1400 ASSERT(kSmiTagShift == 1); |
| 1401 __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag, kNoPP); | 1401 __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag, kNoPP); |
| 1402 __ ldr(R0, Address(R0, R1), kUnsignedHalfword); | 1402 __ ldr(R0, Address(R0, R1), kUnsignedHalfword); |
| 1403 __ SmiTag(R0); | 1403 __ SmiTag(R0); |
| 1404 __ ret(); | 1404 __ ret(); |
| 1405 | 1405 |
| 1406 __ Bind(&fall_through); | 1406 __ Bind(&fall_through); |
| 1407 } | 1407 } |
| 1408 | 1408 |
| 1409 | 1409 |
| 1410 void Intrinsifier::StringBase_charAt(Assembler* assembler) { | 1410 void Intrinsifier::StringBaseCharAt(Assembler* assembler) { |
| 1411 Label fall_through, try_two_byte_string; | 1411 Label fall_through, try_two_byte_string; |
| 1412 | 1412 |
| 1413 __ ldr(R1, Address(SP, 0 * kWordSize)); // Index. | 1413 __ ldr(R1, Address(SP, 0 * kWordSize)); // Index. |
| 1414 __ ldr(R0, Address(SP, 1 * kWordSize)); // String. | 1414 __ ldr(R0, Address(SP, 1 * kWordSize)); // String. |
| 1415 __ tsti(R1, kSmiTagMask); | 1415 __ tsti(R1, kSmiTagMask); |
| 1416 __ b(&fall_through, NE); // Index is not a Smi. | 1416 __ b(&fall_through, NE); // Index is not a Smi. |
| 1417 // Range check. | 1417 // Range check. |
| 1418 __ ldr(R2, FieldAddress(R0, String::length_offset())); | 1418 __ ldr(R2, FieldAddress(R0, String::length_offset())); |
| 1419 __ cmp(R1, Operand(R2)); | 1419 __ cmp(R1, Operand(R2)); |
| 1420 __ b(&fall_through, CS); // Runtime throws exception. | 1420 __ b(&fall_through, CS); // Runtime throws exception. |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1794 Isolate* isolate = Isolate::Current(); | 1794 Isolate* isolate = Isolate::Current(); |
| 1795 __ LoadImmediate(R1, reinterpret_cast<uword>(isolate), kNoPP); | 1795 __ LoadImmediate(R1, reinterpret_cast<uword>(isolate), kNoPP); |
| 1796 // Set return value to Isolate::current_tag_. | 1796 // Set return value to Isolate::current_tag_. |
| 1797 __ ldr(R0, Address(R1, Isolate::current_tag_offset())); | 1797 __ ldr(R0, Address(R1, Isolate::current_tag_offset())); |
| 1798 __ ret(); | 1798 __ ret(); |
| 1799 } | 1799 } |
| 1800 | 1800 |
| 1801 } // namespace dart | 1801 } // namespace dart |
| 1802 | 1802 |
| 1803 #endif // defined TARGET_ARCH_ARM64 | 1803 #endif // defined TARGET_ARCH_ARM64 |
| OLD | NEW |