aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mppa_k1c/Asm.v3
-rw-r--r--mppa_k1c/Asmexpand.ml6
-rw-r--r--mppa_k1c/CBuiltins.ml6
-rw-r--r--mppa_k1c/TargetPrinter.ml6
-rw-r--r--test/monniaux/k1_builtins/test_k1_builtins.c5
5 files changed, 23 insertions, 3 deletions
diff --git a/mppa_k1c/Asm.v b/mppa_k1c/Asm.v
index bb78eda1..b5051de3 100644
--- a/mppa_k1c/Asm.v
+++ b/mppa_k1c/Asm.v
@@ -88,6 +88,9 @@ Inductive instruction : Type :=
| Pdinval
| Pdinvall (addr: ireg)
| Pdtouchl (addr: ireg)
+ | Piinval
+ | Piinvals (addr: ireg)
+ | Pitouchl (addr: ireg)
| Pdzerol (addr: ireg)
(** Loads **)
diff --git a/mppa_k1c/Asmexpand.ml b/mppa_k1c/Asmexpand.ml
index 97a85881..c4e73b76 100644
--- a/mppa_k1c/Asmexpand.ml
+++ b/mppa_k1c/Asmexpand.ml
@@ -397,6 +397,12 @@ let expand_builtin_inline name args res = let open Asmvliw in
emit (Pdinvall addr)
| "__builtin_k1_dtouchl", [BA(IR addr)], _ ->
emit (Pdtouchl addr)
+ | "__builtin_k1_iinval", [], _ ->
+ emit Piinval
+ | "__builtin_k1_iinvals", [BA(IR addr)], _ ->
+ emit (Piinvals addr)
+ | "__builtin_k1_itouchl", [BA(IR addr)], _ ->
+ emit (Pitouchl addr)
| "__builtin_k1_dzerol", [BA(IR addr)], _ ->
emit (Pdzerol addr)
diff --git a/mppa_k1c/CBuiltins.ml b/mppa_k1c/CBuiltins.ml
index 56412d71..1490d94f 100644
--- a/mppa_k1c/CBuiltins.ml
+++ b/mppa_k1c/CBuiltins.ml
@@ -50,9 +50,9 @@ let builtins = {
"__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);
- "__builtin_k1_itouchl", (TVoid [], [TPtr(TVoid [], [])], false);
+ "__builtin_k1_iinval", (TVoid [], [], false); (* DONE *)
+ "__builtin_k1_iinvals", (TVoid [], [TPtr(TVoid [], [])], false); (* DONE *)
+ "__builtin_k1_itouchl", (TVoid [], [TPtr(TVoid [], [])], false); (* DONE [not supported by assembler but in documentation] *)
"__builtin_k1_lbsu", (TInt(IChar, []), [TPtr(TVoid [], [])], false);
"__builtin_k1_lbzu", (TInt(IUChar, []), [TPtr(TVoid [], [])], false);
"__builtin_k1_ldu", (TInt(IULongLong, []), [TPtr(TVoid [], [])], false); (* DONE *)
diff --git a/mppa_k1c/TargetPrinter.ml b/mppa_k1c/TargetPrinter.ml
index fc4d6ba6..7b22a857 100644
--- a/mppa_k1c/TargetPrinter.ml
+++ b/mppa_k1c/TargetPrinter.ml
@@ -304,6 +304,12 @@ module Target (*: TARGET*) =
fprintf oc " dinvall 0[%a]\n" ireg addr
| Pdtouchl addr ->
fprintf oc " dtouchl 0[%a]\n" ireg addr
+ | Piinval ->
+ fprintf oc " iinval\n"
+ | Piinvals addr ->
+ fprintf oc " iinvals 0[%a]\n" ireg addr
+ | Pitouchl addr ->
+ fprintf oc " itouchl 0[%a]\n" ireg addr
| Pdzerol addr ->
fprintf oc " dzerol 0[%a]\n" ireg addr
diff --git a/test/monniaux/k1_builtins/test_k1_builtins.c b/test/monniaux/k1_builtins/test_k1_builtins.c
index e9ee6727..94509131 100644
--- a/test/monniaux/k1_builtins/test_k1_builtins.c
+++ b/test/monniaux/k1_builtins/test_k1_builtins.c
@@ -12,6 +12,9 @@ void test_loads(void *addr) {
__builtin_k1_dinvall(addr);
__builtin_k1_dtouchl(addr);
__builtin_k1_dzerol(addr);
+ __builtin_k1_iinvals(addr);
+ /* __builtin_k1_itouchl(addr); */
+ __builtin_k1_dzerol(addr);
}
void test_stops(void) {
@@ -20,4 +23,6 @@ void test_stops(void) {
__builtin_k1_stop();
__builtin_k1_barrier();
__builtin_k1_fence();
+ __builtin_k1_dinval();
+ __builtin_k1_iinval();
}