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

Side by Side Diff: runtime/vm/assembler_arm.cc

Issue 19776007: Enables a SIMD test for ARM. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_ARM) 6 #if defined(TARGET_ARCH_ARM)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/simulator.h" 9 #include "vm/simulator.h"
10 #include "vm/runtime_entry.h" 10 #include "vm/runtime_entry.h"
(...skipping 1261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 ((static_cast<int32_t>(dd) >> 4)*B22) | 1272 ((static_cast<int32_t>(dd) >> 4)*B22) |
1273 ((static_cast<int32_t>(dn) & 0xf)*B16) | 1273 ((static_cast<int32_t>(dn) & 0xf)*B16) |
1274 ((static_cast<int32_t>(dd) & 0xf)*B12) | 1274 ((static_cast<int32_t>(dd) & 0xf)*B12) |
1275 ((static_cast<int32_t>(dn) >> 4)*B7) | 1275 ((static_cast<int32_t>(dn) >> 4)*B7) |
1276 ((static_cast<int32_t>(dm) >> 4)*B5) | 1276 ((static_cast<int32_t>(dm) >> 4)*B5) |
1277 (static_cast<int32_t>(dm) & 0xf); 1277 (static_cast<int32_t>(dm) & 0xf);
1278 Emit(encoding); 1278 Emit(encoding);
1279 } 1279 }
1280 1280
1281 1281
1282 void Assembler::vmovq(QRegister qd, QRegister qm) {
1283 EmitSIMDqqq(B21 | B8 | B4, kByte, qd, qm, qm);
1284 }
1285
1286
1282 void Assembler::vaddqi(OperandSize sz, 1287 void Assembler::vaddqi(OperandSize sz,
1283 QRegister qd, QRegister qn, QRegister qm) { 1288 QRegister qd, QRegister qn, QRegister qm) {
1284 EmitSIMDqqq(B11, sz, qd, qn, qm); 1289 EmitSIMDqqq(B11, sz, qd, qn, qm);
1285 } 1290 }
1286 1291
1287 1292
1288 void Assembler::vaddqs(QRegister qd, QRegister qn, QRegister qm) { 1293 void Assembler::vaddqs(QRegister qd, QRegister qn, QRegister qm) {
1289 EmitSIMDqqq(B11 | B10 | B8, kSWord, qd, qn, qm); 1294 EmitSIMDqqq(B11 | B10 | B8, kSWord, qd, qn, qm);
1290 } 1295 }
1291 1296
(...skipping 13 matching lines...) Expand all
1305 QRegister qd, QRegister qn, QRegister qm) { 1310 QRegister qd, QRegister qn, QRegister qm) {
1306 EmitSIMDqqq(B11 | B8 | B4, sz, qd, qn, qm); 1311 EmitSIMDqqq(B11 | B8 | B4, sz, qd, qn, qm);
1307 } 1312 }
1308 1313
1309 1314
1310 void Assembler::vmulqs(QRegister qd, QRegister qn, QRegister qm) { 1315 void Assembler::vmulqs(QRegister qd, QRegister qn, QRegister qm) {
1311 EmitSIMDqqq(B24 | B11 | B10 | B8 | B4, kSWord, qd, qn, qm); 1316 EmitSIMDqqq(B24 | B11 | B10 | B8 | B4, kSWord, qd, qn, qm);
1312 } 1317 }
1313 1318
1314 1319
1320 void Assembler::veorq(QRegister qd, QRegister qn, QRegister qm) {
1321 EmitSIMDqqq(B24 | B8 | B4, kByte, qd, qn, qm);
1322 }
1323
1324
1325 void Assembler::vorrq(QRegister qd, QRegister qn, QRegister qm) {
1326 EmitSIMDqqq(B21 | B8 | B4, kByte, qd, qn, qm);
1327 }
1328
1329
1330 void Assembler::vdup(OperandSize sz, QRegister qd, DRegister dm, int idx) {
1331 ASSERT((sz != kDWord) && (sz != kSWord) && (sz != kWordPair));
regis 2013/07/18 18:17:21 Isn't the ASSERT redundant, since you have an UNRE
zra 2013/07/18 18:32:08 Yes. I removed the UNREACHABLE().
1332 int code = 0;
1333
1334 switch (sz) {
1335 case kByte:
1336 case kUnsignedByte: {
1337 ASSERT((idx >= 0) && (idx < 8));
1338 code = 1 | (idx << 1);
1339 break;
1340 }
1341 case kHalfword:
1342 case kUnsignedHalfword: {
1343 ASSERT((idx >= 0) && (idx < 4));
1344 code = 2 | (idx << 2);
1345 break;
1346 }
1347 case kWord:
1348 case kUnsignedWord: {
1349 ASSERT((idx >= 0) && (idx < 2));
1350 code = 4 | (idx << 3);
1351 break;
1352 }
1353 default: {
1354 UNREACHABLE();
1355 break;
1356 }
1357 }
1358
1359 EmitSIMDddd(B24 | B23 | B11 | B10 | B6, kWordPair,
1360 static_cast<DRegister>(qd * 2),
1361 static_cast<DRegister>(code & 0xf),
1362 dm);
1363 }
1364
1365
1315 void Assembler::vtbl(DRegister dd, DRegister dn, int len, DRegister dm) { 1366 void Assembler::vtbl(DRegister dd, DRegister dn, int len, DRegister dm) {
1316 ASSERT((len >= 1) && (len <= 4)); 1367 ASSERT((len >= 1) && (len <= 4));
1317 EmitSIMDddd(B24 | B23 | B11 | ((len - 1) * B8), kWordPair, dd, dn, dm); 1368 EmitSIMDddd(B24 | B23 | B11 | ((len - 1) * B8), kWordPair, dd, dn, dm);
1318 } 1369 }
1319 1370
1320 1371
1321 void Assembler::svc(uint32_t imm24, Condition cond) { 1372 void Assembler::svc(uint32_t imm24, Condition cond) {
1322 ASSERT(cond != kNoCondition); 1373 ASSERT(cond != kNoCondition);
1323 ASSERT(imm24 < (1 << 24)); 1374 ASSERT(imm24 < (1 << 24));
1324 int32_t encoding = (cond << kConditionShift) | B27 | B26 | B25 | B24 | imm24; 1375 int32_t encoding = (cond << kConditionShift) | B27 | B26 | B25 | B24 | imm24;
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after
2373 2424
2374 const char* Assembler::FpuRegisterName(FpuRegister reg) { 2425 const char* Assembler::FpuRegisterName(FpuRegister reg) {
2375 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); 2426 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters));
2376 return fpu_reg_names[reg]; 2427 return fpu_reg_names[reg];
2377 } 2428 }
2378 2429
2379 } // namespace dart 2430 } // namespace dart
2380 2431
2381 #endif // defined TARGET_ARCH_ARM 2432 #endif // defined TARGET_ARCH_ARM
2382 2433
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698