当试图检查gcc的氖指令时如何解决错误的指令`vadd.i16 q0,q0,q0'

时间:2012-02-15 05:32:05

标签: gcc arm neon x264 codesourcery

Checking  gcc supports failed for neon instruction vadd.i16 q0,q0,q0
    test.c

    int main ()
    {
     __asm__("vadd.i16 q0, q0, q0"); return 0;
    }

    arm-linux-androideabi-gcc test.c
    /tmp/ccfc8m0G.s: Assembler messages:
    /tmp/ccfc8m0G.s:24: Error: bad instruction `vadd.i16 q0,q0,q0'

尝试用旗帜-mcpu = cortex-a8 -mfpu = neon但是没有成功

以上代码用于测试gcc对霓虹灯指令的支持。

实际上我正在尝试使用NEON支持ARM平台构建x264运行configure脚本 x264配置日志文件包含

命令行选项:“ - cros-prefix = arm-linux-androideabi-”“ - enable-pic”“ - extra-cflags = -mcpu = cortex-a8”“ - host = arm-linux “

checking whether arm-linux-androideabi-gcc works... yes
checking whether arm-linux-androideabi-gcc supports for( int i = 0; i < 9; i++ ); with -std=gnu99... yes
checking whether arm-linux-androideabi-gcc supports __asm__("rev ip, ip");... yes
checking whether arm-linux-androideabi-gcc supports __asm__("movt r0, #0");... yes
checking whether arm-linux-androideabi-gcc supports __asm__("vadd.i16 q0, q0, q0");... no

arm-linux-androideabi-gcc conftest.c  -Wall -I. -I$(SRCPATH) -mcpu=cortex-a8 -std=gnu99    -lm -o conftest
E:\cygwin\tmp\ccVtVI1i.s: Assembler messages:
E:\cygwin\tmp\ccVtVI1i.s:24: Error: bad instruction `vadd.i16 q0,q0,q0'
--------------------------------------------------
Failed program was:
--------------------------------------------------
int main () { __asm__("vadd.i16 q0, q0, q0"); return 0; }
--------------------------------------------------


config.h contains

#define HAVE_MALLOC_H 1
#define HAVE_ARMV6 1
#define HAVE_ARMV6T2 1
#define ARCH_ARM 1
#define SYS_LINUX 1
#define HAVE_VECTOREXT 1
#define fseek fseeko
#define ftell ftello
#define HAVE_GPL 1
#define HAVE_INTERLACED 1
#define HAVE_ALTIVEC 0
#define HAVE_ALTIVEC_H 0
#define HAVE_MMX 0
#define HAVE_NEON 0
#define HAVE_BEOSTHREAD 0
#define HAVE_POSIXTHREAD 0
#define HAVE_WIN32THREAD 0
#define HAVE_THREAD 0
#define HAVE_LOG2F 0
#define HAVE_VISUALIZE 0
#define HAVE_SWSCALE 0
#define HAVE_LAVF 0
#define HAVE_FFMS 0
#define HAVE_GPAC 0
#define HAVE_GF_MALLOC 0
#define HAVE_AVS 0
#define HAVE_CPU_COUNT 0


Running make command build x264 static lib  based on above config.h which contains HAVE_NEON 0


**Compiler Version**



arm-linux-androideabi-gcc -v
Using built-in specs.
Target: arm-linux-androideabi
Configured with: /tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/configure --prefix=/usr/local/google/digit/repo/opensource/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows --target=arm-linux-androideabi --host=i586-mingw32msvc --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/ndk-digit/build/toolchain/temp-install --with-mpfr=/tmp/ndk-digit/build/toolchain/temp-install --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable
-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-initfini-array --disable-nls --prefix=/usr/local/google/digit/repo/opensource/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows --with-sysroot=/usr/local/google/digit/repo/opensource/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/sysroot --with-binutils-version=2.20.1 --with-mpfr-version=2.4.1 --with
-gmp-version=4.2.4 --with-gcc-version=4.4.3 --with-gdb-version=6.6 --with-arch=armv5te --program-transform-name='s,^,arm-linux-androideabi-,'
Thread model: posix
gcc version 4.4.3 (GCC)    

目标是利用支持氖的ARM处理器来提升x264编码器的性能...

2 个答案:

答案 0 :(得分:0)

我不确定你想要完成什么。你只是想看看gcc是否可以编译氖指令,或者看看有问题的CPU是否支持氖?

无论如何:
我也无法让你的代码工作。谷歌搜索后,似乎gcc无法真正处理内联霓虹灯代码。显然,-mfpu = neon标志被忽略了(如果使用-E标志编译为.s,即使使用-mfpu = neon,也会看到.fpu设置为softvfp)

考虑编写.S或.s文件。像这样:

test.s

    .cpu cortex-a8
    .fpu neon
    .text
    .align  2
    .global f
    .type   f, %function
f:
    vadd.i16        q0, q0, q0
    .size   f, .-f

答案 1 :(得分:0)

对于它的价值,这个指令适用于gcc 4.5.1(CodeSourcery)。

尝试使用这些开关:

-mfpu=neon
-mfloat-abi=softfp
-mcpu=cortex-a8
-march=armv7-a
-mthumb