| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
64-bit registers.(#487)
Writing into a 32-bit register erases the upper 32 bits of a 64-bit
register. This is the shortest instruction for loading unsigned
32-bit immediates. The length of those instructions is:
- movl: 5 bytes
- movq: 7 bytes
- movabsq: 10 bytes
Some assemblers will choose the proper instruction by themselves;
the GNU assembler does not, apparently. So it's better to make
the choice of instruction explicit.
|
| |
|
|
|
|
|
|
|
|
| |
We prefer not to change these two "vendored" libraries. Deprecation
warnings can only be addressed upstream. So let's silence them.
Flocq no longer triggers the `compatibility-notation` warning, so
let's not silence it.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Define our own `Z_div_mod_eq` lemma
The one in the Coq standard library is deprecated since 8.14,
but its replacement changed type between 8.13 and 8.14.
So the only way to remain compatible from 8.12 to 8.16 is to define our
own lemma. Phew.
* Do not use `Arith.Max`, deprecated.
* Do not use `plus_lt_compat_r`, deprecated.
* Do not use `beq_nat_refl` and `beq_nat_true`, deprecated.
|
|
|
|
|
|
|
| |
In OCaml 5, the Unix and Str libraries are installed in subdirectories
of the standard library directory.
In OCaml 4, the `-I +str` and `-I +unix` options have no effect.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, the register allocator picks caller-save registers in preference
to callee-save registers.
But for ARM in Thumb mode, more compact code is obtained if we prefer
integer registers R0...R3 rather than all integer caller-save registers.
This commit introduces an `allocatable_registers` function in
$ARCH/Conventions1.v that determines the preferred and remaining
registers to be used for register allocation.
|
|
|
|
|
|
| |
Also: produce better "unsupported" message for OCaml 5.
Fixes: #477
|
|
|
|
|
| |
Don't add `s` suffix if source register is R13 (SP), so as to enable
16-bit instruction encodings.
|
|
|
|
| |
It is no longer used elsewhere.
|
|
|
|
| |
It is supported and produces shorter code than `mov`.
|
| |
|
|
|
|
|
| |
The old offset check is too conservative allowing only offsets that are
allowed for all kinds of load/store instructions.
|
|
|
|
|
|
|
|
| |
The check `Int.ltu x Int.zero` is always false, we replace this by using
signed integer comparisons.
We cannot use `Int.sign_ext` because the offsets are not signed
integers but rather unsigned integers plus an additional sign bit.
|
|
|
|
| |
Closes: #467
|
|
|
|
|
|
|
|
| |
If the Coq version used supports native compilation, `.coq-native`
directories are generated during the build, and they need to be
installed along the `.vo` files.
Fixes: #476
|
|
|
|
|
|
|
|
| |
A self assign `x = x` can be classified as a skip in `classify_stmt`.
This helps with the if-conversion of some code that the previous passes
generates, e.g. for nested C conditional expressions.
Closes: #466
|
| |
|
|
|
|
|
|
| |
However, it is signed int for aarch64_apple.
Fixes: #475
|
|
|
|
|
|
| |
Since the wchar_t type depends on the architecture and the system we are
compiling for we replace the typedef to a fixed type by a typedef to a
define which is predefined by the compiler itself.
|
| |
|
|
|
|
|
|
| |
This replaces `sizeof_wchar` and `wchar_signed`, and makes it possible
to request that `wchar_t` is `long` instead of `int`, something that
seems needed for PowerPC.
|
|
|
|
|
|
| |
Instead, evaluate it for the side effects it may contain.
Fixes: #474
|
|
|
|
|
|
|
|
|
| |
Variadic functions can use the stack frame to store values of registers.
Hence, a pointer within the stack frame can be put in a va_list, and
the stack frame should not be deallocated before a function call that
may use this va_list.
Fixes: #473
|
|
|
|
|
|
| |
So as to respect dependency order when compound initializers are nested.
Fixes: #471
|
|
|
|
| |
Fixes: #472
|
|
|
|
| |
Adapt w.r.t. coq/coq#16904.
|
|
|
|
|
| |
Cygwin 32 bits has reached end of life, and Cygwin >= 3.4 will be 64-bit only.
(https://cygwin.com/pipermail/cygwin-announce/2022-November/010777.html)
|
| |
|
|
|
|
| |
Adaptation to https://github.com/coq/coq/pull/16743
|
| |
|
|
|
|
| |
Fixes: #461
|
|
|
|
|
|
| |
Make sure that it's one of the three locations where the ccomp executable
looks for compcert.ini.
Closes: #450
|
|
|
|
|
|
|
| |
Use of `char` instead of `int` caused nontermination on platforms where
`char` is unsigned.
Fixes: #462
|
|\
| |
| | |
Handle Duff's device and other unstructured `switch` statements
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This can occur in debug mode if there are declarations before the
first case, as in
```
switch (x) {
int x;
case 0:
...
}
```
Without this commit, the code above is a structured switch if -g is not given,
and a non-structured switch if -g is given.
Co-authored-by: Michael Schmidt <github@mschmidt.me>
|
| |
| |
| |
| | |
`-finput-charset` and other small fixes)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- New elaboration pass: SwitchNorm
- recognizes structured 'switch' statements and puts them in a
normalized form;
- if selected, transforms unstructured 'switch' statements into a
structured switch with goto actions + the original switch body
with appropriate labels and gotos.
- C2C treatment of 'switch' statements is simplified accordingly.
- New language support option `-funstructured-switch`.
- Some tests were added (test/regression/switch3.c).
|
| |
| |
| |
| |
| |
| |
| | |
This ensures that normalized switch statements remain normalized.
However, if the label and the labeled statement are on different lines,
add an extra line directive corresponding to the label before the labeled
statement.
|
| |
| |
| |
| |
| |
| | |
Instead of passing a string that encodes the optional source-to-source
transformations to perform, just pass one optional, named argument for
each transformation. It is clearer and easier to extend this way.
|
| |
| |
| |
| |
| |
| |
| |
| | |
We use Printlines to copy C code fragments to assembly comments.
While CR, FF and VT are treated like whitespace by C, they could
possibly mess up the assembly comments if copied verbatim.
Moreover, this avoids generating CR CR LF end-of-lines under Windows.
Bug 34075
|