[Bug 289232] i386 (x87) signal incorrectly reports FPE_FLTRES over FPE_FLTUND when both are present
Date: Tue, 02 Sep 2025 00:27:53 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289232
--- Comment #13 from Konstantin Belousov <kib@FreeBSD.org> ---
Sorry, the pasted code has the bug, I divided larger number by smaller.
It should be reverse. Now you could expect an underflow, but CPUs, both
Intel and AMD, report only inexact result.
I also checked it under Linux.
/* $Id$ */
#include <stdint.h>
#include <stdio.h>
static const double small_num = 1.0E-300;
static const double large_num = 1.0E+300;
int
main(void)
{
uint16_t sw;
__asm __volatile(
"\tfldl large_num\n"
"\tfldl small_num\n"
"\tfdivp\n"
"\tfstsw %%ax\n"
: "=a"(sw)
: "m"(small_num), "m"(large_num)
: "flags"
);
printf("x87 FPU Status Word (FSW): 0x%04x\n", sw);
if (sw & 0x01)
printf(" INVALID OP\n");
if (sw & 0x02)
printf(" DENORMAL OPERAND\n");
if (sw & 0x04)
printf(" ZERO DIVIDE\n");
if (sw & 0x08)
printf(" OVERFLOW\n");
if (sw & 0x10)
printf(" UNDERFLOW\n");
if (sw & 0x20)
printf(" INEXACT\n");
}
--
You are receiving this mail because:
You are the assignee for the bug.