[PATCH LoongArch v3 0/5] Add LoongArch support.
Chenghua Xu
xuchenghua@loongson.cn
Tue Oct 26 10:06:15 GMT 2021
On 10/26/21 2:04 AM, H.J. Lu wrote:
> On Sun, Oct 24, 2021 at 5:33 PM Alan Modra <amodra@gmail.com> wrote:
>> On Sun, Oct 24, 2021 at 05:15:27AM -0700, H.J. Lu via Binutils wrote:
>>> Please fix unexpected failures and unexpected successes. New port
>>> should have a clean "make check".
>> Yes, that would be good. There are also some more ubsan errors that
> Please fix
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=28497
>
>> show up when running the testsuite. For example:
>>
>> opcodes/loongarch-coder.c:111:11: runtime error: left shift of 16383 by 18 places cannot be represented in type 'int'
>> opcodes/loongarch-coder.c:136:8: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
>> opcodes/loongarch-coder.c:144:9: runtime error: shift exponent 32 is too large for 32-bit type 'unsigned int'
>>
>> The first one is on this code
>> if (si)
>> {
>> ret <<= sizeof (ret) * 8 - len;
>> ret >>= sizeof (ret) * 8 - len;
>> }
>>
>> ubsan doesn't complain about the shift right, but note that according
>> to the ISO C99 standard right shifting signed types with negative
>> values is implementation defined. I've used compilers for
>> microprocessors back in the 1980s that always did logical right shift,
>> because the micro didn't have arithmetic right shift! So, strictly
>> speaking, you may not get the desired sign extension. The following
>> is better (you may not need the len != 0 test, I didn't check whether
>> len can be 0).
>>
>> if (si && len != 0)
>> {
>> uint32_t sign = 1u << (len - 1);
>> ret = (ret ^ sign) - sign;
>> }
>>
>> --
>> Alan Modra
>> Australia Development Lab, IBM
Hi H.J. Lu,
We will fix those failures soon.
>
>
More information about the Binutils
mailing list