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/macro-assembler-arm.cc

Issue 1776393004: [wasm] Fixed register allocation for Word32PairShl on arm. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-add
Patch Set: Rebase Created 4 years, 9 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/compiler/arm/code-generator-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 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 <limits.h> // For LONG_MIN, LONG_MAX. 5 #include <limits.h> // For LONG_MIN, LONG_MAX.
6 6
7 #if V8_TARGET_ARCH_ARM 7 #if V8_TARGET_ARCH_ARM
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/division-by-constant.h" 10 #include "src/base/division-by-constant.h"
(...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 1094
1095 1095
1096 void MacroAssembler::VmovLow(DwVfpRegister dst, Register src) { 1096 void MacroAssembler::VmovLow(DwVfpRegister dst, Register src) {
1097 if (dst.code() < 16) { 1097 if (dst.code() < 16) {
1098 const LowDwVfpRegister loc = LowDwVfpRegister::from_code(dst.code()); 1098 const LowDwVfpRegister loc = LowDwVfpRegister::from_code(dst.code());
1099 vmov(loc.low(), src); 1099 vmov(loc.low(), src);
1100 } else { 1100 } else {
1101 vmov(dst, VmovIndexLo, src); 1101 vmov(dst, VmovIndexLo, src);
1102 } 1102 }
1103 } 1103 }
1104 void MacroAssembler::PairLsl(Register dst_low, Register dst_high, 1104 void MacroAssembler::LslPair(Register dst_low, Register dst_high,
1105 Register src_low, Register src_high, 1105 Register src_low, Register src_high,
1106 Register scratch, Register shift) { 1106 Register scratch, Register shift) {
1107 DCHECK(!AreAliased(dst_low, src_high, shift)); 1107 DCHECK(!AreAliased(dst_high, src_low));
1108 DCHECK(!AreAliased(dst_high, src_low, shift)); 1108 DCHECK(!AreAliased(dst_high, shift));
1109
1109 Label less_than_32; 1110 Label less_than_32;
1110 Label done; 1111 Label done;
1111 cmp_raw_immediate(shift, 32); 1112 rsb(scratch, shift, Operand(32), SetCC);
1112 b(lt, &less_than_32); 1113 b(gt, &less_than_32);
1113 // If shift >= 32 1114 // If shift >= 32
1114 and_(scratch, shift, Operand(0x1f)); 1115 and_(scratch, shift, Operand(0x1f));
1115 lsl(dst_high, src_low, Operand(scratch)); 1116 lsl(dst_high, src_low, Operand(scratch));
1116 mov(dst_low, Operand(0)); 1117 mov(dst_low, Operand(0));
1117 jmp(&done); 1118 jmp(&done);
1118 bind(&less_than_32); 1119 bind(&less_than_32);
1119 // If shift < 32 1120 // If shift < 32
1120 rsb(scratch, shift, Operand(32));
1121 lsl(dst_high, src_high, Operand(shift)); 1121 lsl(dst_high, src_high, Operand(shift));
1122 orr(dst_high, dst_high, Operand(src_low, LSR, scratch)); 1122 orr(dst_high, dst_high, Operand(src_low, LSR, scratch));
1123 lsl(dst_low, src_low, Operand(shift)); 1123 lsl(dst_low, src_low, Operand(shift));
1124 bind(&done); 1124 bind(&done);
1125 } 1125 }
1126 1126
1127 void MacroAssembler::PairLsl(Register dst_low, Register dst_high, 1127 void MacroAssembler::LslPair(Register dst_low, Register dst_high,
1128 Register src_low, Register src_high, 1128 Register src_low, Register src_high,
1129 uint32_t shift) { 1129 uint32_t shift) {
1130 DCHECK(!AreAliased(dst_low, src_high));
1131 DCHECK(!AreAliased(dst_high, src_low)); 1130 DCHECK(!AreAliased(dst_high, src_low));
1132 Label less_than_32; 1131 Label less_than_32;
1133 Label done; 1132 Label done;
1134 if (shift >= 32) { 1133 if (shift == 0) {
1134 Move(dst_high, src_high);
1135 Move(dst_low, src_low);
1136 } else if (shift == 32) {
1137 Move(dst_high, src_low);
1138 Move(dst_low, Operand(0));
1139 } else if (shift >= 32) {
1135 shift &= 0x1f; 1140 shift &= 0x1f;
1136 lsl(dst_high, src_low, Operand(shift)); 1141 lsl(dst_high, src_low, Operand(shift));
1137 mov(dst_low, Operand(0)); 1142 mov(dst_low, Operand(0));
1138 } else if (shift == 0) {
1139 Move(dst_low, src_low);
1140 Move(dst_high, src_high);
1141 } else { 1143 } else {
1142 lsl(dst_high, src_high, Operand(shift)); 1144 lsl(dst_high, src_high, Operand(shift));
1143 orr(dst_high, dst_high, Operand(src_low, LSR, 32 - shift)); 1145 orr(dst_high, dst_high, Operand(src_low, LSR, 32 - shift));
1144 lsl(dst_low, src_low, Operand(shift)); 1146 lsl(dst_low, src_low, Operand(shift));
1145 } 1147 }
1146 } 1148 }
1147 1149
1148 void MacroAssembler::LoadConstantPoolPointerRegisterFromCodeTargetAddress( 1150 void MacroAssembler::LoadConstantPoolPointerRegisterFromCodeTargetAddress(
1149 Register code_target_address) { 1151 Register code_target_address) {
1150 DCHECK(FLAG_enable_embedded_constant_pool); 1152 DCHECK(FLAG_enable_embedded_constant_pool);
(...skipping 2685 matching lines...) Expand 10 before | Expand all | Expand 10 after
3836 } 3838 }
3837 } 3839 }
3838 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift)); 3840 if (mag.shift > 0) mov(result, Operand(result, ASR, mag.shift));
3839 add(result, result, Operand(dividend, LSR, 31)); 3841 add(result, result, Operand(dividend, LSR, 31));
3840 } 3842 }
3841 3843
3842 } // namespace internal 3844 } // namespace internal
3843 } // namespace v8 3845 } // namespace v8
3844 3846
3845 #endif // V8_TARGET_ARCH_ARM 3847 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.h ('k') | src/compiler/arm/code-generator-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698