aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/PostpassSchedulingOracle.ml
diff options
context:
space:
mode:
Diffstat (limited to 'mppa_k1c/PostpassSchedulingOracle.ml')
-rw-r--r--mppa_k1c/PostpassSchedulingOracle.ml45
1 files changed, 39 insertions, 6 deletions
diff --git a/mppa_k1c/PostpassSchedulingOracle.ml b/mppa_k1c/PostpassSchedulingOracle.ml
index f5742cc2..54a27966 100644
--- a/mppa_k1c/PostpassSchedulingOracle.ml
+++ b/mppa_k1c/PostpassSchedulingOracle.ml
@@ -31,10 +31,16 @@ let arith_rr_str = function
| Pmv -> "Pmv"
| Pnegw -> "Pnegw"
| Pnegl -> "Pnegl"
- | Pfnegd -> "Pfnegd"
| Psxwd -> "Psxwd"
| Pzxwd -> "Pzxwd"
+ | Pfabsw -> "Pfabsw"
+ | Pfabsd -> "Pfabsd"
+ | Pfnegw -> "Pfnegw"
+ | Pfnegd -> "Pfnegd"
+ | Pfnarrowdw -> "Pfnarrowdw"
+ | Pfwidenlwd -> "Pfwidenlwd"
| Pfloatwrnsz -> "Pfloatwrnsz"
+ | Pfloatudrnsz -> "Pfloatudrnsz"
| Pfloatdrnsz -> "Pfloatdrnsz"
| Pfixedwrzz -> "Pfixedwrzz"
| Pfixeddrzz -> "Pfixeddrzz"
@@ -60,6 +66,12 @@ let arith_rrr_str = function
| Pslll -> "Pslll"
| Psrll -> "Psrll"
| Psral -> "Psral"
+ | Pfaddd -> "Pfaddd"
+ | Pfaddw -> "Pfaddw"
+ | Pfsbfd -> "Pfsbfd"
+ | Pfsbfw -> "Pfsbfw"
+ | Pfmuld -> "Pfmuld"
+ | Pfmulw -> "Pfmulw"
let arith_rri32_str = function
| Pcompiw it -> "Pcompiw"
@@ -286,6 +298,10 @@ let alu_lite : int array = let resmap = fun r -> match r with
| "ISSUE" -> 1 | "TINY" -> 1 | "LITE" -> 1 | _ -> 0
in Array.of_list (List.map resmap resource_names)
+let alu_full : int array = let resmap = fun r -> match r with
+ | "ISSUE" -> 1 | "TINY" -> 1 | "LITE" -> 1 | "ALU" -> 1 | _ -> 0
+ in Array.of_list (List.map resmap resource_names)
+
let alu_nop : int array = let resmap = fun r -> match r with
| "ISSUE" -> 1 | "NOP" -> 1 | _ -> 0
in Array.of_list (List.map resmap resource_names)
@@ -347,7 +363,9 @@ type real_instruction =
(* BCU *)
| Icall | Call | Cb | Igoto | Goto | Ret | Get | Set
(* FPU *)
- | Fnegd | Floatwz | Floatdz | Fixedwz | Fixeddz
+ | Fabsd | Fabsw | Fnegw | Fnegd
+ | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw
+ | Fnarrowdw | Fwidenlwd | Floatwz | Floatdz | Floatudz | Fixedwz | Fixeddz
let ab_inst_to_real = function
| "Paddw" | "Paddiw" | "Pcvtl2w" -> Addw
@@ -374,8 +392,11 @@ let ab_inst_to_real = function
| "Pnop" | "Pcvtw2l" -> Nop
| "Psxwd" -> Sxwd
| "Pzxwd" -> Zxwd
+ | "Pfnarrowdw" -> Fnarrowdw
+ | "Pfwidenlwd" -> Fwidenlwd
| "Pfloatwrnsz" -> Floatwz
| "Pfloatdrnsz" -> Floatdz
+ | "Pfloatudrnsz" -> Floatudz
| "Pfixedwrzz" -> Fixedwz
| "Pfixeddrzz" -> Fixeddz
@@ -400,7 +421,16 @@ let ab_inst_to_real = function
| "Pret" -> Ret
| "Pset" -> Set
+ | "Pfabsd" -> Fabsd
+ | "Pfabsw" -> Fabsw
+ | "Pfnegw" -> Fnegw
| "Pfnegd" -> Fnegd
+ | "Pfaddd" -> Faddd
+ | "Pfaddw" -> Faddw
+ | "Pfsbfd" -> Fsbfd
+ | "Pfsbfw" -> Fsbfw
+ | "Pfmuld" -> Fmuld
+ | "Pfmulw" -> Fmulw
| s -> failwith @@ sprintf "ab_inst_to_real: unrecognized instruction: %s" s
exception InvalidEncoding
@@ -439,7 +469,7 @@ let rec_to_usage r =
| Nop -> alu_nop
| Sraw | Srlw | Sllw | Srad | Srld | Slld -> (match encoding with None | Some U6 -> alu_tiny | _ -> raise InvalidEncoding)
| Sxwd | Zxwd -> (match encoding with None -> alu_lite | _ -> raise InvalidEncoding)
- | Fixedwz | Floatwz | Fixeddz | Floatdz -> mau
+ | Fixedwz | Floatwz | Fixeddz | Floatdz | Floatudz -> mau
| Lbs | Lbz | Lhs | Lhz | Lws | Ld ->
(match encoding with None | Some U6 | Some S10 -> lsu_data
| Some U27L5 | Some U27L10 -> lsu_data_x
@@ -450,7 +480,9 @@ let rec_to_usage r =
| Some E27U27L10 -> lsu_acc_y)
| Icall | Call | Cb | Igoto | Goto | Ret | Set -> bcu
| Get -> bcu_tiny_tiny_mau_xnop
- | Fnegd -> alu_lite
+ | Fnegd | Fnegw | Fabsd | Fabsw | Fwidenlwd -> alu_lite
+ | Fnarrowdw -> alu_full
+ | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw -> mau
let real_inst_to_latency = function
| Nop -> 0 (* Only goes through ID *)
@@ -458,7 +490,7 @@ let real_inst_to_latency = function
| Addd | Andd | Compd | Ord | Sbfd | Srad | Srld | Slld | Xord | Make
| Sxwd | Zxwd
-> 1
- | Floatwz | Fixedwz | Floatdz | Fixeddz -> 4
+ | Floatwz | Fixedwz | Floatdz | Floatudz | Fixeddz -> 4
| Mulw | Muld -> 2 (* FIXME - WORST CASE. If it's S10 then it's only 1 *)
| Lbs | Lbz | Lhs | Lhz | Lws | Ld
| Sb | Sh | Sw | Sd
@@ -466,7 +498,8 @@ let real_inst_to_latency = function
| Get -> 1
| Set -> 3
| Icall | Call | Cb | Igoto | Goto | Ret -> 42 (* Should not matter since it's the final instruction of the basic block *)
- | Fnegd -> 1
+ | Fnegd | Fnegw | Fabsd | Fabsw | Fwidenlwd | Fnarrowdw -> 1
+ | Faddd | Faddw | Fsbfd | Fsbfw | Fmuld | Fmulw -> 4
let rec_to_info r : inst_info =
let usage = rec_to_usage r