aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorXavier Leroy <xavierleroy@users.noreply.github.com>2016-10-27 16:26:08 +0200
committerGitHub <noreply@github.com>2016-10-27 16:26:08 +0200
commit9922feea537ced718a3822dd50eabc87da060338 (patch)
tree6f67bb6707ef59e50d6bb81c61b2ed0b3c6097ab /driver
parentf2d6637c7d4a11f961ff289e64f70bf4de93d0aa (diff)
parentd50773e537ec6729f9152b545c6f938ab19eb7b8 (diff)
downloadcompcert-9922feea537ced718a3822dd50eabc87da060338.tar.gz
compcert-9922feea537ced718a3822dd50eabc87da060338.zip
Merge pull request #145 from AbsInt/64
Support for 64-bit target processors + support for x86 in 64-bit mode
Diffstat (limited to 'driver')
-rw-r--r--driver/Configuration.ml2
-rw-r--r--driver/Driver.ml9
-rw-r--r--driver/Interp.ml14
3 files changed, 14 insertions, 11 deletions
diff --git a/driver/Configuration.ml b/driver/Configuration.ml
index 87e29e0f..85a163bf 100644
--- a/driver/Configuration.ml
+++ b/driver/Configuration.ml
@@ -117,7 +117,7 @@ let linker =
let arch =
match get_config_string "arch" with
- | "powerpc"|"arm"|"ia32" as a -> a
+ | "powerpc"|"arm"|"ia32"|"x86_64"|"x86" as a -> a
| v -> bad_config "arch" [v]
let model = get_config_string "model"
let abi = get_config_string "abi"
diff --git a/driver/Driver.ml b/driver/Driver.ml
index a273a91a..145de6c5 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -511,9 +511,12 @@ let _ =
| "arm" -> if Configuration.is_big_endian
then Machine.arm_bigendian
else Machine.arm_littleendian
- | "ia32" -> if Configuration.abi = "macosx"
- then Machine.x86_32_macosx
- else Machine.x86_32
+ | "x86" -> if Configuration.model = "64" then
+ Machine.x86_64
+ else
+ if Configuration.abi = "macosx"
+ then Machine.x86_32_macosx
+ else Machine.x86_32
| _ -> assert false
end;
Builtins.set C2C.builtins;
diff --git a/driver/Interp.ml b/driver/Interp.ml
index d7e0b1bc..1e328a70 100644
--- a/driver/Interp.ml
+++ b/driver/Interp.ml
@@ -366,14 +366,14 @@ let (>>=) opt f = match opt with None -> None | Some arg -> f arg
(* Like eventval_of_val, but accepts static globals as well *)
let convert_external_arg ge v t =
- match v, t with
- | Vint i, AST.Tint -> Some (EVint i)
- | Vfloat f, AST.Tfloat -> Some (EVfloat f)
- | Vsingle f, AST.Tsingle -> Some (EVsingle f)
- | Vlong n, AST.Tlong -> Some (EVlong n)
- | Vptr(b, ofs), AST.Tint ->
+ match v with
+ | Vint i -> Some (EVint i)
+ | Vfloat f -> Some (EVfloat f)
+ | Vsingle f -> Some (EVsingle f)
+ | Vlong n -> Some (EVlong n)
+ | Vptr(b, ofs) ->
Senv.invert_symbol ge b >>= fun id -> Some (EVptr_global(id, ofs))
- | _, _ -> None
+ | _ -> None
let rec convert_external_args ge vl tl =
match vl, tl with