mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
f2b6a8b7fe
--HG-- rename : modules/libfishsound/AUTHORS => media/libfishsound/AUTHORS rename : modules/libfishsound/COPYING => media/libfishsound/COPYING rename : modules/libfishsound/ChangeLog => media/libfishsound/ChangeLog rename : modules/libfishsound/Makefile.in => media/libfishsound/Makefile.in rename : modules/libfishsound/README => media/libfishsound/README rename : modules/libfishsound/README_MOZILLA => media/libfishsound/README_MOZILLA rename : modules/libfishsound/include/Makefile.in => media/libfishsound/include/Makefile.in rename : modules/libfishsound/include/fishsound/Makefile.in => media/libfishsound/include/fishsound/Makefile.in rename : modules/libfishsound/include/fishsound/comments.h => media/libfishsound/include/fishsound/comments.h rename : modules/libfishsound/include/fishsound/config.h => media/libfishsound/include/fishsound/config.h rename : modules/libfishsound/include/fishsound/constants.h => media/libfishsound/include/fishsound/constants.h rename : modules/libfishsound/include/fishsound/decode.h => media/libfishsound/include/fishsound/decode.h rename : modules/libfishsound/include/fishsound/deprecated.h => media/libfishsound/include/fishsound/deprecated.h rename : modules/libfishsound/include/fishsound/encode.h => media/libfishsound/include/fishsound/encode.h rename : modules/libfishsound/include/fishsound/fishsound.h => media/libfishsound/include/fishsound/fishsound.h rename : modules/libfishsound/src/Makefile.in => media/libfishsound/src/Makefile.in rename : modules/libfishsound/src/libfishsound/Makefile.in => media/libfishsound/src/libfishsound/Makefile.in rename : modules/libfishsound/src/libfishsound/config.h => media/libfishsound/src/libfishsound/config.h rename : modules/libfishsound/src/libfishsound/convert.h => media/libfishsound/src/libfishsound/convert.h rename : modules/libfishsound/src/libfishsound/convert_c.h => media/libfishsound/src/libfishsound/convert_c.h rename : modules/libfishsound/src/libfishsound/convert_oil.h => media/libfishsound/src/libfishsound/convert_oil.h rename : modules/libfishsound/src/libfishsound/fishsound.c => media/libfishsound/src/libfishsound/fishsound.c rename : modules/libfishsound/src/libfishsound/fishsound_comments.c => media/libfishsound/src/libfishsound/fishsound_comments.c rename : modules/libfishsound/src/libfishsound/fishsound_decode.c => media/libfishsound/src/libfishsound/fishsound_decode.c rename : modules/libfishsound/src/libfishsound/fishsound_encode.c => media/libfishsound/src/libfishsound/fishsound_encode.c rename : modules/libfishsound/src/libfishsound/fishsound_flac.c => media/libfishsound/src/libfishsound/fishsound_flac.c rename : modules/libfishsound/src/libfishsound/fishsound_speex.c => media/libfishsound/src/libfishsound/fishsound_speex.c rename : modules/libfishsound/src/libfishsound/fishsound_vorbis.c => media/libfishsound/src/libfishsound/fishsound_vorbis.c rename : modules/libfishsound/src/libfishsound/fs_compat.h => media/libfishsound/src/libfishsound/fs_compat.h rename : modules/libfishsound/src/libfishsound/fs_vector.c => media/libfishsound/src/libfishsound/fs_vector.c rename : modules/libfishsound/src/libfishsound/fs_vector.h => media/libfishsound/src/libfishsound/fs_vector.h rename : modules/libfishsound/src/libfishsound/private.h => media/libfishsound/src/libfishsound/private.h rename : modules/libfishsound/update.sh => media/libfishsound/update.sh rename : modules/libogg/AUTHORS => media/libogg/AUTHORS rename : modules/libogg/CHANGES => media/libogg/CHANGES rename : modules/libogg/COPYING => media/libogg/COPYING rename : modules/libogg/Makefile.in => media/libogg/Makefile.in rename : modules/libogg/README => media/libogg/README rename : modules/libogg/README_MOZILLA => media/libogg/README_MOZILLA rename : modules/libogg/include/Makefile.in => media/libogg/include/Makefile.in rename : modules/libogg/include/ogg/Makefile.in => media/libogg/include/ogg/Makefile.in rename : modules/libogg/include/ogg/config_types.h => media/libogg/include/ogg/config_types.h rename : modules/libogg/include/ogg/ogg.h => media/libogg/include/ogg/ogg.h rename : modules/libogg/include/ogg/os_types.h => media/libogg/include/ogg/os_types.h rename : modules/libogg/src/Makefile.in => media/libogg/src/Makefile.in rename : modules/libogg/src/bitwise.c => media/libogg/src/bitwise.c rename : modules/libogg/src/framing.c => media/libogg/src/framing.c rename : modules/libogg/src/ogg_bitwise.c => media/libogg/src/ogg_bitwise.c rename : modules/libogg/src/ogg_framing.c => media/libogg/src/ogg_framing.c rename : modules/libogg/update.sh => media/libogg/update.sh rename : modules/liboggplay/Makefile.in => media/liboggplay/Makefile.in rename : modules/liboggplay/README => media/liboggplay/README rename : modules/liboggplay/README_MOZILLA => media/liboggplay/README_MOZILLA rename : modules/liboggplay/include/Makefile.in => media/liboggplay/include/Makefile.in rename : modules/liboggplay/include/oggplay/Makefile.in => media/liboggplay/include/oggplay/Makefile.in rename : modules/liboggplay/include/oggplay/config_win32.h => media/liboggplay/include/oggplay/config_win32.h rename : modules/liboggplay/include/oggplay/oggplay.h => media/liboggplay/include/oggplay/oggplay.h rename : modules/liboggplay/include/oggplay/oggplay_callback_info.h => media/liboggplay/include/oggplay/oggplay_callback_info.h rename : modules/liboggplay/include/oggplay/oggplay_enums.h => media/liboggplay/include/oggplay/oggplay_enums.h rename : modules/liboggplay/include/oggplay/oggplay_query.h => media/liboggplay/include/oggplay/oggplay_query.h rename : modules/liboggplay/include/oggplay/oggplay_reader.h => media/liboggplay/include/oggplay/oggplay_reader.h rename : modules/liboggplay/include/oggplay/oggplay_seek.h => media/liboggplay/include/oggplay/oggplay_seek.h rename : modules/liboggplay/include/oggplay/oggplay_tools.h => media/liboggplay/include/oggplay/oggplay_tools.h rename : modules/liboggplay/src/Makefile.in => media/liboggplay/src/Makefile.in rename : modules/liboggplay/src/liboggplay/Makefile.in => media/liboggplay/src/liboggplay/Makefile.in rename : modules/liboggplay/src/liboggplay/config.h => media/liboggplay/src/liboggplay/config.h rename : modules/liboggplay/src/liboggplay/oggplay.c => media/liboggplay/src/liboggplay/oggplay.c rename : modules/liboggplay/src/liboggplay/oggplay_buffer.c => media/liboggplay/src/liboggplay/oggplay_buffer.c rename : modules/liboggplay/src/liboggplay/oggplay_buffer.h => media/liboggplay/src/liboggplay/oggplay_buffer.h rename : modules/liboggplay/src/liboggplay/oggplay_callback.c => media/liboggplay/src/liboggplay/oggplay_callback.c rename : modules/liboggplay/src/liboggplay/oggplay_callback.h => media/liboggplay/src/liboggplay/oggplay_callback.h rename : modules/liboggplay/src/liboggplay/oggplay_callback_info.c => media/liboggplay/src/liboggplay/oggplay_callback_info.c rename : modules/liboggplay/src/liboggplay/oggplay_data.c => media/liboggplay/src/liboggplay/oggplay_data.c rename : modules/liboggplay/src/liboggplay/oggplay_data.h => media/liboggplay/src/liboggplay/oggplay_data.h rename : modules/liboggplay/src/liboggplay/oggplay_file_reader.c => media/liboggplay/src/liboggplay/oggplay_file_reader.c rename : modules/liboggplay/src/liboggplay/oggplay_file_reader.h => media/liboggplay/src/liboggplay/oggplay_file_reader.h rename : modules/liboggplay/src/liboggplay/oggplay_private.h => media/liboggplay/src/liboggplay/oggplay_private.h rename : modules/liboggplay/src/liboggplay/oggplay_query.c => media/liboggplay/src/liboggplay/oggplay_query.c rename : modules/liboggplay/src/liboggplay/oggplay_seek.c => media/liboggplay/src/liboggplay/oggplay_seek.c rename : modules/liboggplay/src/liboggplay/oggplay_tcp_reader.c => media/liboggplay/src/liboggplay/oggplay_tcp_reader.c rename : modules/liboggplay/src/liboggplay/oggplay_tcp_reader.h => media/liboggplay/src/liboggplay/oggplay_tcp_reader.h rename : modules/liboggplay/src/liboggplay/oggplay_tools.c => media/liboggplay/src/liboggplay/oggplay_tools.c rename : modules/liboggplay/src/liboggplay/oggplay_yuv2rgb.c => media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c rename : modules/liboggplay/src/liboggplay/std_semaphore.h => media/liboggplay/src/liboggplay/std_semaphore.h rename : modules/liboggplay/update.sh => media/liboggplay/update.sh rename : modules/liboggplay_audio/Makefile.in => media/liboggplay_audio/Makefile.in rename : modules/liboggplay_audio/README_MOZILLA => media/liboggplay_audio/README_MOZILLA rename : modules/liboggplay_audio/sydney_audio.h => media/liboggplay_audio/sydney_audio.h rename : modules/liboggplay_audio/sydney_audio_alsa.c => media/liboggplay_audio/sydney_audio_alsa.c rename : modules/liboggplay_audio/sydney_audio_mac.c => media/liboggplay_audio/sydney_audio_mac.c rename : modules/liboggplay_audio/sydney_audio_oss.c => media/liboggplay_audio/sydney_audio_oss.c rename : modules/liboggplay_audio/sydney_audio_waveapi.c => media/liboggplay_audio/sydney_audio_waveapi.c rename : modules/liboggplay_audio/update.sh => media/liboggplay_audio/update.sh rename : modules/liboggz/AUTHORS => media/liboggz/AUTHORS rename : modules/liboggz/COPYING => media/liboggz/COPYING rename : modules/liboggz/ChangeLog => media/liboggz/ChangeLog rename : modules/liboggz/Makefile.in => media/liboggz/Makefile.in rename : modules/liboggz/README => media/liboggz/README rename : modules/liboggz/README_MOZILLA => media/liboggz/README_MOZILLA rename : modules/liboggz/include/Makefile.in => media/liboggz/include/Makefile.in rename : modules/liboggz/include/oggz/Makefile.in => media/liboggz/include/oggz/Makefile.in rename : modules/liboggz/include/oggz/config.h => media/liboggz/include/oggz/config.h rename : modules/liboggz/include/oggz/config_win32.h => media/liboggz/include/oggz/config_win32.h rename : modules/liboggz/include/oggz/oggz.h => media/liboggz/include/oggz/oggz.h rename : modules/liboggz/include/oggz/oggz_comments.h => media/liboggz/include/oggz/oggz_comments.h rename : modules/liboggz/include/oggz/oggz_constants.h => media/liboggz/include/oggz/oggz_constants.h rename : modules/liboggz/include/oggz/oggz_deprecated.h => media/liboggz/include/oggz/oggz_deprecated.h rename : modules/liboggz/include/oggz/oggz_io.h => media/liboggz/include/oggz/oggz_io.h rename : modules/liboggz/include/oggz/oggz_off_t.h => media/liboggz/include/oggz/oggz_off_t.h rename : modules/liboggz/include/oggz/oggz_off_t_generated.h => media/liboggz/include/oggz/oggz_off_t_generated.h rename : modules/liboggz/include/oggz/oggz_read.h => media/liboggz/include/oggz/oggz_read.h rename : modules/liboggz/include/oggz/oggz_seek.h => media/liboggz/include/oggz/oggz_seek.h rename : modules/liboggz/include/oggz/oggz_stream.h => media/liboggz/include/oggz/oggz_stream.h rename : modules/liboggz/include/oggz/oggz_table.h => media/liboggz/include/oggz/oggz_table.h rename : modules/liboggz/include/oggz/oggz_write.h => media/liboggz/include/oggz/oggz_write.h rename : modules/liboggz/src/Makefile.in => media/liboggz/src/Makefile.in rename : modules/liboggz/src/liboggz/Makefile.in => media/liboggz/src/liboggz/Makefile.in rename : modules/liboggz/src/liboggz/metric_internal.c => media/liboggz/src/liboggz/metric_internal.c rename : modules/liboggz/src/liboggz/oggz.c => media/liboggz/src/liboggz/oggz.c rename : modules/liboggz/src/liboggz/oggz_auto.c => media/liboggz/src/liboggz/oggz_auto.c rename : modules/liboggz/src/liboggz/oggz_auto.h => media/liboggz/src/liboggz/oggz_auto.h rename : modules/liboggz/src/liboggz/oggz_byteorder.h => media/liboggz/src/liboggz/oggz_byteorder.h rename : modules/liboggz/src/liboggz/oggz_comments.c => media/liboggz/src/liboggz/oggz_comments.c rename : modules/liboggz/src/liboggz/oggz_compat.h => media/liboggz/src/liboggz/oggz_compat.h rename : modules/liboggz/src/liboggz/oggz_dlist.c => media/liboggz/src/liboggz/oggz_dlist.c rename : modules/liboggz/src/liboggz/oggz_dlist.h => media/liboggz/src/liboggz/oggz_dlist.h rename : modules/liboggz/src/liboggz/oggz_io.c => media/liboggz/src/liboggz/oggz_io.c rename : modules/liboggz/src/liboggz/oggz_macros.h => media/liboggz/src/liboggz/oggz_macros.h rename : modules/liboggz/src/liboggz/oggz_private.h => media/liboggz/src/liboggz/oggz_private.h rename : modules/liboggz/src/liboggz/oggz_read.c => media/liboggz/src/liboggz/oggz_read.c rename : modules/liboggz/src/liboggz/oggz_seek.c => media/liboggz/src/liboggz/oggz_seek.c rename : modules/liboggz/src/liboggz/oggz_stream.c => media/liboggz/src/liboggz/oggz_stream.c rename : modules/liboggz/src/liboggz/oggz_stream.h => media/liboggz/src/liboggz/oggz_stream.h rename : modules/liboggz/src/liboggz/oggz_stream_private.h => media/liboggz/src/liboggz/oggz_stream_private.h rename : modules/liboggz/src/liboggz/oggz_table.c => media/liboggz/src/liboggz/oggz_table.c rename : modules/liboggz/src/liboggz/oggz_vector.c => media/liboggz/src/liboggz/oggz_vector.c rename : modules/liboggz/src/liboggz/oggz_vector.h => media/liboggz/src/liboggz/oggz_vector.h rename : modules/liboggz/src/liboggz/oggz_write.c => media/liboggz/src/liboggz/oggz_write.c rename : modules/liboggz/update.sh => media/liboggz/update.sh rename : modules/libtheora/AUTHORS => media/libtheora/AUTHORS rename : modules/libtheora/CHANGES => media/libtheora/CHANGES rename : modules/libtheora/COPYING => media/libtheora/COPYING rename : modules/libtheora/LICENSE => media/libtheora/LICENSE rename : modules/libtheora/Makefile.in => media/libtheora/Makefile.in rename : modules/libtheora/README => media/libtheora/README rename : modules/libtheora/README_MOZILLA => media/libtheora/README_MOZILLA rename : modules/libtheora/changeset_r15144.diff => media/libtheora/changeset_r15144.diff rename : modules/libtheora/include/Makefile.in => media/libtheora/include/Makefile.in rename : modules/libtheora/include/theora/Makefile.in => media/libtheora/include/theora/Makefile.in rename : modules/libtheora/include/theora/codec.h => media/libtheora/include/theora/codec.h rename : modules/libtheora/include/theora/config.h => media/libtheora/include/theora/config.h rename : modules/libtheora/include/theora/theora.h => media/libtheora/include/theora/theora.h rename : modules/libtheora/include/theora/theoradec.h => media/libtheora/include/theora/theoradec.h rename : modules/libtheora/lib/Makefile.in => media/libtheora/lib/Makefile.in rename : modules/libtheora/lib/config.h => media/libtheora/lib/config.h rename : modules/libtheora/lib/cpu.c => media/libtheora/lib/cpu.c rename : modules/libtheora/lib/cpu.h => media/libtheora/lib/cpu.h rename : modules/libtheora/lib/dec/apiwrapper.c => media/libtheora/lib/dec/apiwrapper.c rename : modules/libtheora/lib/dec/apiwrapper.h => media/libtheora/lib/dec/apiwrapper.h rename : modules/libtheora/lib/dec/bitwise.c => media/libtheora/lib/dec/bitwise.c rename : modules/libtheora/lib/dec/bitwise.h => media/libtheora/lib/dec/bitwise.h rename : modules/libtheora/lib/dec/dct.h => media/libtheora/lib/dec/dct.h rename : modules/libtheora/lib/dec/decapiwrapper.c => media/libtheora/lib/dec/decapiwrapper.c rename : modules/libtheora/lib/dec/decinfo.c => media/libtheora/lib/dec/decinfo.c rename : modules/libtheora/lib/dec/decint.h => media/libtheora/lib/dec/decint.h rename : modules/libtheora/lib/dec/decode.c => media/libtheora/lib/dec/decode.c rename : modules/libtheora/lib/dec/dequant.c => media/libtheora/lib/dec/dequant.c rename : modules/libtheora/lib/dec/dequant.h => media/libtheora/lib/dec/dequant.h rename : modules/libtheora/lib/dec/enquant.h => media/libtheora/lib/dec/enquant.h rename : modules/libtheora/lib/dec/fragment.c => media/libtheora/lib/dec/fragment.c rename : modules/libtheora/lib/dec/huffdec.c => media/libtheora/lib/dec/huffdec.c rename : modules/libtheora/lib/dec/huffdec.h => media/libtheora/lib/dec/huffdec.h rename : modules/libtheora/lib/dec/huffman.h => media/libtheora/lib/dec/huffman.h rename : modules/libtheora/lib/dec/idct.c => media/libtheora/lib/dec/idct.c rename : modules/libtheora/lib/dec/idct.h => media/libtheora/lib/dec/idct.h rename : modules/libtheora/lib/dec/info.c => media/libtheora/lib/dec/info.c rename : modules/libtheora/lib/dec/internal.c => media/libtheora/lib/dec/internal.c rename : modules/libtheora/lib/dec/ocintrin.h => media/libtheora/lib/dec/ocintrin.h rename : modules/libtheora/lib/dec/quant.c => media/libtheora/lib/dec/quant.c rename : modules/libtheora/lib/dec/quant.h => media/libtheora/lib/dec/quant.h rename : modules/libtheora/lib/dec/state.c => media/libtheora/lib/dec/state.c rename : modules/libtheora/lib/dec/x86/mmxfrag.c => media/libtheora/lib/dec/x86/mmxfrag.c rename : modules/libtheora/lib/dec/x86/mmxidct.c => media/libtheora/lib/dec/x86/mmxidct.c rename : modules/libtheora/lib/dec/x86/mmxstate.c => media/libtheora/lib/dec/x86/mmxstate.c rename : modules/libtheora/lib/dec/x86/x86int.h => media/libtheora/lib/dec/x86/x86int.h rename : modules/libtheora/lib/dec/x86/x86state.c => media/libtheora/lib/dec/x86/x86state.c rename : modules/libtheora/lib/internal.h => media/libtheora/lib/internal.h rename : modules/libtheora/update.sh => media/libtheora/update.sh rename : modules/libvorbis/AUTHORS => media/libvorbis/AUTHORS rename : modules/libvorbis/COPYING => media/libvorbis/COPYING rename : modules/libvorbis/Makefile.in => media/libvorbis/Makefile.in rename : modules/libvorbis/README => media/libvorbis/README rename : modules/libvorbis/README_MOZILLA => media/libvorbis/README_MOZILLA rename : modules/libvorbis/include/Makefile.in => media/libvorbis/include/Makefile.in rename : modules/libvorbis/include/vorbis/Makefile.in => media/libvorbis/include/vorbis/Makefile.in rename : modules/libvorbis/include/vorbis/codec.h => media/libvorbis/include/vorbis/codec.h rename : modules/libvorbis/lib/Makefile.in => media/libvorbis/lib/Makefile.in rename : modules/libvorbis/lib/backends.h => media/libvorbis/lib/backends.h rename : modules/libvorbis/lib/bitrate.h => media/libvorbis/lib/bitrate.h rename : modules/libvorbis/lib/codebook.h => media/libvorbis/lib/codebook.h rename : modules/libvorbis/lib/codec_internal.h => media/libvorbis/lib/codec_internal.h rename : modules/libvorbis/lib/envelope.h => media/libvorbis/lib/envelope.h rename : modules/libvorbis/lib/highlevel.h => media/libvorbis/lib/highlevel.h rename : modules/libvorbis/lib/lookup.h => media/libvorbis/lib/lookup.h rename : modules/libvorbis/lib/lookup_data.h => media/libvorbis/lib/lookup_data.h rename : modules/libvorbis/lib/lpc.h => media/libvorbis/lib/lpc.h rename : modules/libvorbis/lib/lsp.h => media/libvorbis/lib/lsp.h rename : modules/libvorbis/lib/masking.h => media/libvorbis/lib/masking.h rename : modules/libvorbis/lib/mdct.h => media/libvorbis/lib/mdct.h rename : modules/libvorbis/lib/misc.h => media/libvorbis/lib/misc.h rename : modules/libvorbis/lib/os.h => media/libvorbis/lib/os.h rename : modules/libvorbis/lib/psy.h => media/libvorbis/lib/psy.h rename : modules/libvorbis/lib/registry.h => media/libvorbis/lib/registry.h rename : modules/libvorbis/lib/scales.h => media/libvorbis/lib/scales.h rename : modules/libvorbis/lib/smallft.h => media/libvorbis/lib/smallft.h rename : modules/libvorbis/lib/vorbis_analysis.c => media/libvorbis/lib/vorbis_analysis.c rename : modules/libvorbis/lib/vorbis_bitrate.c => media/libvorbis/lib/vorbis_bitrate.c rename : modules/libvorbis/lib/vorbis_block.c => media/libvorbis/lib/vorbis_block.c rename : modules/libvorbis/lib/vorbis_codebook.c => media/libvorbis/lib/vorbis_codebook.c rename : modules/libvorbis/lib/vorbis_envelope.c => media/libvorbis/lib/vorbis_envelope.c rename : modules/libvorbis/lib/vorbis_floor0.c => media/libvorbis/lib/vorbis_floor0.c rename : modules/libvorbis/lib/vorbis_floor1.c => media/libvorbis/lib/vorbis_floor1.c rename : modules/libvorbis/lib/vorbis_info.c => media/libvorbis/lib/vorbis_info.c rename : modules/libvorbis/lib/vorbis_lookup.c => media/libvorbis/lib/vorbis_lookup.c rename : modules/libvorbis/lib/vorbis_lpc.c => media/libvorbis/lib/vorbis_lpc.c rename : modules/libvorbis/lib/vorbis_lsp.c => media/libvorbis/lib/vorbis_lsp.c rename : modules/libvorbis/lib/vorbis_mapping0.c => media/libvorbis/lib/vorbis_mapping0.c rename : modules/libvorbis/lib/vorbis_mdct.c => media/libvorbis/lib/vorbis_mdct.c rename : modules/libvorbis/lib/vorbis_psy.c => media/libvorbis/lib/vorbis_psy.c rename : modules/libvorbis/lib/vorbis_registry.c => media/libvorbis/lib/vorbis_registry.c rename : modules/libvorbis/lib/vorbis_res0.c => media/libvorbis/lib/vorbis_res0.c rename : modules/libvorbis/lib/vorbis_sharedbook.c => media/libvorbis/lib/vorbis_sharedbook.c rename : modules/libvorbis/lib/vorbis_smallft.c => media/libvorbis/lib/vorbis_smallft.c rename : modules/libvorbis/lib/vorbis_synthesis.c => media/libvorbis/lib/vorbis_synthesis.c rename : modules/libvorbis/lib/vorbis_window.c => media/libvorbis/lib/vorbis_window.c rename : modules/libvorbis/lib/window.h => media/libvorbis/lib/window.h rename : modules/libvorbis/todo.txt => media/libvorbis/todo.txt rename : modules/libvorbis/update.sh => media/libvorbis/update.sh
536 lines
14 KiB
C
536 lines
14 KiB
C
/********************************************************************
|
|
* *
|
|
* THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *
|
|
* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
|
|
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
|
|
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
|
|
* *
|
|
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2007 *
|
|
* by the Xiph.Org Foundation http://www.xiph.org/ *
|
|
* *
|
|
********************************************************************
|
|
|
|
function:
|
|
last mod: $Id: mmxidct.c 14357 2008-01-04 20:05:28Z tterribe $
|
|
|
|
********************************************************************/
|
|
|
|
/*MMX acceleration of Theora's iDCT.
|
|
Originally written by Rudolf Marek, based on code from On2's VP3.*/
|
|
#include <ogg/ogg.h>
|
|
#include "../dct.h"
|
|
#include "../idct.h"
|
|
|
|
#include "x86int.h"
|
|
|
|
#if defined(USE_ASM)
|
|
|
|
/*These are offsets into the table of constants below.*/
|
|
/*7 rows of cosines, in order: pi/16 * (1 ... 7).*/
|
|
#define OC_COSINE_OFFSET (0)
|
|
/*A row of 8's.*/
|
|
#define OC_EIGHT_OFFSET (56)
|
|
|
|
|
|
|
|
/*A table of constants used by the MMX routines.*/
|
|
static const ogg_uint16_t __attribute__((aligned(8),used))
|
|
OC_IDCT_CONSTS[(7+1)*4]={
|
|
(ogg_uint16_t)OC_C1S7,(ogg_uint16_t)OC_C1S7,
|
|
(ogg_uint16_t)OC_C1S7,(ogg_uint16_t)OC_C1S7,
|
|
(ogg_uint16_t)OC_C2S6,(ogg_uint16_t)OC_C2S6,
|
|
(ogg_uint16_t)OC_C2S6,(ogg_uint16_t)OC_C2S6,
|
|
(ogg_uint16_t)OC_C3S5,(ogg_uint16_t)OC_C3S5,
|
|
(ogg_uint16_t)OC_C3S5,(ogg_uint16_t)OC_C3S5,
|
|
(ogg_uint16_t)OC_C4S4,(ogg_uint16_t)OC_C4S4,
|
|
(ogg_uint16_t)OC_C4S4,(ogg_uint16_t)OC_C4S4,
|
|
(ogg_uint16_t)OC_C5S3,(ogg_uint16_t)OC_C5S3,
|
|
(ogg_uint16_t)OC_C5S3,(ogg_uint16_t)OC_C5S3,
|
|
(ogg_uint16_t)OC_C6S2,(ogg_uint16_t)OC_C6S2,
|
|
(ogg_uint16_t)OC_C6S2,(ogg_uint16_t)OC_C6S2,
|
|
(ogg_uint16_t)OC_C7S1,(ogg_uint16_t)OC_C7S1,
|
|
(ogg_uint16_t)OC_C7S1,(ogg_uint16_t)OC_C7S1,
|
|
8, 8, 8, 8
|
|
};
|
|
|
|
/*Converts the expression in the argument to a string.*/
|
|
#define OC_M2STR(_s) #_s
|
|
|
|
/*38 cycles*/
|
|
#define OC_IDCT_BEGIN \
|
|
"#OC_IDCT_BEGIN\n\t" \
|
|
"movq "OC_I(3)",%%mm2\n\t" \
|
|
"movq "OC_C(3)",%%mm6\n\t" \
|
|
"movq %%mm2,%%mm4\n\t" \
|
|
"movq "OC_J(5)",%%mm7\n\t" \
|
|
"pmulhw %%mm6,%%mm4\n\t" \
|
|
"movq "OC_C(5)",%%mm1\n\t" \
|
|
"pmulhw %%mm7,%%mm6\n\t" \
|
|
"movq %%mm1,%%mm5\n\t" \
|
|
"pmulhw %%mm2,%%mm1\n\t" \
|
|
"movq "OC_I(1)",%%mm3\n\t" \
|
|
"pmulhw %%mm7,%%mm5\n\t" \
|
|
"movq "OC_C(1)",%%mm0\n\t" \
|
|
"paddw %%mm2,%%mm4\n\t" \
|
|
"paddw %%mm7,%%mm6\n\t" \
|
|
"paddw %%mm1,%%mm2\n\t" \
|
|
"movq "OC_J(7)",%%mm1\n\t" \
|
|
"paddw %%mm5,%%mm7\n\t" \
|
|
"movq %%mm0,%%mm5\n\t" \
|
|
"pmulhw %%mm3,%%mm0\n\t" \
|
|
"paddw %%mm7,%%mm4\n\t" \
|
|
"pmulhw %%mm1,%%mm5\n\t" \
|
|
"movq "OC_C(7)",%%mm7\n\t" \
|
|
"psubw %%mm2,%%mm6\n\t" \
|
|
"paddw %%mm3,%%mm0\n\t" \
|
|
"pmulhw %%mm7,%%mm3\n\t" \
|
|
"movq "OC_I(2)",%%mm2\n\t" \
|
|
"pmulhw %%mm1,%%mm7\n\t" \
|
|
"paddw %%mm1,%%mm5\n\t" \
|
|
"movq %%mm2,%%mm1\n\t" \
|
|
"pmulhw "OC_C(2)",%%mm2\n\t" \
|
|
"psubw %%mm5,%%mm3\n\t" \
|
|
"movq "OC_J(6)",%%mm5\n\t" \
|
|
"paddw %%mm7,%%mm0\n\t" \
|
|
"movq %%mm5,%%mm7\n\t" \
|
|
"psubw %%mm4,%%mm0\n\t" \
|
|
"pmulhw "OC_C(2)",%%mm5\n\t" \
|
|
"paddw %%mm1,%%mm2\n\t" \
|
|
"pmulhw "OC_C(6)",%%mm1\n\t" \
|
|
"paddw %%mm4,%%mm4\n\t" \
|
|
"paddw %%mm0,%%mm4\n\t" \
|
|
"psubw %%mm6,%%mm3\n\t" \
|
|
"paddw %%mm7,%%mm5\n\t" \
|
|
"paddw %%mm6,%%mm6\n\t" \
|
|
"pmulhw "OC_C(6)",%%mm7\n\t" \
|
|
"paddw %%mm3,%%mm6\n\t" \
|
|
"movq %%mm4,"OC_I(1)"\n\t" \
|
|
"psubw %%mm5,%%mm1\n\t" \
|
|
"movq "OC_C(4)",%%mm4\n\t" \
|
|
"movq %%mm3,%%mm5\n\t" \
|
|
"pmulhw %%mm4,%%mm3\n\t" \
|
|
"paddw %%mm2,%%mm7\n\t" \
|
|
"movq %%mm6,"OC_I(2)"\n\t" \
|
|
"movq %%mm0,%%mm2\n\t" \
|
|
"movq "OC_I(0)",%%mm6\n\t" \
|
|
"pmulhw %%mm4,%%mm0\n\t" \
|
|
"paddw %%mm3,%%mm5\n\t" \
|
|
"movq "OC_J(4)",%%mm3\n\t" \
|
|
"psubw %%mm1,%%mm5\n\t" \
|
|
"paddw %%mm0,%%mm2\n\t" \
|
|
"psubw %%mm3,%%mm6\n\t" \
|
|
"movq %%mm6,%%mm0\n\t" \
|
|
"pmulhw %%mm4,%%mm6\n\t" \
|
|
"paddw %%mm3,%%mm3\n\t" \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
"paddw %%mm0,%%mm3\n\t" \
|
|
"paddw %%mm5,%%mm1\n\t" \
|
|
"pmulhw %%mm3,%%mm4\n\t" \
|
|
"paddw %%mm0,%%mm6\n\t" \
|
|
"psubw %%mm2,%%mm6\n\t" \
|
|
"paddw %%mm2,%%mm2\n\t" \
|
|
"movq "OC_I(1)",%%mm0\n\t" \
|
|
"paddw %%mm6,%%mm2\n\t" \
|
|
"paddw %%mm3,%%mm4\n\t" \
|
|
"psubw %%mm1,%%mm2\n\t" \
|
|
"#end OC_IDCT_BEGIN\n\t" \
|
|
|
|
/*38+8=46 cycles.*/
|
|
#define OC_ROW_IDCT \
|
|
"#OC_ROW_IDCT\n" \
|
|
OC_IDCT_BEGIN \
|
|
/*r3=D'*/ \
|
|
"movq "OC_I(2)",%%mm3\n\t" \
|
|
/*r4=E'=E-G*/ \
|
|
"psubw %%mm7,%%mm4\n\t" \
|
|
/*r1=H'+H'*/ \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
/*r7=G+G*/ \
|
|
"paddw %%mm7,%%mm7\n\t" \
|
|
/*r1=R1=A''+H'*/ \
|
|
"paddw %%mm2,%%mm1\n\t" \
|
|
/*r7=G'=E+G*/ \
|
|
"paddw %%mm4,%%mm7\n\t" \
|
|
/*r4=R4=E'-D'*/ \
|
|
"psubw %%mm3,%%mm4\n\t" \
|
|
"paddw %%mm3,%%mm3\n\t" \
|
|
/*r6=R6=F'-B''*/ \
|
|
"psubw %%mm5,%%mm6\n\t" \
|
|
"paddw %%mm5,%%mm5\n\t" \
|
|
/*r3=R3=E'+D'*/ \
|
|
"paddw %%mm4,%%mm3\n\t" \
|
|
/*r5=R5=F'+B''*/ \
|
|
"paddw %%mm6,%%mm5\n\t" \
|
|
/*r7=R7=G'-C'*/ \
|
|
"psubw %%mm0,%%mm7\n\t" \
|
|
"paddw %%mm0,%%mm0\n\t" \
|
|
/*Save R1.*/ \
|
|
"movq %%mm1,"OC_I(1)"\n\t" \
|
|
/*r0=R0=G.+C.*/ \
|
|
"paddw %%mm7,%%mm0\n\t" \
|
|
"#end OC_ROW_IDCT\n\t" \
|
|
|
|
/*The following macro does two 4x4 transposes in place.
|
|
At entry, we assume:
|
|
r0 = a3 a2 a1 a0
|
|
I(1) = b3 b2 b1 b0
|
|
r2 = c3 c2 c1 c0
|
|
r3 = d3 d2 d1 d0
|
|
|
|
r4 = e3 e2 e1 e0
|
|
r5 = f3 f2 f1 f0
|
|
r6 = g3 g2 g1 g0
|
|
r7 = h3 h2 h1 h0
|
|
|
|
At exit, we have:
|
|
I(0) = d0 c0 b0 a0
|
|
I(1) = d1 c1 b1 a1
|
|
I(2) = d2 c2 b2 a2
|
|
I(3) = d3 c3 b3 a3
|
|
|
|
J(4) = h0 g0 f0 e0
|
|
J(5) = h1 g1 f1 e1
|
|
J(6) = h2 g2 f2 e2
|
|
J(7) = h3 g3 f3 e3
|
|
|
|
I(0) I(1) I(2) I(3) is the transpose of r0 I(1) r2 r3.
|
|
J(4) J(5) J(6) J(7) is the transpose of r4 r5 r6 r7.
|
|
|
|
Since r1 is free at entry, we calculate the Js first.*/
|
|
/*19 cycles.*/
|
|
#define OC_TRANSPOSE \
|
|
"#OC_TRANSPOSE\n\t" \
|
|
"movq %%mm4,%%mm1\n\t" \
|
|
"punpcklwd %%mm5,%%mm4\n\t" \
|
|
"movq %%mm0,"OC_I(0)"\n\t" \
|
|
"punpckhwd %%mm5,%%mm1\n\t" \
|
|
"movq %%mm6,%%mm0\n\t" \
|
|
"punpcklwd %%mm7,%%mm6\n\t" \
|
|
"movq %%mm4,%%mm5\n\t" \
|
|
"punpckldq %%mm6,%%mm4\n\t" \
|
|
"punpckhdq %%mm6,%%mm5\n\t" \
|
|
"movq %%mm1,%%mm6\n\t" \
|
|
"movq %%mm4,"OC_J(4)"\n\t" \
|
|
"punpckhwd %%mm7,%%mm0\n\t" \
|
|
"movq %%mm5,"OC_J(5)"\n\t" \
|
|
"punpckhdq %%mm0,%%mm6\n\t" \
|
|
"movq "OC_I(0)",%%mm4\n\t" \
|
|
"punpckldq %%mm0,%%mm1\n\t" \
|
|
"movq "OC_I(1)",%%mm5\n\t" \
|
|
"movq %%mm4,%%mm0\n\t" \
|
|
"movq %%mm6,"OC_J(7)"\n\t" \
|
|
"punpcklwd %%mm5,%%mm0\n\t" \
|
|
"movq %%mm1,"OC_J(6)"\n\t" \
|
|
"punpckhwd %%mm5,%%mm4\n\t" \
|
|
"movq %%mm2,%%mm5\n\t" \
|
|
"punpcklwd %%mm3,%%mm2\n\t" \
|
|
"movq %%mm0,%%mm1\n\t" \
|
|
"punpckldq %%mm2,%%mm0\n\t" \
|
|
"punpckhdq %%mm2,%%mm1\n\t" \
|
|
"movq %%mm4,%%mm2\n\t" \
|
|
"movq %%mm0,"OC_I(0)"\n\t" \
|
|
"punpckhwd %%mm3,%%mm5\n\t" \
|
|
"movq %%mm1,"OC_I(1)"\n\t" \
|
|
"punpckhdq %%mm5,%%mm4\n\t" \
|
|
"punpckldq %%mm5,%%mm2\n\t" \
|
|
"movq %%mm4,"OC_I(3)"\n\t" \
|
|
"movq %%mm2,"OC_I(2)"\n\t" \
|
|
"#end OC_TRANSPOSE\n\t" \
|
|
|
|
/*38+19=57 cycles.*/
|
|
#define OC_COLUMN_IDCT \
|
|
"#OC_COLUMN_IDCT\n" \
|
|
OC_IDCT_BEGIN \
|
|
"paddw "OC_8",%%mm2\n\t" \
|
|
/*r1=H'+H'*/ \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
/*r1=R1=A''+H'*/ \
|
|
"paddw %%mm2,%%mm1\n\t" \
|
|
/*r2=NR2*/ \
|
|
"psraw $4,%%mm2\n\t" \
|
|
/*r4=E'=E-G*/ \
|
|
"psubw %%mm7,%%mm4\n\t" \
|
|
/*r1=NR1*/ \
|
|
"psraw $4,%%mm1\n\t" \
|
|
/*r3=D'*/ \
|
|
"movq "OC_I(2)",%%mm3\n\t" \
|
|
/*r7=G+G*/ \
|
|
"paddw %%mm7,%%mm7\n\t" \
|
|
/*Store NR2 at I(2).*/ \
|
|
"movq %%mm2,"OC_I(2)"\n\t" \
|
|
/*r7=G'=E+G*/ \
|
|
"paddw %%mm4,%%mm7\n\t" \
|
|
/*Store NR1 at I(1).*/ \
|
|
"movq %%mm1,"OC_I(1)"\n\t" \
|
|
/*r4=R4=E'-D'*/ \
|
|
"psubw %%mm3,%%mm4\n\t" \
|
|
"paddw "OC_8",%%mm4\n\t" \
|
|
/*r3=D'+D'*/ \
|
|
"paddw %%mm3,%%mm3\n\t" \
|
|
/*r3=R3=E'+D'*/ \
|
|
"paddw %%mm4,%%mm3\n\t" \
|
|
/*r4=NR4*/ \
|
|
"psraw $4,%%mm4\n\t" \
|
|
/*r6=R6=F'-B''*/ \
|
|
"psubw %%mm5,%%mm6\n\t" \
|
|
/*r3=NR3*/ \
|
|
"psraw $4,%%mm3\n\t" \
|
|
"paddw "OC_8",%%mm6\n\t" \
|
|
/*r5=B''+B''*/ \
|
|
"paddw %%mm5,%%mm5\n\t" \
|
|
/*r5=R5=F'+B''*/ \
|
|
"paddw %%mm6,%%mm5\n\t" \
|
|
/*r6=NR6*/ \
|
|
"psraw $4,%%mm6\n\t" \
|
|
/*Store NR4 at J(4).*/ \
|
|
"movq %%mm4,"OC_J(4)"\n\t" \
|
|
/*r5=NR5*/ \
|
|
"psraw $4,%%mm5\n\t" \
|
|
/*Store NR3 at I(3).*/ \
|
|
"movq %%mm3,"OC_I(3)"\n\t" \
|
|
/*r7=R7=G'-C'*/ \
|
|
"psubw %%mm0,%%mm7\n\t" \
|
|
"paddw "OC_8",%%mm7\n\t" \
|
|
/*r0=C'+C'*/ \
|
|
"paddw %%mm0,%%mm0\n\t" \
|
|
/*r0=R0=G'+C'*/ \
|
|
"paddw %%mm7,%%mm0\n\t" \
|
|
/*r7=NR7*/ \
|
|
"psraw $4,%%mm7\n\t" \
|
|
/*Store NR6 at J(6).*/ \
|
|
"movq %%mm6,"OC_J(6)"\n\t" \
|
|
/*r0=NR0*/ \
|
|
"psraw $4,%%mm0\n\t" \
|
|
/*Store NR5 at J(5).*/ \
|
|
"movq %%mm5,"OC_J(5)"\n\t" \
|
|
/*Store NR7 at J(7).*/ \
|
|
"movq %%mm7,"OC_J(7)"\n\t" \
|
|
/*Store NR0 at I(0).*/ \
|
|
"movq %%mm0,"OC_I(0)"\n\t" \
|
|
"#end OC_COLUMN_IDCT\n\t" \
|
|
|
|
#define OC_MID(_m,_i) OC_M2STR(_m+(_i)*8)"(%[c])"
|
|
#define OC_C(_i) OC_MID(OC_COSINE_OFFSET,_i-1)
|
|
#define OC_8 OC_MID(OC_EIGHT_OFFSET,0)
|
|
|
|
void oc_idct8x8_mmx(ogg_int16_t _y[64]){
|
|
/*This routine accepts an 8x8 matrix, but in transposed form.
|
|
Every 4x4 submatrix is transposed.*/
|
|
__asm__ __volatile__(
|
|
#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
|
|
#define OC_J(_k) OC_M2STR(((_k-4)*16)+8)"(%[y])"
|
|
OC_ROW_IDCT
|
|
OC_TRANSPOSE
|
|
#undef OC_I
|
|
#undef OC_J
|
|
#define OC_I(_k) OC_M2STR((_k*16)+64)"(%[y])"
|
|
#define OC_J(_k) OC_M2STR(((_k-4)*16)+72)"(%[y])"
|
|
OC_ROW_IDCT
|
|
OC_TRANSPOSE
|
|
#undef OC_I
|
|
#undef OC_J
|
|
#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
|
|
#define OC_J(_k) OC_I(_k)
|
|
OC_COLUMN_IDCT
|
|
#undef OC_I
|
|
#undef OC_J
|
|
#define OC_I(_k) OC_M2STR((_k*16)+8)"(%[y])"
|
|
#define OC_J(_k) OC_I(_k)
|
|
OC_COLUMN_IDCT
|
|
#undef OC_I
|
|
#undef OC_J
|
|
"emms\n\t"
|
|
:
|
|
:[y]"r"(_y),[c]"r"(OC_IDCT_CONSTS)
|
|
);
|
|
}
|
|
|
|
/*25 cycles.*/
|
|
#define OC_IDCT_BEGIN_10 \
|
|
"#OC_IDCT_BEGIN_10\n\t" \
|
|
"movq "OC_I(3)",%%mm2\n\t" \
|
|
"nop\n\t" \
|
|
"movq "OC_C(3)",%%mm6\n\t" \
|
|
"movq %%mm2,%%mm4\n\t" \
|
|
"movq "OC_C(5)",%%mm1\n\t" \
|
|
"pmulhw %%mm6,%%mm4\n\t" \
|
|
"movq "OC_I(1)",%%mm3\n\t" \
|
|
"pmulhw %%mm2,%%mm1\n\t" \
|
|
"movq "OC_C(1)",%%mm0\n\t" \
|
|
"paddw %%mm2,%%mm4\n\t" \
|
|
"pxor %%mm6,%%mm6\n\t" \
|
|
"paddw %%mm1,%%mm2\n\t" \
|
|
"movq "OC_I(2)",%%mm5\n\t" \
|
|
"pmulhw %%mm3,%%mm0\n\t" \
|
|
"movq %%mm5,%%mm1\n\t" \
|
|
"paddw %%mm3,%%mm0\n\t" \
|
|
"pmulhw "OC_C(7)",%%mm3\n\t" \
|
|
"psubw %%mm2,%%mm6\n\t" \
|
|
"pmulhw "OC_C(2)",%%mm5\n\t" \
|
|
"psubw %%mm4,%%mm0\n\t" \
|
|
"movq "OC_I(2)",%%mm7\n\t" \
|
|
"paddw %%mm4,%%mm4\n\t" \
|
|
"paddw %%mm5,%%mm7\n\t" \
|
|
"paddw %%mm0,%%mm4\n\t" \
|
|
"pmulhw "OC_C(6)",%%mm1\n\t" \
|
|
"psubw %%mm6,%%mm3\n\t" \
|
|
"movq %%mm4,"OC_I(1)"\n\t" \
|
|
"paddw %%mm6,%%mm6\n\t" \
|
|
"movq "OC_C(4)",%%mm4\n\t" \
|
|
"paddw %%mm3,%%mm6\n\t" \
|
|
"movq %%mm3,%%mm5\n\t" \
|
|
"pmulhw %%mm4,%%mm3\n\t" \
|
|
"movq %%mm6,"OC_I(2)"\n\t" \
|
|
"movq %%mm0,%%mm2\n\t" \
|
|
"movq "OC_I(0)",%%mm6\n\t" \
|
|
"pmulhw %%mm4,%%mm0\n\t" \
|
|
"paddw %%mm3,%%mm5\n\t" \
|
|
"paddw %%mm0,%%mm2\n\t" \
|
|
"psubw %%mm1,%%mm5\n\t" \
|
|
"pmulhw %%mm4,%%mm6\n\t" \
|
|
"paddw "OC_I(0)",%%mm6\n\t" \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
"movq %%mm6,%%mm4\n\t" \
|
|
"paddw %%mm5,%%mm1\n\t" \
|
|
"psubw %%mm2,%%mm6\n\t" \
|
|
"paddw %%mm2,%%mm2\n\t" \
|
|
"movq "OC_I(1)",%%mm0\n\t" \
|
|
"paddw %%mm6,%%mm2\n\t" \
|
|
"psubw %%mm1,%%mm2\n\t" \
|
|
"nop\n\t" \
|
|
"#end OC_IDCT_BEGIN_10\n\t" \
|
|
|
|
/*25+8=33 cycles.*/
|
|
#define OC_ROW_IDCT_10 \
|
|
"#OC_ROW_IDCT_10\n\t" \
|
|
OC_IDCT_BEGIN_10 \
|
|
/*r3=D'*/ \
|
|
"movq "OC_I(2)",%%mm3\n\t" \
|
|
/*r4=E'=E-G*/ \
|
|
"psubw %%mm7,%%mm4\n\t" \
|
|
/*r1=H'+H'*/ \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
/*r7=G+G*/ \
|
|
"paddw %%mm7,%%mm7\n\t" \
|
|
/*r1=R1=A''+H'*/ \
|
|
"paddw %%mm2,%%mm1\n\t" \
|
|
/*r7=G'=E+G*/ \
|
|
"paddw %%mm4,%%mm7\n\t" \
|
|
/*r4=R4=E'-D'*/ \
|
|
"psubw %%mm3,%%mm4\n\t" \
|
|
"paddw %%mm3,%%mm3\n\t" \
|
|
/*r6=R6=F'-B''*/ \
|
|
"psubw %%mm5,%%mm6\n\t" \
|
|
"paddw %%mm5,%%mm5\n\t" \
|
|
/*r3=R3=E'+D'*/ \
|
|
"paddw %%mm4,%%mm3\n\t" \
|
|
/*r5=R5=F'+B''*/ \
|
|
"paddw %%mm6,%%mm5\n\t" \
|
|
/*r7=R7=G'-C'*/ \
|
|
"psubw %%mm0,%%mm7\n\t" \
|
|
"paddw %%mm0,%%mm0\n\t" \
|
|
/*Save R1.*/ \
|
|
"movq %%mm1,"OC_I(1)"\n\t" \
|
|
/*r0=R0=G'+C'*/ \
|
|
"paddw %%mm7,%%mm0\n\t" \
|
|
"#end OC_ROW_IDCT_10\n\t" \
|
|
|
|
/*25+19=44 cycles'*/
|
|
#define OC_COLUMN_IDCT_10 \
|
|
"#OC_COLUMN_IDCT_10\n\t" \
|
|
OC_IDCT_BEGIN_10 \
|
|
"paddw "OC_8",%%mm2\n\t" \
|
|
/*r1=H'+H'*/ \
|
|
"paddw %%mm1,%%mm1\n\t" \
|
|
/*r1=R1=A''+H'*/ \
|
|
"paddw %%mm2,%%mm1\n\t" \
|
|
/*r2=NR2*/ \
|
|
"psraw $4,%%mm2\n\t" \
|
|
/*r4=E'=E-G*/ \
|
|
"psubw %%mm7,%%mm4\n\t" \
|
|
/*r1=NR1*/ \
|
|
"psraw $4,%%mm1\n\t" \
|
|
/*r3=D'*/ \
|
|
"movq "OC_I(2)",%%mm3\n\t" \
|
|
/*r7=G+G*/ \
|
|
"paddw %%mm7,%%mm7\n\t" \
|
|
/*Store NR2 at I(2).*/ \
|
|
"movq %%mm2,"OC_I(2)"\n\t" \
|
|
/*r7=G'=E+G*/ \
|
|
"paddw %%mm4,%%mm7\n\t" \
|
|
/*Store NR1 at I(1).*/ \
|
|
"movq %%mm1,"OC_I(1)"\n\t" \
|
|
/*r4=R4=E'-D'*/ \
|
|
"psubw %%mm3,%%mm4\n\t" \
|
|
"paddw "OC_8",%%mm4\n\t" \
|
|
/*r3=D'+D'*/ \
|
|
"paddw %%mm3,%%mm3\n\t" \
|
|
/*r3=R3=E'+D'*/ \
|
|
"paddw %%mm4,%%mm3\n\t" \
|
|
/*r4=NR4*/ \
|
|
"psraw $4,%%mm4\n\t" \
|
|
/*r6=R6=F'-B''*/ \
|
|
"psubw %%mm5,%%mm6\n\t" \
|
|
/*r3=NR3*/ \
|
|
"psraw $4,%%mm3\n\t" \
|
|
"paddw "OC_8",%%mm6\n\t" \
|
|
/*r5=B''+B''*/ \
|
|
"paddw %%mm5,%%mm5\n\t" \
|
|
/*r5=R5=F'+B''*/ \
|
|
"paddw %%mm6,%%mm5\n\t" \
|
|
/*r6=NR6*/ \
|
|
"psraw $4,%%mm6\n\t" \
|
|
/*Store NR4 at J(4).*/ \
|
|
"movq %%mm4,"OC_J(4)"\n\t" \
|
|
/*r5=NR5*/ \
|
|
"psraw $4,%%mm5\n\t" \
|
|
/*Store NR3 at I(3).*/ \
|
|
"movq %%mm3,"OC_I(3)"\n\t" \
|
|
/*r7=R7=G'-C'*/ \
|
|
"psubw %%mm0,%%mm7\n\t" \
|
|
"paddw "OC_8",%%mm7\n\t" \
|
|
/*r0=C'+C'*/ \
|
|
"paddw %%mm0,%%mm0\n\t" \
|
|
/*r0=R0=G'+C'*/ \
|
|
"paddw %%mm7,%%mm0\n\t" \
|
|
/*r7=NR7*/ \
|
|
"psraw $4,%%mm7\n\t" \
|
|
/*Store NR6 at J(6).*/ \
|
|
"movq %%mm6,"OC_J(6)"\n\t" \
|
|
/*r0=NR0*/ \
|
|
"psraw $4,%%mm0\n\t" \
|
|
/*Store NR5 at J(5).*/ \
|
|
"movq %%mm5,"OC_J(5)"\n\t" \
|
|
/*Store NR7 at J(7).*/ \
|
|
"movq %%mm7,"OC_J(7)"\n\t" \
|
|
/*Store NR0 at I(0).*/ \
|
|
"movq %%mm0,"OC_I(0)"\n\t" \
|
|
"#end OC_COLUMN_IDCT_10\n\t" \
|
|
|
|
void oc_idct8x8_10_mmx(ogg_int16_t _y[64]){
|
|
__asm__ __volatile__(
|
|
#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
|
|
#define OC_J(_k) OC_M2STR(((_k-4)*16)+8)"(%[y])"
|
|
/*Done with dequant, descramble, and partial transpose.
|
|
Now do the iDCT itself.*/
|
|
OC_ROW_IDCT_10
|
|
OC_TRANSPOSE
|
|
#undef OC_I
|
|
#undef OC_J
|
|
#define OC_I(_k) OC_M2STR((_k*16))"(%[y])"
|
|
#define OC_J(_k) OC_I(_k)
|
|
OC_COLUMN_IDCT_10
|
|
#undef OC_I
|
|
#undef OC_J
|
|
#define OC_I(_k) OC_M2STR((_k*16)+8)"(%[y])"
|
|
#define OC_J(_k) OC_I(_k)
|
|
OC_COLUMN_IDCT_10
|
|
#undef OC_I
|
|
#undef OC_J
|
|
"emms\n\t"
|
|
:
|
|
:[y]"r"(_y),[c]"r"(OC_IDCT_CONSTS)
|
|
);
|
|
}
|
|
#endif
|