diff --git a/Makefile b/Makefile deleted file mode 100644 index 5ca91df..0000000 --- a/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -ENCODER_PROGRAM = build/Thorenc -DECODER_PROGRAM = build/Thordec - -CFLAGS += -std=c99 -g -O6 -Wall -pedantic -I common -LDFLAGS = -lm - -ifeq ($(ARCH),neon) - CFLAGS += -mfpu=neon -endif - -ifeq ($(ARCH),ssse3) - CFLAGS += -mssse3 -endif - -ifeq ($(ARCH),sse4) - CFLAGS += -msse4 -endif - - -COMMON_SOURCES = \ - common/common_block.c \ - common/common_frame.c \ - common/transform.c \ - common/intra_prediction.c \ - common/inter_prediction.c \ - common/common_kernels.c \ - common/snr.c \ - common/simd.c - -ENCODER_SOURCES = \ - enc/encode_block.c \ - enc/encode_frame.c \ - enc/mainenc.c \ - enc/putbits.c \ - enc/putvlc.c \ - enc/strings.c \ - enc/write_bits.c \ - enc/enc_kernels.c \ - $(COMMON_SOURCES) - -DECODER_SOURCES = \ - dec/decode_block.c \ - dec/getbits.c \ - dec/getvlc.c \ - dec/maindec.c \ - dec/read_bits.c \ - dec/decode_frame.c \ - $(COMMON_SOURCES) - -ENCODER_OBJECTS = $(ENCODER_SOURCES:.c=.o) -DECODER_OBJECTS = $(DECODER_SOURCES:.c=.o) -OBJS = $(ENCODER_OBJECTS) $(DECODER_OBJECTS) -DEPS = $(OBJS:.o=.d) - - -.PHONY = clean - -all: $(ENCODER_PROGRAM) $(DECODER_PROGRAM) - -$(ENCODER_PROGRAM): $(ENCODER_OBJECTS) - $(CC) -o $@ $(ENCODER_OBJECTS) $(LDFLAGS) - -$(DECODER_PROGRAM): $(DECODER_OBJECTS) - $(CC) -o $@ $(DECODER_OBJECTS) $(LDFLAGS) - - -# Build object files. In addition, track header dependencies. -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) -MM $(CFLAGS) $*.c > $*.d - @mv -f $*.d $*.d.tmp - @sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d - @sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \ - sed -e 's/^ *//' -e 's/$$/:/' >> $*.d - @rm -f $*.d.tmp - -clean: - rm -f $(ENCODER_OBJECTS) $(DECODER_OBJECTS) $(DEPS) - -cleanall: clean - rm -f $(ENCODER_PROGRAM) $(DECODER_PROGRAM) - --include $(DEPS) - diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..545fc8e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,77 @@ +ACLOCAL_AMFLAGS = -Im4 + +CFLAGS += -std=c99 ${SIMD_FLAGS} -g -O6 -Wall -pedantic -I src/common +LDFLAGS = ${LIBM} + +bin_PROGRAMS = thorenc thordec + +common_SOURCES = \ + src/common/common_block.c \ + src/common/common_frame.c \ + src/common/transform.c \ + src/common/intra_prediction.c \ + src/common/inter_prediction.c \ + src/common/common_kernels.c \ + src/common/snr.c \ + src/common/simd.c + +EXTRA_DIST = \ + src/enc/putvlc.h \ + src/enc/strings.h \ + src/enc/encode_block.h \ + src/enc/encode_frame.h \ + src/enc/mainenc.h \ + src/enc/enc_kernels.h \ + src/enc/write_bits.h \ + src/enc/putbits.h \ + src/dec/maindec.h \ + src/dec/read_bits.h \ + src/dec/getvlc.h \ + src/dec/decode_frame.h \ + src/dec/decode_block.h \ + src/dec/getbits.h \ + src/common/snr.h \ + src/common/common_frame.h \ + src/common/intra_prediction.h \ + src/common/transform.h \ + src/common/types.h \ + src/common/simd/v128_intrinsics.h \ + src/common/simd/v64_intrinsics.h \ + src/common/simd/v128_intrinsics_c.h \ + src/common/simd/v128_intrinsics_arm.h \ + src/common/simd/v128_intrinsics_x86.h \ + src/common/simd/v64_intrinsics_arm.h \ + src/common/simd/v64_intrinsics_x86.h \ + src/common/simd/v64_intrinsics_c.h \ + src/common/common_kernels.h \ + src/common/inter_prediction.h \ + src/common/simd.h \ + src/common/common_block.h \ + src/common/global.h + + +thorenc_SOURCES = \ + src/enc/encode_block.c \ + src/enc/encode_frame.c \ + src/enc/mainenc.c \ + src/enc/putbits.c \ + src/enc/putvlc.c \ + src/enc/strings.c \ + src/enc/write_bits.c \ + src/enc/enc_kernels.c \ + $(common_SOURCES) + +thordec_SOURCES = \ + src/dec/decode_block.c \ + src/dec/getbits.c \ + src/dec/getvlc.c \ + src/dec/maindec.c \ + src/dec/read_bits.c \ + src/dec/decode_frame.c \ + $(common_SOURCES) + +dist_doc_DATA = README.md LICENSE \ + config_high_efficiency.txt \ + config_low_complexity.txt \ + config_RA_high_efficiency.txt \ + config_RA_low_complexity.txt diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..39441f7 --- /dev/null +++ b/bootstrap @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +autoreconf --install diff --git a/build/dec/THORdec.vcproj b/build/dec/THORdec.vcproj index 0bde98d..c64194c 100644 --- a/build/dec/THORdec.vcproj +++ b/build/dec/THORdec.vcproj @@ -40,7 +40,7 @@ @@ -234,63 +234,63 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > diff --git a/build/enc/THORenc.vcproj b/build/enc/THORenc.vcproj index 443d1da..785c570 100644 --- a/build/enc/THORenc.vcproj +++ b/build/enc/THORenc.vcproj @@ -40,7 +40,7 @@ @@ -251,75 +251,75 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..a745670 --- /dev/null +++ b/configure.ac @@ -0,0 +1,21 @@ +AC_PREREQ([2.69]) +AC_INIT([thorcodec], [0.0.1], [Cisco Systems]) +AM_INIT_AUTOMAKE([foreign subdir-objects]) +AC_CONFIG_MACRO_DIR([m4]) + +AC_USE_SYSTEM_EXTENSIONS + +AC_PROG_CC +AC_PROG_CC_STDC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +LT_INIT + +AX_EXT + +AC_CHECK_LIB(m,[sqrt,log10],[LIBM="-lm"]) +AC_SUBST(LIBM) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 0000000..ca36397 --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 4 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/m4/ax_ext.m4 b/m4/ax_ext.m4 new file mode 100644 index 0000000..86fb398 --- /dev/null +++ b/m4/ax_ext.m4 @@ -0,0 +1,243 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_ext.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_EXT +# +# DESCRIPTION +# +# Find supported SIMD extensions by requesting cpuid. When an SIMD +# extension is found, the -m"simdextensionname" is added to SIMD_FLAGS if +# compiler supports it. For example, if "sse2" is available, then "-msse2" +# is added to SIMD_FLAGS. +# +# This macro calls: +# +# AC_SUBST(SIMD_FLAGS) +# +# And defines: +# +# HAVE_MMX / HAVE_SSE / HAVE_SSE2 / HAVE_SSE3 / HAVE_SSSE3 / HAVE_SSE4.1 / HAVE_SSE4.2 / HAVE_AVX +# +# LICENSE +# +# Copyright (c) 2007 Christophe Tournayre +# Copyright (c) 2013 Michael Petch +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 13 + +AC_DEFUN([AX_EXT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host_cpu in + powerpc*) + AC_CACHE_CHECK([whether altivec is supported], [ax_cv_have_altivec_ext], + [ + if test `/usr/sbin/sysctl -a 2>/dev/null| grep -c hw.optional.altivec` != 0; then + if test `/usr/sbin/sysctl -n hw.optional.altivec` = 1; then + ax_cv_have_altivec_ext=yes + fi + fi + ]) + + if test "$ax_cv_have_altivec_ext" = yes; then + AC_DEFINE(HAVE_ALTIVEC,,[Support Altivec instructions]) + AX_CHECK_COMPILE_FLAG(-faltivec, SIMD_FLAGS="$SIMD_FLAGS -faltivec", []) + fi + ;; + + + i[[3456]]86*|x86_64*|amd64*) + + AC_REQUIRE([AX_GCC_X86_CPUID]) + AC_REQUIRE([AX_GCC_X86_AVX_XGETBV]) + + AX_GCC_X86_CPUID(0x00000001) + ecx=0 + edx=0 + if test "$ax_cv_gcc_x86_cpuid_0x00000001" != "unknown"; + then + ecx=`echo $ax_cv_gcc_x86_cpuid_0x00000001 | cut -d ":" -f 3` + edx=`echo $ax_cv_gcc_x86_cpuid_0x00000001 | cut -d ":" -f 4` + fi + + AC_CACHE_CHECK([whether mmx is supported], [ax_cv_have_mmx_ext], + [ + ax_cv_have_mmx_ext=no + if test "$((0x$edx>>23&0x01))" = 1; then + ax_cv_have_mmx_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether sse is supported], [ax_cv_have_sse_ext], + [ + ax_cv_have_sse_ext=no + if test "$((0x$edx>>25&0x01))" = 1; then + ax_cv_have_sse_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether sse2 is supported], [ax_cv_have_sse2_ext], + [ + ax_cv_have_sse2_ext=no + if test "$((0x$edx>>26&0x01))" = 1; then + ax_cv_have_sse2_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether sse3 is supported], [ax_cv_have_sse3_ext], + [ + ax_cv_have_sse3_ext=no + if test "$((0x$ecx&0x01))" = 1; then + ax_cv_have_sse3_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether ssse3 is supported], [ax_cv_have_ssse3_ext], + [ + ax_cv_have_ssse3_ext=no + if test "$((0x$ecx>>9&0x01))" = 1; then + ax_cv_have_ssse3_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether sse4.1 is supported], [ax_cv_have_sse41_ext], + [ + ax_cv_have_sse41_ext=no + if test "$((0x$ecx>>19&0x01))" = 1; then + ax_cv_have_sse41_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether sse4.2 is supported], [ax_cv_have_sse42_ext], + [ + ax_cv_have_sse42_ext=no + if test "$((0x$ecx>>20&0x01))" = 1; then + ax_cv_have_sse42_ext=yes + fi + ]) + + AC_CACHE_CHECK([whether avx is supported by processor], [ax_cv_have_avx_cpu_ext], + [ + ax_cv_have_avx_cpu_ext=no + if test "$((0x$ecx>>28&0x01))" = 1; then + ax_cv_have_avx_cpu_ext=yes + fi + ]) + + if test x"$ax_cv_have_avx_cpu_ext" = x"yes"; then + AX_GCC_X86_AVX_XGETBV(0x00000000) + + xgetbv_eax="0" + if test x"$ax_cv_gcc_x86_avx_xgetbv_0x00000000" != x"unknown"; then + xgetbv_eax=`echo $ax_cv_gcc_x86_avx_xgetbv_0x00000000 | cut -d ":" -f 1` + fi + + AC_CACHE_CHECK([whether avx is supported by operating system], [ax_cv_have_avx_ext], + [ + ax_cv_have_avx_ext=no + + if test "$((0x$ecx>>27&0x01))" = 1; then + if test "$((0x$xgetbv_eax&0x6))" = 6; then + ax_cv_have_avx_ext=yes + fi + fi + ]) + if test x"$ax_cv_have_avx_ext" = x"no"; then + AC_MSG_WARN([Your processor supports AVX, but your operating system doesn't]) + fi + fi + + if test "$ax_cv_have_mmx_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-mmmx, ax_cv_support_mmx_ext=yes, []) + if test x"$ax_cv_support_mmx_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -mmmx" + AC_DEFINE(HAVE_MMX,,[Support mmx instructions]) + else + AC_MSG_WARN([Your processor supports mmx instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_sse_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-msse, ax_cv_support_sse_ext=yes, []) + if test x"$ax_cv_support_sse_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -msse" + AC_DEFINE(HAVE_SSE,,[Support SSE (Streaming SIMD Extensions) instructions]) + else + AC_MSG_WARN([Your processor supports sse instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_sse2_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-msse2, ax_cv_support_sse2_ext=yes, []) + if test x"$ax_cv_support_sse2_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -msse2" + AC_DEFINE(HAVE_SSE2,,[Support SSE2 (Streaming SIMD Extensions 2) instructions]) + else + AC_MSG_WARN([Your processor supports sse2 instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_sse3_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-msse3, ax_cv_support_sse3_ext=yes, []) + if test x"$ax_cv_support_sse3_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -msse3" + AC_DEFINE(HAVE_SSE3,,[Support SSE3 (Streaming SIMD Extensions 3) instructions]) + else + AC_MSG_WARN([Your processor supports sse3 instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_ssse3_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-mssse3, ax_cv_support_ssse3_ext=yes, []) + if test x"$ax_cv_support_ssse3_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -mssse3" + AC_DEFINE(HAVE_SSSE3,,[Support SSSE3 (Supplemental Streaming SIMD Extensions 3) instructions]) + else + AC_MSG_WARN([Your processor supports ssse3 instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_sse41_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-msse4.1, ax_cv_support_sse41_ext=yes, []) + if test x"$ax_cv_support_sse41_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -msse4.1" + AC_DEFINE(HAVE_SSE4_1,,[Support SSSE4.1 (Streaming SIMD Extensions 4.1) instructions]) + else + AC_MSG_WARN([Your processor supports sse4.1 instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_sse42_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-msse4.2, ax_cv_support_sse42_ext=yes, []) + if test x"$ax_cv_support_sse42_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -msse4.2" + AC_DEFINE(HAVE_SSE4_2,,[Support SSSE4.2 (Streaming SIMD Extensions 4.2) instructions]) + else + AC_MSG_WARN([Your processor supports sse4.2 instructions but not your compiler, can you try another compiler?]) + fi + fi + + if test "$ax_cv_have_avx_ext" = yes; then + AX_CHECK_COMPILE_FLAG(-mavx, ax_cv_support_avx_ext=yes, []) + if test x"$ax_cv_support_avx_ext" = x"yes"; then + SIMD_FLAGS="$SIMD_FLAGS -mavx" + AC_DEFINE(HAVE_AVX,,[Support AVX (Advanced Vector Extensions) instructions]) + else + AC_MSG_WARN([Your processor supports avx instructions but not your compiler, can you try another compiler?]) + fi + fi + + ;; + esac + + AC_SUBST(SIMD_FLAGS) +]) diff --git a/m4/ax_gcc_x86_avx_xgetbv.m4 b/m4/ax_gcc_x86_avx_xgetbv.m4 new file mode 100644 index 0000000..0624eeb --- /dev/null +++ b/m4/ax_gcc_x86_avx_xgetbv.m4 @@ -0,0 +1,79 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_avx_xgetbv.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_GCC_X86_AVX_XGETBV +# +# DESCRIPTION +# +# On later x86 processors with AVX SIMD support, with gcc or a compiler +# that has a compatible syntax for inline assembly instructions, run a +# small program that executes the xgetbv instruction with input OP. This +# can be used to detect if the OS supports AVX instruction usage. +# +# On output, the values of the eax and edx registers are stored as +# hexadecimal strings as "eax:edx" in the cache variable +# ax_cv_gcc_x86_avx_xgetbv. +# +# If the xgetbv instruction fails (because you are running a +# cross-compiler, or because you are not using gcc, or because you are on +# a processor that doesn't have this instruction), +# ax_cv_gcc_x86_avx_xgetbv_OP is set to the string "unknown". +# +# This macro mainly exists to be used in AX_EXT. +# +# LICENSE +# +# Copyright (c) 2013 Michael Petch +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 1 + +AC_DEFUN([AX_GCC_X86_AVX_XGETBV], +[AC_REQUIRE([AC_PROG_CC]) +AC_LANG_PUSH([C]) +AC_CACHE_CHECK(for x86-AVX xgetbv $1 output, ax_cv_gcc_x86_avx_xgetbv_$1, + [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ + int op = $1, eax, edx; + FILE *f; + /* Opcodes for xgetbv */ + __asm__(".byte 0x0f, 0x01, 0xd0" + : "=a" (eax), "=d" (edx) + : "c" (op)); + f = fopen("conftest_xgetbv", "w"); if (!f) return 1; + fprintf(f, "%x:%x\n", eax, edx); + fclose(f); + return 0; +])], + [ax_cv_gcc_x86_avx_xgetbv_$1=`cat conftest_xgetbv`; rm -f conftest_xgetbv], + [ax_cv_gcc_x86_avx_xgetbv_$1=unknown; rm -f conftest_xgetbv], + [ax_cv_gcc_x86_avx_xgetbv_$1=unknown])]) +AC_LANG_POP([C]) +]) diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4 new file mode 100644 index 0000000..7d46fee --- /dev/null +++ b/m4/ax_gcc_x86_cpuid.m4 @@ -0,0 +1,79 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_gcc_x86_cpuid.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_GCC_X86_CPUID(OP) +# +# DESCRIPTION +# +# On Pentium and later x86 processors, with gcc or a compiler that has a +# compatible syntax for inline assembly instructions, run a small program +# that executes the cpuid instruction with input OP. This can be used to +# detect the CPU type. +# +# On output, the values of the eax, ebx, ecx, and edx registers are stored +# as hexadecimal strings as "eax:ebx:ecx:edx" in the cache variable +# ax_cv_gcc_x86_cpuid_OP. +# +# If the cpuid instruction fails (because you are running a +# cross-compiler, or because you are not using gcc, or because you are on +# a processor that doesn't have this instruction), ax_cv_gcc_x86_cpuid_OP +# is set to the string "unknown". +# +# This macro mainly exists to be used in AX_GCC_ARCHFLAG. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2008 Matteo Frigo +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 7 + +AC_DEFUN([AX_GCC_X86_CPUID], +[AC_REQUIRE([AC_PROG_CC]) +AC_LANG_PUSH([C]) +AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, + [AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [ + int op = $1, eax, ebx, ecx, edx; + FILE *f; + __asm__("cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (op)); + f = fopen("conftest_cpuid", "w"); if (!f) return 1; + fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); + fclose(f); + return 0; +])], + [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], + [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], + [ax_cv_gcc_x86_cpuid_$1=unknown])]) +AC_LANG_POP([C]) +]) diff --git a/common/common_block.c b/src/common/common_block.c similarity index 100% rename from common/common_block.c rename to src/common/common_block.c diff --git a/common/common_block.h b/src/common/common_block.h similarity index 100% rename from common/common_block.h rename to src/common/common_block.h diff --git a/common/common_frame.c b/src/common/common_frame.c similarity index 100% rename from common/common_frame.c rename to src/common/common_frame.c diff --git a/common/common_frame.h b/src/common/common_frame.h similarity index 100% rename from common/common_frame.h rename to src/common/common_frame.h diff --git a/common/common_kernels.c b/src/common/common_kernels.c similarity index 100% rename from common/common_kernels.c rename to src/common/common_kernels.c diff --git a/common/common_kernels.h b/src/common/common_kernels.h similarity index 100% rename from common/common_kernels.h rename to src/common/common_kernels.h diff --git a/common/global.h b/src/common/global.h similarity index 100% rename from common/global.h rename to src/common/global.h diff --git a/common/inter_prediction.c b/src/common/inter_prediction.c similarity index 100% rename from common/inter_prediction.c rename to src/common/inter_prediction.c diff --git a/common/inter_prediction.h b/src/common/inter_prediction.h similarity index 100% rename from common/inter_prediction.h rename to src/common/inter_prediction.h diff --git a/common/intra_prediction.c b/src/common/intra_prediction.c similarity index 100% rename from common/intra_prediction.c rename to src/common/intra_prediction.c diff --git a/common/intra_prediction.h b/src/common/intra_prediction.h similarity index 100% rename from common/intra_prediction.h rename to src/common/intra_prediction.h diff --git a/common/simd.c b/src/common/simd.c similarity index 100% rename from common/simd.c rename to src/common/simd.c diff --git a/common/simd.h b/src/common/simd.h similarity index 100% rename from common/simd.h rename to src/common/simd.h diff --git a/common/simd/v128_intrinsics.h b/src/common/simd/v128_intrinsics.h similarity index 100% rename from common/simd/v128_intrinsics.h rename to src/common/simd/v128_intrinsics.h diff --git a/common/simd/v128_intrinsics_arm.h b/src/common/simd/v128_intrinsics_arm.h similarity index 100% rename from common/simd/v128_intrinsics_arm.h rename to src/common/simd/v128_intrinsics_arm.h diff --git a/common/simd/v128_intrinsics_c.h b/src/common/simd/v128_intrinsics_c.h similarity index 100% rename from common/simd/v128_intrinsics_c.h rename to src/common/simd/v128_intrinsics_c.h diff --git a/common/simd/v128_intrinsics_x86.h b/src/common/simd/v128_intrinsics_x86.h similarity index 100% rename from common/simd/v128_intrinsics_x86.h rename to src/common/simd/v128_intrinsics_x86.h diff --git a/common/simd/v64_intrinsics.h b/src/common/simd/v64_intrinsics.h similarity index 100% rename from common/simd/v64_intrinsics.h rename to src/common/simd/v64_intrinsics.h diff --git a/common/simd/v64_intrinsics_arm.h b/src/common/simd/v64_intrinsics_arm.h similarity index 100% rename from common/simd/v64_intrinsics_arm.h rename to src/common/simd/v64_intrinsics_arm.h diff --git a/common/simd/v64_intrinsics_c.h b/src/common/simd/v64_intrinsics_c.h similarity index 100% rename from common/simd/v64_intrinsics_c.h rename to src/common/simd/v64_intrinsics_c.h diff --git a/common/simd/v64_intrinsics_x86.h b/src/common/simd/v64_intrinsics_x86.h similarity index 100% rename from common/simd/v64_intrinsics_x86.h rename to src/common/simd/v64_intrinsics_x86.h diff --git a/common/snr.c b/src/common/snr.c similarity index 100% rename from common/snr.c rename to src/common/snr.c diff --git a/common/snr.h b/src/common/snr.h similarity index 100% rename from common/snr.h rename to src/common/snr.h diff --git a/common/transform.c b/src/common/transform.c similarity index 100% rename from common/transform.c rename to src/common/transform.c diff --git a/common/transform.h b/src/common/transform.h similarity index 100% rename from common/transform.h rename to src/common/transform.h diff --git a/common/types.h b/src/common/types.h similarity index 100% rename from common/types.h rename to src/common/types.h diff --git a/dec/decode_block.c b/src/dec/decode_block.c similarity index 100% rename from dec/decode_block.c rename to src/dec/decode_block.c diff --git a/dec/decode_block.h b/src/dec/decode_block.h similarity index 100% rename from dec/decode_block.h rename to src/dec/decode_block.h diff --git a/dec/decode_frame.c b/src/dec/decode_frame.c similarity index 100% rename from dec/decode_frame.c rename to src/dec/decode_frame.c diff --git a/dec/decode_frame.h b/src/dec/decode_frame.h similarity index 100% rename from dec/decode_frame.h rename to src/dec/decode_frame.h diff --git a/dec/getbits.c b/src/dec/getbits.c similarity index 100% rename from dec/getbits.c rename to src/dec/getbits.c diff --git a/dec/getbits.h b/src/dec/getbits.h similarity index 100% rename from dec/getbits.h rename to src/dec/getbits.h diff --git a/dec/getvlc.c b/src/dec/getvlc.c similarity index 100% rename from dec/getvlc.c rename to src/dec/getvlc.c diff --git a/dec/getvlc.h b/src/dec/getvlc.h similarity index 100% rename from dec/getvlc.h rename to src/dec/getvlc.h diff --git a/dec/maindec.c b/src/dec/maindec.c similarity index 100% rename from dec/maindec.c rename to src/dec/maindec.c diff --git a/dec/maindec.h b/src/dec/maindec.h similarity index 100% rename from dec/maindec.h rename to src/dec/maindec.h diff --git a/dec/read_bits.c b/src/dec/read_bits.c similarity index 100% rename from dec/read_bits.c rename to src/dec/read_bits.c diff --git a/dec/read_bits.h b/src/dec/read_bits.h similarity index 100% rename from dec/read_bits.h rename to src/dec/read_bits.h diff --git a/enc/enc_kernels.c b/src/enc/enc_kernels.c similarity index 100% rename from enc/enc_kernels.c rename to src/enc/enc_kernels.c diff --git a/enc/enc_kernels.h b/src/enc/enc_kernels.h similarity index 100% rename from enc/enc_kernels.h rename to src/enc/enc_kernels.h diff --git a/enc/encode_block.c b/src/enc/encode_block.c similarity index 100% rename from enc/encode_block.c rename to src/enc/encode_block.c diff --git a/enc/encode_block.h b/src/enc/encode_block.h similarity index 100% rename from enc/encode_block.h rename to src/enc/encode_block.h diff --git a/enc/encode_frame.c b/src/enc/encode_frame.c similarity index 100% rename from enc/encode_frame.c rename to src/enc/encode_frame.c diff --git a/enc/encode_frame.h b/src/enc/encode_frame.h similarity index 100% rename from enc/encode_frame.h rename to src/enc/encode_frame.h diff --git a/enc/mainenc.c b/src/enc/mainenc.c similarity index 100% rename from enc/mainenc.c rename to src/enc/mainenc.c diff --git a/enc/mainenc.h b/src/enc/mainenc.h similarity index 100% rename from enc/mainenc.h rename to src/enc/mainenc.h diff --git a/enc/putbits.c b/src/enc/putbits.c similarity index 100% rename from enc/putbits.c rename to src/enc/putbits.c diff --git a/enc/putbits.h b/src/enc/putbits.h similarity index 100% rename from enc/putbits.h rename to src/enc/putbits.h diff --git a/enc/putvlc.c b/src/enc/putvlc.c similarity index 100% rename from enc/putvlc.c rename to src/enc/putvlc.c diff --git a/enc/putvlc.h b/src/enc/putvlc.h similarity index 100% rename from enc/putvlc.h rename to src/enc/putvlc.h diff --git a/enc/strings.c b/src/enc/strings.c similarity index 100% rename from enc/strings.c rename to src/enc/strings.c diff --git a/enc/strings.h b/src/enc/strings.h similarity index 100% rename from enc/strings.h rename to src/enc/strings.h diff --git a/enc/write_bits.c b/src/enc/write_bits.c similarity index 100% rename from enc/write_bits.c rename to src/enc/write_bits.c diff --git a/enc/write_bits.h b/src/enc/write_bits.h similarity index 100% rename from enc/write_bits.h rename to src/enc/write_bits.h