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 3510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3521 // Instruction details available in ARM DDI 0406C.b, A8-864. | 3521 // Instruction details available in ARM DDI 0406C.b, A8-864. |
3522 // cond(31-28) | 11101(27-23)| D(22) | 11(21-20) | 0101(19-16) | | 3522 // cond(31-28) | 11101(27-23)| D(22) | 11(21-20) | 0101(19-16) | |
3523 // Vd(15-12) | 101(11-9) | sz=0(8) | E=0(7) | 1(6) | 0(5) | 0(4) | 0000(3-0) | 3523 // Vd(15-12) | 101(11-9) | sz=0(8) | E=0(7) | 1(6) | 0(5) | 0(4) | 0000(3-0) |
3524 DCHECK(src2 == 0.0); | 3524 DCHECK(src2 == 0.0); |
3525 int vd, d; | 3525 int vd, d; |
3526 src1.split_code(&vd, &d); | 3526 src1.split_code(&vd, &d); |
3527 emit(cond | 0x1D * B23 | d * B22 | 0x3 * B20 | 0x5 * B16 | vd * B12 | | 3527 emit(cond | 0x1D * B23 | d * B22 | 0x3 * B20 | 0x5 * B16 | vd * B12 | |
3528 0x5 * B9 | B6); | 3528 0x5 * B9 | B6); |
3529 } | 3529 } |
3530 | 3530 |
| 3531 void Assembler::vmaxnm(const DwVfpRegister dst, const DwVfpRegister src1, |
| 3532 const DwVfpRegister src2) { |
| 3533 // kSpecialCondition(31-28) | 11101(27-23) | D(22) | 00(21-20) | Vn(19-16) | |
| 3534 // Vd(15-12) | 101(11-9) | sz=1(8) | N(7) | 0(6) | M(5) | 0(4) | Vm(3-0) |
| 3535 DCHECK(CpuFeatures::IsSupported(ARMv8)); |
| 3536 int vd, d; |
| 3537 dst.split_code(&vd, &d); |
| 3538 int vn, n; |
| 3539 src1.split_code(&vn, &n); |
| 3540 int vm, m; |
| 3541 src2.split_code(&vm, &m); |
| 3542 |
| 3543 emit(kSpecialCondition | 0x1D * B23 | d * B22 | vn * B16 | vd * B12 | |
| 3544 0x5 * B9 | B8 | n * B7 | m * B5 | vm); |
| 3545 } |
| 3546 |
| 3547 void Assembler::vmaxnm(const SwVfpRegister dst, const SwVfpRegister src1, |
| 3548 const SwVfpRegister src2) { |
| 3549 // kSpecialCondition(31-28) | 11101(27-23) | D(22) | 00(21-20) | Vn(19-16) | |
| 3550 // Vd(15-12) | 101(11-9) | sz=0(8) | N(7) | 0(6) | M(5) | 0(4) | Vm(3-0) |
| 3551 DCHECK(CpuFeatures::IsSupported(ARMv8)); |
| 3552 int vd, d; |
| 3553 dst.split_code(&vd, &d); |
| 3554 int vn, n; |
| 3555 src1.split_code(&vn, &n); |
| 3556 int vm, m; |
| 3557 src2.split_code(&vm, &m); |
| 3558 |
| 3559 emit(kSpecialCondition | 0x1D * B23 | d * B22 | vn * B16 | vd * B12 | |
| 3560 0x5 * B9 | n * B7 | m * B5 | vm); |
| 3561 } |
| 3562 |
| 3563 void Assembler::vminnm(const DwVfpRegister dst, const DwVfpRegister src1, |
| 3564 const DwVfpRegister src2) { |
| 3565 // kSpecialCondition(31-28) | 11101(27-23) | D(22) | 00(21-20) | Vn(19-16) | |
| 3566 // Vd(15-12) | 101(11-9) | sz=1(8) | N(7) | 1(6) | M(5) | 0(4) | Vm(3-0) |
| 3567 DCHECK(CpuFeatures::IsSupported(ARMv8)); |
| 3568 int vd, d; |
| 3569 dst.split_code(&vd, &d); |
| 3570 int vn, n; |
| 3571 src1.split_code(&vn, &n); |
| 3572 int vm, m; |
| 3573 src2.split_code(&vm, &m); |
| 3574 |
| 3575 emit(kSpecialCondition | 0x1D * B23 | d * B22 | vn * B16 | vd * B12 | |
| 3576 0x5 * B9 | B8 | n * B7 | B6 | m * B5 | vm); |
| 3577 } |
| 3578 |
| 3579 void Assembler::vminnm(const SwVfpRegister dst, const SwVfpRegister src1, |
| 3580 const SwVfpRegister src2) { |
| 3581 // kSpecialCondition(31-28) | 11101(27-23) | D(22) | 00(21-20) | Vn(19-16) | |
| 3582 // Vd(15-12) | 101(11-9) | sz=0(8) | N(7) | 1(6) | M(5) | 0(4) | Vm(3-0) |
| 3583 DCHECK(CpuFeatures::IsSupported(ARMv8)); |
| 3584 int vd, d; |
| 3585 dst.split_code(&vd, &d); |
| 3586 int vn, n; |
| 3587 src1.split_code(&vn, &n); |
| 3588 int vm, m; |
| 3589 src2.split_code(&vm, &m); |
| 3590 |
| 3591 emit(kSpecialCondition | 0x1D * B23 | d * B22 | vn * B16 | vd * B12 | |
| 3592 0x5 * B9 | n * B7 | B6 | m * B5 | vm); |
| 3593 } |
| 3594 |
3531 void Assembler::vsel(Condition cond, const DwVfpRegister dst, | 3595 void Assembler::vsel(Condition cond, const DwVfpRegister dst, |
3532 const DwVfpRegister src1, const DwVfpRegister src2) { | 3596 const DwVfpRegister src1, const DwVfpRegister src2) { |
3533 // cond=kSpecialCondition(31-28) | 11100(27-23) | D(22) | | 3597 // cond=kSpecialCondition(31-28) | 11100(27-23) | D(22) | |
3534 // vsel_cond=XX(21-20) | Vn(19-16) | Vd(15-12) | 101(11-9) | sz=1(8) | N(7) | | 3598 // vsel_cond=XX(21-20) | Vn(19-16) | Vd(15-12) | 101(11-9) | sz=1(8) | N(7) | |
3535 // 0(6) | M(5) | 0(4) | Vm(3-0) | 3599 // 0(6) | M(5) | 0(4) | Vm(3-0) |
3536 DCHECK(CpuFeatures::IsSupported(ARMv8)); | 3600 DCHECK(CpuFeatures::IsSupported(ARMv8)); |
3537 int vd, d; | 3601 int vd, d; |
3538 dst.split_code(&vd, &d); | 3602 dst.split_code(&vd, &d); |
3539 int vn, n; | 3603 int vn, n; |
3540 src1.split_code(&vn, &n); | 3604 src1.split_code(&vn, &n); |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4366 DCHECK(is_uint12(offset)); | 4430 DCHECK(is_uint12(offset)); |
4367 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset)); | 4431 instr_at_put(pc, SetLdrRegisterImmediateOffset(instr, offset)); |
4368 } | 4432 } |
4369 } | 4433 } |
4370 | 4434 |
4371 | 4435 |
4372 } // namespace internal | 4436 } // namespace internal |
4373 } // namespace v8 | 4437 } // namespace v8 |
4374 | 4438 |
4375 #endif // V8_TARGET_ARCH_ARM | 4439 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |