Add some rudimentary support for sparc64
authorPhilip Gladstone <philipjsg@users.sourceforge.net>
Tue, 26 Nov 2002 04:29:40 +0000 (04:29 +0000)
committerPhilip Gladstone <philipjsg@users.sourceforge.net>
Tue, 26 Nov 2002 04:29:40 +0000 (04:29 +0000)
Originally committed as revision 1279 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/common.h

index 30493d9..f962eb5 100755 (executable)
--- a/configure
+++ b/configure
@@ -485,6 +485,9 @@ elif test "$cpu" = "armv4l" ; then
 elif test "$cpu" = "alpha" ; then
   echo "TARGET_ARCH_ALPHA=yes" >> config.mak
   echo "#define ARCH_ALPHA 1" >> $TMPH
+elif test "$cpu" = "sparc64" ; then
+  echo "TARGET_ARCH_SPARC64=yes" >> config.mak
+  echo "#define ARCH_SPARC64 1" >> $TMPH
 elif test "$cpu" = "powerpc" ; then
   echo "TARGET_ARCH_POWERPC=yes" >> config.mak
   echo "#define ARCH_POWERPC 1" >> $TMPH
index b657aba..966f1cd 100644 (file)
@@ -248,6 +248,10 @@ typedef struct RL_VLC_ELEM {
     uint8_t run;
 } RL_VLC_ELEM;
 
+#ifdef ARCH_SPARC64
+#define UNALIGNED_STORES_ARE_BAD
+#endif
+
 /* used to avoid missaligned exceptions on some archs (alpha, ...) */
 #ifdef ARCH_X86
 #    define unaligned32(a) (*(UINT32*)(a))
@@ -294,6 +298,14 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value)
     } else {
        bit_buf<<=bit_left;
         bit_buf |= value >> (n - bit_left);
+#ifdef UNALIGNED_STORES_ARE_BAD
+        if (3 & (int) s->buf_ptr) {
+            s->buf_ptr[0] = bit_buf >> 24;
+            s->buf_ptr[1] = bit_buf >> 16;
+            s->buf_ptr[2] = bit_buf >>  8;
+            s->buf_ptr[3] = bit_buf      ;
+        } else
+#endif
         *(UINT32 *)s->buf_ptr = be2me_32(bit_buf);
         //printf("bitbuf = %08x\n", bit_buf);
         s->buf_ptr+=4;