Compiling transcode

cremes.devlist at mac.com cremes.devlist at mac.com
Thu Apr 26 14:13:42 PDT 2007


[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?

cr




More information about the macports-users mailing list