aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rwxr-xr-xconfigure1
-rw-r--r--cparser/Machine.ml12
-rw-r--r--cparser/Machine.mli3
-rw-r--r--driver/Configuration.ml1
-rw-r--r--driver/Configuration.mli3
-rw-r--r--driver/Frontend.ml5
7 files changed, 22 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index fd0595d4..62635d70 100644
--- a/Makefile
+++ b/Makefile
@@ -297,6 +297,7 @@ compcert.ini: Makefile.config
echo "linker_options=$(CLINKER_OPTIONS)";\
echo "arch=$(ARCH)"; \
echo "model=$(MODEL)"; \
+ echo "os=$(OS)"; \
echo "abi=$(ABI)"; \
echo "endianness=$(ENDIANNESS)"; \
echo "system=$(SYSTEM)"; \
diff --git a/configure b/configure
index 812ad6f7..e8ebb6f8 100755
--- a/configure
+++ b/configure
@@ -710,6 +710,7 @@ HAS_STANDARD_HEADERS=$has_standard_headers
INSTALL_COQDEV=$install_coqdev
LIBMATH=$libmath
MODEL=$model
+OS=${os:-unspecified}
SYSTEM=$system
RESPONSEFILE=$responsefile
LIBRARY_FLOCQ=$library_Flocq
diff --git a/cparser/Machine.ml b/cparser/Machine.ml
index 73b71ea0..4f5a93d2 100644
--- a/cparser/Machine.ml
+++ b/cparser/Machine.ml
@@ -242,7 +242,7 @@ let rv64 =
struct_passing_style = SP_ref_callee; (* Wrong *)
struct_return_style = SR_ref } (* to check *)
-let kvx =
+let kvxbase =
{ name = "kvx";
char_signed = true;
wchar_signed = true;
@@ -275,7 +275,15 @@ let kvx =
supports_unaligned_accesses = true;
struct_passing_style = SP_value32_ref_callee;
struct_return_style = SR_int1to4;
- has_non_trapping_loads = true;
+ has_non_trapping_loads = false;
+}
+
+let kvxcos =
+ { kvxbase with has_non_trapping_loads = false;
+}
+
+let kvxmbr =
+ { kvxbase with has_non_trapping_loads = true;
}
let aarch64 =
diff --git a/cparser/Machine.mli b/cparser/Machine.mli
index 54436758..07b55832 100644
--- a/cparser/Machine.mli
+++ b/cparser/Machine.mli
@@ -88,7 +88,8 @@ val arm_littleendian : t
val arm_bigendian : t
val rv32 : t
val rv64 : t
-val kvx : t
+val kvxmbr : t
+val kvxcos : t
val aarch64 : t
val gcc_extensions : t -> t
diff --git a/driver/Configuration.ml b/driver/Configuration.ml
index 1d40214a..ecc2aba6 100644
--- a/driver/Configuration.ml
+++ b/driver/Configuration.ml
@@ -126,6 +126,7 @@ let arch =
| "powerpc"|"arm"|"x86"|"riscV"|"kvx"|"aarch64" as a -> a
| v -> bad_config "arch" [v]
let model = get_config_string "model"
+let os = get_config_string "os"
let abi = get_config_string "abi"
let is_big_endian =
match get_config_string "endianness" with
diff --git a/driver/Configuration.mli b/driver/Configuration.mli
index a71da72d..75e547ff 100644
--- a/driver/Configuration.mli
+++ b/driver/Configuration.mli
@@ -19,6 +19,9 @@ val model: string
val abi: string
(** ABI to use *)
+val os: string
+ (** ABI to use *)
+
val is_big_endian: bool
(** Endianness to use *)
diff --git a/driver/Frontend.ml b/driver/Frontend.ml
index c99da945..c8890046 100644
--- a/driver/Frontend.ml
+++ b/driver/Frontend.ml
@@ -117,7 +117,10 @@ let init () =
| "riscV" -> if Configuration.model = "64"
then Machine.rv64
else Machine.rv32
- | "kvx" -> Machine.kvx
+ | "kvx" -> if Configuration.os = "cos" then Machine.kvxcos
+ else if Configuration.os = "mbr" then Machine.kvxmbr
+ else (Printf.eprintf "Configuration OS = %s\n" Configuration.os;
+ failwith "Wrong OS configuration for KVX")
| "aarch64" -> Machine.aarch64
| _ -> assert false
end;