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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 return Memory::uint32_at(pc_); | 127 return Memory::uint32_at(pc_); |
128 } | 128 } |
129 | 129 |
130 void RelocInfo::update_wasm_memory_reference( | 130 void RelocInfo::update_wasm_memory_reference( |
131 Address old_base, Address new_base, uint32_t old_size, uint32_t new_size, | 131 Address old_base, Address new_base, uint32_t old_size, uint32_t new_size, |
132 ICacheFlushMode icache_flush_mode) { | 132 ICacheFlushMode icache_flush_mode) { |
133 DCHECK(IsWasmMemoryReference(rmode_) || IsWasmMemorySizeReference(rmode_)); | 133 DCHECK(IsWasmMemoryReference(rmode_) || IsWasmMemorySizeReference(rmode_)); |
134 if (IsWasmMemoryReference(rmode_)) { | 134 if (IsWasmMemoryReference(rmode_)) { |
135 Address updated_reference; | 135 Address updated_reference; |
136 DCHECK(old_base <= wasm_memory_reference() && | 136 DCHECK(old_base <= wasm_memory_reference() && |
137 wasm_memory_reference() < old_base + old_size); | 137 wasm_memory_reference() <= old_base + old_size); |
138 updated_reference = new_base + (wasm_memory_reference() - old_base); | 138 updated_reference = new_base + (wasm_memory_reference() - old_base); |
139 DCHECK(new_base <= updated_reference && | 139 DCHECK(new_base <= updated_reference && |
140 updated_reference < new_base + new_size); | 140 updated_reference < new_base + new_size); |
141 Memory::Address_at(pc_) = updated_reference; | 141 Memory::Address_at(pc_) = updated_reference; |
142 } else if (IsWasmMemorySizeReference(rmode_)) { | 142 } else if (IsWasmMemorySizeReference(rmode_)) { |
143 uint32_t updated_size_reference; | 143 uint32_t updated_size_reference; |
144 DCHECK(wasm_memory_size_reference() <= old_size); | 144 DCHECK(wasm_memory_size_reference() <= old_size); |
145 updated_size_reference = | 145 updated_size_reference = |
146 new_size + (wasm_memory_size_reference() - old_size); | 146 new_size + (wasm_memory_size_reference() - old_size); |
147 DCHECK(updated_size_reference <= new_size); | 147 DCHECK(updated_size_reference <= new_size); |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 } | 592 } |
593 } | 593 } |
594 | 594 |
595 | 595 |
596 void Assembler::immediate_arithmetic_op(byte subcode, | 596 void Assembler::immediate_arithmetic_op(byte subcode, |
597 Register dst, | 597 Register dst, |
598 Immediate src, | 598 Immediate src, |
599 int size) { | 599 int size) { |
600 EnsureSpace ensure_space(this); | 600 EnsureSpace ensure_space(this); |
601 emit_rex(dst, size); | 601 emit_rex(dst, size); |
602 if (is_int8(src.value_)) { | 602 if (is_int8(src.value_) && RelocInfo::IsNone(src.rmode_)) { |
603 emit(0x83); | 603 emit(0x83); |
604 emit_modrm(subcode, dst); | 604 emit_modrm(subcode, dst); |
605 if (!RelocInfo::IsNone(src.rmode_)) { | |
606 RecordRelocInfo(src.rmode_); | |
607 } | |
608 emit(src.value_); | 605 emit(src.value_); |
609 } else if (dst.is(rax)) { | 606 } else if (dst.is(rax)) { |
610 emit(0x05 | (subcode << 3)); | 607 emit(0x05 | (subcode << 3)); |
611 emit(src); | 608 emit(src); |
612 } else { | 609 } else { |
613 emit(0x81); | 610 emit(0x81); |
614 emit_modrm(subcode, dst); | 611 emit_modrm(subcode, dst); |
615 emit(src); | 612 emit(src); |
616 } | 613 } |
617 } | 614 } |
(...skipping 3979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4597 | 4594 |
4598 bool RelocInfo::IsInConstantPool() { | 4595 bool RelocInfo::IsInConstantPool() { |
4599 return false; | 4596 return false; |
4600 } | 4597 } |
4601 | 4598 |
4602 | 4599 |
4603 } // namespace internal | 4600 } // namespace internal |
4604 } // namespace v8 | 4601 } // namespace v8 |
4605 | 4602 |
4606 #endif // V8_TARGET_ARCH_X64 | 4603 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |