aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-11 13:11:13 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-11 13:11:13 +0200
commit9ff90aa440d195076a30fe4d8a055d050d84f726 (patch)
tree415d9145ff9414b47370ac86c7c221fda694d628
parent71bfa128316019b0199db87acdf31deb9f9e7405 (diff)
downloadcompcert-kvx-9ff90aa440d195076a30fe4d8a055d050d84f726.tar.gz
compcert-kvx-9ff90aa440d195076a30fe4d8a055d050d84f726.zip
data cache builtins
-rw-r--r--mppa_k1c/Asm.v4
-rw-r--r--mppa_k1c/Asmexpand.ml8
-rw-r--r--mppa_k1c/CBuiltins.ml10
-rw-r--r--mppa_k1c/TargetPrinter.ml8
-rw-r--r--test/monniaux/k1_builtins/test_k1_builtins.c3
5 files changed, 28 insertions, 5 deletions
diff --git a/mppa_k1c/Asm.v b/mppa_k1c/Asm.v
index 55138a3f..bb78eda1 100644
--- a/mppa_k1c/Asm.v
+++ b/mppa_k1c/Asm.v
@@ -85,6 +85,10 @@ Inductive instruction : Type :=
| Pstop
| Pbarrier
| Pfence
+ | Pdinval
+ | Pdinvall (addr: ireg)
+ | Pdtouchl (addr: ireg)
+ | Pdzerol (addr: ireg)
(** Loads **)
| Plb (rd: ireg) (ra: ireg) (ofs: addressing) (**r load byte *)
diff --git a/mppa_k1c/Asmexpand.ml b/mppa_k1c/Asmexpand.ml
index e09492e9..97a85881 100644
--- a/mppa_k1c/Asmexpand.ml
+++ b/mppa_k1c/Asmexpand.ml
@@ -391,6 +391,14 @@ let expand_builtin_inline name args res = let open Asmvliw in
emit Pbarrier
| "__builtin_k1_fence", [], _ ->
emit Pfence
+ | "__builtin_k1_dinval", [], _ ->
+ emit Pdinval
+ | "__builtin_k1_dinvall", [BA(IR addr)], _ ->
+ emit (Pdinvall addr)
+ | "__builtin_k1_dtouchl", [BA(IR addr)], _ ->
+ emit (Pdtouchl addr)
+ | "__builtin_k1_dzerol", [BA(IR addr)], _ ->
+ emit (Pdzerol addr)
(* Byte swaps *)
(*| "__builtin_bswap16", [BA(IR a1)], BR(IR res) ->
diff --git a/mppa_k1c/CBuiltins.ml b/mppa_k1c/CBuiltins.ml
index e4652d77..56412d71 100644
--- a/mppa_k1c/CBuiltins.ml
+++ b/mppa_k1c/CBuiltins.ml
@@ -26,7 +26,7 @@ let builtins = {
(* BCU Instructions *)
"__builtin_k1_await", (TVoid [], [], false); (* DONE *)
"__builtin_k1_barrier", (TVoid [], [], false); (* DONE *)
- "__builtin_k1_doze", (TVoid [], [], false);
+ "__builtin_k1_doze", (TVoid [], [], false); (* opcode not supported in assembly, not in documentation *)
"__builtin_k1_wfxl", (TVoid [], [TInt(IUChar, []); TInt(ILongLong, [])], false); (* DONE *)
"__builtin_k1_wfxm", (TVoid [], [TInt(IUChar, []); TInt(ILongLong, [])], false); (* DONE *)
"__builtin_k1_invaldtlb", (TVoid [], [], false);
@@ -45,10 +45,10 @@ let builtins = {
(* No ACWS - __int128 *)
"__builtin_k1_afda", (TInt(IULongLong, []), [TPtr(TVoid [], []); TInt(ILongLong, [])], false);
"__builtin_k1_aldc", (TInt(IULongLong, []), [TPtr(TVoid [], [])], false);
- "__builtin_k1_dinval", (TVoid [], [], false);
- "__builtin_k1_dinvall", (TVoid [], [TPtr(TVoid [], [])], false);
- "__builtin_k1_dtouchl", (TVoid [], [TPtr(TVoid [], [])], false);
- "__builtin_k1_dzerol", (TVoid [], [TPtr(TVoid [], [])], false);
+ "__builtin_k1_dinval", (TVoid [], [], false); (* DONE *)
+ "__builtin_k1_dinvall", (TVoid [], [TPtr(TVoid [], [])], false); (* DONE *)
+ "__builtin_k1_dtouchl", (TVoid [], [TPtr(TVoid [], [])], false); (* DONE *)
+ "__builtin_k1_dzerol", (TVoid [], [TPtr(TVoid [], [])], false); (* DONE *)
"__builtin_k1_fence", (TVoid [], [], false); (* DONE *)
"__builtin_k1_iinval", (TVoid [], [], false);
"__builtin_k1_iinvals", (TVoid [], [TPtr(TVoid [], [])], false);
diff --git a/mppa_k1c/TargetPrinter.ml b/mppa_k1c/TargetPrinter.ml
index c67792e7..fc4d6ba6 100644
--- a/mppa_k1c/TargetPrinter.ml
+++ b/mppa_k1c/TargetPrinter.ml
@@ -298,6 +298,14 @@ module Target (*: TARGET*) =
fprintf oc " barrier\n"
| Pfence ->
fprintf oc " fence\n"
+ | Pdinval ->
+ fprintf oc " dinval\n"
+ | Pdinvall addr ->
+ fprintf oc " dinvall 0[%a]\n" ireg addr
+ | Pdtouchl addr ->
+ fprintf oc " dtouchl 0[%a]\n" ireg addr
+ | Pdzerol addr ->
+ fprintf oc " dzerol 0[%a]\n" ireg addr
| Pjumptable (idx_reg, tbl) ->
let lbl = new_label() in
diff --git a/test/monniaux/k1_builtins/test_k1_builtins.c b/test/monniaux/k1_builtins/test_k1_builtins.c
index db90d4ea..e9ee6727 100644
--- a/test/monniaux/k1_builtins/test_k1_builtins.c
+++ b/test/monniaux/k1_builtins/test_k1_builtins.c
@@ -9,6 +9,9 @@ void test_system_regs(void) {
void test_loads(void *addr) {
__builtin_k1_ldu(addr);
+ __builtin_k1_dinvall(addr);
+ __builtin_k1_dtouchl(addr);
+ __builtin_k1_dzerol(addr);
}
void test_stops(void) {