diff options
author | Bernhard Schommer <bschommer@users.noreply.github.com> | 2018-08-20 10:22:35 +0200 |
---|---|---|
committer | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2018-08-20 10:22:35 +0200 |
commit | 6fc89e5c8c4a8f98ef0a4a03c00994bbfb146431 (patch) | |
tree | 27fd2d801607ee940e5254869c775f3662b4088b /cparser/Machine.ml | |
parent | ec8d93afc8875dcf7dfeb982eab255f150a91074 (diff) | |
download | compcert-6fc89e5c8c4a8f98ef0a4a03c00994bbfb146431.tar.gz compcert-6fc89e5c8c4a8f98ef0a4a03c00994bbfb146431.zip |
Add sizeof_reg and new Machine configurations (#129)
Since the size of integer registers is not identical to the size of pointers
for the ppc64 and e5500 model the check for register pairs in
ExtendedAsm does not work correctly.
In order to avoid this a new field sizeof_intreg is introduced in the
Machine configuration which describes the size of integer registers.
New configurations for the ppc64 and e5500 model are added
and used.
Bug 24273
Diffstat (limited to 'cparser/Machine.ml')
-rw-r--r-- | cparser/Machine.ml | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/cparser/Machine.ml b/cparser/Machine.ml index 4d1e7588..089f2483 100644 --- a/cparser/Machine.ml +++ b/cparser/Machine.ml @@ -44,6 +44,7 @@ type t = { wchar_signed: bool; sizeof_size_t: int; sizeof_ptrdiff_t: int; + sizeof_intreg: int; alignof_ptr: int; alignof_short: int; alignof_int: int; @@ -78,6 +79,7 @@ let ilp32ll64 = { wchar_signed = true; sizeof_size_t = 4; sizeof_ptrdiff_t = 4; + sizeof_intreg = 4; alignof_ptr = 4; alignof_short = 2; alignof_int = 4; @@ -112,6 +114,7 @@ let i32lpll64 = { wchar_signed = true; sizeof_size_t = 8; sizeof_ptrdiff_t = 8; + sizeof_intreg = 8; alignof_ptr = 8; alignof_short = 2; alignof_int = 4; @@ -146,6 +149,7 @@ let il32pll64 = { wchar_signed = true; sizeof_size_t = 8; sizeof_ptrdiff_t = 8; + sizeof_intreg = 8; alignof_ptr = 8; alignof_short = 2; alignof_int = 4; @@ -202,11 +206,20 @@ let ppc_32_bigendian = struct_passing_style = SP_ref_caller; struct_return_style = SR_int1to8; } +let ppc_32_r64_bigendian = + { ppc_32_bigendian with sizeof_intreg = 8;} + let ppc_32_diab_bigendian = { ppc_32_bigendian with sizeof_wchar = 2; wchar_signed = false } +let ppc_32_r64_diab_bigendian = + { ppc_32_diab_bigendian with sizeof_intreg = 8;} + let ppc_32_linux_bigendian = {ppc_32_bigendian with struct_return_style = SR_ref;} +let ppc_32_r64_linux_bigendian = + { ppc_32_linux_bigendian with sizeof_intreg = 8;} + let arm_littleendian = { ilp32ll64 with name = "arm"; struct_passing_style = SP_split_args; struct_return_style = SR_int1to4;} @@ -254,6 +267,7 @@ let undef = { wchar_signed = true; sizeof_size_t = 0; sizeof_ptrdiff_t = 0; + sizeof_intreg = 0; alignof_ptr = 0; alignof_short = 0; alignof_int = 0; |