Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 May 2011 20:14:49 GMT
From:      Ivan Klymenko <fidaj@ukr.net>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/157016: [patch] audio/soundtouch remove broken status for amd64 arch
Message-ID:  <201105132014.p4DKEnCc082590@red.freebsd.org>
Resent-Message-ID: <201105132020.p4DKK8Mq093308@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         157016
>Category:       ports
>Synopsis:       [patch] audio/soundtouch remove broken status for amd64 arch
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri May 13 20:20:08 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Ivan Klymenko
>Release:        FreeBSD 9.0-CURRENT amd64
>Organization:
individual
>Environment:
>Description:
This patch allows you to remove the error:

  {standard input}: Assembler messages:
  {standard input}:28: Error: suffix or operands invalid for `pop'
  {standard input}:31: Error: suffix or operands invalid for `push'

>How-To-Repeat:

>Fix:
create patch file audio/soundtouch/files/patch-cpu_detect_x86_gcc.cpp


--- ./source/SoundTouch/cpu_detect_x86_gcc.cpp.orig	2009-01-25 18:32:53.000000000 +0200
+++ ./source/SoundTouch/cpu_detect_x86_gcc.cpp	2011-05-13 23:03:42.000000000 +0300
@@ -79,6 +79,11 @@
 

 #else

     uint res = 0;

+#ifdef __x86_64__
+    int64_t edx, eax, ecx;
+#else
+    int edx, eax, ecx;
+#endif
 

     if (_dwDisabledISA == 0xffffffff) return 0;

 

@@ -86,42 +91,55 @@
         "\n\txor     %%esi, %%esi"       // clear %%esi = result register

         // check if 'cpuid' instructions is available by toggling eflags bit 21

 

+#ifdef __x86_64__
+
         "\n\tpushf"                      // save eflags to stack

-        "\n\tpop     %%eax"              // load eax from stack (with eflags)

-        "\n\tmovl    %%eax, %%ecx"       // save the original eflags values to ecx

-        "\n\txor     $0x00200000, %%eax" // toggle bit 21

-        "\n\tpush    %%eax"              // store toggled eflags to stack

+        "\n\tpop     %2"              // load eax from stack (with eflags)

+        "\n\tmov    %2, %3"       // save the original eflags values to ecx

+        "\n\txor     $0x00200000, %2" // toggle bit 21

+        "\n\tpush    %2"              // store toggled eflags to stack

         "\n\tpopf"                       // load eflags from stack

         "\n\tpushf"                      // save updated eflags to stack

-        "\n\tpop     %%eax"              // load from stack

-        "\n\txor     %%edx, %%edx"       // clear edx for defaulting no mmx

-        "\n\tcmp     %%ecx, %%eax"       // compare to original eflags values

+        "\n\tpop     %2"              // load from stack

+#else
+
+        "\n\tpushf"                      // save eflags to stack

+        "\n\tpopl     %2"              // load eax from stack (with eflags)

+        "\n\tmovl    %2, %3"       // save the original eflags values to ecx

+        "\n\txor     $0x00200000, %2" // toggle bit 21

+        "\n\tpush    %2"              // store toggled eflags to stack

+        "\n\tpopf"                       // load eflags from stack

+        "\n\tpushf"                      // save updated eflags to stack

+        "\n\tpopl     %2"              // load from stack

+#endif
+        "\n\txor     %1, %1"       // clear edx for defaulting no mmx

+        "\n\tcmp     %3, %2"       // compare to original eflags values

         "\n\tjz      end"                // jumps to 'end' if cpuid not present

 

         // cpuid instruction available, test for presence of mmx instructions

 

-        "\n\tmovl    $1, %%eax"

+        "\n\tmov    $1, %2"

         "\n\tcpuid"

-//        movl       $0x00800000, %edx   // force enable MMX

-        "\n\ttest    $0x00800000, %%edx"

+//        movl       $0x00800000, %1   // force enable MMX

+        "\n\ttest    $0x00800000, %1"

         "\n\tjz      end"                // branch if MMX not available

 

         "\n\tor      $0x01, %%esi"       // otherwise add MMX support bit

 

-        "\n\ttest    $0x02000000, %%edx"

+        "\n\ttest    $0x02000000, %1"

         "\n\tjz      test3DNow"          // branch if SSE not available

 

         "\n\tor      $0x08, %%esi"       // otherwise add SSE support bit

 

     "\n\ttest3DNow:"

         // test for precense of AMD extensions

-        "\n\tmov     $0x80000000, %%eax"

+        "\n\tmov     $0x80000000, %2"

         "\n\tcpuid"

         "\n\tcmp     $0x80000000, %%eax"

         "\n\tjbe     end"                 // branch if no AMD extensions detected

 

         // test for precense of 3DNow! extension

-        "\n\tmov     $0x80000001, %%eax"

+        "\n\tmov     $0x80000001, %2"

         "\n\tcpuid"

         "\n\ttest    $0x80000000, %%edx"

         "\n\tjz      end"                  // branch if 3DNow! not detected

@@ -132,9 +150,9 @@
 

         "\n\tmov     %%esi, %0"

 

-      : "=r" (res)

+      : "=r" (res), "=d" (edx), "=a" (eax), "=c" (ecx)
       : /* no inputs */

-      : "%edx", "%eax", "%ecx", "%esi" );

+      : "%esi");

       

     return res & ~_dwDisabledISA;

 #endif



>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201105132014.p4DKEnCc082590>