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 |