aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Moved naming and changed names of aux functionsBernhard Schommer2016-12-121-16/+20
| | | | | | | | The naming of anonymous structs is performed by an additional step in elab_struct_or_union_info instead of in elab_field_group. Also the aux functions are renamed to access. Bug 20003
* Next try for support of anonymous structs.Bernhard Schommer2016-12-077-41/+94
| | | | | | Instead of using idents the anonymous fileds get names of the for <anon>_c where c is a counter of all anonymous members. Bug 20003
* More verbose dwarf.Bernhard Schommer2016-12-073-4/+6
|
* Use -Wno- instead of -Wno to deactivate warnings.Bernhard Schommer2016-12-061-1/+1
|
* fix targets in section for code generation optionsMichael Schmidt2016-12-021-1/+5
|
* Compute the correct size of location expressions.Bernhard Schommer2016-12-011-1/+1
| | | | | The arm dwarf float registers constants are larger than 2 bytes. Bug 20489
* Use vfpv3 registers also in dwarf. Bug 20489Bernhard Schommer2016-11-291-5/+10
|
* Reset all Hashtbls.Bernhard Schommer2016-11-252-10/+14
| | | | | A non reseted Hashtbl caused problems with multiple input files. Bug 20462
* Do not use hardcoded register number for sp.Bernhard Schommer2016-11-252-11/+11
| | | | | | Since the dwarf register names for x86_32 and x86_64 differ it is wrong to hardcode the dwarf register number for rsp to 4. Bug 20461
* Warning for C11 _Noreturn feature.Bernhard Schommer2016-11-221-4/+10
| | | | The warning for C11 features is now also triggered for _Noreturn.
* Warning for decls without name in composites.Bernhard Schommer2016-11-224-6/+15
| | | | | | The warning missing declarations is now also triggered for declarations without name in field lists of composite types if the declaration is not an anonymous composite or a bitfield member.
* C2C: revise typing and translation of __builtin_memcpy_alignedXavier Leroy2016-11-172-12/+22
| | | | | | | | | | | | | | | | | | | | This fixes two issues: 1- The 'size' and 'alignment' arguments of __builtin_memcpy_aligned were declared with type 'unsigned int', which is not good for a 64-bit platform. 2- The corresponding arguments were not cast to type 'unsigned int', causing compilation errors if e.g. the size argument is a 64-bit integer. (Reported by Michael Schmidt.) The fix: 1- Evaluate the 3rd and 4th arguments at type size_t 2- Support both Vint and Vlong as results of this evaluation 3- Declare these arguments with type 'unsigned long'. Supporting work: in lib/Camlcoq.ml, add Z.modulo and Z.is_power2 operations. Concerning part 3 of the fix, type size_t would be better for future platforms where size_t is bigger than unsigned long, but some more work is needed to delay the evaluation of C2C.builtins_generic to after Cutil.size_t_ikind() is stable, or, equivalently, to evaluate the cparser/ machine configuration before C2C initializes.
* Initializers: introduce 'constval_cast' to cast constant value to desired typeXavier Leroy2016-11-172-21/+25
| | | | This comes handy in the next commit where constval_cast is used from C2C.
* C2C: wrong translation of 'switch' over arguments of type 'long' if 'long' ↵Xavier Leroy2016-11-171-4/+5
| | | | | | | is 64 bits It was wrongly assumed that 'long' is 32 bits. (Reported by Michael Schmidt.)
* Use 64 bit address in debug information.Bernhard Schommer2016-11-107-19/+36
| | | | | Address constants need to be 64bit also in the debug information. Bug 20335
* Removed folders from .merlin.Bernhard Schommer2016-11-091-4/+0
|
* Added ${arch}_${bitsize} for x86 to .merlinBernhard Schommer2016-11-091-1/+4
|
* Merge branch 'master' of github.com:AbsInt/CompCertBernhard Schommer2016-11-081-1/+1
|\
| * x86: mark register rax as destroyed by callsXavier Leroy2016-11-081-1/+1
| | | | | | | | | | | | Calls to variadic or unprototyped functions set this register to reflect the number of arguments passed in XMM registers. Thus we must make sure that rax is not used to hold the pointer to the function being called. (Report by Michael Schmidt.)
* | fix va_arg for pointer types on 64bit targetMichael Schmidt2016-11-081-1/+7
| |
* | extend constant check for builtin_memcpy_aligned (bug 20320)Michael Schmidt2016-11-071-2/+2
|/
* extend constant check for builtin_memcpy_aligned (bug 20320)Michael Schmidt2016-11-071-0/+2
|
* allow Cow version 8.5pl3Michael Schmidt2016-11-041-1/+1
|
* update info about x86 in manpageMichael Schmidt2016-11-031-2/+2
|
* remove unused file, update tests for arch-field of configuration filesMichael Schmidt2016-11-033-20/+7
|
* Merge branch 'master' of github.com:AbsInt/CompCertBernhard Schommer2016-10-283-141/+2
|\
| * powerpc/runtime: add commentsXavier Leroy2016-10-281-1/+2
| |
| * runtime/powerpc: remove useless files, add commentsXavier Leroy2016-10-282-140/+0
| |
* | Update http to httpsMichael Schmidt2016-10-281-1/+1
|/
* Merge pull request #145 from AbsInt/64Xavier Leroy2016-10-27191-7066/+16450
|\ | | | | | | Support for 64-bit target processors + support for x86 in 64-bit mode
| * Documentation updates to mention 64-bit mode and x86_64 portXavier Leroy2016-10-272-7/+32
| |
| * Make Archi.ptr64 always computable, and reorganize files accordingly: ia32 ↵Xavier Leroy2016-10-2757-624/+332
| | | | | | | | | | | | | | | | | | | | | | | | -> x86/x86_32/x86_64 Having Archi.ptr64 as an opaque Parameter that is determined at run-time depending on compcert.ini is problematic for applications such as VST where functions such as Ctypes.sizeof must compute within Coq. This commit introduces two versions of the Archi.v file, one for x86 32 bits (with ptr64 := false), one for x86 64 bits (with ptr64 := true). Unlike previous approaches, no other file is duplicated between these two variants of x86. While we are at it, I renamed "ia32" into "x86" everywhere. "ia32" is Intel speak for the 32-bit architecture. It is not a good name to describe both the 32 and 64 bit architectures. Finally, .depend is no longer under version control and is regenerated when the target architecture changes. That's because the location of Archi.v differs between the ports that have 32/64 bit variants (x86 so far) and the ports that have only one bitsize (ARM and PowerPC so far).
| * i64_smulh: revert to conditional branches instead of predicated insnsXavier Leroy2016-10-251-8/+8
| | | | | | | | "subslt" changes the flags, affecting the condition of the "sbclt" that follows.
| * x86-32: make sure is_longconst and mullimm work correctly in 32 bitsXavier Leroy2016-10-252-9/+11
| | | | | | | | | | | | SelectLong.is_longconst was always returning 'false' in 32 bits. SelectLong.mullimm was generating a Omullimm insn even in 32 bits. Both functions are used by SelectDiv.
| * SplitLong: propagate constants through "longofint"Xavier Leroy2016-10-252-4/+8
| | | | | | | | | | This can make a big difference in which optimizations are triggered later. Constants were already propagated by "longofintu".
| * Update PowerPC port (not tested yet)Xavier Leroy2016-10-253-2/+144
| |
| * Update ARM port. Not tested yet.Xavier Leroy2016-10-2521-278/+535
| |
| * ia32: add support for __builtin_bswap64 + a bit of DWARF for x86-64Xavier Leroy2016-10-242-4/+53
| | | | | | | | | | __builtin_bswap64 is now available both in 32 and 64-bit mode. The DWARF bit is the numbering of registers in ia32/Asmexpand.ml.
| * cparser/PackedStructs: fix assertion that was wrong for 64-bit targetsXavier Leroy2016-10-241-1/+1
| |
| * Update the tests in test/regression, continuedXavier Leroy2016-10-242-13/+5
| |
| * driver/Interp: updateXavier Leroy2016-10-241-8/+8
| | | | | | | | | | Cherry-pick commit d1311e6 from trunk. Simplify convert_external_arg so that it works both in 32 and 64 bits.
| * Update the tests and test infrastructure in test/regressionXavier Leroy2016-10-2412-7/+132
| | | | | | | | | | Tests updated to work with x86 64 bits. Infrastructure added: script "Runtest", with ability to have different reference outputs depending on platform or bit size.
| * configure for ia32-macosx: update for MacOS 10.12Xavier Leroy2016-10-131-1/+1
| |
| * x86-64 MacOS X supportXavier Leroy2016-10-116-31/+68
| | | | | | | | | | - Avoid absolute addressing for labels, use RIP-relative addressing - Different, RIP-relative implementation of jump tables
| * Regression: handling of integer + pointer in CompCert CXavier Leroy2016-10-064-115/+112
| | | | | | | | | | | | During the experiments, the integer + pointer cases was removed from the semantics of the C addition operator. The idea was to turn integer + pointer into pointer + integer during elaboration, but it was not implemented. On second thoughts, we can restore the integer + pointer cases in the formal semantics of CompCert C at low cost. This is what this commit does.
| * Regression: compile-time evaluation of ((struct s *)0)->fieldXavier Leroy2016-10-062-4/+7
| | | | | | | | | | This somewhat useful idiom was broken when Val.add was replaced by Val.offset_ptr in the Efield case. This commit restores the previous behavior. This used to be supported (and is useful
| * Fix some 32-bit regressionsXavier Leroy2016-10-042-15/+56
| | | | | | | | While merging the 32- and 64-bit code generators, some regressions were introduced in the 32 bit case.
| * Turn 64-bit integer division and modulus by constants into multiply-highXavier Leroy2016-10-0429-25/+3031
| | | | | | | | | | | | This trick was already implemented for 32-bit integer division and modulus. Here we extend it to the 64-bit case. For 32-bit target processors, the runtime library must implement 64-bit multiply-high (signed and unsigned). Tentative implementations are provided for IA32 and PowerPC, but need testing.
| * Remove usage of do.Bernhard Schommer2016-10-043-122/+121
| | | | | | | | | | | | Apparently coq compiled with camlp4 has a problem with the user defined do <- ... ; ... and do. Bug 20050
| * Finish the proofs of SelectLong for IA32Xavier Leroy2016-10-024-31/+361
| |