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>