aboutsummaryrefslogtreecommitdiffstats
path: root/aarch64/OpWeights.ml
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-09-29 20:29:05 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-09-29 20:29:05 +0200
commit827bdabf1242720979848cf473263a54fcf212f5 (patch)
tree4987e2dda36035e7dd1becf0143db225e5a9be95 /aarch64/OpWeights.ml
parentf6b0bfa541f69b4a563ac99a864284939067e994 (diff)
downloadcompcert-kvx-827bdabf1242720979848cf473263a54fcf212f5.tar.gz
compcert-kvx-827bdabf1242720979848cf473263a54fcf212f5.zip
floating-point division uses the divisor
Diffstat (limited to 'aarch64/OpWeights.ml')
-rw-r--r--aarch64/OpWeights.ml9
1 files changed, 5 insertions, 4 deletions
diff --git a/aarch64/OpWeights.ml b/aarch64/OpWeights.ml
index 01a1a553..1b48bc0f 100644
--- a/aarch64/OpWeights.ml
+++ b/aarch64/OpWeights.ml
@@ -108,14 +108,12 @@ let latency_of_op (op : operation) (nargs : int) =
| Oaddf (* r [rd = r1 + r2] *)
| Osubf (* r [rd = r1 - r2] *)
| Omulf (* r [rd = r1 * r2] *)
- | Odivf (* r [rd = r1 / r2] *)
(* 32-bit floating-point arithmetic *)
| Onegfs (* r [rd = - r1] *)
| Oabsfs (* r [rd = abs(r1)] *)
| Oaddfs (* r [rd = r1 + r2] *)
| Osubfs (* r [rd = r1 - r2] *)
| Omulfs (* r [rd = r1 * r2] *)
- | Odivfs (* r [rd = r1 / r2] *)
| Osingleoffloat (* r [rd] is [r1] truncated to single-precision float *)
| Ofloatofsingle (* r [rd] is [r1] extended to double-precision float *)
(* Conversions between int and float *)
@@ -136,6 +134,8 @@ let latency_of_op (op : operation) (nargs : int) =
| Osingleoflong (* r [rd = float32_of_signed_long(r1)] *)
| Osingleoflongu (* r [rd = float32_of_unsigned_int(r1)] *)
-> 6
+ | Odivf -> 50 (* r [rd = r1 / r2] *)
+ | Odivfs -> 20
(* Boolean tests *)
| Ocmp cmp | Osel (cmp, _) ->
(match cmp with
@@ -255,7 +255,7 @@ let resources_of_op (op : operation) (nargs : int) =
| Oaddf (* r [rd = r1 + r2] *)
| Osubf (* r [rd = r1 - r2] *)
| Omulf (* r [rd = r1 * r2] *)
- | Odivf (* r [rd = r1 / r2] *)
+ | Odivf
(* 32-bit floating-point arithmetic *)
| Onegfs (* r [rd = - r1] *)
| Oabsfs (* r [rd = abs(r1)] *)
@@ -301,7 +301,8 @@ let resources_of_op (op : operation) (nargs : int) =
let non_pipelined_resources_of_op (op : operation) (nargs : int) =
match op with
| Odiv | Odivu -> [| 29 |]
- | Odivl | Odivlu -> [| 50 |]
+ | Odivfs -> [| 20 |]
+ | Odivl | Odivlu | Odivf -> [| 50 |]
| _ -> [| -1 |];;
let resources_of_cond (cmp : condition) (nargs : int) =