Lines Matching refs:vliw

50 #define FRV_VLIW_SIZE 8 /* fr550 has largest vliw size of 8.  */
198 /* This table represents the allowable packing for vliw insns for the fr400.
199 The fr400 has only 2 vliw slots. Represent this by not allowing any insns
215 /* This table represents the allowable packing for vliw insns for the fr500.
216 The fr500 has only 4 vliw slots. Represent this by not allowing any insns
235 /* This table represents the allowable packing for vliw insns for the fr550.
405 frv_vliw_reset (FRV_VLIW *vliw, unsigned long mach, unsigned long elf_flags)
407 vliw->next_slot = 0;
408 vliw->constraint_violation = 0;
409 vliw->mach = mach;
410 vliw->elf_flags = elf_flags;
415 vliw->current_vliw = fr400_allowed_vliw;
416 vliw->unit_mapping = fr400_unit_mapping;
419 vliw->current_vliw = fr400_allowed_vliw;
420 vliw->unit_mapping = fr450_unit_mapping;
423 vliw->current_vliw = fr550_allowed_vliw;
424 vliw->unit_mapping = fr550_unit_mapping;
427 vliw->current_vliw = fr500_allowed_vliw;
428 vliw->unit_mapping = fr500_unit_mapping;
437 match_unit (FRV_VLIW *vliw,
441 unit1 = vliw->unit_mapping[unit1];
486 /* Find the next vliw vliw in the table that can accomodate the new insn.
490 add_next_to_vliw (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE unit)
492 int next = vliw->next_slot;
493 VLIW_COMBO *current = vliw->current_vliw;
498 fprintf (stderr, "frv-opc.c line %d: bad vliw->next_slot value.\n",
508 if (match_unit (vliw, unit, (*potential)[next]))
517 /* Look for the given major insn type in the given vliw.
521 find_major_in_vliw (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
525 for (i = 0; i < vliw->next_slot; ++i)
526 if (vliw->major[i] == major)
532 /* Check for constraints between the insns in the vliw due to major insn
536 fr400_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
541 cannot coexist with any other media insn in a vliw. */
545 return ! find_major_in_vliw (vliw, FR400_MAJOR_M_1)
546 && ! find_major_in_vliw (vliw, FR400_MAJOR_M_2);
548 return ! find_major_in_vliw (vliw, FR400_MAJOR_M_2);
556 fr450_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
561 other_major = CGEN_INSN_ATTR_VALUE (vliw->insn[0], CGEN_INSN_FR450_MAJOR);
591 find_unit_in_vliw (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE unit)
595 for (i = 0; i < vliw->next_slot; ++i)
596 if (CGEN_INSN_ATTR_VALUE (vliw->insn[i], CGEN_INSN_UNIT) == unit)
603 find_major_in_slot (FRV_VLIW *vliw,
609 for (i = 0; i < vliw->next_slot; ++i)
610 if (vliw->major[i] == major && (*vliw->current_vliw)[i] == slot)
617 fr550_find_media_in_vliw (FRV_VLIW *vliw)
621 for (i = 0; i < vliw->next_slot; ++i)
623 if (vliw->major[i] < FR550_MAJOR_M_1 || vliw->major[i] > FR550_MAJOR_M_5)
627 if (CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MNOP
628 || CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MCLRACC_0
629 || CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_MCLRACC_1)
639 fr550_find_float_in_vliw (FRV_VLIW *vliw)
643 for (i = 0; i < vliw->next_slot; ++i)
645 if (vliw->major[i] < FR550_MAJOR_F_1 || vliw->major[i] > FR550_MAJOR_F_4)
649 if (CGEN_INSN_NUM (vliw->insn[i]) == FRV_INSN_FNOP)
659 fr550_check_insn_major_constraints (FRV_VLIW *vliw,
664 CGEN_ATTR_VALUE_ENUM_TYPE slot = (*vliw->current_vliw)[vliw->next_slot];
671 return find_unit_in_vliw (vliw, UNIT_STORE);
679 return ! fr550_find_media_in_vliw (vliw);
684 return ! fr550_find_float_in_vliw (vliw);
688 return ! find_major_in_slot (vliw, FR550_MAJOR_F_2,
690 && ! find_major_in_slot (vliw, FR550_MAJOR_F_4,
695 return ! find_major_in_slot (vliw, FR550_MAJOR_M_2,
700 return ! find_major_in_slot (vliw, FR550_MAJOR_M_4,
710 fr500_check_insn_major_constraints (FRV_VLIW *vliw, CGEN_ATTR_VALUE_ENUM_TYPE major)
732 return ! find_major_in_vliw (vliw, FR500_MAJOR_I_3);
735 return ! find_major_in_vliw (vliw, FR500_MAJOR_I_2);
739 return ! find_major_in_vliw (vliw, FR500_MAJOR_F_5)
740 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_6)
741 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
744 return ! find_major_in_vliw (vliw, FR500_MAJOR_F_7)
745 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
748 return ! find_major_in_vliw (vliw, FR500_MAJOR_F_1)
749 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_2)
750 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_6)
751 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_7)
752 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
755 return ! find_major_in_vliw (vliw, FR500_MAJOR_F_1)
756 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_2)
757 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_5)
758 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_6)
759 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
762 return ! find_major_in_vliw (vliw, FR500_MAJOR_F_3)
763 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_5)
764 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_7)
765 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
768 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
772 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_5)
773 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_6)
774 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
777 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_6);
780 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_2)
781 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_3)
782 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_5)
783 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_6)
784 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
787 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_2)
788 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_3)
789 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_4)
790 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_5)
791 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_6)
792 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7);
795 return ! find_major_in_vliw (vliw, FR500_MAJOR_M_1)
796 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_2)
797 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_3)
798 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_5)
799 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_6)
800 && ! find_major_in_vliw (vliw, FR500_MAJOR_M_7)
801 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_1)
802 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_2)
803 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_3)
804 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_5)
805 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_6)
806 && ! find_major_in_vliw (vliw, FR500_MAJOR_F_7);
817 check_insn_major_constraints (FRV_VLIW *vliw,
821 switch (vliw->mach)
824 return fr400_check_insn_major_constraints (vliw, major);
827 return fr450_check_insn_major_constraints (vliw, major);
830 return fr550_check_insn_major_constraints (vliw, major, insn);
833 return fr500_check_insn_major_constraints (vliw, major);
837 /* Add in insn to the VLIW vliw if possible.
841 frv_vliw_add_insn (FRV_VLIW *vliw, const CGEN_INSN *insn)
848 if (vliw->constraint_violation || CGEN_INSN_INVALID_P (insn))
851 index = vliw->next_slot;
863 switch (vliw->mach)
882 while (! match_unit (vliw, unit, (*vliw->current_vliw)[0]))
883 ++vliw->current_vliw;
884 vliw->major[0] = major;
885 vliw->insn[0] = insn;
886 vliw->next_slot = 1;
890 /* If there are already insns in the vliw(s) check to see that
891 this one can be added. Do this by finding an allowable vliw
893 if (! (vliw->elf_flags & EF_FRV_NOPACK))
895 new_vliw = add_next_to_vliw (vliw, unit);
896 if (new_vliw && check_insn_major_constraints (vliw, major, insn))
898 vliw->current_vliw = new_vliw;
899 vliw->major[index] = major;
900 vliw->insn[index] = insn;
901 vliw->next_slot++;
908 if (vliw->mach == bfd_mach_frv)
912 vliw->constraint_violation = 1;