| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
| 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "src/globals.h" | 10 #include "src/globals.h" |
| (...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 // determine which is the most efficient algorithm to use for copying. | 1049 // determine which is the most efficient algorithm to use for copying. |
| 1050 void CopyBytes(Register dst, | 1050 void CopyBytes(Register dst, |
| 1051 Register src, | 1051 Register src, |
| 1052 Register length, | 1052 Register length, |
| 1053 Register scratch, | 1053 Register scratch, |
| 1054 CopyHint hint = kCopyUnknown); | 1054 CopyHint hint = kCopyUnknown); |
| 1055 | 1055 |
| 1056 // ---- String Utilities ---- | 1056 // ---- String Utilities ---- |
| 1057 | 1057 |
| 1058 | 1058 |
| 1059 // Jump to label if either object is not a sequential ASCII string. | 1059 // Jump to label if either object is not a sequential one-byte string. |
| 1060 // Optionally perform a smi check on the objects first. | 1060 // Optionally perform a smi check on the objects first. |
| 1061 void JumpIfEitherIsNotSequentialAsciiStrings( | 1061 void JumpIfEitherIsNotSequentialOneByteStrings( |
| 1062 Register first, | 1062 Register first, Register second, Register scratch1, Register scratch2, |
| 1063 Register second, | 1063 Label* failure, SmiCheckType smi_check = DO_SMI_CHECK); |
| 1064 Register scratch1, | |
| 1065 Register scratch2, | |
| 1066 Label* failure, | |
| 1067 SmiCheckType smi_check = DO_SMI_CHECK); | |
| 1068 | 1064 |
| 1069 // Check if instance type is sequential ASCII string and jump to label if | 1065 // Check if instance type is sequential one-byte string and jump to label if |
| 1070 // it is not. | 1066 // it is not. |
| 1071 void JumpIfInstanceTypeIsNotSequentialAscii(Register type, | 1067 void JumpIfInstanceTypeIsNotSequentialOneByte(Register type, Register scratch, |
| 1072 Register scratch, | 1068 Label* failure); |
| 1073 Label* failure); | |
| 1074 | 1069 |
| 1075 // Checks if both instance types are sequential ASCII strings and jumps to | 1070 // Checks if both instance types are sequential one-byte strings and jumps to |
| 1076 // label if either is not. | 1071 // label if either is not. |
| 1077 void JumpIfEitherInstanceTypeIsNotSequentialAscii( | 1072 void JumpIfEitherInstanceTypeIsNotSequentialOneByte( |
| 1078 Register first_object_instance_type, | 1073 Register first_object_instance_type, Register second_object_instance_type, |
| 1079 Register second_object_instance_type, | 1074 Register scratch1, Register scratch2, Label* failure); |
| 1080 Register scratch1, | |
| 1081 Register scratch2, | |
| 1082 Label* failure); | |
| 1083 | 1075 |
| 1084 // Checks if both instance types are sequential ASCII strings and jumps to | 1076 // Checks if both instance types are sequential one-byte strings and jumps to |
| 1085 // label if either is not. | 1077 // label if either is not. |
| 1086 void JumpIfBothInstanceTypesAreNotSequentialAscii( | 1078 void JumpIfBothInstanceTypesAreNotSequentialOneByte( |
| 1087 Register first_object_instance_type, | 1079 Register first_object_instance_type, Register second_object_instance_type, |
| 1088 Register second_object_instance_type, | 1080 Register scratch1, Register scratch2, Label* failure); |
| 1089 Register scratch1, | |
| 1090 Register scratch2, | |
| 1091 Label* failure); | |
| 1092 | 1081 |
| 1093 void JumpIfNotUniqueName(Register type, Label* not_unique_name); | 1082 void JumpIfNotUniqueName(Register type, Label* not_unique_name); |
| 1094 | 1083 |
| 1095 // ---- Calling / Jumping helpers ---- | 1084 // ---- Calling / Jumping helpers ---- |
| 1096 | 1085 |
| 1097 // This is required for compatibility in architecture indepenedant code. | 1086 // This is required for compatibility in architecture indepenedant code. |
| 1098 inline void jmp(Label* L) { B(L); } | 1087 inline void jmp(Label* L) { B(L); } |
| 1099 | 1088 |
| 1100 // Passes thrown value to the handler of top of the try handler chain. | 1089 // Passes thrown value to the handler of top of the try handler chain. |
| 1101 // Register value must be x0. | 1090 // Register value must be x0. |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1363 // are left to the object(s) no longer allocated as they would be invalid when | 1352 // are left to the object(s) no longer allocated as they would be invalid when |
| 1364 // allocation is undone. | 1353 // allocation is undone. |
| 1365 void UndoAllocationInNewSpace(Register object, Register scratch); | 1354 void UndoAllocationInNewSpace(Register object, Register scratch); |
| 1366 | 1355 |
| 1367 void AllocateTwoByteString(Register result, | 1356 void AllocateTwoByteString(Register result, |
| 1368 Register length, | 1357 Register length, |
| 1369 Register scratch1, | 1358 Register scratch1, |
| 1370 Register scratch2, | 1359 Register scratch2, |
| 1371 Register scratch3, | 1360 Register scratch3, |
| 1372 Label* gc_required); | 1361 Label* gc_required); |
| 1373 void AllocateAsciiString(Register result, | 1362 void AllocateOneByteString(Register result, Register length, |
| 1374 Register length, | 1363 Register scratch1, Register scratch2, |
| 1375 Register scratch1, | 1364 Register scratch3, Label* gc_required); |
| 1376 Register scratch2, | |
| 1377 Register scratch3, | |
| 1378 Label* gc_required); | |
| 1379 void AllocateTwoByteConsString(Register result, | 1365 void AllocateTwoByteConsString(Register result, |
| 1380 Register length, | 1366 Register length, |
| 1381 Register scratch1, | 1367 Register scratch1, |
| 1382 Register scratch2, | 1368 Register scratch2, |
| 1383 Label* gc_required); | 1369 Label* gc_required); |
| 1384 void AllocateAsciiConsString(Register result, | 1370 void AllocateOneByteConsString(Register result, Register length, |
| 1385 Register length, | 1371 Register scratch1, Register scratch2, |
| 1386 Register scratch1, | 1372 Label* gc_required); |
| 1387 Register scratch2, | |
| 1388 Label* gc_required); | |
| 1389 void AllocateTwoByteSlicedString(Register result, | 1373 void AllocateTwoByteSlicedString(Register result, |
| 1390 Register length, | 1374 Register length, |
| 1391 Register scratch1, | 1375 Register scratch1, |
| 1392 Register scratch2, | 1376 Register scratch2, |
| 1393 Label* gc_required); | 1377 Label* gc_required); |
| 1394 void AllocateAsciiSlicedString(Register result, | 1378 void AllocateOneByteSlicedString(Register result, Register length, |
| 1395 Register length, | 1379 Register scratch1, Register scratch2, |
| 1396 Register scratch1, | 1380 Label* gc_required); |
| 1397 Register scratch2, | |
| 1398 Label* gc_required); | |
| 1399 | 1381 |
| 1400 // Allocates a heap number or jumps to the gc_required label if the young | 1382 // Allocates a heap number or jumps to the gc_required label if the young |
| 1401 // space is full and a scavenge is needed. | 1383 // space is full and a scavenge is needed. |
| 1402 // All registers are clobbered. | 1384 // All registers are clobbered. |
| 1403 // If no heap_number_map register is provided, the function will take care of | 1385 // If no heap_number_map register is provided, the function will take care of |
| 1404 // loading it. | 1386 // loading it. |
| 1405 void AllocateHeapNumber(Register result, | 1387 void AllocateHeapNumber(Register result, |
| 1406 Label* gc_required, | 1388 Label* gc_required, |
| 1407 Register scratch1, | 1389 Register scratch1, |
| 1408 Register scratch2, | 1390 Register scratch2, |
| (...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2355 #error "Unsupported option" | 2337 #error "Unsupported option" |
| 2356 #define CODE_COVERAGE_STRINGIFY(x) #x | 2338 #define CODE_COVERAGE_STRINGIFY(x) #x |
| 2357 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 2339 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
| 2358 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 2340 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
| 2359 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 2341 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
| 2360 #else | 2342 #else |
| 2361 #define ACCESS_MASM(masm) masm-> | 2343 #define ACCESS_MASM(masm) masm-> |
| 2362 #endif | 2344 #endif |
| 2363 | 2345 |
| 2364 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 2346 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
| OLD | NEW |