OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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_X64_MACRO_ASSEMBLER_X64_H_ | 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ |
6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ | 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/frames.h" | 9 #include "src/frames.h" |
10 #include "src/globals.h" | 10 #include "src/globals.h" |
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
766 Register scratch2, | 766 Register scratch2, |
767 Label* not_found); | 767 Label* not_found); |
768 | 768 |
769 // If object is a string, its map is loaded into object_map. | 769 // If object is a string, its map is loaded into object_map. |
770 void JumpIfNotString(Register object, | 770 void JumpIfNotString(Register object, |
771 Register object_map, | 771 Register object_map, |
772 Label* not_string, | 772 Label* not_string, |
773 Label::Distance near_jump = Label::kFar); | 773 Label::Distance near_jump = Label::kFar); |
774 | 774 |
775 | 775 |
776 void JumpIfNotBothSequentialAsciiStrings( | 776 void JumpIfNotBothSequentialOneByteStrings( |
777 Register first_object, | 777 Register first_object, Register second_object, Register scratch1, |
778 Register second_object, | 778 Register scratch2, Label* on_not_both_flat_one_byte, |
779 Register scratch1, | |
780 Register scratch2, | |
781 Label* on_not_both_flat_ascii, | |
782 Label::Distance near_jump = Label::kFar); | 779 Label::Distance near_jump = Label::kFar); |
783 | 780 |
784 // Check whether the instance type represents a flat ASCII string. Jump to the | 781 // Check whether the instance type represents a flat one-byte string. Jump |
785 // label if not. If the instance type can be scratched specify same register | 782 // to the label if not. If the instance type can be scratched specify same |
786 // for both instance type and scratch. | 783 // register for both instance type and scratch. |
787 void JumpIfInstanceTypeIsNotSequentialAscii( | 784 void JumpIfInstanceTypeIsNotSequentialOneByte( |
788 Register instance_type, | 785 Register instance_type, Register scratch, |
789 Register scratch, | 786 Label* on_not_flat_one_byte_string, |
790 Label*on_not_flat_ascii_string, | |
791 Label::Distance near_jump = Label::kFar); | 787 Label::Distance near_jump = Label::kFar); |
792 | 788 |
793 void JumpIfBothInstanceTypesAreNotSequentialAscii( | 789 void JumpIfBothInstanceTypesAreNotSequentialOneByte( |
794 Register first_object_instance_type, | 790 Register first_object_instance_type, Register second_object_instance_type, |
795 Register second_object_instance_type, | 791 Register scratch1, Register scratch2, Label* on_fail, |
796 Register scratch1, | |
797 Register scratch2, | |
798 Label* on_fail, | |
799 Label::Distance near_jump = Label::kFar); | 792 Label::Distance near_jump = Label::kFar); |
800 | 793 |
801 void EmitSeqStringSetCharCheck(Register string, | 794 void EmitSeqStringSetCharCheck(Register string, |
802 Register index, | 795 Register index, |
803 Register value, | 796 Register value, |
804 uint32_t encoding_mask); | 797 uint32_t encoding_mask); |
805 | 798 |
806 // Checks if the given register or operand is a unique name | 799 // Checks if the given register or operand is a unique name |
807 void JumpIfNotUniqueName(Register reg, Label* not_unique_name, | 800 void JumpIfNotUniqueName(Register reg, Label* not_unique_name, |
808 Label::Distance distance = Label::kFar); | 801 Label::Distance distance = Label::kFar); |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 MutableMode mode = IMMUTABLE); | 1192 MutableMode mode = IMMUTABLE); |
1200 | 1193 |
1201 // Allocate a sequential string. All the header fields of the string object | 1194 // Allocate a sequential string. All the header fields of the string object |
1202 // are initialized. | 1195 // are initialized. |
1203 void AllocateTwoByteString(Register result, | 1196 void AllocateTwoByteString(Register result, |
1204 Register length, | 1197 Register length, |
1205 Register scratch1, | 1198 Register scratch1, |
1206 Register scratch2, | 1199 Register scratch2, |
1207 Register scratch3, | 1200 Register scratch3, |
1208 Label* gc_required); | 1201 Label* gc_required); |
1209 void AllocateAsciiString(Register result, | 1202 void AllocateOneByteString(Register result, Register length, |
1210 Register length, | 1203 Register scratch1, Register scratch2, |
1211 Register scratch1, | 1204 Register scratch3, Label* gc_required); |
1212 Register scratch2, | |
1213 Register scratch3, | |
1214 Label* gc_required); | |
1215 | 1205 |
1216 // Allocate a raw cons string object. Only the map field of the result is | 1206 // Allocate a raw cons string object. Only the map field of the result is |
1217 // initialized. | 1207 // initialized. |
1218 void AllocateTwoByteConsString(Register result, | 1208 void AllocateTwoByteConsString(Register result, |
1219 Register scratch1, | 1209 Register scratch1, |
1220 Register scratch2, | 1210 Register scratch2, |
1221 Label* gc_required); | 1211 Label* gc_required); |
1222 void AllocateAsciiConsString(Register result, | 1212 void AllocateOneByteConsString(Register result, Register scratch1, |
1223 Register scratch1, | 1213 Register scratch2, Label* gc_required); |
1224 Register scratch2, | |
1225 Label* gc_required); | |
1226 | 1214 |
1227 // Allocate a raw sliced string object. Only the map field of the result is | 1215 // Allocate a raw sliced string object. Only the map field of the result is |
1228 // initialized. | 1216 // initialized. |
1229 void AllocateTwoByteSlicedString(Register result, | 1217 void AllocateTwoByteSlicedString(Register result, |
1230 Register scratch1, | 1218 Register scratch1, |
1231 Register scratch2, | 1219 Register scratch2, |
1232 Label* gc_required); | 1220 Label* gc_required); |
1233 void AllocateAsciiSlicedString(Register result, | 1221 void AllocateOneByteSlicedString(Register result, Register scratch1, |
1234 Register scratch1, | 1222 Register scratch2, Label* gc_required); |
1235 Register scratch2, | |
1236 Label* gc_required); | |
1237 | 1223 |
1238 // --------------------------------------------------------------------------- | 1224 // --------------------------------------------------------------------------- |
1239 // Support functions. | 1225 // Support functions. |
1240 | 1226 |
1241 // Check if result is zero and op is negative. | 1227 // Check if result is zero and op is negative. |
1242 void NegativeZeroTest(Register result, Register op, Label* then_label); | 1228 void NegativeZeroTest(Register result, Register op, Label* then_label); |
1243 | 1229 |
1244 // Check if result is zero and op is negative in code using jump targets. | 1230 // Check if result is zero and op is negative in code using jump targets. |
1245 void NegativeZeroTest(CodeGenerator* cgen, | 1231 void NegativeZeroTest(CodeGenerator* cgen, |
1246 Register result, | 1232 Register result, |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1657 masm->popfq(); \ | 1643 masm->popfq(); \ |
1658 } \ | 1644 } \ |
1659 masm-> | 1645 masm-> |
1660 #else | 1646 #else |
1661 #define ACCESS_MASM(masm) masm-> | 1647 #define ACCESS_MASM(masm) masm-> |
1662 #endif | 1648 #endif |
1663 | 1649 |
1664 } } // namespace v8::internal | 1650 } } // namespace v8::internal |
1665 | 1651 |
1666 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 1652 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
OLD | NEW |