| 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 #include "src/x64/assembler-x64.h" | 5 #include "src/x64/assembler-x64.h" | 
| 6 | 6 | 
| 7 #include <cstring> | 7 #include <cstring> | 
| 8 | 8 | 
| 9 #if V8_TARGET_ARCH_X64 | 9 #if V8_TARGET_ARCH_X64 | 
| 10 | 10 | 
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 125 Address RelocInfo::wasm_global_reference() { | 125 Address RelocInfo::wasm_global_reference() { | 
| 126   DCHECK(IsWasmGlobalReference(rmode_)); | 126   DCHECK(IsWasmGlobalReference(rmode_)); | 
| 127   return Memory::Address_at(pc_); | 127   return Memory::Address_at(pc_); | 
| 128 } | 128 } | 
| 129 | 129 | 
| 130 uint32_t RelocInfo::wasm_memory_size_reference() { | 130 uint32_t RelocInfo::wasm_memory_size_reference() { | 
| 131   DCHECK(IsWasmMemorySizeReference(rmode_)); | 131   DCHECK(IsWasmMemorySizeReference(rmode_)); | 
| 132   return Memory::uint32_at(pc_); | 132   return Memory::uint32_at(pc_); | 
| 133 } | 133 } | 
| 134 | 134 | 
| 135 void RelocInfo::update_wasm_memory_reference( | 135 void RelocInfo::unchecked_update_wasm_memory_reference( | 
| 136     Address old_base, Address new_base, uint32_t old_size, uint32_t new_size, | 136     Address address, ICacheFlushMode flush_mode) { | 
| 137     ICacheFlushMode icache_flush_mode) { | 137   Memory::Address_at(pc_) = address; | 
| 138   DCHECK(IsWasmMemoryReference(rmode_) || IsWasmMemorySizeReference(rmode_)); |  | 
| 139   if (IsWasmMemoryReference(rmode_)) { |  | 
| 140     Address updated_reference; |  | 
| 141     DCHECK(old_base <= wasm_memory_reference() && |  | 
| 142            wasm_memory_reference() < old_base + old_size); |  | 
| 143     updated_reference = new_base + (wasm_memory_reference() - old_base); |  | 
| 144     DCHECK(new_base <= updated_reference && |  | 
| 145            updated_reference < new_base + new_size); |  | 
| 146     Memory::Address_at(pc_) = updated_reference; |  | 
| 147   } else if (IsWasmMemorySizeReference(rmode_)) { |  | 
| 148     uint32_t updated_size_reference; |  | 
| 149     DCHECK(wasm_memory_size_reference() <= old_size); |  | 
| 150     updated_size_reference = |  | 
| 151         new_size + (wasm_memory_size_reference() - old_size); |  | 
| 152     DCHECK(updated_size_reference <= new_size); |  | 
| 153     Memory::uint32_at(pc_) = updated_size_reference; |  | 
| 154   } else { |  | 
| 155     UNREACHABLE(); |  | 
| 156   } |  | 
| 157   if (icache_flush_mode != SKIP_ICACHE_FLUSH) { |  | 
| 158     Assembler::FlushICache(isolate_, pc_, sizeof(int64_t)); |  | 
| 159   } |  | 
| 160 } | 138 } | 
| 161 | 139 | 
| 162 void RelocInfo::update_wasm_global_reference( | 140 void RelocInfo::unchecked_update_wasm_memory_size(uint32_t size, | 
| 163     Address old_base, Address new_base, ICacheFlushMode icache_flush_mode) { | 141                                                   ICacheFlushMode flush_mode) { | 
| 164   DCHECK(IsWasmGlobalReference(rmode_)); | 142   Memory::uint32_at(pc_) = size; | 
| 165   Address updated_reference; |  | 
| 166   DCHECK(old_base <= wasm_global_reference()); |  | 
| 167   updated_reference = new_base + (wasm_global_reference() - old_base); |  | 
| 168   DCHECK(new_base <= updated_reference); |  | 
| 169   Memory::Address_at(pc_) = updated_reference; |  | 
| 170   if (icache_flush_mode != SKIP_ICACHE_FLUSH) { |  | 
| 171     Assembler::FlushICache(isolate_, pc_, sizeof(int64_t)); |  | 
| 172   } |  | 
| 173 } | 143 } | 
| 174 | 144 | 
| 175 // ----------------------------------------------------------------------------- | 145 // ----------------------------------------------------------------------------- | 
| 176 // Implementation of Operand | 146 // Implementation of Operand | 
| 177 | 147 | 
| 178 Operand::Operand(Register base, int32_t disp) : rex_(0) { | 148 Operand::Operand(Register base, int32_t disp) : rex_(0) { | 
| 179   len_ = 1; | 149   len_ = 1; | 
| 180   if (base.is(rsp) || base.is(r12)) { | 150   if (base.is(rsp) || base.is(r12)) { | 
| 181     // SIB byte is needed to encode (rsp + offset) or (r12 + offset). | 151     // SIB byte is needed to encode (rsp + offset) or (r12 + offset). | 
| 182     set_sib(times_1, rsp, base); | 152     set_sib(times_1, rsp, base); | 
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 610   } | 580   } | 
| 611 } | 581 } | 
| 612 | 582 | 
| 613 | 583 | 
| 614 void Assembler::immediate_arithmetic_op(byte subcode, | 584 void Assembler::immediate_arithmetic_op(byte subcode, | 
| 615                                         Register dst, | 585                                         Register dst, | 
| 616                                         Immediate src, | 586                                         Immediate src, | 
| 617                                         int size) { | 587                                         int size) { | 
| 618   EnsureSpace ensure_space(this); | 588   EnsureSpace ensure_space(this); | 
| 619   emit_rex(dst, size); | 589   emit_rex(dst, size); | 
| 620   if (is_int8(src.value_)) { | 590   if (is_int8(src.value_) && RelocInfo::IsNone(src.rmode_)) { | 
| 621     emit(0x83); | 591     emit(0x83); | 
| 622     emit_modrm(subcode, dst); | 592     emit_modrm(subcode, dst); | 
| 623     if (!RelocInfo::IsNone(src.rmode_)) { |  | 
| 624       RecordRelocInfo(src.rmode_); |  | 
| 625     } |  | 
| 626     emit(src.value_); | 593     emit(src.value_); | 
| 627   } else if (dst.is(rax)) { | 594   } else if (dst.is(rax)) { | 
| 628     emit(0x05 | (subcode << 3)); | 595     emit(0x05 | (subcode << 3)); | 
| 629     emit(src); | 596     emit(src); | 
| 630   } else { | 597   } else { | 
| 631     emit(0x81); | 598     emit(0x81); | 
| 632     emit_modrm(subcode, dst); | 599     emit_modrm(subcode, dst); | 
| 633     emit(src); | 600     emit(src); | 
| 634   } | 601   } | 
| 635 } | 602 } | 
| (...skipping 3970 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4606 | 4573 | 
| 4607 bool RelocInfo::IsInConstantPool() { | 4574 bool RelocInfo::IsInConstantPool() { | 
| 4608   return false; | 4575   return false; | 
| 4609 } | 4576 } | 
| 4610 | 4577 | 
| 4611 | 4578 | 
| 4612 }  // namespace internal | 4579 }  // namespace internal | 
| 4613 }  // namespace v8 | 4580 }  // namespace v8 | 
| 4614 | 4581 | 
| 4615 #endif  // V8_TARGET_ARCH_X64 | 4582 #endif  // V8_TARGET_ARCH_X64 | 
| OLD | NEW | 
|---|