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

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

Issue 2619263002: [x64] Fix code generation of testw and add tests (Closed)
Patch Set: Re-enable all tests Created 3 years, 11 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 | « no previous file | test/cctest/test-assembler-x64.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 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 2085 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 } else { 2096 } else {
2097 emit_optional_rex_32(reg, op); 2097 emit_optional_rex_32(reg, op);
2098 } 2098 }
2099 emit(0x84); 2099 emit(0x84);
2100 emit_operand(reg, op); 2100 emit_operand(reg, op);
2101 } 2101 }
2102 2102
2103 void Assembler::testw(Register dst, Register src) { 2103 void Assembler::testw(Register dst, Register src) {
2104 EnsureSpace ensure_space(this); 2104 EnsureSpace ensure_space(this);
2105 emit(0x66); 2105 emit(0x66);
2106 if (src.low_bits() == 4) { 2106 if (!dst.is_byte_register() || !src.is_byte_register()) {
2107 emit_rex_32(src, dst); 2107 // Register is not one of al, bl, cl, dl. Its encoding needs REX.
2108 emit_rex_32(dst, src);
2108 } 2109 }
2109 emit(0x85); 2110 emit(0x85);
2110 emit_modrm(src, dst); 2111 emit_modrm(dst, src);
2111 } 2112 }
2112 2113
2113 void Assembler::testw(Register reg, Immediate mask) { 2114 void Assembler::testw(Register reg, Immediate mask) {
2114 DCHECK(is_int16(mask.value_) || is_uint16(mask.value_)); 2115 DCHECK(is_int16(mask.value_) || is_uint16(mask.value_));
2115 EnsureSpace ensure_space(this); 2116 EnsureSpace ensure_space(this);
2116 emit(0x66); 2117 emit(0x66);
2117 if (reg.is(rax)) { 2118 if (reg.is(rax)) {
2118 emit(0xA9); 2119 emit(0xA9);
2119 emitw(mask.value_); 2120 emitw(mask.value_);
2120 } else { 2121 } else {
2121 if (reg.low_bits() == 4) { 2122 if (!reg.is_byte_register()) {
2122 emit_rex_32(reg); 2123 emit_rex_32(reg);
2123 } 2124 }
2124 emit(0xF7); 2125 emit(0xF7);
2125 emit_modrm(0x0, reg); 2126 emit_modrm(0x0, reg);
2126 emitw(mask.value_); 2127 emitw(mask.value_);
2127 } 2128 }
2128 } 2129 }
2129 2130
2130 void Assembler::testw(const Operand& op, Immediate mask) { 2131 void Assembler::testw(const Operand& op, Immediate mask) {
2131 DCHECK(is_int16(mask.value_) || is_uint16(mask.value_)); 2132 DCHECK(is_int16(mask.value_) || is_uint16(mask.value_));
(...skipping 2624 matching lines...) Expand 10 before | Expand all | Expand 10 after
4756 4757
4757 bool RelocInfo::IsInConstantPool() { 4758 bool RelocInfo::IsInConstantPool() {
4758 return false; 4759 return false;
4759 } 4760 }
4760 4761
4761 4762
4762 } // namespace internal 4763 } // namespace internal
4763 } // namespace v8 4764 } // namespace v8
4764 4765
4765 #endif // V8_TARGET_ARCH_X64 4766 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698