RISC-V round_away () handling of non canonical rounding modes
Vineet Gupta
vineetg@rivosinc.com
Thu Jan 16 19:27:42 GMT 2025
On 1/16/25 11:21, Florian Weimer wrote:
> * Vineet Gupta:
>
>> On RISC-V we are running into an obscure issue where glibc FP print
>> call stack is hitting abort.
>>
>> __snprintf
>> __vsnprintf_internal
>> __printf_buffer
>> __printf_fp_l_buffer
>> __printf_fp_buffer_1
>> *round_away* + get_rounding_mode
>> abort
>>
>> The reason is round_away () only handles the 4 canonical rounding
>> modes (Up, Down, Towards zero, Nearest- ties to even), while RISC-V
>> ISA supports an additional *Nearest - ties to Max magnitude* [1]. The
>> last one being set implicitly by various FP instructions.
>>
>> With unrelated gcc changes, SPEC 2017 cam4 benchmark runs are hitting
>> the abort because printf_dp_buffer_1 () just reads the last set
>> rounding mode which happens to be the fifth one set by some FP insn.
> Is it really correct if the rounding mode changes spontaneously? Or
> is this an -ffast-math thing?
Indeed it is -Ofast and thus -ffast-math
Thx,
-Vineet
More information about the Libc-alpha
mailing list