OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 uint8_t imm2 = 0; | 327 uint8_t imm2 = 0; |
328 if (x.shift_op_ == LSL && is_uint2(x.shift_imm_)) { | 328 if (x.shift_op_ == LSL && is_uint2(x.shift_imm_)) { |
329 imm2 = x.shift_imm_ & 3; | 329 imm2 = x.shift_imm_ & 3; |
330 return (x.rn_.code()*BH0 | rd.code()*B12 | imm2*B4 | x.rm_.code()); | 330 return (x.rn_.code()*BH0 | rd.code()*B12 | imm2*B4 | x.rm_.code()); |
331 } | 331 } |
332 switch (x.shift_op_) { | 332 switch (x.shift_op_) { |
333 case LSL: lsl_thumb(ip, Operand(x.rm_, LSL, x.shift_imm_), LeaveCC, al); | 333 case LSL: lsl_thumb(ip, Operand(x.rm_, LSL, x.shift_imm_), LeaveCC, al); |
334 break; | 334 break; |
335 case LSR: lsr_thumb(ip, Operand(x.rm_, LSR, x.shift_imm_), LeaveCC, al); | 335 case LSR: lsr_thumb(ip, Operand(x.rm_, LSR, x.shift_imm_), LeaveCC, al); |
336 break; | 336 break; |
337 case ASR: asr_thumb(ip, Operand(x.rm_, ASR, x.shift_imm_), LeaveCC, al); | 337 case ASR: asr_thumb(ip, Operand(x.rm_, ASR, x.shift_imm_), |
| 338 LeaveCC, al, false); |
338 break; | 339 break; |
339 default: return (x.rn_.code()*BH0 | rd.code()*B12 | x.rm_.code()); | 340 default: return (x.rn_.code()*BH0 | rd.code()*B12 | x.rm_.code()); |
340 } | 341 } |
341 return (x.rn_.code()*BH0 | rd.code()*B12 | ip.code()); | 342 return (x.rn_.code()*BH0 | rd.code()*B12 | ip.code()); |
342 } | 343 } |
343 | 344 |
344 | 345 |
345 Instr Assembler::thumb32_4reg(Register dst, Register src1, Register src2, | 346 Instr Assembler::thumb32_4reg(Register dst, Register src1, Register src2, |
346 Register srcA) { | 347 Register srcA) { |
347 return (src1.code()*BH0 | srcA.code()*B12 | dst.code()*B8 | src2.code()); | 348 return (src1.code()*BH0 | srcA.code()*B12 | dst.code()*B8 | src2.code()); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 Condition cond) { | 461 Condition cond) { |
461 ASSERT(cond == al); | 462 ASSERT(cond == al); |
462 emit32(thumb32_mode11(MOV_32_REG3, s) | | 463 emit32(thumb32_mode11(MOV_32_REG3, s) | |
463 thumb32_3reg_shift_imm8(pc, dst, src)); | 464 thumb32_3reg_shift_imm8(pc, dst, src)); |
464 } | 465 } |
465 | 466 |
466 | 467 |
467 // teq imm t1 - mode 1 | 468 // teq imm t1 - mode 1 |
468 void Assembler::teq_imm_t1(Register src1, Condition cond, | 469 void Assembler::teq_imm_t1(Register src1, Condition cond, |
469 uint32_t i, uint32_t imm3, uint32_t imm8) { | 470 uint32_t i, uint32_t imm3, uint32_t imm8) { |
470 emit32(thumb32_mode1(TEQ_32_IMM, SetCC) | | 471 emit32(thumb32_mode1(TEQ_32_IMM, SetCCBit) | |
471 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8) ); | 472 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8) ); |
472 } | 473 } |
473 | 474 |
474 | 475 |
475 // teq reg t1 - mode 11 | 476 // teq reg t1 - mode 11 |
476 void Assembler::teq_reg_t1(Register src1, const Operand& src2, Condition cond) { | 477 void Assembler::teq_reg_t1(Register src1, const Operand& src2, Condition cond) { |
477 emit32(thumb32_mode11(TEQ_32_REG, SetCC) | | 478 emit32(thumb32_mode11(TEQ_32_REG, SetCCBit) | |
478 thumb32_3reg_shift_imm8(src1, pc, src2)); | 479 thumb32_3reg_shift_imm8(src1, pc, src2)); |
479 } | 480 } |
480 | 481 |
481 | 482 |
482 // cmp imm t2 - mode 1 | 483 // cmp imm t2 - mode 1 |
483 void Assembler::cmp_imm_t2(Register src1, Condition cond, | 484 void Assembler::cmp_imm_t2(Register src1, Condition cond, |
484 uint32_t i, uint32_t imm3, uint32_t imm8) { | 485 uint32_t i, uint32_t imm3, uint32_t imm8) { |
485 ASSERT(cond == al); | 486 ASSERT(cond == al); |
486 emit32(thumb32_mode1(CMP_32_IMM, SetCC) | | 487 emit32(thumb32_mode1(CMP_32_IMM, SetCCBit) | |
487 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8) ); | 488 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8) ); |
488 } | 489 } |
489 | 490 |
490 | 491 |
491 // cmp reg t3 - mode 11 | 492 // cmp reg t3 - mode 11 |
492 void Assembler::cmp_reg_t3(Register src1, const Operand& src2, Condition cond) { | 493 void Assembler::cmp_reg_t3(Register src1, const Operand& src2, Condition cond) { |
493 ASSERT(cond == al); | 494 ASSERT(cond == al); |
494 emit32(thumb32_mode11(CMP_32_REG3, SetCC) | | 495 emit32(thumb32_mode11(CMP_32_REG3, SetCCBit) | |
495 thumb32_3reg_shift_imm8(src1, pc, src2)); | 496 thumb32_3reg_shift_imm8(src1, pc, src2)); |
496 } | 497 } |
497 | 498 |
498 | 499 |
499 // lsl imm t2 - mode UNKNOWN | 500 // lsl imm t2 - mode UNKNOWN |
500 void Assembler::lsl_imm_t2(Register dst, const Operand& src, SBit s, | 501 void Assembler::lsl_imm_t2(Register dst, const Operand& src, SBit s, |
501 Condition cond) { | 502 Condition cond) { |
502 ASSERT(cond == al); | 503 ASSERT(cond == al); |
503 ASSERT(is_uint5(src.shift_imm_)); | 504 ASSERT(is_uint5(src.shift_imm_)); |
504 ASSERT(dst.code() != 13); | 505 ASSERT(dst.code() != 13); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 // S Rn imm3 Rd imm2 type Rm // 3reg | 683 // S Rn imm3 Rd imm2 type Rm // 3reg |
683 emit32(thumb32_mode11(RSB_32_REG, s) | | 684 emit32(thumb32_mode11(RSB_32_REG, s) | |
684 thumb32_3reg_shift_imm8(src1, dst, src2)); | 685 thumb32_3reg_shift_imm8(src1, dst, src2)); |
685 } | 686 } |
686 | 687 |
687 | 688 |
688 // tst imm t1 - mode 1 | 689 // tst imm t1 - mode 1 |
689 void Assembler::tst_imm_t1(Register src1, Condition cond, | 690 void Assembler::tst_imm_t1(Register src1, Condition cond, |
690 uint32_t i, uint32_t imm3, uint32_t imm8) { | 691 uint32_t i, uint32_t imm3, uint32_t imm8) { |
691 // Rn imm3 imm8 // 1reg | 692 // Rn imm3 imm8 // 1reg |
692 emit32(thumb32_mode1(TST_32_IMM, SetCC) | | 693 emit32(thumb32_mode1(TST_32_IMM, SetCCBit) | |
693 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8)); | 694 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8)); |
694 } | 695 } |
695 | 696 |
696 | 697 |
697 // tst reg t2 - mode 11 | 698 // tst reg t2 - mode 11 |
698 void Assembler::tst_reg_t2(Register src1, const Operand& src2, Condition cond) { | 699 void Assembler::tst_reg_t2(Register src1, const Operand& src2, Condition cond) { |
699 // Rn imm3 imm2 type Rm | 700 // Rn imm3 imm2 type Rm |
700 ASSERT(cond == al); | 701 ASSERT(cond == al); |
701 emit32(thumb32_mode11(TST_32_REG2, SetCC) | | 702 emit32(thumb32_mode11(TST_32_REG2, SetCCBit) | |
702 thumb32_3reg_shift_imm8(src1, pc, src2)); | 703 thumb32_3reg_shift_imm8(src1, pc, src2)); |
703 } | 704 } |
704 | 705 |
705 | 706 |
706 // cmn imm t1 - mode 1 | 707 // cmn imm t1 - mode 1 |
707 void Assembler::cmn_imm_t1(Register src1, Condition cond, | 708 void Assembler::cmn_imm_t1(Register src1, Condition cond, |
708 uint32_t i, uint32_t imm3, uint32_t imm8) { | 709 uint32_t i, uint32_t imm3, uint32_t imm8) { |
709 ASSERT(cond == al); | 710 ASSERT(cond == al); |
710 // SetCC turns on BH4, which is on for cmm immediate T1 | 711 // SetCC turns on BH4, which is on for cmm immediate T1 |
711 emit32(thumb32_mode1(CMN_32_IMM, SetCC) | | 712 emit32(thumb32_mode1(CMN_32_IMM, SetCCBit) | |
712 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8)); | 713 thumb32_2reg_thumb_expand_imm(pc, src1, i, imm3, imm8)); |
713 } | 714 } |
714 | 715 |
715 | 716 |
716 // cmn reg t2 - mode 11 | 717 // cmn reg t2 - mode 11 |
717 void Assembler::cmn_reg_t2(Register src1, const Operand& src2, Condition cond) { | 718 void Assembler::cmn_reg_t2(Register src1, const Operand& src2, Condition cond) { |
718 // Rn imm3 imm2 type Rm // 2reg | 719 // Rn imm3 imm2 type Rm // 2reg |
719 ASSERT(cond == al); | 720 ASSERT(cond == al); |
720 // SetCC turns on BH4, which is on for cmm register T2 | 721 // SetCC turns on BH4, which is on for cmm register T2 |
721 emit32(thumb32_mode11(CMN_32_REG2, SetCC) | | 722 emit32(thumb32_mode11(CMN_32_REG2, SetCCBit) | |
722 thumb32_3reg_shift_imm8(src1, pc, src2)); | 723 thumb32_3reg_shift_imm8(src1, pc, src2)); |
723 } | 724 } |
724 | 725 |
725 | 726 |
726 // bic imm t1 - mode 1 | 727 // bic imm t1 - mode 1 |
727 void Assembler::bic_imm_t1(Register dst, Register src1, SBit s, Condition cond, | 728 void Assembler::bic_imm_t1(Register dst, Register src1, SBit s, Condition cond, |
728 uint32_t i, uint32_t imm3, uint32_t imm8) { | 729 uint32_t i, uint32_t imm3, uint32_t imm8) { |
729 ASSERT(cond == al); | 730 ASSERT(cond == al); |
730 emit32(thumb32_mode1(BIC_32_IMM, s) | | 731 emit32(thumb32_mode1(BIC_32_IMM, s) | |
731 thumb32_2reg_thumb_expand_imm(dst, src1, i, imm3, imm8)); | 732 thumb32_2reg_thumb_expand_imm(dst, src1, i, imm3, imm8)); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 void Assembler::strd_imm_t1(Register src1, Register src2, | 809 void Assembler::strd_imm_t1(Register src1, Register src2, |
809 const MemOperand& dst) { | 810 const MemOperand& dst) { |
810 emit32(thumb32_mode6(STRD_32_IMM2, STRD_32_IMM2_OP2) | | 811 emit32(thumb32_mode6(STRD_32_IMM2, STRD_32_IMM2_OP2) | |
811 thumb32_3reg_zero_extend_imm8(src1, src2, dst)); | 812 thumb32_3reg_zero_extend_imm8(src1, src2, dst)); |
812 } | 813 } |
813 | 814 |
814 } } // namespace v8::internal | 815 } } // namespace v8::internal |
815 | 816 |
816 #endif // V8_TARGET_ARCH_ARM | 817 #endif // V8_TARGET_ARCH_ARM |
817 | 818 |
OLD | NEW |