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

Side by Side Diff: src/arm/assembler-arm.h

Issue 2868603002: [ARM] Improve VFP register moves. (Closed)
Patch Set: Rebase. Created 3 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/arm/assembler-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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 constexpr QwNeonRegister q14 = { 14 }; 419 constexpr QwNeonRegister q14 = { 14 };
420 constexpr QwNeonRegister q15 = { 15 }; 420 constexpr QwNeonRegister q15 = { 15 };
421 421
422 422
423 // Aliases for double registers. 423 // Aliases for double registers.
424 constexpr LowDwVfpRegister kFirstCalleeSavedDoubleReg = d8; 424 constexpr LowDwVfpRegister kFirstCalleeSavedDoubleReg = d8;
425 constexpr LowDwVfpRegister kLastCalleeSavedDoubleReg = d15; 425 constexpr LowDwVfpRegister kLastCalleeSavedDoubleReg = d15;
426 constexpr LowDwVfpRegister kDoubleRegZero = d13; 426 constexpr LowDwVfpRegister kDoubleRegZero = d13;
427 constexpr LowDwVfpRegister kScratchDoubleReg = d14; 427 constexpr LowDwVfpRegister kScratchDoubleReg = d14;
428 // This scratch q-register aliases d14 (kScratchDoubleReg) and d15, but is only 428 // This scratch q-register aliases d14 (kScratchDoubleReg) and d15, but is only
429 // used when NEON is supported. d15 is still allocatable if there are only 16 429 // used if NEON is supported, which implies VFP32DREGS. When there are only 16
430 // VFP registers. 430 // d-registers, d15 is still allocatable.
431 constexpr QwNeonRegister kScratchQuadReg = q7; 431 constexpr QwNeonRegister kScratchQuadReg = q7;
432 constexpr LowDwVfpRegister kScratchDoubleReg2 = d15;
432 433
433 // Coprocessor register 434 // Coprocessor register
434 struct CRegister { 435 struct CRegister {
435 bool is_valid() const { return 0 <= reg_code && reg_code < 16; } 436 bool is_valid() const { return 0 <= reg_code && reg_code < 16; }
436 bool is(CRegister creg) const { return reg_code == creg.reg_code; } 437 bool is(CRegister creg) const { return reg_code == creg.reg_code; }
437 int code() const { 438 int code() const {
438 DCHECK(is_valid()); 439 DCHECK(is_valid());
439 return reg_code; 440 return reg_code;
440 } 441 }
441 int bit() const { 442 int bit() const {
(...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after
1324 void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src); 1325 void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src);
1325 // dt represents the narrower type. 1326 // dt represents the narrower type.
1326 void vqmovn(NeonDataType dt, DwVfpRegister dst, QwNeonRegister src); 1327 void vqmovn(NeonDataType dt, DwVfpRegister dst, QwNeonRegister src);
1327 1328
1328 // Only unconditional core <-> scalar moves are currently supported. 1329 // Only unconditional core <-> scalar moves are currently supported.
1329 void vmov(NeonDataType dt, DwVfpRegister dst, int index, Register src); 1330 void vmov(NeonDataType dt, DwVfpRegister dst, int index, Register src);
1330 void vmov(NeonDataType dt, Register dst, DwVfpRegister src, int index); 1331 void vmov(NeonDataType dt, Register dst, DwVfpRegister src, int index);
1331 1332
1332 void vmov(QwNeonRegister dst, QwNeonRegister src); 1333 void vmov(QwNeonRegister dst, QwNeonRegister src);
1333 void vdup(NeonSize size, QwNeonRegister dst, Register src); 1334 void vdup(NeonSize size, QwNeonRegister dst, Register src);
1334 void vdup(QwNeonRegister dst, SwVfpRegister src); 1335 void vdup(NeonSize size, QwNeonRegister dst, DwVfpRegister src, int index);
1336 void vdup(NeonSize size, DwVfpRegister dst, DwVfpRegister src, int index);
1335 1337
1336 void vcvt_f32_s32(QwNeonRegister dst, QwNeonRegister src); 1338 void vcvt_f32_s32(QwNeonRegister dst, QwNeonRegister src);
1337 void vcvt_f32_u32(QwNeonRegister dst, QwNeonRegister src); 1339 void vcvt_f32_u32(QwNeonRegister dst, QwNeonRegister src);
1338 void vcvt_s32_f32(QwNeonRegister dst, QwNeonRegister src); 1340 void vcvt_s32_f32(QwNeonRegister dst, QwNeonRegister src);
1339 void vcvt_u32_f32(QwNeonRegister dst, QwNeonRegister src); 1341 void vcvt_u32_f32(QwNeonRegister dst, QwNeonRegister src);
1340 1342
1341 void vmvn(QwNeonRegister dst, QwNeonRegister src); 1343 void vmvn(QwNeonRegister dst, QwNeonRegister src);
1342 void vswp(DwVfpRegister dst, DwVfpRegister src); 1344 void vswp(DwVfpRegister dst, DwVfpRegister src);
1343 void vswp(QwNeonRegister dst, QwNeonRegister src); 1345 void vswp(QwNeonRegister dst, QwNeonRegister src);
1344 void vabs(QwNeonRegister dst, QwNeonRegister src); 1346 void vabs(QwNeonRegister dst, QwNeonRegister src);
(...skipping 28 matching lines...) Expand all
1373 QwNeonRegister src1, QwNeonRegister src2); 1375 QwNeonRegister src1, QwNeonRegister src2);
1374 void vpadd(DwVfpRegister dst, DwVfpRegister src1, DwVfpRegister src2); 1376 void vpadd(DwVfpRegister dst, DwVfpRegister src1, DwVfpRegister src2);
1375 void vpadd(NeonSize size, DwVfpRegister dst, DwVfpRegister src1, 1377 void vpadd(NeonSize size, DwVfpRegister dst, DwVfpRegister src1,
1376 DwVfpRegister src2); 1378 DwVfpRegister src2);
1377 void vpmin(NeonDataType dt, DwVfpRegister dst, DwVfpRegister src1, 1379 void vpmin(NeonDataType dt, DwVfpRegister dst, DwVfpRegister src1,
1378 DwVfpRegister src2); 1380 DwVfpRegister src2);
1379 void vpmax(NeonDataType dt, DwVfpRegister dst, DwVfpRegister src1, 1381 void vpmax(NeonDataType dt, DwVfpRegister dst, DwVfpRegister src1,
1380 DwVfpRegister src2); 1382 DwVfpRegister src2);
1381 void vshl(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src, int shift); 1383 void vshl(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src, int shift);
1382 void vshr(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src, int shift); 1384 void vshr(NeonDataType dt, QwNeonRegister dst, QwNeonRegister src, int shift);
1385 void vsli(NeonSize size, DwVfpRegister dst, DwVfpRegister src, int shift);
1386 void vsri(NeonSize size, DwVfpRegister dst, DwVfpRegister src, int shift);
1383 // vrecpe and vrsqrte only support floating point lanes. 1387 // vrecpe and vrsqrte only support floating point lanes.
1384 void vrecpe(QwNeonRegister dst, QwNeonRegister src); 1388 void vrecpe(QwNeonRegister dst, QwNeonRegister src);
1385 void vrsqrte(QwNeonRegister dst, QwNeonRegister src); 1389 void vrsqrte(QwNeonRegister dst, QwNeonRegister src);
1386 void vrecps(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); 1390 void vrecps(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2);
1387 void vrsqrts(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); 1391 void vrsqrts(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2);
1388 void vtst(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, 1392 void vtst(NeonSize size, QwNeonRegister dst, QwNeonRegister src1,
1389 QwNeonRegister src2); 1393 QwNeonRegister src2);
1390 void vceq(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2); 1394 void vceq(QwNeonRegister dst, QwNeonRegister src1, QwNeonRegister src2);
1391 void vceq(NeonSize size, QwNeonRegister dst, QwNeonRegister src1, 1395 void vceq(NeonSize size, QwNeonRegister dst, QwNeonRegister src1,
1392 QwNeonRegister src2); 1396 QwNeonRegister src2);
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 1809
1806 void Emit(Address addr); 1810 void Emit(Address addr);
1807 void FlushICache(Isolate* isolate); 1811 void FlushICache(Isolate* isolate);
1808 }; 1812 };
1809 1813
1810 1814
1811 } // namespace internal 1815 } // namespace internal
1812 } // namespace v8 1816 } // namespace v8
1813 1817
1814 #endif // V8_ARM_ASSEMBLER_ARM_H_ 1818 #endif // V8_ARM_ASSEMBLER_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698