Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-15693

Qt Crashes on movss (SSE instruction)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: P1: Critical P1: Critical
    • 4.7.2
    • 4.7.1
    • GUI: Painting
    • None
    • Windows XP Embedded running on AMD Geode LX CPU
    • e0aa9897bc2d04054cc65dbe3452bee2ed2eacd8

      Qt crashes when run on an AMD Geode LX CPU. This CPU has MMX and 3DNOW instructions, but does NOT have SSE instructions.

      qdrawhelper.cpp contains incorrect logic that assumes that any CPU with 3dnow instuctions can use the qt_memfill32_sse3dnow function, but since that generates the movss instruction, this is clearly wrong.

      I wrote a simple program to check the output of qDetectCPUFeatures. This is 0x4F (MMX | MMXEXT | MMX3DNOW | MMX3DNOWEXT | CMOV)... ie no SSE support. So this portion of the code is correct. The error seems to come later on in this snipped of code from qdrawhelper.cpp:7763

      #if defined(QT_HAVE_MMXEXT) && defined(QT_HAVE_SSE)
      } else if (features & MMXEXT) {
      qt_memfill32 = qt_memfill32_sse;
      qDrawHelper[QImage::Format_RGB16].bitmapBlit = qt_bitmapblit16_sse;

      1. ifdef QT_HAVE_3DNOW
        if (features & MMX3DNOW) { qt_memfill32 = qt_memfill32_sse3dnow; <- when we have MMX & 3dnow, we are introducing SSE dependancy qDrawHelper[QImage::Format_RGB16].bitmapBlit = qt_bitmapblit16_sse3dnow; }
      2. endif // 3DNOW
        #endif // MMXEXT

        1. backtrace.txt
          12 kB
          Reuben Dowle
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            rodal Samuel Rødal
            reubendowle Reuben Dowle
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes