Hello, Excuse me if I mailing to wrong list. I'm trying to find Solaris 10 kernel code which is responsive for false results on remainder operation. For example, 0xffff14445398aa64 % 0x000000019161719b calculated fine with libc (result is 0x000000014be746a6), but producing wrong result when calculated in 32-bit i86pc Solaris 10 kernel (result is 0xffff1446a875f5c3). OpenSolaris 32-bit i86pc calculating same numbers correctly. As I understand, actual remainder is calculated in __urem64() from http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/common/util/i386/muldiv.s#671 . This code was last modified in 2005 (according to history).
What I see is that __urem64() code from Solaris 10 differs from OpenSolaris: Solaris 10# mdb -k Loading modules: [ unix krtld genunix specfs dtrace cpu.generic uppc pcplusmp ufs ip hook neti sctp arp usba fctl nca lofs cpc random crypto zfs fcip logindmux ptm sppp nfs ] > __urem64::dis __urem64: pushl %esi __urem64+1: call +0x12e <0xfe831f7f> __urem64+6: movl %esi,%eax __urem64+8: movl %ecx,%edx __urem64+0xa: popl %esi __urem64+0xb: ret $0x10 > OpenSolaris$ pfexec mdb -k Loading modules: [ unix genunix specfs dtrace mac cpu.generic uppc pcplusmp rootnex scsi_vhci zfs sockfs ip hook neti sctp arp usba uhci s1394 fctl md lofs sd random fcip fcp cpc crypto logindmux ptm ufs sppp nsmb ipc nfs ] > __urem64::dis __urem64: subl $0xc,%esp __urem64+3: movl %esp,%ecx __urem64+5: movl 0x10(%esp),%eax __urem64+9: movl 0x14(%esp),%edx __urem64+0xd: pushl %ecx __urem64+0xe: pushl 0x20(%esp) __urem64+0x12: pushl 0x20(%esp) __urem64+0x16: call -0x32b <UDivRem> __urem64+0x1b: movl 0xc(%esp),%eax __urem64+0x1f: movl 0x10(%esp),%edx __urem64+0x23: addl $0x18,%esp __urem64+0x26: ret $0x10 > Is it true that for some reason __urem64() code in Solaris 10 not synced with OpenSolaris? And only Sun support will be able to fix this. -- Dmitry Glushenok Jet Infosystems _______________________________________________ opensolaris-code mailing list opensolaris-code@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/opensolaris-code