[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7
From: |
Michael Dickens |
Subject: |
Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7 |
Date: |
Fri, 25 Jan 2013 10:06:51 -0500 |
On Jan 25, 2013, at 1:19 AM, Albert Chun-Chieh Huang <address@hidden> wrote:
> After digging into this issue, I found an answer on MacPorts list, and
> it's related to Apple's ancient assembler(version 1.38). In this post,
> they try to replace Apple /usr/bin/as by clang's assembler.
>
> http://lists.macosforge.org/pipermail/macports-dev/2011-October/016335.html
>
> I tried this approach to compile gnuradio with gcc 4.7, it's still not
> successful. But it seems to be an interesting and possible way -- to use
> clang's assembler to optimize for AVX on MacOSX. GNU binutil on MacOSX
> does not come with GNU assembler, so gcc 4.7 on MacOSX uses the built-in
> GNU assembler, which is very old and does not support AVX. Only clang's
> assembler on MacOSX provides support to AVX instruction set.
Hi Albert - Nice sleuthing! I don't generally read the MacPorts developers'
list emails unless they are addressed to me; hence, that thread slipped through
my reading. It seems like this issue has multiple parts:
1) Does the target compiler's assembler support the "xgetbv" instruction?
2) Does the target CPU support the "xgetbv" instruction?
Here's my "hack" attempt. Add the following code to lib/volk/CMakeLists.txt:132
{{{
if(CPU_IS_x86)
execute_process(COMMAND ${CMAKE_C_COMPILER} -o
${CMAKE_CURRENT_BINARY_DIR}/temp
${CMAKE_CURRENT_SOURCE_DIR}/test_xgetbv.c
OUTPUT_QUIET ERROR_QUIET
RESULT_VARIABLE avx_compile_result)
if(NOT ${avx_compile_result} EQUAL 0)
OVERRULE_ARCH(avx "Compiler missing xgetbv")
else()
message(STATUS "Executing temp")
execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/temp
OUTPUT_QUIET ERROR_QUIET
RESULT_VARIABLE avx_exe_result)
if(NOT ${avx_exe_result} EQUAL 0)
OVERRULE_ARCH(avx "CPU missing xgetbv")
endif()
endif()
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/temp)
endif()
}}}
and add the file lib/volk/test_xgetbv.c :
{{{
static inline unsigned long long _xgetbv(unsigned int index) {
unsigned int eax, edx;
__asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index));
return ((unsigned long long)edx << 32) | eax;
}
int main (void) {
(void) _xgetbv(0);
return (0);
}
}}}
I tried to do this solely in cmake using "file(WRITE …)", but it never wrote
the file (latest cmake, btw). Hence, using a separate file for the test.
On my system, this test result in cmake output "Compiler missing xgetbv,
Overruled arch avx" which is as desired. If I switch the __asm__ line to
instead read:
{{{
__asm__ (".byte 0x0f, 0x01, 0xd0" : "=a"(eax), "=d"(edx) : "c"(index));
}}}
then this test results in "CPU missing xgetbv, Overruled arch avx", which is
again as desired. It would also be good for someone to test this on a system
which -does- support xgetbv to make sure it works successfully.
I'll let the VOLK-powers-that-be determine if this test makes any sense to
include, or something like it, but IMHO it's wiser to actually -test- for a
feature when reasonably possible rather than assume it based on standard
information such as program version. :) - MLD
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, (continued)
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Tom Rondeau, 2013/01/23
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Michael Dickens, 2013/01/23
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Tom Rondeau, 2013/01/23
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Ed Criscuolo, 2013/01/25
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Michael Dickens, 2013/01/25
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Albert Chun-Chieh Huang, 2013/01/24
- [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/24
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Nick Foster, 2013/01/24
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/24
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Albert Chun-Chieh Huang, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7,
Michael Dickens <=
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Nick Foster, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Tom Rondeau, 2013/01/25
- Re: [Discuss-gnuradio] Volk build error using MacPorts GCC 4.7, Michael Dickens, 2013/01/25
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Michael Dickens, 2013/01/23
- Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Michael Dickens, 2013/01/28
Re: [Discuss-gnuradio] GNU Radio release 3.6.3 available for download, Brian Cuthie, 2013/01/16