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

📄 frv.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 5 页
字号:
       (eq_attr "type" "mqmulh,mqmach,mqcpx,mqmulxh,mdaddacc"))  "fr450_m4");; Another MD-2 instruction can use the result on the following cycle.(define_bypass 1 "fr450_md2_3,fr450_md2_4" "fr450_md2_3,fr450_md2_4");; MD-4 instructions that write to ACCs.(define_insn_reservation "fr450_md4_3" 2  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mclracc"))  "fr450_m13")(define_insn_reservation "fr450_md4_4" 3  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mclracca"))  "fr450_m4");; MD-4 instructions that write to FPRs.(define_insn_reservation "fr450_md4_1" 2  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mcut"))  "fr450_m13")(define_insn_reservation "fr450_md4_5" 2  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mrdacc"))  "fr450_m5")(define_insn_reservation "fr450_md4_6" 2  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mdcut"))  "fr450_m6");; Integer instructions can read the FPR result of an MD-4 instruction on;; the following cycle.(define_bypass 1 "fr450_md4_1,fr450_md4_5,fr450_md4_6"		 "fr400_i3,fr450_i4_movfg");; MD-5 instructions, which belong to M-3.  They take FPR inputs and;; write to ACCs.(define_insn_reservation "fr450_md5_3" 2  (and (eq_attr "cpu" "fr450")       (eq_attr "type" "mwtacc"))  "fr450_m13");; ::::::::::::::::::::;; ::;; :: FR550 scheduler description;; ::;; ::::::::::::::::::::;; Prevent loads and stores from being issued in the same packet.;; These units must go into the generic "integer" reservation because;; of the constraints on fr550_store0 and fr550_store1.(define_cpu_unit "fr550_load0,fr550_load1" "integer")(define_cpu_unit "fr550_store0,fr550_store1" "integer")(exclusion_set "fr550_load0,fr550_load1" "fr550_store0,fr550_store1");; A store can only issue to I1 if one has also been issued to I0.(presence_set "fr550_store1" "fr550_store0")(define_bypass 0 "fr550_sethi" "fr550_setlo")(define_insn_reservation "fr550_sethi" 1  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "sethi"))  "i3|i2|i1|i0")(define_insn_reservation "fr550_setlo" 1  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "setlo"))  "i3|i2|i1|i0")(define_insn_reservation "fr550_int" 1  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "int"))  "i3|i2|i1|i0")(define_insn_reservation "fr550_mul" 2  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mul"))  "i1|i0")(define_insn_reservation "fr550_div" 19  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "div"))  "(i1|i0),(idiv1*18 | idiv2*18)")(define_insn_reservation "fr550_load" 3  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "gload,fload"))  "(i1|i0)+(fr550_load0|fr550_load1)");; We can only issue a store to I1 if one was also issued to I0.;; This means that, as far as frv_reorder_packet is concerned,;; the instruction has the same priority as an I0-only instruction.(define_insn_reservation "fr550_store" 1  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "gstore,fstore"))  "(i0+fr550_store0)|(i1+fr550_store1)")(define_insn_reservation "fr550_transfer" 2  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "movgf,movfg"))  "i0")(define_insn_reservation "fr550_jumpl" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "jumpl"))  "i0")(define_cpu_unit "fr550_ccr0,fr550_ccr1" "float_media")(define_insn_reservation "fr550_branch" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "jump,branch"))  "b1|b0")(define_insn_reservation "fr550_ccr" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "ccr"))  "(b1|b0) + (fr550_ccr1|fr550_ccr0)")(define_insn_reservation "fr550_call" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "call"))  "b0")(define_automaton "fr550_float_media")(define_cpu_unit "fr550_add0,fr550_add1" "fr550_float_media");; There are three possible combinations of floating-point/media instructions:;;;;    - one media and one float;;    - up to four float, no media;;    - up to four media, no float(define_cpu_unit "fr550_f0,fr550_f1,fr550_f2,fr550_f3" "fr550_float_media")(define_cpu_unit "fr550_m0,fr550_m1,fr550_m2,fr550_m3" "fr550_float_media")(exclusion_set "fr550_f1,fr550_f2,fr550_f3" "fr550_m1,fr550_m2,fr550_m3")(define_reservation "fr550_float" "fr550_f0|fr550_f1|fr550_f2|fr550_f3")(define_reservation "fr550_media" "fr550_m0|fr550_m1|fr550_m2|fr550_m3")(define_insn_reservation "fr550_f1" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "fnop"))  "(f3|f2|f1|f0) + fr550_float")(define_insn_reservation "fr550_f2" 3  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "fsconv,fsadd,fscmp"))  "(f3|f2|f1|f0) + (fr550_add0|fr550_add1) + fr550_float")(define_insn_reservation "fr550_f3_mul" 3  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "fsmul"))  "(f1|f0) + fr550_float")(define_insn_reservation "fr550_f3_div" 10  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "fsdiv"))  "(f1|f0) + fr550_float")(define_insn_reservation "fr550_f3_sqrt" 15  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "sqrt_single"))  "(f1|f0) + fr550_float");; Synthetic units for enforcing media issue restructions.  Certain types;; of insn in M2 conflict with certain types in M0:;;;;			     M2;;               MNOP   MALU   MSFT   MMAC   MSET;;         MNOP     -      -      x      -      -;;         MALU     -      x      x      -      -;;   M0    MSFT     -      -      x      -      x;;         MMAC     -      -      x      x      -;;         MSET     -      -      x      -      -;;;; where "x" indicates a conflict.  The same restrictions apply to;; M3 and M1.;;;; In addition -- and this is the awkward bit! -- instructions that;; access ACC0-3 can only issue to M0 or M2.  Those that access ACC4-7;; can only issue to M1 or M3.  We refer to such instructions as "even";; and "odd" respectively.(define_cpu_unit "fr550_malu0,fr550_malu1" "float_media")(define_cpu_unit "fr550_malu2,fr550_malu3" "float_media")(define_cpu_unit "fr550_msft0,fr550_msft1" "float_media")(define_cpu_unit "fr550_mmac0,fr550_mmac1" "float_media")(define_cpu_unit "fr550_mmac2,fr550_mmac3" "float_media")(define_cpu_unit "fr550_mset0,fr550_mset1" "float_media")(define_cpu_unit "fr550_mset2,fr550_mset3" "float_media")(exclusion_set "fr550_malu0" "fr550_malu2")(exclusion_set "fr550_malu1" "fr550_malu3")(exclusion_set "fr550_msft0" "fr550_mset2")(exclusion_set "fr550_msft1" "fr550_mset3")(exclusion_set "fr550_mmac0" "fr550_mmac2")(exclusion_set "fr550_mmac1" "fr550_mmac3");; If an MSFT or MMAC instruction issues to a unit other than M0, we may;; need to insert some nops.  In the worst case, the packet will end up;; having 4 integer instructions and 4 media instructions, leaving no;; room for any branch instructions that the DFA might have accepted.;;;; This doesn't matter for JUMP_INSNs and CALL_INSNs because they are;; always the last instructions to be passed to the DFA, and could be;; pushed out to a separate packet once the nops have been added.;; However, it does cause problems for ccr instructions since they;; can occur anywhere in the unordered packet.(exclusion_set "fr550_msft1,fr550_mmac1,fr550_mmac2,fr550_mmac3"	       "fr550_ccr0,fr550_ccr1")(define_reservation "fr550_malu"  "(f3 + fr550_malu3) | (f2 + fr550_malu2)   | (f1 + fr550_malu1) | (f0 + fr550_malu0)")(define_reservation "fr550_msft_even"  "f0 + fr550_msft0")(define_reservation "fr550_msft_odd"  "f1 + fr550_msft1")(define_reservation "fr550_msft_either"  "(f1 + fr550_msft1) | (f0 + fr550_msft0)")(define_reservation "fr550_mmac_even"  "(f2 + fr550_mmac2) | (f0 + fr550_mmac0)")(define_reservation "fr550_mmac_odd"  "(f3 + fr550_mmac3) | (f1 + fr550_mmac1)")(define_reservation "fr550_mset"  "(f3 + fr550_mset3) | (f2 + fr550_mset2)    | (f1 + fr550_mset1) | (f0 + fr550_mset0)")(define_insn_reservation "fr550_mnop" 0  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mnop"))  "fr550_media + (f3|f2|f1|f0)")(define_insn_reservation "fr550_malu" 2  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mlogic,maveh,msath,mabsh,maddh,mqaddh,mqsath"))  "fr550_media + fr550_malu");; These insns only operate on FPRs and so don't need to be classified;; as even/odd.(define_insn_reservation "fr550_msft_1_either" 2  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mrot,mwcut,mshift,mexpdhw,mexpdhd,mpackh,			munpackh,mdpackh,mbhconv,mdrot,mcpl"))  "fr550_media + fr550_msft_either");; These insns read from ACC0-3.(define_insn_reservation "fr550_msft_1_even" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mcut,mrdacc,mdcut")	    (eq_attr "acc_group" "even")))  "fr550_media + fr550_msft_even");; These insns read from ACC4-7.(define_insn_reservation "fr550_msft_1_odd" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mcut,mrdacc,mdcut")	    (eq_attr "acc_group" "odd")))  "fr550_media + fr550_msft_odd");; MCLRACC with A=1 can issue to either M0 or M1.(define_insn_reservation "fr550_msft_2_either" 2  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mclracca"))  "fr550_media + fr550_msft_either");; These insns write to ACC0-3.(define_insn_reservation "fr550_msft_2_even" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mclracc,mwtacc")	    (eq_attr "acc_group" "even")))  "fr550_media + fr550_msft_even");; These insns write to ACC4-7.(define_insn_reservation "fr550_msft_2_odd" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mclracc,mwtacc")	    (eq_attr "acc_group" "odd")))  "fr550_media + fr550_msft_odd");; These insns read from and write to ACC0-3.(define_insn_reservation "fr550_mmac_even" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mmulh,mmulxh,mmach,mmrdh,mqmulh,mqmulxh,mqmach,			     maddacc,mdaddacc,mcpx,mqcpx")	    (eq_attr "acc_group" "even")))  "fr550_media + fr550_mmac_even");; These insns read from and write to ACC4-7.(define_insn_reservation "fr550_mmac_odd" 2  (and (eq_attr "cpu" "fr550")       (and (eq_attr "type" "mmulh,mmulxh,mmach,mmrdh,mqmulh,mqmulxh,mqmach,			     maddacc,mdaddacc,mcpx,mqcpx")	    (eq_attr "acc_group" "odd")))  "fr550_media + fr550_mmac_odd")(define_insn_reservation "fr550_mset" 1  (and (eq_attr "cpu" "fr550")       (eq_attr "type" "mset"))  "fr550_media + fr550_mset");; ::::::::::::::::::::;; ::;; :: Simple/FR300 scheduler description;; ::;; ::::::::::::::::::::;; Fr300 or simple processor.  To describe it as 1 insn issue;; processor, we use control unit.(define_insn_reservation "fr300_lat1" 1  (and (eq_attr "cpu" "fr300,simple")       (eq_attr "type" "!gload,fload,movfg,movgf"))  "c + control")(define_insn_reservation "fr300_lat2" 2  (and (eq_attr "cpu" "fr300,simple")       (eq_attr "type" "gload,fload,movfg,movgf"))  "c + control");; ::::::::::::::::::::;; ::;; :: Delay Slots;; ::;; ::::::::::::::::::::;; The insn attribute mechanism can be used to specify the requirements for;; delay slots, if any, on a target machine.  An instruction is said to require;; a "delay slot" if some instructions that are physically after the;; instruction are executed as if they were located before it.  Classic;; examples are branch and call instructions, which often execute the following;; instruction before the branch or call is performed.;; On some machines, conditional branch instructions can optionally "annul";; instructions in the delay slot.  This means that the instruction will not be;; executed for certain branch outcomes.  Both instructions that annul if the

⌨️ 快捷键说明

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