]>
git.ipfire.org Git - thirdparty/gcc.git/commit
a68: fix bit-shift standard operators [PR algol68/123959]
In Standard Algol 68:
- ABS (b) < bits_width results in the expected result.
- ABS (b) = bits_width results in all bits set to zero.
- ABS (b) > bits_width is undefined.
In GNU algol 68:
- ABS (b) < bits_width results in the expected result.
- ABS (b) >= bits_width results in all bits set to zero.
Our behavior is:
1. Conformant and backwards compatible.
2. Matches well with the similar extension of skip of integral, bits,
real, etc values to always yield zeroes.
3. Intuitive.
This patch fixes the lowering of the standard operators SHR and SHL
accordingly, including an update for the manual and a few tests.
Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/algol68/ChangeLog
PR algol68/123959
* a68.h: Expand prototype of a68_bits_shift to get a node argument
for location purposes.
* a68-low-bits.cc (a68_bits_shift): Implement RR compatible
semantics.
* a68-low-prelude.cc (a68_lower_shl3): Fix call to a68_bit_shift.
(a68_lower_shr3): Likewise.
* ga68.texi (Bits operators): Fix documentation of SHR and SHL.
gcc/testsuite/ChangeLog
PR algol68/123959
* algol68/execute/bits-shift-1.a68: New test.
* algol68/execute/bits-shift-2.a68: Likewise.
* algol68/execute/bits-shift-3.a68: Likewise.