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

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

Issue 2912063002: Revert of [arm] Share constant pool entries in snapshot. (Closed)
Patch Set: Created 3 years, 6 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/assembler-arm.h ('k') | src/arm/assembler-arm-inl.h » ('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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 if (fits_shifter(~imm32, rotate_imm, immed_8, NULL)) { 1086 if (fits_shifter(~imm32, rotate_imm, immed_8, NULL)) {
1087 *instr ^= kAndBicFlip; 1087 *instr ^= kAndBicFlip;
1088 return true; 1088 return true;
1089 } 1089 }
1090 } 1090 }
1091 } 1091 }
1092 } 1092 }
1093 return false; 1093 return false;
1094 } 1094 }
1095 1095
1096 namespace {
1097 1096
1098 // We have to use the temporary register for things that can be relocated even 1097 // We have to use the temporary register for things that can be relocated even
1099 // if they can be encoded in the ARM's 12 bits of immediate-offset instruction 1098 // if they can be encoded in the ARM's 12 bits of immediate-offset instruction
1100 // space. There is no guarantee that the relocated location can be similarly 1099 // space. There is no guarantee that the relocated location can be similarly
1101 // encoded. 1100 // encoded.
1102 bool must_output_reloc_info(RelocInfo::Mode rmode, const Assembler* assembler) { 1101 bool Operand::must_output_reloc_info(const Assembler* assembler) const {
1103 if (rmode == RelocInfo::EXTERNAL_REFERENCE) { 1102 if (rmode_ == RelocInfo::EXTERNAL_REFERENCE) {
1104 if (assembler != NULL && assembler->predictable_code_size()) return true; 1103 if (assembler != NULL && assembler->predictable_code_size()) return true;
1105 return assembler->serializer_enabled(); 1104 return assembler->serializer_enabled();
1106 } else if (RelocInfo::IsNone(rmode)) { 1105 } else if (RelocInfo::IsNone(rmode_)) {
1107 return false; 1106 return false;
1108 } 1107 }
1109 return true; 1108 return true;
1110 } 1109 }
1111 1110
1112 bool use_mov_immediate_load(const Operand& x, const Assembler* assembler) { 1111
1112 static bool use_mov_immediate_load(const Operand& x,
1113 const Assembler* assembler) {
1113 DCHECK(assembler != nullptr); 1114 DCHECK(assembler != nullptr);
1114 if (x.must_output_reloc_info(assembler)) { 1115 if (x.must_output_reloc_info(assembler)) {
1115 // Prefer constant pool if data is likely to be patched. 1116 // Prefer constant pool if data is likely to be patched.
1116 return false; 1117 return false;
1117 } else { 1118 } else {
1118 // Otherwise, use immediate load if movw / movt is available. 1119 // Otherwise, use immediate load if movw / movt is available.
1119 return CpuFeatures::IsSupported(ARMv7); 1120 return CpuFeatures::IsSupported(ARMv7);
1120 } 1121 }
1121 } 1122 }
1122 1123
1123 } // namespace
1124
1125 bool Operand::must_output_reloc_info(const Assembler* assembler) const {
1126 return v8::internal::must_output_reloc_info(rmode_, assembler);
1127 }
1128 1124
1129 int Operand::instructions_required(const Assembler* assembler, 1125 int Operand::instructions_required(const Assembler* assembler,
1130 Instr instr) const { 1126 Instr instr) const {
1131 DCHECK(assembler != nullptr); 1127 DCHECK(assembler != nullptr);
1132 if (rm_.is_valid()) return 1; 1128 if (rm_.is_valid()) return 1;
1133 uint32_t dummy1, dummy2; 1129 uint32_t dummy1, dummy2;
1134 if (must_output_reloc_info(assembler) || 1130 if (must_output_reloc_info(assembler) ||
1135 !fits_shifter(imm32_, &dummy1, &dummy2, &instr)) { 1131 !fits_shifter(imm32_, &dummy1, &dummy2, &instr)) {
1136 // The immediate operand cannot be encoded as a shifter operand, or use of 1132 // The immediate operand cannot be encoded as a shifter operand, or use of
1137 // constant pool is required. First account for the instructions required 1133 // constant pool is required. First account for the instructions required
1138 // for the constant pool or immediate load 1134 // for the constant pool or immediate load
1139 int instructions; 1135 int instructions;
1140 if (use_mov_immediate_load(*this, assembler)) { 1136 if (use_mov_immediate_load(*this, assembler)) {
1141 DCHECK(CpuFeatures::IsSupported(ARMv7)); 1137 // A movw / movt or mov / orr immediate load.
1142 // A movw / movt immediate load. 1138 instructions = CpuFeatures::IsSupported(ARMv7) ? 2 : 4;
1143 instructions = 2;
1144 } else { 1139 } else {
1145 // A small constant pool load. 1140 // A small constant pool load.
1146 instructions = 1; 1141 instructions = 1;
1147 } 1142 }
1148 if ((instr & ~kCondMask) != 13 * B21) { // mov, S not set 1143 if ((instr & ~kCondMask) != 13 * B21) { // mov, S not set
1149 // For a mov or mvn instruction which doesn't set the condition 1144 // For a mov or mvn instruction which doesn't set the condition
1150 // code, the constant pool or immediate load is enough, otherwise we need 1145 // code, the constant pool or immediate load is enough, otherwise we need
1151 // to account for the actual instruction being requested. 1146 // to account for the actual instruction being requested.
1152 instructions += 1; 1147 instructions += 1;
1153 } 1148 }
1154 return instructions; 1149 return instructions;
1155 } else { 1150 } else {
1156 // No use of constant pool and the immediate operand can be encoded as a 1151 // No use of constant pool and the immediate operand can be encoded as a
1157 // shifter operand. 1152 // shifter operand.
1158 return 1; 1153 return 1;
1159 } 1154 }
1160 } 1155 }
1161 1156
1162 1157
1163 void Assembler::move_32_bit_immediate(Register rd, 1158 void Assembler::move_32_bit_immediate(Register rd,
1164 const Operand& x, 1159 const Operand& x,
1165 Condition cond) { 1160 Condition cond) {
1161 uint32_t imm32 = static_cast<uint32_t>(x.imm32_);
1162 if (x.must_output_reloc_info(this)) {
1163 RecordRelocInfo(x.rmode_);
1164 }
1165
1166 if (use_mov_immediate_load(x, this)) { 1166 if (use_mov_immediate_load(x, this)) {
1167 // use_mov_immediate_load should return false when we need to output 1167 // use_mov_immediate_load should return false when we need to output
1168 // relocation info, since we prefer the constant pool for values that 1168 // relocation info, since we prefer the constant pool for values that
1169 // can be patched. 1169 // can be patched.
1170 DCHECK(!x.must_output_reloc_info(this)); 1170 DCHECK(!x.must_output_reloc_info(this));
1171 Register target = rd.code() == pc.code() ? ip : rd; 1171 Register target = rd.code() == pc.code() ? ip : rd;
1172 if (CpuFeatures::IsSupported(ARMv7)) { 1172 if (CpuFeatures::IsSupported(ARMv7)) {
1173 uint32_t imm32 = static_cast<uint32_t>(x.imm32_);
1174 CpuFeatureScope scope(this, ARMv7); 1173 CpuFeatureScope scope(this, ARMv7);
1175 movw(target, imm32 & 0xffff, cond); 1174 movw(target, imm32 & 0xffff, cond);
1176 movt(target, imm32 >> 16, cond); 1175 movt(target, imm32 >> 16, cond);
1177 } 1176 }
1178 if (target.code() != rd.code()) { 1177 if (target.code() != rd.code()) {
1179 mov(rd, target, LeaveCC, cond); 1178 mov(rd, target, LeaveCC, cond);
1180 } 1179 }
1181 } else { 1180 } else {
1182 ConstantPoolAddEntry(pc_offset(), x.rmode_, x.imm32_); 1181 ConstantPoolEntry::Access access =
1182 ConstantPoolAddEntry(pc_offset(), x.rmode_, x.imm32_);
1183 DCHECK(access == ConstantPoolEntry::REGULAR);
1184 USE(access);
1183 ldr(rd, MemOperand(pc, 0), cond); 1185 ldr(rd, MemOperand(pc, 0), cond);
1184 } 1186 }
1185 } 1187 }
1186 1188
1187 1189
1188 void Assembler::addrmod1(Instr instr, 1190 void Assembler::addrmod1(Instr instr,
1189 Register rn, 1191 Register rn,
1190 Register rd, 1192 Register rd,
1191 const Operand& x) { 1193 const Operand& x) {
1192 CheckBuffer(); 1194 CheckBuffer();
(...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after
2716 // need to add/subtract without losing precision, which requires a 2718 // need to add/subtract without losing precision, which requires a
2717 // cookie value that Lithium is probably better positioned to 2719 // cookie value that Lithium is probably better positioned to
2718 // choose. 2720 // choose.
2719 // We could also add a few peepholes here like detecting 0.0 and 2721 // We could also add a few peepholes here like detecting 0.0 and
2720 // -0.0 and doing a vmov from the sequestered d14, forcing denorms 2722 // -0.0 and doing a vmov from the sequestered d14, forcing denorms
2721 // to zero (we set flush-to-zero), and normalizing NaN values. 2723 // to zero (we set flush-to-zero), and normalizing NaN values.
2722 // We could also detect redundant values. 2724 // We could also detect redundant values.
2723 // The code could also randomize the order of values, though 2725 // The code could also randomize the order of values, though
2724 // that's tricky because vldr has a limited reach. Furthermore 2726 // that's tricky because vldr has a limited reach. Furthermore
2725 // it breaks load locality. 2727 // it breaks load locality.
2726 ConstantPoolAddEntry(pc_offset(), imm); 2728 ConstantPoolEntry::Access access = ConstantPoolAddEntry(pc_offset(), imm);
2729 DCHECK(access == ConstantPoolEntry::REGULAR);
2730 USE(access);
2727 vldr(dst, MemOperand(pc, 0)); 2731 vldr(dst, MemOperand(pc, 0));
2728 } else { 2732 } else {
2729 // Synthesise the double from ARM immediates. 2733 // Synthesise the double from ARM immediates.
2730 uint32_t lo, hi; 2734 uint32_t lo, hi;
2731 DoubleAsTwoUInt32(imm, &lo, &hi); 2735 DoubleAsTwoUInt32(imm, &lo, &hi);
2732 2736
2733 if (lo == hi) { 2737 if (lo == hi) {
2734 // Move the low and high parts of the double to a D register in one 2738 // Move the low and high parts of the double to a D register in one
2735 // instruction. 2739 // instruction.
2736 mov(ip, Operand(lo)); 2740 mov(ip, Operand(lo));
(...skipping 2271 matching lines...) Expand 10 before | Expand all | Expand 10 after
5008 } 5012 }
5009 5013
5010 5014
5011 void Assembler::emit_code_stub_address(Code* stub) { 5015 void Assembler::emit_code_stub_address(Code* stub) {
5012 CheckBuffer(); 5016 CheckBuffer();
5013 *reinterpret_cast<uint32_t*>(pc_) = 5017 *reinterpret_cast<uint32_t*>(pc_) =
5014 reinterpret_cast<uint32_t>(stub->instruction_start()); 5018 reinterpret_cast<uint32_t>(stub->instruction_start());
5015 pc_ += sizeof(uint32_t); 5019 pc_ += sizeof(uint32_t);
5016 } 5020 }
5017 5021
5022
5018 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { 5023 void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) {
5019 if (RelocInfo::IsNone(rmode) || 5024 if (RelocInfo::IsNone(rmode) ||
5020 // Don't record external references unless the heap will be serialized. 5025 // Don't record external references unless the heap will be serialized.
5021 (rmode == RelocInfo::EXTERNAL_REFERENCE && !serializer_enabled() && 5026 (rmode == RelocInfo::EXTERNAL_REFERENCE && !serializer_enabled() &&
5022 !emit_debug_code())) { 5027 !emit_debug_code())) {
5023 return; 5028 return;
5024 } 5029 }
5025 DCHECK(buffer_space() >= kMaxRelocSize); // too late to grow buffer here 5030 DCHECK(buffer_space() >= kMaxRelocSize); // too late to grow buffer here
5026 if (rmode == RelocInfo::CODE_TARGET_WITH_ID) { 5031 if (rmode == RelocInfo::CODE_TARGET_WITH_ID) {
5027 data = RecordedAstId().ToInt(); 5032 data = RecordedAstId().ToInt();
5028 ClearRecordedAstId(); 5033 ClearRecordedAstId();
5029 } 5034 }
5030 RelocInfo rinfo(pc_, rmode, data, NULL); 5035 RelocInfo rinfo(pc_, rmode, data, NULL);
5031 reloc_info_writer.Write(&rinfo); 5036 reloc_info_writer.Write(&rinfo);
5032 } 5037 }
5033 5038
5034 void Assembler::ConstantPoolAddEntry(int position, RelocInfo::Mode rmode, 5039
5035 intptr_t value) { 5040 ConstantPoolEntry::Access Assembler::ConstantPoolAddEntry(int position,
5041 RelocInfo::Mode rmode,
5042 intptr_t value) {
5036 DCHECK(rmode != RelocInfo::COMMENT && rmode != RelocInfo::CONST_POOL && 5043 DCHECK(rmode != RelocInfo::COMMENT && rmode != RelocInfo::CONST_POOL &&
5037 rmode != RelocInfo::NONE64); 5044 rmode != RelocInfo::NONE64);
5038 bool sharing_ok = RelocInfo::IsNone(rmode) || 5045 bool sharing_ok = RelocInfo::IsNone(rmode) ||
5039 (rmode >= RelocInfo::FIRST_SHAREABLE_RELOC_MODE); 5046 !(serializer_enabled() || rmode < RelocInfo::CELL);
5040 DCHECK(pending_32_bit_constants_.size() < kMaxNumPending32Constants); 5047 DCHECK(pending_32_bit_constants_.size() < kMaxNumPending32Constants);
5041 if (pending_32_bit_constants_.empty()) { 5048 if (pending_32_bit_constants_.empty()) {
5042 first_const_pool_32_use_ = position; 5049 first_const_pool_32_use_ = position;
5043 } 5050 }
5044 ConstantPoolEntry entry( 5051 ConstantPoolEntry entry(position, value, sharing_ok);
5045 position, value,
5046 sharing_ok || (rmode == RelocInfo::CODE_TARGET && serializer_enabled()));
5047
5048 bool shared = false;
5049 if (sharing_ok) {
5050 // Merge the constant, if possible.
5051 for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) {
5052 ConstantPoolEntry& current_entry = pending_32_bit_constants_[i];
5053 if (!current_entry.sharing_ok()) continue;
5054 if (entry.value() == current_entry.value()) {
5055 entry.set_merged_index(i);
5056 shared = true;
5057 break;
5058 }
5059 }
5060 }
5061
5062 if (rmode == RelocInfo::CODE_TARGET && serializer_enabled()) {
5063 // TODO(all): We only do this in the serializer, for now, because
5064 // full-codegen relies on RelocInfo for translating PCs between full-codegen
5065 // normal and debug code.
5066 // Sharing entries here relies on canonicalized handles - without them, we
5067 // will miss the optimisation opportunity.
5068 Address handle_address = reinterpret_cast<Address>(value);
5069 auto existing = handle_to_index_map_.find(handle_address);
5070 if (existing != handle_to_index_map_.end()) {
5071 int index = existing->second;
5072 entry.set_merged_index(index);
5073 shared = true;
5074 } else {
5075 // Keep track of this code handle.
5076 handle_to_index_map_[handle_address] =
5077 static_cast<int>(pending_32_bit_constants_.size());
5078 }
5079 }
5080
5081 pending_32_bit_constants_.push_back(entry); 5052 pending_32_bit_constants_.push_back(entry);
5082 5053
5083 // Make sure the constant pool is not emitted in place of the next 5054 // Make sure the constant pool is not emitted in place of the next
5084 // instruction for which we just recorded relocation info. 5055 // instruction for which we just recorded relocation info.
5085 BlockConstPoolFor(1); 5056 BlockConstPoolFor(1);
5086 5057 return ConstantPoolEntry::REGULAR;
5087 // Emit relocation info.
5088 if (must_output_reloc_info(rmode, this) && !shared) {
5089 RecordRelocInfo(rmode);
5090 }
5091 } 5058 }
5092 5059
5093 void Assembler::ConstantPoolAddEntry(int position, double value) { 5060
5061 ConstantPoolEntry::Access Assembler::ConstantPoolAddEntry(int position,
5062 double value) {
5094 DCHECK(pending_64_bit_constants_.size() < kMaxNumPending64Constants); 5063 DCHECK(pending_64_bit_constants_.size() < kMaxNumPending64Constants);
5095 if (pending_64_bit_constants_.empty()) { 5064 if (pending_64_bit_constants_.empty()) {
5096 first_const_pool_64_use_ = position; 5065 first_const_pool_64_use_ = position;
5097 } 5066 }
5098 ConstantPoolEntry entry(position, value); 5067 ConstantPoolEntry entry(position, value);
5099
5100 // Merge the constant, if possible.
5101 for (size_t i = 0; i < pending_64_bit_constants_.size(); i++) {
5102 ConstantPoolEntry& current_entry = pending_64_bit_constants_[i];
5103 DCHECK(current_entry.sharing_ok());
5104 if (entry.value() == current_entry.value()) {
5105 entry.set_merged_index(i);
5106 break;
5107 }
5108 }
5109 pending_64_bit_constants_.push_back(entry); 5068 pending_64_bit_constants_.push_back(entry);
5110 5069
5111 // Make sure the constant pool is not emitted in place of the next 5070 // Make sure the constant pool is not emitted in place of the next
5112 // instruction for which we just recorded relocation info. 5071 // instruction for which we just recorded relocation info.
5113 BlockConstPoolFor(1); 5072 BlockConstPoolFor(1);
5073 return ConstantPoolEntry::REGULAR;
5114 } 5074 }
5115 5075
5116 5076
5117 void Assembler::BlockConstPoolFor(int instructions) { 5077 void Assembler::BlockConstPoolFor(int instructions) {
5118 int pc_limit = pc_offset() + instructions * kInstrSize; 5078 int pc_limit = pc_offset() + instructions * kInstrSize;
5119 if (no_const_pool_before_ < pc_limit) { 5079 if (no_const_pool_before_ < pc_limit) {
5120 // Max pool start (if we need a jump and an alignment). 5080 // Max pool start (if we need a jump and an alignment).
5121 #ifdef DEBUG 5081 #ifdef DEBUG
5122 int start = pc_limit + kInstrSize + 2 * kPointerSize; 5082 int start = pc_limit + kInstrSize + 2 * kPointerSize;
5123 DCHECK(pending_32_bit_constants_.empty() || 5083 DCHECK(pending_32_bit_constants_.empty() ||
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
5204 need_emit = true; 5164 need_emit = true;
5205 } 5165 }
5206 } 5166 }
5207 if (!need_emit) return; 5167 if (!need_emit) return;
5208 } 5168 }
5209 5169
5210 // Deduplicate constants. 5170 // Deduplicate constants.
5211 int size_after_marker = estimated_size_after_marker; 5171 int size_after_marker = estimated_size_after_marker;
5212 for (size_t i = 0; i < pending_64_bit_constants_.size(); i++) { 5172 for (size_t i = 0; i < pending_64_bit_constants_.size(); i++) {
5213 ConstantPoolEntry& entry = pending_64_bit_constants_[i]; 5173 ConstantPoolEntry& entry = pending_64_bit_constants_[i];
5214 if (entry.is_merged()) size_after_marker -= kDoubleSize; 5174 DCHECK(!entry.is_merged());
5175 for (size_t j = 0; j < i; j++) {
5176 if (entry.value64() == pending_64_bit_constants_[j].value64()) {
5177 DCHECK(!pending_64_bit_constants_[j].is_merged());
5178 entry.set_merged_index(j);
5179 size_after_marker -= kDoubleSize;
5180 break;
5181 }
5182 }
5215 } 5183 }
5216 5184
5217 for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) { 5185 for (size_t i = 0; i < pending_32_bit_constants_.size(); i++) {
5218 ConstantPoolEntry& entry = pending_32_bit_constants_[i]; 5186 ConstantPoolEntry& entry = pending_32_bit_constants_[i];
5219 if (entry.is_merged()) size_after_marker -= kPointerSize; 5187 DCHECK(!entry.is_merged());
5188 if (!entry.sharing_ok()) continue;
5189 for (size_t j = 0; j < i; j++) {
5190 if (entry.value() == pending_32_bit_constants_[j].value()) {
5191 DCHECK(!pending_32_bit_constants_[j].is_merged());
5192 entry.set_merged_index(j);
5193 size_after_marker -= kPointerSize;
5194 break;
5195 }
5196 }
5220 } 5197 }
5221 5198
5222 int size = size_up_to_marker + size_after_marker; 5199 int size = size_up_to_marker + size_after_marker;
5223 5200
5224 int needed_space = size + kGap; 5201 int needed_space = size + kGap;
5225 while (buffer_space() <= needed_space) GrowBuffer(); 5202 while (buffer_space() <= needed_space) GrowBuffer();
5226 5203
5227 { 5204 {
5228 // Block recursive calls to CheckConstPool. 5205 // Block recursive calls to CheckConstPool.
5229 BlockConstPoolScope block_const_pool(this); 5206 BlockConstPoolScope block_const_pool(this);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
5308 } 5285 }
5309 instr_at_put(entry.position(), 5286 instr_at_put(entry.position(),
5310 SetLdrRegisterImmediateOffset(instr, delta)); 5287 SetLdrRegisterImmediateOffset(instr, delta));
5311 if (!entry.is_merged()) { 5288 if (!entry.is_merged()) {
5312 emit(entry.value()); 5289 emit(entry.value());
5313 } 5290 }
5314 } 5291 }
5315 5292
5316 pending_32_bit_constants_.clear(); 5293 pending_32_bit_constants_.clear();
5317 pending_64_bit_constants_.clear(); 5294 pending_64_bit_constants_.clear();
5318 handle_to_index_map_.clear();
5319
5320 first_const_pool_32_use_ = -1; 5295 first_const_pool_32_use_ = -1;
5321 first_const_pool_64_use_ = -1; 5296 first_const_pool_64_use_ = -1;
5322 5297
5323 RecordComment("]"); 5298 RecordComment("]");
5324 5299
5325 DCHECK_EQ(size, SizeOfCodeGeneratedSince(&size_check)); 5300 DCHECK_EQ(size, SizeOfCodeGeneratedSince(&size_check));
5326 5301
5327 if (after_pool.is_linked()) { 5302 if (after_pool.is_linked()) {
5328 bind(&after_pool); 5303 bind(&after_pool);
5329 } 5304 }
(...skipping 25 matching lines...) Expand all
5355 } 5330 }
5356 5331
5357 void PatchingAssembler::FlushICache(Isolate* isolate) { 5332 void PatchingAssembler::FlushICache(Isolate* isolate) {
5358 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); 5333 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap);
5359 } 5334 }
5360 5335
5361 } // namespace internal 5336 } // namespace internal
5362 } // namespace v8 5337 } // namespace v8
5363 5338
5364 #endif // V8_TARGET_ARCH_ARM 5339 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/assembler-arm-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698