Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 1857001: Revert "Changing string length field type from int to SMI." (Closed)
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/arm/macro-assembler-arm.h ('k') | src/arm/stub-cache-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 // Save the state of all registers to the stack from the memory 392 // Save the state of all registers to the stack from the memory
393 // location. This is needed to allow nested break points. 393 // location. This is needed to allow nested break points.
394 if (mode == ExitFrame::MODE_DEBUG) { 394 if (mode == ExitFrame::MODE_DEBUG) {
395 // Use sp as base to push. 395 // Use sp as base to push.
396 CopyRegistersFromMemoryToStack(sp, kJSCallerSaved); 396 CopyRegistersFromMemoryToStack(sp, kJSCallerSaved);
397 } 397 }
398 #endif 398 #endif
399 } 399 }
400 400
401 401
402 void MacroAssembler::InitializeNewString(Register string,
403 Register length,
404 Heap::RootListIndex map_index,
405 Register scratch1,
406 Register scratch2) {
407 mov(scratch1, Operand(length, LSL, kSmiTagSize));
408 LoadRoot(scratch2, map_index);
409 str(scratch1, FieldMemOperand(string, String::kLengthOffset));
410 mov(scratch1, Operand(String::kEmptyHashField));
411 str(scratch2, FieldMemOperand(string, HeapObject::kMapOffset));
412 str(scratch1, FieldMemOperand(string, String::kHashFieldOffset));
413 }
414
415
416 int MacroAssembler::ActivationFrameAlignment() { 402 int MacroAssembler::ActivationFrameAlignment() {
417 #if defined(V8_HOST_ARCH_ARM) 403 #if defined(V8_HOST_ARCH_ARM)
418 // Running on the real platform. Use the alignment as mandated by the local 404 // Running on the real platform. Use the alignment as mandated by the local
419 // environment. 405 // environment.
420 // Note: This will break if we ever start generating snapshots on one ARM 406 // Note: This will break if we ever start generating snapshots on one ARM
421 // platform for another ARM platform with a different alignment. 407 // platform for another ARM platform with a different alignment.
422 return OS::ActivationFrameAlignment(); 408 return OS::ActivationFrameAlignment();
423 #else // defined(V8_HOST_ARCH_ARM) 409 #else // defined(V8_HOST_ARCH_ARM)
424 // If we are using the simulator then we should always align to the expected 410 // If we are using the simulator then we should always align to the expected
425 // alignment. As the simulator is used to generate snapshots we do not know 411 // alignment. As the simulator is used to generate snapshots we do not know
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 1013
1028 // Allocate two-byte string in new space. 1014 // Allocate two-byte string in new space.
1029 AllocateInNewSpace(scratch1, 1015 AllocateInNewSpace(scratch1,
1030 result, 1016 result,
1031 scratch2, 1017 scratch2,
1032 scratch3, 1018 scratch3,
1033 gc_required, 1019 gc_required,
1034 TAG_OBJECT); 1020 TAG_OBJECT);
1035 1021
1036 // Set the map, length and hash field. 1022 // Set the map, length and hash field.
1037 InitializeNewString(result, 1023 LoadRoot(scratch1, Heap::kStringMapRootIndex);
1038 length, 1024 str(length, FieldMemOperand(result, String::kLengthOffset));
1039 Heap::kStringMapRootIndex, 1025 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset));
1040 scratch1, 1026 mov(scratch2, Operand(String::kEmptyHashField));
1041 scratch2); 1027 str(scratch2, FieldMemOperand(result, String::kHashFieldOffset));
1042 } 1028 }
1043 1029
1044 1030
1045 void MacroAssembler::AllocateAsciiString(Register result, 1031 void MacroAssembler::AllocateAsciiString(Register result,
1046 Register length, 1032 Register length,
1047 Register scratch1, 1033 Register scratch1,
1048 Register scratch2, 1034 Register scratch2,
1049 Register scratch3, 1035 Register scratch3,
1050 Label* gc_required) { 1036 Label* gc_required) {
1051 // Calculate the number of bytes needed for the characters in the string while 1037 // Calculate the number of bytes needed for the characters in the string while
1052 // observing object alignment. 1038 // observing object alignment.
1053 ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0); 1039 ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0);
1054 ASSERT(kCharSize == 1); 1040 ASSERT(kCharSize == 1);
1055 add(scratch1, length, 1041 add(scratch1, length,
1056 Operand(kObjectAlignmentMask + SeqAsciiString::kHeaderSize)); 1042 Operand(kObjectAlignmentMask + SeqAsciiString::kHeaderSize));
1057 // AllocateInNewSpace expects the size in words, so we can round down 1043 // AllocateInNewSpace expects the size in words, so we can round down
1058 // to kObjectAlignment and divide by kPointerSize in the same shift. 1044 // to kObjectAlignment and divide by kPointerSize in the same shift.
1059 ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1); 1045 ASSERT_EQ(kPointerSize, kObjectAlignmentMask + 1);
1060 mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2)); 1046 mov(scratch1, Operand(scratch1, ASR, kPointerSizeLog2));
1061 1047
1062 // Allocate ASCII string in new space. 1048 // Allocate ASCII string in new space.
1063 AllocateInNewSpace(scratch1, 1049 AllocateInNewSpace(scratch1,
1064 result, 1050 result,
1065 scratch2, 1051 scratch2,
1066 scratch3, 1052 scratch3,
1067 gc_required, 1053 gc_required,
1068 TAG_OBJECT); 1054 TAG_OBJECT);
1069 1055
1070 // Set the map, length and hash field. 1056 // Set the map, length and hash field.
1071 InitializeNewString(result, 1057 LoadRoot(scratch1, Heap::kAsciiStringMapRootIndex);
1072 length, 1058 mov(scratch1, Operand(Factory::ascii_string_map()));
1073 Heap::kAsciiStringMapRootIndex, 1059 str(length, FieldMemOperand(result, String::kLengthOffset));
1074 scratch1, 1060 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset));
1075 scratch2); 1061 mov(scratch2, Operand(String::kEmptyHashField));
1062 str(scratch2, FieldMemOperand(result, String::kHashFieldOffset));
1076 } 1063 }
1077 1064
1078 1065
1079 void MacroAssembler::AllocateTwoByteConsString(Register result, 1066 void MacroAssembler::AllocateTwoByteConsString(Register result,
1080 Register length, 1067 Register length,
1081 Register scratch1, 1068 Register scratch1,
1082 Register scratch2, 1069 Register scratch2,
1083 Label* gc_required) { 1070 Label* gc_required) {
1084 AllocateInNewSpace(ConsString::kSize / kPointerSize, 1071 AllocateInNewSpace(ConsString::kSize / kPointerSize,
1085 result, 1072 result,
1086 scratch1, 1073 scratch1,
1087 scratch2, 1074 scratch2,
1088 gc_required, 1075 gc_required,
1089 TAG_OBJECT); 1076 TAG_OBJECT);
1090 1077 LoadRoot(scratch1, Heap::kConsStringMapRootIndex);
1091 InitializeNewString(result, 1078 mov(scratch2, Operand(String::kEmptyHashField));
1092 length, 1079 str(length, FieldMemOperand(result, String::kLengthOffset));
1093 Heap::kConsStringMapRootIndex, 1080 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset));
1094 scratch1, 1081 str(scratch2, FieldMemOperand(result, String::kHashFieldOffset));
1095 scratch2);
1096 } 1082 }
1097 1083
1098 1084
1099 void MacroAssembler::AllocateAsciiConsString(Register result, 1085 void MacroAssembler::AllocateAsciiConsString(Register result,
1100 Register length, 1086 Register length,
1101 Register scratch1, 1087 Register scratch1,
1102 Register scratch2, 1088 Register scratch2,
1103 Label* gc_required) { 1089 Label* gc_required) {
1104 AllocateInNewSpace(ConsString::kSize / kPointerSize, 1090 AllocateInNewSpace(ConsString::kSize / kPointerSize,
1105 result, 1091 result,
1106 scratch1, 1092 scratch1,
1107 scratch2, 1093 scratch2,
1108 gc_required, 1094 gc_required,
1109 TAG_OBJECT); 1095 TAG_OBJECT);
1110 1096 LoadRoot(scratch1, Heap::kConsAsciiStringMapRootIndex);
1111 InitializeNewString(result, 1097 mov(scratch2, Operand(String::kEmptyHashField));
1112 length, 1098 str(length, FieldMemOperand(result, String::kLengthOffset));
1113 Heap::kConsAsciiStringMapRootIndex, 1099 str(scratch1, FieldMemOperand(result, HeapObject::kMapOffset));
1114 scratch1, 1100 str(scratch2, FieldMemOperand(result, String::kHashFieldOffset));
1115 scratch2);
1116 } 1101 }
1117 1102
1118 1103
1119 void MacroAssembler::CompareObjectType(Register object, 1104 void MacroAssembler::CompareObjectType(Register object,
1120 Register map, 1105 Register map,
1121 Register type_reg, 1106 Register type_reg,
1122 InstanceType type) { 1107 InstanceType type) {
1123 ldr(map, FieldMemOperand(object, HeapObject::kMapOffset)); 1108 ldr(map, FieldMemOperand(object, HeapObject::kMapOffset));
1124 CompareInstanceType(map, type_reg, type); 1109 CompareInstanceType(map, type_reg, type);
1125 } 1110 }
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 } 1661 }
1677 1662
1678 1663
1679 void CodePatcher::Emit(Address addr) { 1664 void CodePatcher::Emit(Address addr) {
1680 masm()->emit(reinterpret_cast<Instr>(addr)); 1665 masm()->emit(reinterpret_cast<Instr>(addr));
1681 } 1666 }
1682 #endif // ENABLE_DEBUGGER_SUPPORT 1667 #endif // ENABLE_DEBUGGER_SUPPORT
1683 1668
1684 1669
1685 } } // namespace v8::internal 1670 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.h ('k') | src/arm/stub-cache-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698