All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hongxu Jia <hongxu.jia@windriver.com>
To: <openembedded-core@lists.openembedded.org>
Subject: [RFC YOCTO #5248] core-image-lsb: Why FPU doesn't work correctly on qemux86-64
Date: Mon, 23 Sep 2013 16:55:06 +0800	[thread overview]
Message-ID: <cover.1379488760.git.hongxu.jia@windriver.com> (raw)

*Preparation
1, vim local.conf
...
DISTRO ?= "poky-lsb"
MACHINE ?= "qemux86-64"
...

*Problem
1, Build core-image-lsb
..
bitbake core-image-lsb
..

2, Start qemux86-64, there are 21 LSB tcl test failures on
qemux86-64, you could reproduce it by tcl interpreter:
  1, On qemux86-64's terminal, start tcl interpreter
  root@qemux86-64:~# $ tclsh
  %

  2, Run 'binary scan' to assign ieeeValues(-Subnormal)
  % binary scan \x00\x00\x00\x00\x00\x00\x08\x80 d ieeeValues(-Subnormal) 
  1

  3, Run 'puts' to output ieeeValues(-Subnormal), the result is '0.0'
  % puts $ieeeValues(-Subnormal)
  -0.0

  Expected:
  -1.1125369292536007e-308

*Analysis
1, On the previous environment, add IMAGE_INSTALL_append = " tcl" to
local.conf and build core-image-sato, the result is expected.

2, Trace tcl's source code, you could also reproduce the issue by
compiling and executing the following C codes on core-image-lsb-sdk.

  1) Build core-image-lsb-sdk, and Run qemux86-64.
  2) On target's terminal, create a C source file:
     root@qemux86-64:~# cat >> test.c << EOF
#include <stdio.h>

int main(int argc, char *argv[])
{
  double dd = 0;
  char *p = (char*)&dd;
  p[0] = 0x00;
  p[1] = 0x00;
  p[2] = 0x00;
  p[3] = 0x00;
  p[4] = 0x00;
  p[5] = 0x00;
  p[6] = 0x08;
  p[7] = 0x00;

  if (dd == 0.0)
    printf("Incorrect equal 0.0\n");
  else
    printf("Expected not equal 0.0\n");

  return 0;
}
EOF

  2) Compile test.c
    root@qemux86-64:~# gcc test.c -o test

  3, Execute test
  $ root@qemux86-64:~# ./test
    Incorrect equal 0.0

  Expected:
    Expected not equal 0.0

3, It's about x86-64's FPU: the SSE MXCSR register.
  If you invoke 'feenableexcept(FE_INEXACT);' or
  'feclearexcept(FE_INEXACT);' in the above C test,
  the issue will be fixed. In these two functions,
  the SSE MXCSR register has been handled.

*Solution
Is it necessary to invoke 'feenableexcept(FE_INEXACT);' or
'feclearexcept(FE_INEXACT);' to handle SSE MXCSR register?

Or any good idea about this issue.

Thanks,
Hongxu




-- 
1.8.1.2



             reply	other threads:[~2013-09-23  8:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-23  8:55 Hongxu Jia [this message]
2013-09-23  9:11 ` [RFC YOCTO #5248] core-image-lsb: Why FPU doesn't work correctly on qemux86-64 Hongxu Jia
2013-09-23 15:47   ` Khem Raj

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1379488760.git.hongxu.jia@windriver.com \
    --to=hongxu.jia@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.