Alpha Mans Rullgard, Falk Hueffner
ARM Mans Rullgard
BeOS Francois Revol
-i386 Michael Niedermayer
Mac OS X / PowerPC Romain Dolbeau, Guillaume Poirier
Amiga / PowerPC Colin Ward
Linux / PowerPC Luca Barbato
Windows Cygwin Victor Paesa
ADI/Blackfin DSP Marc Hoffman
Sparc Roman Shaposhnik
+x86 Michael Niedermayer
License, see the file COPYING.GPL for details. Their compilation and use
in FFmpeg is optional.
-* The file libavcodec/i386/idct_mmx.c is distributed under the GNU General
+* The file libavcodec/x86/idct_mmx.c is distributed under the GNU General
Public License. It is strictly an optimization and its use is optional.
* The file libavcodec/ac3dec.c is distributed under the GNU General Public
$(SUBDIR)%-test.o: $(SUBDIR)%-test.c
$(CC) $(CFLAGS) -DTEST -c -o $$@ $$^
-$(SUBDIR)i386/%.o: $(SUBDIR)i386/%.asm
+$(SUBDIR)x86/%.o: $(SUBDIR)x86/%.asm
$(YASM) $(YASMFLAGS) -I $$(<D)/ -o $$@ $$<
-$(SUBDIR)i386/%.d: $(SUBDIR)i386/%.asm
+$(SUBDIR)x86/%.d: $(SUBDIR)x86/%.asm
$(YASM) $(YASMFLAGS) -I $$(<D)/ -M -o $$(@:%.d=%.o) $$< > $$@
clean::
libavcodec/alpha \
libavcodec/arm \
libavcodec/bfin \
- libavcodec/i386 \
libavcodec/mlib \
libavcodec/ppc \
libavcodec/sh4 \
libavcodec/sparc \
+ libavcodec/x86 \
libavdevice \
libavfilter \
libavformat \
What to optimize:
-----------------
If you plan to do non-x86 architecture specific optimizations (SIMD normally),
-then take a look in the i386/ directory, as most important functions are
+then take a look in the x86/ directory, as most important functions are
already optimized for MMX.
If you want to do x86 optimizations then you can either try to finetune the
-stuff in the i386 directory or find some other functions in the C source to
+stuff in the x86 directory or find some other functions in the C source to
optimize, but there aren't many left.
revisions of the interesting files (for a web frontend try ViewVC at
http://svn.mplayerhq.hu/ffmpeg/trunk/).
Alternatively, look into the other architecture-specific versions in
-the i386/, ppc/, alpha/ subdirectories. Even if you don't exactly
+the x86/, ppc/, alpha/ subdirectories. Even if you don't exactly
comprehend the instructions, it could help understanding the functions
and how they can be optimized.
OBJS-$(HAVE_W32THREADS) += w32thread.o
# processor-specific code
-MMX-OBJS-$(CONFIG_CAVS_DECODER) += i386/cavsdsp_mmx.o
-MMX-OBJS-$(CONFIG_ENCODERS) += i386/dsputilenc_mmx.o
-MMX-OBJS-$(CONFIG_FLAC_ENCODER) += i386/flacdsp_mmx.o
-MMX-OBJS-$(CONFIG_GPL) += i386/idct_mmx.o
-MMX-OBJS-$(CONFIG_SNOW_DECODER) += i386/snowdsp_mmx.o
-MMX-OBJS-$(CONFIG_THEORA_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VC1_DECODER) += i386/vc1dsp_mmx.o
-MMX-OBJS-$(CONFIG_VP3_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP5_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6A_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6F_DECODER) += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_WMV3_DECODER) += i386/vc1dsp_mmx.o
-MMX-OBJS-$(HAVE_YASM) += i386/dsputil_yasm.o \
- i386/h264_deblock_sse2.o
-
-OBJS-$(HAVE_MMX) += i386/cpuid.o \
- i386/dnxhd_mmx.o \
- i386/dsputil_mmx.o \
- i386/fdct_mmx.o \
- i386/idct_mmx_xvid.o \
- i386/idct_sse2_xvid.o \
- i386/motion_est_mmx.o \
- i386/mpegvideo_mmx.o \
- i386/simple_idct_mmx.o \
+MMX-OBJS-$(CONFIG_CAVS_DECODER) += x86/cavsdsp_mmx.o
+MMX-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc_mmx.o
+MMX-OBJS-$(CONFIG_FLAC_ENCODER) += x86/flacdsp_mmx.o
+MMX-OBJS-$(CONFIG_GPL) += x86/idct_mmx.o
+MMX-OBJS-$(CONFIG_SNOW_DECODER) += x86/snowdsp_mmx.o
+MMX-OBJS-$(CONFIG_THEORA_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_mmx.o
+MMX-OBJS-$(CONFIG_VP3_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_VP5_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_VP6_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_VP6A_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_VP6F_DECODER) += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
+MMX-OBJS-$(CONFIG_WMV3_DECODER) += x86/vc1dsp_mmx.o
+MMX-OBJS-$(HAVE_YASM) += x86/dsputil_yasm.o \
+ x86/h264_deblock_sse2.o \
+
+OBJS-$(HAVE_MMX) += x86/cpuid.o \
+ x86/dnxhd_mmx.o \
+ x86/dsputil_mmx.o \
+ x86/fdct_mmx.o \
+ x86/idct_mmx_xvid.o \
+ x86/idct_sse2_xvid.o \
+ x86/motion_est_mmx.o \
+ x86/mpegvideo_mmx.o \
+ x86/simple_idct_mmx.o \
$(MMX-OBJS-yes)
-OBJS-$(CONFIG_FFT_MMX) += i386/fft_3dn.o \
- i386/fft_3dn2.o \
- i386/fft_mmx.o \
- i386/fft_sse.o \
+OBJS-$(CONFIG_FFT_MMX) += x86/fft_3dn.o \
+ x86/fft_3dn2.o \
+ x86/fft_mmx.o \
+ x86/fft_sse.o \
OBJS-$(ARCH_ALPHA) += alpha/dsputil_alpha.o \
alpha/dsputil_alpha_asm.o \
TESTS = $(addsuffix -test$(EXESUF), cabac dct eval fft h264 rangecoder snow)
TESTS-$(CONFIG_OLDSCALER) += imgresample-test$(EXESUF)
-TESTS-$(ARCH_X86) += i386/cpuid-test$(EXESUF) motion-test$(EXESUF)
+TESTS-$(ARCH_X86) += x86/cpuid-test$(EXESUF) motion-test$(EXESUF)
CLEANFILES = apiexample$(EXESUF)
-DIRS = alpha arm bfin i386 mlib ppc ps2 sh4 sparc
+DIRS = alpha arm bfin mlib ppc ps2 sh4 sparc x86
include $(SUBDIR)../subdir.mak
#include "aandcttab.h"
#include "faandct.h"
#include "faanidct.h"
-#include "i386/idct_xvid.h"
+#include "x86/idct_xvid.h"
#undef printf
#undef random
#include "cabac.h"
#ifdef ARCH_X86
-#include "i386/h264_i386.h"
+#include "x86/h264_i386.h"
#endif
//#undef NDEBUG
#include "colorspace.h"
#ifdef HAVE_MMX
-#include "i386/mmx.h"
-#include "i386/dsputil_mmx.h"
+#include "x86/mmx.h"
+#include "x86/dsputil_mmx.h"
#endif
#define xglue(x, y) x ## y
#ifdef HAVE_MMX
-#include "i386/mmx.h"
+#include "x86/mmx.h"
#define FILTER4(reg) \
{\
#ifdef ARCH_X86_32
-#include "i386/mathops.h"
+#include "x86/mathops.h"
#elif defined(ARCH_ARM)
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_I386_DSPUTIL_MMX_H
-#define AVCODEC_I386_DSPUTIL_MMX_H
+#ifndef AVCODEC_X86_DSPUTIL_MMX_H
+#define AVCODEC_X86_DSPUTIL_MMX_H
#include <stdint.h>
#include "libavcodec/dsputil.h"
void dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx);
-#endif /* AVCODEC_I386_DSPUTIL_MMX_H */
+#endif /* AVCODEC_X86_DSPUTIL_MMX_H */
* @author Michael Niedermayer <michaelni@gmx.at>
*/
-#ifndef AVCODEC_I386_H264_I386_H
-#define AVCODEC_I386_H264_I386_H
+#ifndef AVCODEC_X86_H264_I386_H
+#define AVCODEC_X86_H264_I386_H
#include "libavcodec/cabac.h"
#endif /* defined(ARCH_X86) && defined(HAVE_7REGS) && */
/* defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */
-#endif /* AVCODEC_I386_H264_I386_H */
+#endif /* AVCODEC_X86_H264_I386_H */
* header for Xvid IDCT functions
*/
-#ifndef AVCODEC_I386_IDCT_XVID_H
-#define AVCODEC_I386_IDCT_XVID_H
+#ifndef AVCODEC_X86_IDCT_XVID_H
+#define AVCODEC_X86_IDCT_XVID_H
#include <stdint.h>
void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block);
void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block);
-#endif /* AVCODEC_I386_IDCT_XVID_H */
+#endif /* AVCODEC_X86_IDCT_XVID_H */
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_I386_MATHOPS_H
-#define AVCODEC_I386_MATHOPS_H
+#ifndef AVCODEC_X86_MATHOPS_H
+#define AVCODEC_X86_MATHOPS_H
#define MULL(ra, rb, shift) \
({ int rt, dummy; __asm__ (\
__asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\
rt; })
-#endif /* AVCODEC_I386_MATHOPS_H */
+#endif /* AVCODEC_X86_MATHOPS_H */
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_I386_MMX_H
-#define AVCODEC_I386_MMX_H
+#ifndef AVCODEC_X86_MMX_H
+#define AVCODEC_X86_MMX_H
#warning Everything in this header is deprecated, use plain __asm__()! New code using this header will be rejected.
#define punpckhqdq_r2r(regs,regd) mmx_r2r (punpckhqdq, regs, regd)
-#endif /* AVCODEC_I386_MMX_H */
+#endif /* AVCODEC_X86_MMX_H */
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_I386_VP3DSP_MMX_H
-#define AVCODEC_I386_VP3DSP_MMX_H
+#ifndef AVCODEC_X86_VP3DSP_MMX_H
+#define AVCODEC_X86_VP3DSP_MMX_H
#include <stdint.h>
#include "libavcodec/dsputil.h"
void ff_vp3_v_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
void ff_vp3_h_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
-#endif /* AVCODEC_I386_VP3DSP_MMX_H */
+#endif /* AVCODEC_X86_VP3DSP_MMX_H */
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef AVCODEC_I386_VP3DSP_SSE2_H
-#define AVCODEC_I386_VP3DSP_SSE2_H
+#ifndef AVCODEC_X86_VP3DSP_SSE2_H
+#define AVCODEC_X86_VP3DSP_SSE2_H
#include "libavcodec/dsputil.h"
void ff_vp3_idct_put_sse2(uint8_t *dest, int line_size, DCTELEM *block);
void ff_vp3_idct_add_sse2(uint8_t *dest, int line_size, DCTELEM *block);
-#endif /* AVCODEC_I386_VP3DSP_SSE2_H */
+#endif /* AVCODEC_X86_VP3DSP_SSE2_H */