Compiling transcode
David Liontooth
liontooth at cogweb.net
Thu Apr 26 15:07:56 PDT 2007
cremes.devlist at mac.com wrote:
> [cross-posted to transcode-dev]
>
> On Apr 23, 2007, at 8:15 PM, David Liontooth wrote:
>
>> The latest stable release of transcode, 1.0.3, configures without
>> problems using the current macports packages, but it doesn't build:
>>
>> gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -DLINUX -I.. -Wall
>> -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2
>> -no-cpp-precomp -D_INTL_REDIRECT_MACROS -MT tcmemcpy.lo -MD -MP -MF
>> .deps/tcmemcpy.Tpo -c tcmemcpy.c -fno-common -DPIC -o .libs/tcmemcpy.o
>> /var/tmp//ccMwDlN6.s:43:missing or invalid immediate expression `0b111'
>> taken as 0
>> /var/tmp//ccMwDlN6.s:43:suffix or operands invalid for `and'
>> /var/tmp//ccMwDlN6.s:117:missing or invalid immediate expression `0b11'
>> taken as 0
>> /var/tmp//ccMwDlN6.s:117:suffix or operands invalid for `and'
>> /var/tmp//ccMwDlN6.s:176:missing or invalid immediate expression `0b111'
>> taken as 0
>> /var/tmp//ccMwDlN6.s:176:suffix or operands invalid for `and'
>> /var/tmp//ccMwDlN6.s:199:missing or invalid immediate expression `0b11'
>> taken as 0
>> /var/tmp//ccMwDlN6.s:199:suffix or operands invalid for `and'
>> /var/tmp//ccMwDlN6.s:206:Alignment too large: 15. assumed.
>> /var/tmp//ccMwDlN6.s:263:missing or invalid immediate expression `0b11'
>> taken as 0
>> /var/tmp//ccMwDlN6.s:263:suffix or operands invalid for `and'
>> make[2]: *** [tcmemcpy.lo] Error 1
>> make[1]: *** [all-recursive] Error 1
>> make: *** [all] Error 2
>
> I've looked into this a bit. It's choking on some inline assembly in
> the file ~/aclib/tcmemcpy.c. This file contains functions optimized
> for memcopy on x86 processors. The surrounding lines look like:
>
> # First align destination address to a multiple of 8
> bytes \n\
> mov $8, %%eax # EAX <- (8-dest) &
> 7 \n\
> sub %%edi,
> %%eax \n\
> and $0b111, %%eax # ... which is the number of bytes to
> copy\n\
> lea 0f, %%edx # Use a computed jump--faster than a
> loop\n\
> sub %%eax,
> %%edx \n\
> jmp *%%edx # Execute 0-7
> MOVSB's \n\
>
> I don't know x86 assembly at all, so I'm hoping someone on the list
> can chime in here. It (gcc or gas) bitches about this line:
>
> and $0b111, %%eax # ... which is the number of bytes to
> copy\n\
>
> Is this valid assembly for gcc-4.0.1?
>
> Maybe we are running into a bug or feature disparity with the version
> of gcc we are using (4.0.1). Any suggestions on how to repair this
> error? Since I can successfully compile on PowerPC there must be
> "straight C" implementations of these functions. Any way to
> selectively choose to use them when compiling transcode instead of the
> optimized versions?
There's a previous discussion on what looks like the same code on 26
January 2005, when Andrew Church submitted the aclib patch -- see
http://osdir.com/ml/video.transcode.devel/2005-01/msg00080.html for the
final version. A few days later he added x86-64 assembly for aclib
(which works great).
The configure script outputs,
checking for build architecture... Intel Pentium architecture (IA32)
checking if $CC groks MMX inline assembly... yes
checking for support of 3DNow in assembly code... yes
checking if $CC groks SSE inline assembly... yes
checking if $CC can handle SSE2 inline asm... yes
checking if $CC groks AltiVec inline assembly... no
checking if $CC groks AltiVec C extensions... no
I installed yasm and nasm, both available in macports, and I tried the
suggested workaround "ac_cv_path_NASM=no", but compilation of aclib
still fails on the assembly code:
Making all in aclib
if /bin/sh ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.
-I.. -D_REENTRANT -DLINUX -I.. -Wall -D_LARGEFILE_SOURCE
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -no-cpp-precomp
-D_INTL_REDIRECT_MACROS -MT tcmemcpy.lo -MD -MP -MF
".deps/tcmemcpy.Tpo" -c -o tcmemcpy.lo tcmemcpy.c; \
then mv -f ".deps/tcmemcpy.Tpo" ".deps/tcmemcpy.Plo"; else rm -f
".deps/tcmemcpy.Tpo"; exit 1; fi
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -DLINUX -I.. -Wall
-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g
-O2 -no-cpp-precomp -D_INTL_REDIRECT_MACROS -MT tcmemcpy.lo -MD -MP
-MF .deps/tcmemcpy.Tpo -c tcmemcpy.c -fno-common -DPIC -o
.libs/tcmemcpy.o
/var/tmp//ccMAYFCQ.s:43:missing or invalid immediate expression
`0b111' taken as 0
Looks like the assembly code needs some tweaking for MacIntel x86.
Andrew, contact me if you need a test machine.
Dave
More information about the macports-users
mailing list