[Bug 264590] assembler generates wrong opcodes of instructions fdiv fdivp fdivr fdivrp fsub fsubp fsubr fsubrp
Date: Fri, 10 Jun 2022 09:52:31 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264590
Bug ID: 264590
Summary: assembler generates wrong opcodes of instructions fdiv
fdivp fdivr fdivrp fsub fsubp fsubr fsubrp
Product: Base System
Version: 11.4-RELEASE
Hardware: amd64
OS: Any
Status: New
Severity: Affects Many People
Priority: ---
Component: gnu
Assignee: bugs@FreeBSD.org
Reporter: var@schellong.biz
FreeBSD 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r335510: Fri Jun 22 04:32:14 UTC
2018 root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
Compiler: clang6, gcc9, bcc32x.exe (Embarcadero, Windows)
Sample code:
--------------------------------------------
static long double sd(void)
{
long double y;
__asm__ ("\n\t"
"fldpi \n\t"
"fld1 \n\t"
"fdivp \n\t"
: "=t"(y)
:
:
); // st(1)=pi, st(0)=1
return y;
}
int main(void)
{
printf("\t%.18Lg\n", sd());
return 0;
}
--------------------------------------------
Output: 0.318309886183790672 = 1/pi
But correct is: pi = pi/1
Content of file.o:
0b+096 c4 10 5d c3 55 48 89 e5 >> d9 eb, d9 e8, de f1 << 5d c3
. ^^^^^ ^^^^^ ^^^^^
Opcodes of 'fldpi', 'fld1' and /division/.
There is the wrong opcode 'de f1' for 'fdivrp'!
Not 'de f9' for the written 'fdivp'.
These wrong translations appear on fdivxx and fsubxx.
--
You are receiving this mail because:
You are the assignee for the bug.