gas signed overflow fixes
Palmer Dabbelt via binutils
binutils@sourceware.org
Sat Dec 14 00:44:00 GMT 2019
On Thu, 12 Dec 2019 03:10:15 PST (-0800), amodra@gmail.com wrote:
> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
> index 055d80c344..7ec1028b28 100644
> --- a/gas/config/tc-riscv.c
> +++ b/gas/config/tc-riscv.c
> @@ -1043,9 +1043,9 @@ static void
> load_const (int reg, expressionS *ep)
> {
> int shift = RISCV_IMM_BITS;
> - bfd_vma upper_imm;
> + bfd_vma upper_imm, sign = (bfd_vma) 1 << (RISCV_IMM_BITS - 1);
> expressionS upper = *ep, lower = *ep;
> - lower.X_add_number = (int32_t) ep->X_add_number << (32-shift) >> (32-shift);
> + lower.X_add_number = ((ep->X_add_number & (sign + sign - 1)) ^ sign) - sign;
> upper.X_add_number -= lower.X_add_number;
>
> if (ep->X_op != O_constant)
Thanks!
More information about the Binutils
mailing list