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

Side by Side Diff: src/compiler/arm64/code-generator-arm64.cc

Issue 1972103002: [turbofan] ARM64: Support shifted indexes in loads and stores (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 | src/compiler/arm64/instruction-selector-arm64.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/arm64/macro-assembler-arm64.h" 8 #include "src/arm64/macro-assembler-arm64.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/compiler/code-generator-impl.h" 10 #include "src/compiler/code-generator-impl.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 break; 152 break;
153 } 153 }
154 UNREACHABLE(); 154 UNREACHABLE();
155 return Operand(-1); 155 return Operand(-1);
156 } 156 }
157 157
158 MemOperand MemoryOperand(size_t* first_index) { 158 MemOperand MemoryOperand(size_t* first_index) {
159 const size_t index = *first_index; 159 const size_t index = *first_index;
160 switch (AddressingModeField::decode(instr_->opcode())) { 160 switch (AddressingModeField::decode(instr_->opcode())) {
161 case kMode_None: 161 case kMode_None:
162 case kMode_Operand2_R_LSL_I:
163 case kMode_Operand2_R_LSR_I: 162 case kMode_Operand2_R_LSR_I:
164 case kMode_Operand2_R_ASR_I: 163 case kMode_Operand2_R_ASR_I:
165 case kMode_Operand2_R_ROR_I: 164 case kMode_Operand2_R_ROR_I:
166 case kMode_Operand2_R_UXTB: 165 case kMode_Operand2_R_UXTB:
167 case kMode_Operand2_R_UXTH: 166 case kMode_Operand2_R_UXTH:
168 case kMode_Operand2_R_SXTB: 167 case kMode_Operand2_R_SXTB:
169 case kMode_Operand2_R_SXTH: 168 case kMode_Operand2_R_SXTH:
170 break; 169 break;
170 case kMode_Operand2_R_LSL_I:
171 *first_index += 3;
172 return MemOperand(InputRegister(index + 0), InputRegister(index + 1),
173 LSL, InputInt32(index + 2));
171 case kMode_MRI: 174 case kMode_MRI:
172 *first_index += 2; 175 *first_index += 2;
173 return MemOperand(InputRegister(index + 0), InputInt32(index + 1)); 176 return MemOperand(InputRegister(index + 0), InputInt32(index + 1));
174 case kMode_MRR: 177 case kMode_MRR:
175 *first_index += 2; 178 *first_index += 2;
176 return MemOperand(InputRegister(index + 0), InputRegister(index + 1)); 179 return MemOperand(InputRegister(index + 0), InputRegister(index + 1));
177 } 180 }
178 UNREACHABLE(); 181 UNREACHABLE();
179 return MemOperand(no_reg); 182 return MemOperand(no_reg);
180 } 183 }
(...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1357 case kArm64U64MoveFloat64: 1360 case kArm64U64MoveFloat64:
1358 __ Fmov(i.OutputRegister(), i.InputDoubleRegister(0)); 1361 __ Fmov(i.OutputRegister(), i.InputDoubleRegister(0));
1359 break; 1362 break;
1360 case kArm64Ldrb: 1363 case kArm64Ldrb:
1361 __ Ldrb(i.OutputRegister(), i.MemoryOperand()); 1364 __ Ldrb(i.OutputRegister(), i.MemoryOperand());
1362 break; 1365 break;
1363 case kArm64Ldrsb: 1366 case kArm64Ldrsb:
1364 __ Ldrsb(i.OutputRegister(), i.MemoryOperand()); 1367 __ Ldrsb(i.OutputRegister(), i.MemoryOperand());
1365 break; 1368 break;
1366 case kArm64Strb: 1369 case kArm64Strb:
1367 __ Strb(i.InputOrZeroRegister64(2), i.MemoryOperand()); 1370 __ Strb(i.InputOrZeroRegister64(0), i.MemoryOperand(1));
1368 break; 1371 break;
1369 case kArm64Ldrh: 1372 case kArm64Ldrh:
1370 __ Ldrh(i.OutputRegister(), i.MemoryOperand()); 1373 __ Ldrh(i.OutputRegister(), i.MemoryOperand());
1371 break; 1374 break;
1372 case kArm64Ldrsh: 1375 case kArm64Ldrsh:
1373 __ Ldrsh(i.OutputRegister(), i.MemoryOperand()); 1376 __ Ldrsh(i.OutputRegister(), i.MemoryOperand());
1374 break; 1377 break;
1375 case kArm64Strh: 1378 case kArm64Strh:
1376 __ Strh(i.InputOrZeroRegister64(2), i.MemoryOperand()); 1379 __ Strh(i.InputOrZeroRegister64(0), i.MemoryOperand(1));
1377 break; 1380 break;
1378 case kArm64LdrW: 1381 case kArm64LdrW:
1379 __ Ldr(i.OutputRegister32(), i.MemoryOperand()); 1382 __ Ldr(i.OutputRegister32(), i.MemoryOperand());
1380 break; 1383 break;
1381 case kArm64StrW: 1384 case kArm64StrW:
1382 __ Str(i.InputOrZeroRegister32(2), i.MemoryOperand()); 1385 __ Str(i.InputOrZeroRegister32(0), i.MemoryOperand(1));
1383 break; 1386 break;
1384 case kArm64Ldr: 1387 case kArm64Ldr:
1385 __ Ldr(i.OutputRegister(), i.MemoryOperand()); 1388 __ Ldr(i.OutputRegister(), i.MemoryOperand());
1386 break; 1389 break;
1387 case kArm64Str: 1390 case kArm64Str:
1388 __ Str(i.InputOrZeroRegister64(2), i.MemoryOperand()); 1391 __ Str(i.InputOrZeroRegister64(0), i.MemoryOperand(1));
1389 break; 1392 break;
1390 case kArm64LdrS: 1393 case kArm64LdrS:
1391 __ Ldr(i.OutputDoubleRegister().S(), i.MemoryOperand()); 1394 __ Ldr(i.OutputDoubleRegister().S(), i.MemoryOperand());
1392 break; 1395 break;
1393 case kArm64StrS: 1396 case kArm64StrS:
1394 __ Str(i.InputFloat32OrZeroRegister(2), i.MemoryOperand()); 1397 __ Str(i.InputFloat32OrZeroRegister(0), i.MemoryOperand(1));
1395 break; 1398 break;
1396 case kArm64LdrD: 1399 case kArm64LdrD:
1397 __ Ldr(i.OutputDoubleRegister(), i.MemoryOperand()); 1400 __ Ldr(i.OutputDoubleRegister(), i.MemoryOperand());
1398 break; 1401 break;
1399 case kArm64StrD: 1402 case kArm64StrD:
1400 __ Str(i.InputFloat64OrZeroRegister(2), i.MemoryOperand()); 1403 __ Str(i.InputFloat64OrZeroRegister(0), i.MemoryOperand(1));
1401 break; 1404 break;
1402 case kCheckedLoadInt8: 1405 case kCheckedLoadInt8:
1403 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrsb); 1406 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrsb);
1404 break; 1407 break;
1405 case kCheckedLoadUint8: 1408 case kCheckedLoadUint8:
1406 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrb); 1409 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrb);
1407 break; 1410 break;
1408 case kCheckedLoadInt16: 1411 case kCheckedLoadInt16:
1409 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrsh); 1412 ASSEMBLE_CHECKED_LOAD_INTEGER(Ldrsh);
1410 break; 1413 break;
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 padding_size -= kInstructionSize; 1899 padding_size -= kInstructionSize;
1897 } 1900 }
1898 } 1901 }
1899 } 1902 }
1900 1903
1901 #undef __ 1904 #undef __
1902 1905
1903 } // namespace compiler 1906 } // namespace compiler
1904 } // namespace internal 1907 } // namespace internal
1905 } // namespace v8 1908 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/arm64/instruction-selector-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698