2
votes

Hey all I'm trying to compile x264 under linux (x64). But it keeps throwing me an error. I've googled around but found nothing. Here's the commandline history:

spin@around:~/x264$ git clone git://git.videolan.org/x264.git
Cloning into x264...
remote: Counting objects: 13539, done.
remote: Compressing objects: 100% (4416/4416), done.
remote: Total 13539 (delta 11005), reused 11225 (delta 9082)
Receiving objects: 100% (13539/13539), 3.29 MiB | 2.79 MiB/s, done.
Resolving deltas: 100% (11005/11005), done.
spin@around:~/x264/x264$ ./configure
Found no assembler
Minimum version is yasm-0.7.0
If you really want to compile without asm, configure with --disable-asm.
spin@around:~/x264/x264$ ./configure --disable-asm
Platform:   X86_64
System:     LINUX
asm:        no
avs:        no
lavf:       no
ffms:       no
gpac:       no
gpl:        yes
thread:     posix
filters:    crop select_every
debug:      no
gprof:      no
PIC:        no
shared:     no
visualize:  no
bit depth:  8

You can run 'make' or 'make fprofiled' now.
spin@around:~/x264/x264$ make
gcc -Wshadow -O3 -ffast-math  -Wall -I. -std=gnu99 -s -fomit-frame-pointer -fno-tree-vectorize   -c -o x264.o x264.c
In file included from common/common.h:864,
                 from x264.c:33:
common/rectangle.h: In function āx264_macroblock_cache_rectā:
common/rectangle.h:84: error: āv4siā undeclared (first use in this function)
common/rectangle.h:84: error: (Each undeclared identifier is reported only once
common/rectangle.h:84: error: for each function it appears in.)
common/rectangle.h:84: error: expected ā;ā before āv16ā
common/rectangle.h:86: error: ā__m128ā undeclared (first use in this function)
common/rectangle.h:86: error: expected ā;ā before āv16ā
common/rectangle.h:87: error: expected ā;ā before āv16ā
common/rectangle.h:89: error: expected ā;ā before āv16ā
common/rectangle.h:90: error: expected ā;ā before āv16ā
make: *** [x264.o] Error 1
spin@around:~/x264/x264$

and here is the file, from line 83 to 91:

#if HAVE_VECTOREXT && defined(__SSE__)
        v4si v16 = {v,v,v,v};

        M128( d+s*0+0 ) = (__m128)v16;
        M128( d+s*1+0 ) = (__m128)v16;
        if( h == 2 ) return;
        M128( d+s*2+0 ) = (__m128)v16;
        M128( d+s*3+0 ) = (__m128)v16;
#else
1

1 Answers

1
votes

v4si is a SSE identifier, which only exists when -msse is passed to gcc. Report a bug upstream.