aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* le Makefile passeDavid Monniaux2019-03-141-2/+11
|
* test for memcpy builtinDavid Monniaux2019-03-131-0/+15
|
* Merge branch 'mppa_postpass' of ↵David Monniaux2019-03-131-4/+3
|\ | | | | | | gricad-gitlab.univ-grenoble-alpes.fr:sixcy/CompCert into mppa_postpass
| * Corrigé certaines latences (Store -> 1 i/o 3, Set -> 4 i/o 3)Cyril SIX2019-03-131-4/+3
| |
* | with timingDavid Monniaux2019-03-132-2/+7
|/
* Fix for CompCert 3.5Cyril SIX2019-03-131-0/+1
|
* Merge branch 'master' into mppa_postpassCyril SIX2019-03-1329-290/+564
|\ | | | | | | | | | | Conflicts: .gitignore runtime/include/stdbool.h
| * Update version number for 3.5v3.5Xavier Leroy2019-02-281-1/+1
| |
| * Update HTML doc for release 3.5Xavier Leroy2019-02-271-1/+1
| |
| * Update Changelog in preparation for release 3.5Xavier Leroy2019-02-261-1/+1
| |
| * Maximum supported Menhir version (#275)Xavier Leroy2019-02-261-1/+1
| | | | | | | | | | Follow-up to commit fc9bc643. The latest Menhir version compatible with the current code base is actually 20181113.
| * Update Changelog in preparation for release 3.5Xavier Leroy2019-02-251-0/+35
| |
| * Maximum supported Menhir version (#275)Jacques-Henri Jourdan2019-02-251-2/+3
| | | | | | The Coq backend of Menhir will soon enjoy a large refactoring, making it incompatible with the version of MenhirLib currently in CompCert. This commit adds a check in configure to make sure that the version of Menhir is not more modern than the current one (20181026).
| * Revised attachment of name attributes to structs, unions, enumsXavier Leroy2019-02-253-6/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Consider: ``` struct s { ... } __attribute((aligned(N))); struct t { ... } __attribute((aligned(N))) struct t x; ``` In the first case, the aligned attribute should be attached to struct s, so that further references to struct s are aligned. In the second case, the aligned attribute should be attached to the variable x, because if we attach it to struct t, it will be ignored and cause a warning. This commit changes the attachment rule so that it treats both cases right. Extend regression test for "aligned" attribute accordingly, by testing aligned attribute applied to a name of struct type.
| * Reject object-related and struct-related attributes on typedefsXavier Leroy2019-02-254-8/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a check to reject type definitions such as ``` typedef __attribute((section "foo")) int fooint; ``` GCC and Clang also reject this as an error. Without the check, the behavior is somewhat surprising: ``` fooint x; // placed in section "foo" fooint * x; // placed in default section, attribute "foo" is ignored ``` Note that the following must be accepted: ``` typedef struct { ... } __attribute((packed)) t; ``` The "packed" attribute is correctly attached to the struct type and should not be checked. This is achieved by using `attribute_of_type_no_expand` to get the attributes of the typedef-ed type, excluding the attributes carried by a struct/union or another typedef.
| * Add regression test for "aligned" attributeXavier Leroy2019-02-253-1/+120
| | | | | | | | Expected results were obtained with GCC 5.4 and Clang 8.0
| * Distinguish object-related and name-related attributesXavier Leroy2019-02-254-13/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a second step towards mimicking GCC/Clang's handling of attributes. This commit introduces a distinction between - Object-related attributes, such as "section", which apply to the object (function, variable) being defined; - Name-related attributes, such as "aligned", which apply to the name (object, struct/union member, struct/union/enum tag) being defined. In particular, "aligned" is now attached to "struct" and "union" definitions, while it used to be "floated up" before. The C11 _Alignas modifier is treated like an object-related attribute, so that ``` struct s { ... }; _Alignas(64) struct s x; ``` correctly associates the alignment with "x" and not with "struct s", where it would be ignored because it was not part of the original definition of s.
| * Do not expand type names when floating attributes "up" a declarationXavier Leroy2019-02-253-2/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During elaboration of type declarators, non-type-related attributes such as "aligned" or "section" are "floated up" so that they apply to the thing being declared. For example, consider: ``` __attribute((aligned(16))) int * p; ``` The attribute is first attached to type `int`, then floated up to type `int *`, so that it finally applies to `p`, giving a 16-aligned pointer to int, and not a naturally-aligned pointer to 16-aligned int. What happens when the non-type-related attribute comes from a typedef? ``` typedef __attribute((aligned(16))) int i16; i16 * p; ``` CompCert used to expand the typedef then float up the attribute, resulting in `p` being a 16-aligned pointer to int. GCC and Clang produce a naturally-aligned pointer, so they do not expand the typedef before floating. The old CompCert behavior is somewhat surprising, and potentially less useful than the GCC/Clang behavior. This commit changes the floating up of non-type-related attributes so that typedefs and struct/union/enum definitions are not expanded when determining which attributes to float up. This is a first step towards mimicking the GCC/Clang behavior.
| * Ignore and clean file .lia.cacheXavier Leroy2019-02-122-1/+4
| | | | | | | | This file is created by Coq when running some tactics
| * Make the checker happy (#272)Vincent Laporte2019-02-123-19/+17
| | | | | | Previously, the coqchk type- and proof-checker would take forever on some of CompCert's modules. This commit makes minimal changes to the problematic proofs so that all of CompCert can be checked with coqchk. Tested with Coq versions 8.8.2 and 8.9.0.
| * Add support for Coq 8.9.0Xavier Leroy2019-02-041-3/+3
| | | | | | | | No other changes are needed to support 8.9.0.
| * <stddef.h>: define NULL with type void *Xavier Leroy2019-02-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | ISO C2011 7.19 para 3 says "NULL, which expands to an implementation-defined null pointer constant" ISO C2011 6.3.2.3 para 3 says "An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant." So, it seems NULL can be defined either as "0" or as "(void *) 0". However, the two definitions are not equivalent in the context of a call to a variadic or unprototyped function: passing 0 when the function expects a pointer value can go wrong if sizeof(int) != sizeof(void *). This commit changes the definition of NULL to the safer one: This is what GCC and Clang do in C mode; they use "#define NULL 0" for C++ only. Fixes issue #265
| * Test for NULL in variable argument listsXavier Leroy2019-02-042-1/+53
| | | | | | | | | | Sometimes a vararg function receives a NULL-terminated list of pointers. This can fail if sizeof(NULL) < sizeof(void *), as this test illustrates.
| * <stdbool.h>: add missing macro __bool_true_false_are_definedXavier Leroy2019-02-041-0/+1
| | | | | | | | | | | | As specified in ISO C99 section 7.16 and C11 section 7.18. Fixes issue #266
| * Fix some URLs in the first page of the Coq HTML documentation (#263)Andre2019-01-221-5/+5
| | | | | | | | Links to machine-specific modules were garbled during editing.
| * Use `Program Instance` instead of `Instance` + refine mode (#261)Maxime Dénès2018-12-272-64/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | CompCert currently uses `Instance` in so-called "refine" mode, where Coq drops automatically in proof mode if some members of the instance are missing. This mode is soon going to be turned off by default, see https://github.com/coq/coq/pull/9270. In order to make CompCert robust against this change, this commit replaces those occurrences of `Instance` that use "refine" mode with `Program Instance`.
| * x86: wrong modeling of ZF flag for FP comparisonsXavier Leroy2018-12-202-130/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | As written in the comment, ZF should be set if the two floats are equal or unordered. The "or unordered" case was missing in the original modeling of FP comparisons. - Set ZF flag correctly in the Asm.compare_floats and Asm.compare_floats32 functions. - Update the proofs in Asmgenproof1 accordingly. No change required to the code generated for FP comparisons: this code already anticipated the "or unordered" case. Problem reported by Alix Trieu.
| * Add functions "ordered" and "compare" to Float and Float32Xavier Leroy2018-12-201-9/+20
| | | | | | | | | | | | | | "compare" returns the 4 possible results w/ type "option comparison". "ordered" returns a Boolean. These functions will be used soon in the x86 port.
| * Fix fixme in PackedStructs.Bernhard Schommer2018-11-201-4/+4
| | | | | | | | | | | | | | | | Instead of relying testing that the size of pointers is 64bit the size of registers should be tested. Also it should be a fatal error to reverse a long long on an architecture that does not support reverse 64bit read/writes. Bug 24982
| * Fix typo in asmexpand. Bug 24953Bernhard Schommer2018-11-071-1/+1
| |
| * Use 'gpr_or_zero' for base register of indexed load/stores, bug 24776Michael Schmidt2018-10-202-5/+10
| |
| * Catch exception from elab_attr_arg.Bernhard Schommer2018-10-181-1/+4
| | | | | | | | | | | | Catch the exception from a non constant argument of a packed attribute and print an error. Bug 24748
| * Switch conditions for eref plattforms.Bernhard Schommer2018-09-191-4/+4
| | | | | | | | | | Otherwise an isel is generated if no isel is needed at all. Bug 24516
| * Support __builtin_isel64 for non-EREF PPC64 platforms (#141)Xavier Leroy2018-09-181-22/+28
| | | | | | | | | | | | If the isel instruction is missing, it can be emulated just like we do in the 32-bit case (__builtin_isel). Follow-up to commit 51d32b92. Bug 24516
| * Add builtin isel (conditional move) for int64, uint64 and _Bool (#140)Bernhard Schommer2018-09-182-1/+16
| | | | | | | | | | New builtin isel variants to support conditional moves for 64bit integers and _Bool values. Bug 24516
| * Bug 24518Bernhard Schommer2018-09-170-0/+0
| |
* | Enlevé la dépendance mémoire de PcbuCyril SIX2019-03-133-25/+25
| |
* | for scipDavid Monniaux2019-03-131-0/+11
| |
* | for using CPlexDavid Monniaux2019-03-132-5/+19
| |
* | scripts for using Gurobi and Cplex for ILP solvingDavid Monniaux2019-03-132-2/+2
| |
* | attempt at parser for cplexDavid Monniaux2019-03-131-0/+7
| |
* | -fpostpass-ilpDavid Monniaux2019-03-125-16/+3
| |
* | script for using Gurobi with -fpostpass-ilpDavid Monniaux2019-03-121-0/+3
| |
* | Merge branch 'mppa_postpass' of ↵David Monniaux2019-03-125-110/+141
|\ \ | | | | | | | | | gricad-gitlab.univ-grenoble-alpes.fr:sixcy/CompCert into mppa_postpass
| * | Added cascaded_scheduler but the flag does not workCyril SIX2019-03-122-3/+4
| | |
| * | Added a flag for changing the scheduler (not any choice available right now)Cyril SIX2019-03-125-3/+12
| | |
| * | Proof of exec_trans_pcincr solvedCyril SIX2019-03-121-7/+31
| | |
| * | Merge remote-tracking branch 'origin/mppa_parcheck' into mppa_parcheckCyril SIX2019-03-121-12/+12
| |\ \
| | * | fix trans_pcincr for parcheck. (Proof is broken. cf FIXME)Sylvain Boulmé2019-03-121-12/+12
| | | |
| * | | Simplification des preuves "de discrimination" dans AsmblockdepsCyril SIX2019-03-121-94/+77
| |/ /