[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