OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |