diff options
-rw-r--r-- | mppa_k1c/Asm.v | 3 | ||||
-rw-r--r-- | mppa_k1c/Asmexpand.ml | 6 | ||||
-rw-r--r-- | mppa_k1c/CBuiltins.ml | 6 | ||||
-rw-r--r-- | mppa_k1c/TargetPrinter.ml | 6 | ||||
-rw-r--r-- | test/monniaux/k1_builtins/test_k1_builtins.c | 5 |
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(); } |