aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/PostpassSchedulingOracle.ml
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-30 00:27:52 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-30 00:27:52 +0200
commitcea008aa07715cf7abbc88f7573050f5a05f58d7 (patch)
tree93ab765c8e1e242dd97eaace9b0bb0487e6ac4d2 /mppa_k1c/PostpassSchedulingOracle.ml
parentb557706f77ca4cf0721dfb4d911207a2fae12411 (diff)
parent26428dbaa2f3fec4b8fd121fc6e53a22a5cc5c5d (diff)
downloadcompcert-kvx-cea008aa07715cf7abbc88f7573050f5a05f58d7.tar.gz
compcert-kvx-cea008aa07715cf7abbc88f7573050f5a05f58d7.zip
Merge remote-tracking branch 'origin/mppa-msub' into mppa-work
Conflicts: mppa_k1c/ExtValues.v
Diffstat (limited to 'mppa_k1c/PostpassSchedulingOracle.ml')
-rw-r--r--mppa_k1c/PostpassSchedulingOracle.ml43
1 files changed, 36 insertions, 7 deletions
diff --git a/mppa_k1c/PostpassSchedulingOracle.ml b/mppa_k1c/PostpassSchedulingOracle.ml
index 7015fd5f..af1e8f85 100644
--- a/mppa_k1c/PostpassSchedulingOracle.ml
+++ b/mppa_k1c/PostpassSchedulingOracle.ml
@@ -61,7 +61,9 @@ let arith_rrr_str = function
| Pfcompw ft -> "Pfcompw"
| Pfcompl ft -> "Pfcompl"
| Paddw -> "Paddw"
+ | Paddxw _ -> "Paddxw"
| Psubw -> "Psubw"
+ | Prevsubxw _ -> "Psubxw"
| Pmulw -> "Pmulw"
| Pandw -> "Pandw"
| Pnandw -> "Pnandw"
@@ -76,7 +78,9 @@ let arith_rrr_str = function
| Psrxw -> "Psrxw"
| Psllw -> "Psllw"
| Paddl -> "Paddl"
+ | Paddxl _ -> "Paddxl"
| Psubl -> "Psubl"
+ | Prevsubxl _ -> "Psubxl"
| Pandl -> "Pandl"
| Pnandl -> "Pnandl"
| Porl -> "Porl"
@@ -100,6 +104,9 @@ let arith_rrr_str = function
let arith_rri32_str = function
| Pcompiw it -> "Pcompiw"
| Paddiw -> "Paddiw"
+ | Paddxiw _ -> "Paddxiw"
+ | Prevsubiw -> "Psubiw"
+ | Prevsubxiw _ -> "Psubxiw"
| Pmuliw -> "Pmuliw"
| Pandiw -> "Pandiw"
| Pnandiw -> "Pnandiw"
@@ -122,6 +129,9 @@ let arith_rri32_str = function
let arith_rri64_str = function
| Pcompil it -> "Pcompil"
| Paddil -> "Paddil"
+ | Prevsubil -> "Psubil"
+ | Paddxil _ -> "Paddxil"
+ | Prevsubxil _ -> "Psubxil"
| Pmulil -> "Pmulil"
| Pandil -> "Pandil"
| Pnandil -> "Pnandil"
@@ -140,6 +150,8 @@ let arith_arr_str = function
let arith_arrr_str = function
| Pmaddw -> "Pmaddw"
| Pmaddl -> "Pmaddl"
+ | Pmsubw -> "Pmsubw"
+ | Pmsubl -> "Pmsubl"
| Pcmove _ -> "Pcmove"
| Pcmoveu _ -> "Pcmoveu"
@@ -393,6 +405,10 @@ let alu_lite_x : int array = let resmap = fun r -> match r with
| "ISSUE" -> 2 | "TINY" -> 1 | "LITE" -> 1 | _ -> 0
in Array.of_list (List.map resmap resource_names)
+let alu_lite_y : int array = let resmap = fun r -> match r with
+ | "ISSUE" -> 3 | "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)
@@ -452,8 +468,9 @@ type real_instruction =
| Addw | Andw | Compw | Mulw | Orw | Sbfw | Sraw | Srlw | Sllw | Srsw | Rorw | Xorw
| Addd | Andd | Compd | Muld | Ord | Sbfd | Srad | Srld | Slld | Srsd | Xord
| Nandw | Norw | Nxorw | Nandd | Nord | Nxord | Andnw | Ornw | Andnd | Ornd
- | Maddw | Maddd | Cmoved
+ | Maddw | Maddd | Msbfw | Msbfd | Cmoved
| Make | Nop | Extfz | Extfs | Insf
+ | Addxw | Addxd
(* LSU *)
| Lbs | Lbz | Lhs | Lhz | Lws | Ld | Lq | Lo
| Sb | Sh | Sw | Sd | Sq | So
@@ -467,6 +484,8 @@ type real_instruction =
let ab_inst_to_real = function
| "Paddw" | "Paddiw" | "Pcvtl2w" -> Addw
+ | "Paddxw" | "Paddxiw" -> Addxw
+ | "Paddxl" | "Paddxil" -> Addxd
| "Paddl" | "Paddil" | "Pmv" | "Pmvw2l" -> Addd
| "Pandw" | "Pandiw" -> Andw
| "Pnandw" | "Pnandiw" -> Nandw
@@ -493,6 +512,7 @@ let ab_inst_to_real = function
| "Psllw" | "Pslliw" -> Sllw
| "Proriw" -> Rorw
| "Pmaddw" | "Pmaddiw" -> Maddw
+ | "Pmsubw" | "Pmsubiw" -> Msbfw
| "Pslll" | "Psllil" -> Slld
| "Pxorw" | "Pxoriw" -> Xorw
| "Pnxorw" | "Pnxoriw" -> Nxorw
@@ -502,7 +522,8 @@ let ab_inst_to_real = function
| "Pnxorl" | "Pnxoril" -> Nxord
| "Pandnl" | "Pandnil" -> Andnd
| "Pornl" | "Pornil" -> Ornd
- | "Pmaddl" -> Maddd
+ | "Pmaddl" | "Pmaddil" -> Maddd
+ | "Pmsubl" | "Pmsubil" -> Msbfd
| "Pmake" | "Pmakel" | "Pmakefs" | "Pmakef" | "Ploadsymbol" -> Make
| "Pnop" | "Pcvtw2l" -> Nop
| "Pextfz" | "Pextfzl" | "Pzxwd" -> Extfz
@@ -571,7 +592,7 @@ let rec_to_usage r =
and real_inst = ab_inst_to_real r.inst
in match real_inst with
| Addw | Andw | Nandw | Orw | Norw | Sbfw | Xorw
- | Nxorw | Andnw | Ornw ->
+ | Nxorw | Andnw | Ornw ->
(match encoding with None | Some U6 | Some S10 -> alu_tiny
| Some U27L5 | Some U27L10 -> alu_tiny_x
| _ -> raise InvalidEncoding)
@@ -580,6 +601,14 @@ let rec_to_usage r =
(match encoding with None | Some U6 | Some S10 -> alu_tiny
| Some U27L5 | Some U27L10 -> alu_tiny_x
| Some E27U27L10 -> alu_tiny_y)
+ | Addxw ->
+ (match encoding with None | Some U6 | Some S10 -> alu_lite
+ | Some U27L5 | Some U27L10 -> alu_lite_x
+ | _ -> raise InvalidEncoding)
+ | Addxd ->
+ (match encoding with None | Some U6 | Some S10 -> alu_lite
+ | Some U27L5 | Some U27L10 -> alu_lite_x
+ | Some E27U27L10 -> alu_lite_y)
| Compw -> (match encoding with None -> alu_tiny
| Some U6 | Some S10 | Some U27L5 -> alu_tiny_x
| _ -> raise InvalidEncoding)
@@ -596,10 +625,10 @@ let rec_to_usage r =
| Some U27L5 | Some U27L10 -> alu_tiny_x
| Some E27U27L10 -> alu_tiny_y
| _ -> raise InvalidEncoding)
- | Mulw| Maddw -> (match encoding with None -> mau
+ | Mulw| Maddw | Msbfw -> (match encoding with None -> mau
| Some U6 | Some S10 | Some U27L5 -> mau_x
| _ -> raise InvalidEncoding)
- | Muld | Maddd -> (match encoding with None | Some U6 | Some S10 -> mau
+ | Muld | Maddd | Msbfd -> (match encoding with None | Some U6 | Some S10 -> mau
| Some U27L5 | Some U27L10 -> mau_x
| Some E27U27L10 -> mau_y)
| Nop -> alu_nop
@@ -629,10 +658,10 @@ let real_inst_to_latency = function
| Rorw | Nandw | Norw | Nxorw | Ornw | Andnw
| Nandd | Nord | Nxord | Ornd | Andnd
| Addd | Andd | Compd | Ord | Sbfd | Srad | Srsd | Srld | Slld | Xord | Make
- | Extfs | Extfz | Insf | Fcompw | Fcompd | Cmoved
+ | Extfs | Extfz | Insf | Fcompw | Fcompd | Cmoved | Addxw | Addxd
-> 1
| Floatwz | Floatuwz | Fixeduwz | Fixedwz | Floatdz | Floatudz | Fixeddz | Fixedudz -> 4
- | Mulw | Muld | Maddw | Maddd -> 2 (* FIXME - WORST CASE. If it's S10 then it's only 1 *)
+ | Mulw | Muld | Maddw | Maddd | Msbfw | Msbfd -> 2 (* FIXME - WORST CASE. If it's S10 then it's only 1 *)
| Lbs | Lbz | Lhs | Lhz | Lws | Ld | Lq | Lo -> 3
| Sb | Sh | Sw | Sd | Sq | So -> 1 (* See k1c-Optimization.pdf page 19 *)
| Get -> 1