qbe: Use fixed precision of 17 when printing floating point constants
It appears that some operating systems don't yet support the C11
DBL_DECIMAL_DIG. In order to ensure consistent output no matter the
precision of long double (which varies from arch to arch), just use
a fixed 17, which is sufficient for IEEE 754 binary64.
Make some static data const
targ: Use correct char signedness for aarch64 and riscv64
Update test for DBL_DECIMAL_DIG
qbe: Print floating point with DBL_DECIMAL_DIG precision
DECIMAL_DIG may vary from system to system depending on the width
of long double, causing one of the tests to fail.
CI: Pin FreeBSD to 12.x for now
FreeBSD 13 no longer contains a standalone assembler in the base
install, and also added a hard-requirement on _Thread_local.
Add support for riscv64 target
QBE support isn't quite there yet, but is progressing smoothly.
Check in static-assert-struct test expected output
decl: Allow _Static_assert in struct declaration
decl: Allow _Alignas(0)
C11 6.7.5p6 says "An alignment specification of zero has no effect".
qbe: Remove unnecessary value copy for struct/union types
Previously, this was needed so that an aggregate type value was
updated to be an 'l' type value. However, since 5ff1d2fa the aggregate
type name is stored in a separate parameter in IARG/ICALL instructions,
so we can just re-use the same pointer value.
Remove unused mkswitch declaration
CI: Fix debian-aarch64 dependency packages
It appears that these packages recommended by gcc-aarch64-linux-gnu
and qemu-user are no longer installed automatically, so list them
qbe: Remove unnecessary extension for relational operands
The operands are already promoted, so never need to be extended.
These extend()s were added in 7d746860 in an attempt to fix a bug
related to the comparison of values with type smaller than int.
However, the real bug was that the operands should have been promoted
to int by usual arithmetic conversions, which was fixed later in
qbe: Remove __PRETTY_FUNCTION__ declaration
We no longer define __GNUC__ so we don't have to work around glibc's
assert definition anymore.
qbe: Shorten a few overly long lines
qbe: Slight simplification
qbe: Use second argument of call/arg to store type name
qbe: Use separate type for block/label
Labels are no longer used as instruction arguments.
qbe: Switch to fixed-size instruction struct
Move jump and phi instructions to struct block, and function arguments
to their own instruction.
This will facilitate allocating instructions as an array.
Add struct passing call test
The struct-passing test checks for function definitions with struct
arguments, but we were missing a test for function calls with struct