⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itanium2.md

📁 linux下编程用 编译软件
💻 MD
📖 第 1 页 / 共 5 页
字号:
;; They are consequences of Itanium2 microarchitecture.  They also;; describe the following rules mentioned in Itanium2;; microarchitecture: rules mentioned in Itanium2 microarchitecture:;; o "BBB/MBB: Always splits issue after either of these bundles".;; o "MIB BBB: Split issue after the first bundle in this pair".(exclusion_set   "2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb."   "2b_1m.ii,2b_1m.mi,2b_1m.fi,2b_1m.mf,2b_1b.bb,2b_1m.bb,\    2b_1m.ib,2b_1m.mb,2b_1m.fb,2b_1m.lx")(exclusion_set "2b_0m.ib,2b_0mi.b,2b_0mib." "2b_1b.bb");;; "MIB/MFB/MMB: Splits issue after any of these bundles unless the;;; B-slot contains a nop.b or a brp instruction".;;;   "The B in an MIB/MFB/MMB bundle disperses to B0 if it is a brp or;;; nop.b, otherwise it disperses to B2".(final_absence_set   "2b_1m.ii, 2b_1m.mi, 2b_1m.fi, 2b_1m.mf, 2b_1b.bb, 2b_1m.bb,\    2b_1m.ib, 2b_1m.mb, 2b_1m.fb, 2b_1m.lx"   "2b_0mib. 2b_ub2, 2b_0mfb. 2b_ub2, 2b_0mmb. 2b_ub2");; This is necessary to start new processor cycle when we meet stop bit.(define_cpu_unit "2b_stop" "twob")(final_absence_set   "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\    2b_0m.fi,2b_0mf.i,2b_0mfi.,\    2b_0m.mf,2b_0mm.f,2b_0mmf.,2b_0b.bb,2b_0bb.b,2b_0bbb.,\    2b_0m.bb,2b_0mb.b,2b_0mbb.,\    2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\    2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \    2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\    2b_1m.fi,2b_1mf.i,2b_1mfi.,\    2b_1m.mf,2b_1mm.f,2b_1mmf.,2b_1b.bb,2b_1bb.b,2b_1bbb.,\    2b_1m.bb,2b_1mb.b,2b_1mbb.,\    2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\    2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."   "2b_stop");;   The issue logic can reorder M slot insns between different subtypes;; but cannot reorder insn within the same subtypes.  The following;; constraint is enough to describe this.(final_presence_set "2b_um1" "2b_um0")(final_presence_set "2b_um3" "2b_um2");;   The insn in the 1st I slot of the two bundle issue group will issue;; to I0.  The second I slot insn will issue to I1.(final_presence_set "2b_ui1" "2b_ui0");;  For exceptions of I insns:(define_cpu_unit "2b_only_ui0" "twob")(final_absence_set "2b_only_ui0"  "2b_ui1");; Insns(define_reservation "2b_M"  "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\     |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\    |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\      |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\    |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\    |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\   +(2b_um0|2b_um1|2b_um2|2b_um3)")(define_reservation "2b_M_only_um0"  "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\     |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\    |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\      |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\    |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\    |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\   +2b_um0")(define_reservation "2b_M_only_um2"  "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\     |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\    |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\      |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\    |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\    |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\   +2b_um2")(define_reservation "2b_M_only_um01"  "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\     |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\    |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\      |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\    |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\    |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\   +(2b_um0|2b_um1)")(define_reservation "2b_M_only_um23"  "((2b_0m.ii|2b_0m.mi|2b_0m.fi|2b_0m.mf|2b_0m.bb\     |2b_0m.ib|2b_0m.mb|2b_0m.fb|2b_0m.lx)+2_1\    |(2b_1m.ii|2b_1m.mi|2b_1m.fi|2b_1m.mf|2b_1m.bb\      |2b_1m.ib|2b_1m.mb|2b_1m.fb|2b_1m.lx)+2_4\    |(2b_0mm.i|2b_0mm.f|2b_0mm.b)+2_2\    |(2b_1mm.i|2b_1mm.f|2b_1mm.b)+2_5)\   +(2b_um2|2b_um3)");; I instruction is dispersed to the lowest numbered I unit;; not already in use.  Remember about possible splitting.(define_reservation "2b_I"  "2b_0mi.i+2_2+2b_ui0|2b_0mii.+2_3+(2b_ui0|2b_ui1)|2b_0mmi.+2_3+2b_ui0\   |2b_0mfi.+2_3+2b_ui0|2b_0mi.b+2_2+2b_ui0\   |(2b_1mi.i+2_5|2b_1mi.b+2_5)+(2b_ui0|2b_ui1)\   |(2b_1mii.|2b_1mmi.|2b_1mfi.)+2_6+(2b_ui0|2b_ui1)");; "An F slot in the 1st bundle disperses to F0".;; "An F slot in the 2st bundle disperses to F1".(define_reservation "2b_F"   "2b_0mf.i+2_2+2b_uf0|2b_0mmf.+2_3+2b_uf0|2b_0mf.b+2_2+2b_uf0\    |2b_1mf.i+2_5+2b_uf1|2b_1mmf.+2_6+2b_uf1|2b_1mf.b+2_5+2b_uf1");;; "Each B slot in MBB or BBB bundle disperses to the corresponding B;;; unit. That is, a B slot in 1st position is dispersed to B0.  In the;;; 2nd position it is dispersed to B2".(define_reservation "2b_NB"    "2b_0b.bb+2_1+2b_unb0|2b_0bb.b+2_2+2b_unb1|2b_0bbb.+2_3+2b_unb2\     |2b_0mb.b+2_2+2b_unb1|2b_0mbb.+2_3+2b_unb2\     |2b_0mib.+2_3+2b_unb0|2b_0mmb.+2_3+2b_unb0|2b_0mfb.+2_3+2b_unb0\     |2b_1b.bb+2_4+2b_unb0|2b_1bb.b+2_5+2b_unb1\     |2b_1bbb.+2_6+2b_unb2|2b_1mb.b+2_5+2b_unb1|2b_1mbb.+2_6+2b_unb2\     |2b_1mib.+2_6+2b_unb0|2b_1mmb.+2_6+2b_unb0|2b_1mfb.+2_6+2b_unb0")(define_reservation "2b_B"   "2b_0b.bb+2_1+2b_ub0|2b_0bb.b+2_2+2b_ub1|2b_0bbb.+2_3+2b_ub2\    |2b_0mb.b+2_2+2b_ub1|2b_0mbb.+2_3+2b_ub2|2b_0mib.+2_3+2b_ub2\    |2b_0mfb.+2_3+2b_ub2|2b_1b.bb+2_4+2b_ub0|2b_1bb.b+2_5+2b_ub1\    |2b_1bbb.+2_6+2b_ub2|2b_1mb.b+2_5+2b_ub1\    |2b_1mib.+2_6+2b_ub2|2b_1mmb.+2_6+2b_ub2|2b_1mfb.+2_6+2b_ub2");;   For the MLI template, the I slot insn is always assigned to port I0;; if it is in the first bundle or it is assigned to port I1 if it is in;; the second bundle.(define_reservation "2b_L"                    "2b_0mlx.+2_3+2b_ui0+2b_uf0|2b_1mlx.+2_6+2b_ui1+2b_uf1");;   Should we describe that A insn in I slot can be issued into M;; ports?  I think it is not necessary because of multipass;; scheduling.  For example, the multipass scheduling could use;; MMI-MMI instead of MII-MII where the two last I slots contain A;; insns (even if the case is complicated by use-def conflicts).;;;; In any case we could describe it as;;    (define_cpu_unit "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres";;                     "twob");;    (final_presence_set "2b_ui1_0pres,2b_ui1_1pres,2b_ui1_2pres,2b_ui1_3pres";;                        "2b_ui1");;    (define_reservation "b_A";;       "b_M|b_I\;;        |(2b_1mi.i+2_5|2b_1mii.+2_6|2b_1mmi.+2_6|2b_1mfi.+2_6|2b_1mi.b+2_5)\;;         +(2b_um0|2b_um1|2b_um2|2b_um3)\;;         +(2b_ui1_0pres|2b_ui1_1pres|2b_ui1_2pres|2b_ui1_3pres)")(define_reservation "2b_A" "2b_M|2b_I");; We assume that there is no insn issued on the same cycle as the;; unknown insn.(define_cpu_unit "2b_empty" "twob")(exclusion_set "2b_empty"    "2b_0m.ii,2b_0m.mi,2b_0m.fi,2b_0m.mf,2b_0b.bb,2b_0m.bb,\     2b_0m.ib,2b_0m.mb,2b_0m.fb,2b_0m.lx,2b_0mm.i")(define_cpu_unit   "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs"   "twob")(define_cpu_unit   "2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"   "twob")(define_cpu_unit "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont, 2b_mb_cont,\	          2b_b_cont, 2b_bb_cont" "twob");; For stop in the middle of the bundles.(define_cpu_unit "2b_m_stop, 2b_m0_stop, 2b_m1_stop, 2b_0mmi_cont" "twob")(define_cpu_unit "2b_mi_stop, 2b_mi0_stop, 2b_mi1_stop, 2b_0mii_cont" "twob")(final_presence_set "2b_0m_bs"   "2b_0m.ii, 2b_0m.mi, 2b_0m.mf, 2b_0m.fi, 2b_0m.bb,\    2b_0m.ib, 2b_0m.fb, 2b_0m.mb, 2b_0m.lx")(final_presence_set "2b_1m_bs"   "2b_1m.ii, 2b_1m.mi, 2b_1m.mf, 2b_1m.fi, 2b_1m.bb,\    2b_1m.ib, 2b_1m.fb, 2b_1m.mb, 2b_1m.lx")(final_presence_set "2b_0mi_bs"  "2b_0mi.i, 2b_0mi.i")(final_presence_set "2b_1mi_bs"  "2b_1mi.i, 2b_1mi.i")(final_presence_set "2b_0mm_bs"  "2b_0mm.i, 2b_0mm.f, 2b_0mm.b")(final_presence_set "2b_1mm_bs"  "2b_1mm.i, 2b_1mm.f, 2b_1mm.b")(final_presence_set "2b_0mf_bs"  "2b_0mf.i, 2b_0mf.b")(final_presence_set "2b_1mf_bs"  "2b_1mf.i, 2b_1mf.b")(final_presence_set "2b_0b_bs"  "2b_0b.bb")(final_presence_set "2b_1b_bs"  "2b_1b.bb")(final_presence_set "2b_0bb_bs"  "2b_0bb.b")(final_presence_set "2b_1bb_bs"  "2b_1bb.b")(final_presence_set "2b_0mb_bs"  "2b_0mb.b")(final_presence_set "2b_1mb_bs"  "2b_1mb.b")(exclusion_set "2b_0m_bs"   "2b_0mi.i, 2b_0mm.i, 2b_0mm.f, 2b_0mf.i, 2b_0mb.b,\    2b_0mi.b, 2b_0mf.b, 2b_0mm.b, 2b_0mlx., 2b_m0_stop")(exclusion_set "2b_1m_bs"   "2b_1mi.i, 2b_1mm.i, 2b_1mm.f, 2b_1mf.i, 2b_1mb.b,\    2b_1mi.b, 2b_1mf.b, 2b_1mm.b, 2b_1mlx., 2b_m1_stop")(exclusion_set "2b_0mi_bs"  "2b_0mii., 2b_0mib., 2b_mi0_stop")(exclusion_set "2b_1mi_bs"  "2b_1mii., 2b_1mib., 2b_mi1_stop")(exclusion_set "2b_0mm_bs"  "2b_0mmi., 2b_0mmf., 2b_0mmb.")(exclusion_set "2b_1mm_bs"  "2b_1mmi., 2b_1mmf., 2b_1mmb.")(exclusion_set "2b_0mf_bs"  "2b_0mfi., 2b_0mfb.")(exclusion_set "2b_1mf_bs"  "2b_1mfi., 2b_1mfb.")(exclusion_set "2b_0b_bs"  "2b_0bb.b")(exclusion_set "2b_1b_bs"  "2b_1bb.b")(exclusion_set "2b_0bb_bs"  "2b_0bbb.")(exclusion_set "2b_1bb_bs"  "2b_1bbb.")(exclusion_set "2b_0mb_bs"  "2b_0mbb.")(exclusion_set "2b_1mb_bs"  "2b_1mbb.")(exclusion_set   "2b_0m_bs, 2b_0mi_bs, 2b_0mm_bs, 2b_0mf_bs, 2b_0b_bs, 2b_0bb_bs, 2b_0mb_bs,    2b_1m_bs, 2b_1mi_bs, 2b_1mm_bs, 2b_1mf_bs, 2b_1b_bs, 2b_1bb_bs, 2b_1mb_bs"   "2b_stop")(final_presence_set   "2b_0mi.i, 2b_0mm.i, 2b_0mf.i, 2b_0mm.f, 2b_0mb.b,\    2b_0mi.b, 2b_0mm.b, 2b_0mf.b, 2b_0mlx."   "2b_m_cont")(final_presence_set "2b_0mii., 2b_0mib." "2b_mi_cont")(final_presence_set "2b_0mmi., 2b_0mmf., 2b_0mmb." "2b_mm_cont")(final_presence_set "2b_0mfi., 2b_0mfb." "2b_mf_cont")(final_presence_set "2b_0bb.b" "2b_b_cont")(final_presence_set "2b_0bbb." "2b_bb_cont")(final_presence_set "2b_0mbb." "2b_mb_cont")(exclusion_set   "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\    2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx"   "2b_m_cont, 2b_mi_cont, 2b_mm_cont, 2b_mf_cont,\    2b_mb_cont, 2b_b_cont, 2b_bb_cont")(exclusion_set "2b_empty"               "2b_m_cont,2b_mi_cont,2b_mm_cont,2b_mf_cont,\                2b_mb_cont,2b_b_cont,2b_bb_cont");; For m;mi bundle(final_presence_set "2b_m0_stop" "2b_0m.mi")(final_presence_set "2b_0mm.i" "2b_0mmi_cont")(exclusion_set "2b_0mmi_cont"   "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\    2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")(exclusion_set "2b_m0_stop" "2b_0mm.i")(final_presence_set "2b_m1_stop" "2b_1m.mi")(exclusion_set "2b_m1_stop" "2b_1mm.i")(final_presence_set "2b_m_stop" "2b_m0_stop, 2b_m1_stop");; For mi;i bundle(final_presence_set "2b_mi0_stop" "2b_0mi.i")(final_presence_set "2b_0mii." "2b_0mii_cont")(exclusion_set "2b_0mii_cont"   "2b_0m.ii, 2b_0m.mi, 2b_0m.fi, 2b_0m.mf, 2b_0b.bb, 2b_0m.bb,\    2b_0m.ib, 2b_0m.mb, 2b_0m.fb, 2b_0m.lx")(exclusion_set "2b_mi0_stop" "2b_0mii.")(final_presence_set "2b_mi1_stop" "2b_1mi.i")(exclusion_set "2b_mi1_stop" "2b_1mii.")(final_presence_set "2b_mi_stop" "2b_mi0_stop, 2b_mi1_stop")(final_absence_set   "2b_0m.ii,2b_0mi.i,2b_0mii.,2b_0m.mi,2b_0mm.i,2b_0mmi.,\    2b_0m.fi,2b_0mf.i,2b_0mfi.,2b_0m.mf,2b_0mm.f,2b_0mmf.,\    2b_0b.bb,2b_0bb.b,2b_0bbb.,2b_0m.bb,2b_0mb.b,2b_0mbb.,\    2b_0m.ib,2b_0mi.b,2b_0mib.,2b_0m.mb,2b_0mm.b,2b_0mmb.,\    2b_0m.fb,2b_0mf.b,2b_0mfb.,2b_0m.lx,2b_0mlx., \    2b_1m.ii,2b_1mi.i,2b_1mii.,2b_1m.mi,2b_1mm.i,2b_1mmi.,\    2b_1m.fi,2b_1mf.i,2b_1mfi.,2b_1m.mf,2b_1mm.f,2b_1mmf.,\    2b_1b.bb,2b_1bb.b,2b_1bbb.,2b_1m.bb,2b_1mb.b,2b_1mbb.,\    2b_1m.ib,2b_1mi.b,2b_1mib.,2b_1m.mb,2b_1mm.b,2b_1mmb.,\    2b_1m.fb,2b_1mf.b,2b_1mfb.,2b_1m.lx,2b_1mlx."   "2b_m0_stop,2b_m1_stop,2b_mi0_stop,2b_mi1_stop")(define_insn_reservation "2b_stop_bit" 0  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "stop_bit"))       (ne (symbol_ref "bundling_p") (const_int 0)))  "2b_stop|2b_m0_stop|2b_m1_stop|2b_mi0_stop|2b_mi1_stop")(define_insn_reservation "2b_br"      0  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "br"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")(define_insn_reservation "2b_scall"   0  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "scall"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_B")(define_insn_reservation "2b_fcmp"    2  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "fcmp"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")(define_insn_reservation "2b_fcvtfx"  4  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "fcvtfx"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")(define_insn_reservation "2b_fld"     6  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "fld"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_M")(define_insn_reservation "2b_fldp"    6  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "fldp"))       (ne (symbol_ref "bundling_p") (const_int 0)))  "2b_M_only_um01")(define_insn_reservation "2b_fmac"    4  (and (and (eq_attr "cpu" "itanium2")            (eq_attr "itanium_class" "fmac"))       (ne (symbol_ref "bundling_p") (const_int 0))) "2b_F")(define_insn_reservation "2b_fmisc"   4  (and (and (eq_at

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -