|
532 | 532 | ;; Zero-extend instructions.
|
533 | 533 |
|
534 | 534 | (define_insn "zero_extendhisi2"
|
535 |
| - [(set (match_operand:SI 0 "register_operand" "=a,a") |
536 |
| - (zero_extend:SI (match_operand:HI 1 "nonimmed_operand" "r,U")))] |
| 535 | + [(set (match_operand:SI 0 "register_operand" "=a,a,a") |
| 536 | + (zero_extend:SI (match_operand:HI 1 "nonimmed_operand" "r,Y,Z")))] |
537 | 537 | ""
|
538 | 538 | "@
|
539 | 539 | extui\t%0, %1, 0, 16
|
540 |
| - l16ui\t%0, %1" |
541 |
| - [(set_attr "type" "arith,load") |
| 540 | + l16ui\t%0, %1 |
| 541 | + ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16" |
| 542 | + [(set_attr "type" "arith,load,load") |
542 | 543 | (set_attr "mode" "SI")
|
543 |
| - (set_attr "length" "3,3")]) |
| 544 | + (set_attr "length" "3,3,18")]) |
544 | 545 |
|
545 | 546 | (define_insn "zero_extendqisi2"
|
546 |
| - [(set (match_operand:SI 0 "register_operand" "=a,a") |
547 |
| - (zero_extend:SI (match_operand:QI 1 "nonimmed_operand" "r,U")))] |
| 547 | + [(set (match_operand:SI 0 "register_operand" "=a,a,a") |
| 548 | + (zero_extend:SI (match_operand:QI 1 "nonimmed_operand" "r,Y,Z")))] |
548 | 549 | ""
|
549 | 550 | "@
|
550 | 551 | extui\t%0, %1, 0, 8
|
551 |
| - l8ui\t%0, %1" |
552 |
| - [(set_attr "type" "arith,load") |
| 552 | + l8ui\t%0, %1 |
| 553 | + ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 8" |
| 554 | + [(set_attr "type" "arith,load,load") |
553 | 555 | (set_attr "mode" "SI")
|
554 |
| - (set_attr "length" "3,3")]) |
| 556 | + (set_attr "length" "3,3,18")]) |
555 | 557 |
|
556 | 558 |
|
557 | 559 | ;; Sign-extend instructions.
|
|
569 | 571 | })
|
570 | 572 |
|
571 | 573 | (define_insn "extendhisi2_internal"
|
572 |
| - [(set (match_operand:SI 0 "register_operand" "=B,a") |
573 |
| - (sign_extend:SI (match_operand:HI 1 "sext_operand" "r,U")))] |
| 574 | + [(set (match_operand:SI 0 "register_operand" "=B,a,a") |
| 575 | + (sign_extend:SI (match_operand:HI 1 "sext_operand" "r,r,Y")))] |
574 | 576 | ""
|
575 | 577 | "@
|
576 | 578 | sext\t%0, %1, 15
|
| 579 | + slli\t%0, %1, 16 ; srai\t%0, %0, 16 |
577 | 580 | l16si\t%0, %1"
|
578 |
| - [(set_attr "type" "arith,load") |
| 581 | + [(set_attr "type" "arith,arith,load") |
579 | 582 | (set_attr "mode" "SI")
|
580 |
| - (set_attr "length" "3,3")]) |
| 583 | + (set_attr "length" "3,6,3")]) |
581 | 584 |
|
582 | 585 | (define_expand "extendqisi2"
|
583 | 586 | [(set (match_operand:SI 0 "register_operand" "")
|
|
796 | 799 | })
|
797 | 800 |
|
798 | 801 | (define_insn "movhi_internal"
|
799 |
| - [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A") |
800 |
| - (match_operand:HI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))] |
| 802 | + [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A") |
| 803 | + (match_operand:HI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))] |
801 | 804 | "xtensa_valid_move (HImode, operands)"
|
802 | 805 | "@
|
803 | 806 | movi.n\t%0, %x1
|
804 | 807 | mov.n\t%0, %1
|
805 | 808 | mov\t%0, %1
|
806 | 809 | movi\t%0, %x1
|
807 | 810 | %v1l16ui\t%0, %1
|
| 811 | + ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16 |
808 | 812 | %v0s16i\t%1, %0
|
809 | 813 | rsr\t%0, ACCLO
|
810 | 814 | wsr\t%1, ACCLO"
|
811 |
| - [(set_attr "type" "move,move,move,move,load,store,rsr,wsr") |
| 815 | + [(set_attr "type" "move,move,move,move,load,load,store,rsr,wsr") |
812 | 816 | (set_attr "mode" "HI")
|
813 |
| - (set_attr "length" "2,2,3,3,3,3,3,3")]) |
| 817 | + (set_attr "length" "2,2,3,3,3,18,3,3,3")]) |
814 | 818 |
|
815 | 819 | ;; 8-bit Integer moves
|
816 | 820 |
|
|
824 | 828 | })
|
825 | 829 |
|
826 | 830 | (define_insn "movqi_internal"
|
827 |
| - [(set (match_operand:QI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A") |
828 |
| - (match_operand:QI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))] |
| 831 | + [(set (match_operand:QI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A") |
| 832 | + (match_operand:QI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))] |
829 | 833 | "xtensa_valid_move (QImode, operands)"
|
830 | 834 | "@
|
831 | 835 | movi.n\t%0, %x1
|
832 | 836 | mov.n\t%0, %1
|
833 | 837 | mov\t%0, %1
|
834 | 838 | movi\t%0, %x1
|
835 | 839 | %v1l8ui\t%0, %1
|
| 840 | + ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 8 |
836 | 841 | %v0s8i\t%1, %0
|
837 | 842 | rsr\t%0, ACCLO
|
838 | 843 | wsr\t%1, ACCLO"
|
839 |
| - [(set_attr "type" "move,move,move,move,load,store,rsr,wsr") |
| 844 | + [(set_attr "type" "move,move,move,move,load,load,store,rsr,wsr") |
840 | 845 | (set_attr "mode" "QI")
|
841 |
| - (set_attr "length" "2,2,3,3,3,3,3,3")]) |
| 846 | + (set_attr "length" "2,2,3,3,3,18,3,3,3")]) |
842 | 847 |
|
843 | 848 | ;; Sub-word reloads from the constant pool.
|
844 | 849 |
|
|
0 commit comments