aboutsummaryrefslogtreecommitdiffstats
path: root/libavutil/intreadwrite.h
Commit message (Collapse)AuthorAgeFilesLines
* avutil/aarch64: add AV_COPY128 and AV_ZERO128 macrosRamiro Polla2024-08-261-1/+3
|
* avutil/intreadwrite: add missing aligned read/write macrosJames Almer2024-07-291-0/+39
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avr32: remove explicit supportRémi Denis-Courmont2024-06-141-3/+1
| | | | | | | | | | | | | | The vendor has long since switched to Arm, with the last product reaching their official end-of-life over 11 years ago. Linux support for the ISA was dropped 7 years ago. More importantly, this architecture was never supported by upstream GCC, and the vendor fork is stuck at version 4.2, which FFmpeg no longer supports (as per C11 requirement). Presumably, this is still the case given the lack of vendor support. Indeed all of the code being removed here consisted of inline assembler scalar optimisations. A sane C compiler should be able to perform those automatically nowadays (with the sole exception of fast CLZ detection), but this is moot as this architecture is evidently dead.
* lavu/arm: remove GCC 4.6- stuffRémi Denis-Courmont2024-06-131-3/+1
| | | | | | Since the C11 support is required, those GCC versions can no longer be supported anyhow. (Clang pretends to be GCC 4.4, but the removed code does not seem to have been intended for Clang.)
* avutil/intreadwrite: Remove obsolete warningAndreas Rheinhardt2024-02-201-3/+1
| | | | | | | Obsolete since 7ec2354c38978b918dc079b611393becb6c80bf7. Reviewed-by: Martin Storsjö <martin@martin.st> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* intreadwrite: Indicate potential aliasing in AV_RN/AV_WN for Clang/MSVC modeMartin Storsjö2023-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | Use the GCC specific codepath for Clang in MSVC mode too. This matches the condition used in a number of other places. MSVC doesn't have a way to signal potential aliasing, while GCC (and Clang) can use __attribute__((may_alias)) for this purpose. When building with Clang in MSVC mode, __GNUC__ isn't defined but _MSC_VER is as Clang primarily impersonates MSVC - but even then it does support the GCC style attributes. The GCC specific codepath uses av_alias, which expands to the may_alias attribute if supported. The MSVC specific codepath doesn't use av_alias so far (as MSVC doesn't support any corresponding attribute). This fixes a couple HEVC decoder tests when built with Clang 14 or newer in MSVC mode (with issues observed on all of x86_64, armv7 and aarch64). Signed-off-by: Martin Storsjö <martin@martin.st>
* libavutil: Remove TOMI CPUKieran Kunhya2023-07-221-2/+0
|
* intreadwrite: add AV_RL64A, AV_WL64APeter Ross2019-01-111-0/+15
| | | | | | | | macros for reading and writing 64-bit aligned little-endian values. these macros are used by the DST decoder and give a performance boost on platforms that where the compiler must guard against unaligned memory access.
* Merge commit '85e10c0a9321bfe0d2afe0f3983ab6a8df6e3fba'Mark Thompson2018-01-251-1/+1
|\ | | | | | | | | | | | | * commit '85e10c0a9321bfe0d2afe0f3983ab6a8df6e3fba': intreadwrite: Use __unaligned in MSVC for ARM64 as well Merged-by: Mark Thompson <sw@jkqxz.net>
| * intreadwrite: Use __unaligned in MSVC for ARM64 as wellMartin Storsjö2018-01-161-1/+1
| | | | | | | | | | | | | | This attribute is supported for this architecture in MSVC as well (but produces errors if used for 32 bit x86). Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '0af8a72174108b9bb482f1073a1e9a3bc258af51'James Almer2017-11-111-1/+1
|\| | | | | | | | | | | | | * commit '0af8a72174108b9bb482f1073a1e9a3bc258af51': build: Drop support for legacy TI ARM compiler Merged-by: James Almer <jamrial@gmail.com>
| * build: Drop support for legacy TI ARM compilerDiego Biurrun2017-10-251-1/+1
| |
* | Merge commit '09c98327b9f25c6c1716c0ee82ce09d8b484887a'James Almer2017-11-111-5/+0
|\| | | | | | | | | | | | | * commit '09c98327b9f25c6c1716c0ee82ce09d8b484887a': build: Drop support for Tru64 Unix (OSF/1) Merged-by: James Almer <jamrial@gmail.com>
| * build: Drop support for Tru64 Unix (OSF/1)Diego Biurrun2017-10-101-5/+0
| | | | | | | | | | This proprietary Unix flavor dropped from the face of the earth more than a decade ago. Nothing of value was lost.
| * Revert "libavutil: Use an intermediate variable in AV_COPY*U"Martin Storsjö2016-08-021-5/+1
| | | | | | | | | | | | | | | | | | | | This reverts commit 014773b66bdff4de24f384066d1a85d2a5bb6774. Since 230b1c070, the bytewise AV_W*() macros only expand their argument once, i.e. doing exactly the same change as was done in the AV_COPY*U macros, so this change is no longer necessary. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit 'f79d847400d218cfd0b95f10358fe6e65ec3c9c4'James Almer2017-03-151-0/+5
|\| | | | | | | | | | | | | * commit 'f79d847400d218cfd0b95f10358fe6e65ec3c9c4': intreadwrite: Use the __unaligned keyword on MSVC for ARM and x86_64 Merged-by: James Almer <jamrial@gmail.com>
| * intreadwrite: Use the __unaligned keyword on MSVC for ARM and x86_64Martin Storsjö2016-08-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | AV_WN64 is meant for unaligned data, but the existing av_alias* unions (without a definition for the av_alias attribute - we don't have one for MSVC) indicate to the compiler that they would have sufficient alignment for normal access, i.e. the compiler is free to assume 8 byte alignment. On ARM, this makes sure that AV_WN64 (or two consecutive AV_WN32) is done with two str instructions instead of one strd. Signed-off-by: Martin Storsjö <martin@martin.st>
* | Merge commit '230b1c070baa3b6d4bd590426a365b843d60ff50'James Almer2017-03-151-12/+12
|\| | | | | | | | | | | | | | | | | | | * commit '230b1c070baa3b6d4bd590426a365b843d60ff50': intreadwrite: Add intermediate variables in the byteswise AV_W*() macros Mostly a noop. Merged for cosmetic purposes. See d83ff76ca0e1ec905ca2d5b27bd0973991eadbd9 Merged-by: James Almer <jamrial@gmail.com>
| * intreadwrite: Add intermediate variables in the byteswise AV_W*() macrosMartin Storsjö2016-08-021-6/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This avoids issues with expanding the argument multiple times, and makes sure that it is of the right type for the following shifts. Even if the caller of a macro could be expected not to pass parameters that have side effects if expanded multiple times, these fallback codepaths are rarely, if ever, tested, so it is expected that such issues can arise. Thefore, for safety, make sure the fallback codepaths only expand the arguments once. Signed-off-by: Martin Storsjö <martin@martin.st>
| * libavutil: Use an intermediate variable in AV_COPY*UMartin Storsjö2016-07-311-1/+5
| | | | | | | | | | | | | | | | | | | | | | If AV_RN and AV_WN are macros with multiple individual reads and writes, the previous version of the AV_COPYU macro would fail if the reads and writes overlap. This should not be any less efficient in any case, given a sensibly optimizing compiler. Signed-off-by: Martin Storsjö <martin@martin.st>
* | libavutil: document side effects of macrosChristophe Gisquet2014-07-191-0/+8
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | lavu/intreadwrite: add AV_[RW][BLN]48Paul B Mahol2013-02-131-1/+67
| | | | | | | | Signed-off-by: Paul B Mahol <onemda@gmail.com>
* | Merge commit 'ceb754d041f5f6327fd9195a5f43575af9516daa'Michael Niedermayer2012-10-241-0/+27
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit 'ceb754d041f5f6327fd9195a5f43575af9516daa': lzo: Use AV_COPY*U macros where appropriate prepare 9_beta2 release dsputil: Replace AV_WNxx(AV_RNxx()) combinations by AV_COPYxxU intreadwrite: Add AV_COPYxxU macros for copying to/from unaligned addresses dxtory: Replace AV_WN16A(AV_RN16A()) combination by AV_COPY16 mp3: properly forward mp_decode_frame errors Conflicts: RELEASE libavcodec/mpegaudiodec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * intreadwrite: Add AV_COPYxxU macros for copying to/from unaligned addressesDiego Biurrun2012-10-231-0/+27
| |
* | intreadwrite: Dont evaluate value for AV_W* multiple times.Michael Niedermayer2012-09-041-6/+12
| | | | | | | | | | | | | | Evaluating it multiple times, can have side effects and is possibly slow. So its definitly a bad idea. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | Merge remote-tracking branch 'qatar/master'Michael Niedermayer2011-06-181-10/+10
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * qatar/master: lavc: add opt_find to AVCodecContext class. h264: Complexify frame num gap shortening code intreadwrite.h: fix AV_RL32/AV_RB32 signedness. Fix decoding of mpegts streams with h264 video that does *NOT* have b frames Add minor bumps and APIChanges entries for lavf private options. ffmpeg: deprecate -vc and -tvstd ffmpeg: use new avformat_open_* API. ffserver: use new avformat_open_* API. ffprobe: use new avformat_open_* API. ffplay: use new avformat_open_* API. cmdutils: add opt_default2(). dict: add AV_DICT_APPEND flag. lavf: add avformat_write_header() as a replacement for av_write_header(). Deprecate av_open_input_* and remove their uses. lavf: add avformat_open_input() as a replacement for av_open_input_* AVOptions: add av_opt_find() as a replacement for av_find_opt. AVOptions: add av_opt_set_dict() mapping a dictionary struct to a context. ffmpeg: don't abuse a global for passing frame size from input to output ffmpeg: don't abuse a global for passing pixel format from input to output ffmpeg: initialise encoders earlier. Conflicts: cmdutils.c doc/APIchanges ffmpeg.c ffplay.c ffprobe.c libavcodec/h264.c libavformat/avformat.h libavformat/utils.c libavformat/version.h libavutil/avutil.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * intreadwrite.h: fix AV_RL32/AV_RB32 signedness.Uoti Urpala2011-06-161-10/+10
| | | | | | | | | | | | | | | | | | The output type of the AV_RL32/AV_RB32 macros was signed int. The resulting overflow broke at least some ASF streams with large timestamps. Fix by adding a cast to uint32_t. Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: Anton Khirnov <anton@khirnov.net>
| * Replace FFmpeg with Libav in licence headersMans Rullgard2011-03-191-4/+4
|/ | | | Signed-off-by: Mans Rullgard <mans@mansr.com>
* Make intreadwrite.h installation-safeMåns Rullgård2010-07-101-8/+14
| | | | Originally committed as revision 24173 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add av_ prefix to bswap macrosMåns Rullgård2010-07-101-4/+4
| | | | Originally committed as revision 24170 to svn://svn.ffmpeg.org/ffmpeg/trunk
* intreadwrite: common.h is not needed, attributes.h is sufficientMåns Rullgård2010-07-101-1/+1
| | | | Originally committed as revision 24155 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Fix build failure with fast_unaligned and non-gcc-compatible compilersMåns Rullgård2010-03-021-1/+1
| | | | Originally committed as revision 22142 to svn://svn.ffmpeg.org/ffmpeg/trunk
* AV_COPY16() & AV_ZERO16()Michael Niedermayer2010-02-241-0/+8
| | | | Originally committed as revision 22037 to svn://svn.ffmpeg.org/ffmpeg/trunk
* TOMI: 16- and 32-bit intreadwrite functionsMåns Rullgård2010-02-191-0/+2
| | | | Originally committed as revision 21890 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add alias-safe aligned AV_[RW]N macrosMåns Rullgård2010-02-181-0/+32
| | | | Originally committed as revision 21880 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Use alias-safe types in AV_COPY/SWAP/ZERO macrosMåns Rullgård2010-02-181-3/+8
| | | | Originally committed as revision 21879 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Use alias-safe types in AV_[RW] macrosMåns Rullgård2010-02-181-7/+7
| | | | Originally committed as revision 21878 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add alias-safe union typedefsMåns Rullgård2010-02-181-0/+22
| | | | Originally committed as revision 21877 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add AV_COPY32Måns Rullgård2010-01-291-0/+4
| | | | Originally committed as revision 21524 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add macros for 64- and 128-bit write-combining optimization to intreadwrite.h.Alexander Strange2010-01-181-2/+45
| | | | | | Add x86 implementation using MMX/SSE. Originally committed as revision 21281 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Add missing parens in AV_WN macrosMåns Rullgård2010-01-171-3/+3
| | | | Originally committed as revision 21260 to svn://svn.ffmpeg.org/ffmpeg/trunk
* AVR32: optimisations for intreadwrite.hMåns Rullgård2009-08-171-0/+2
| | | | Originally committed as revision 19665 to svn://svn.ffmpeg.org/ffmpeg/trunk
* cosmetics: reformat intreadwrite.hMåns Rullgård2009-08-161-88/+104
| | | | Originally committed as revision 19659 to svn://svn.ffmpeg.org/ffmpeg/trunk
* intreadwrite: ensure arch-specific versions are always used if definedMåns Rullgård2009-08-161-8/+114
| | | | | | | | | The per-arch headers can define any combination of B/L/N variants. This ensures that whatever is defined in an arch header gets used for all equivalents not defined there. E.g. on a little-endian machine, AV_RN and AV_RL should give the same code. Originally committed as revision 19658 to svn://svn.ffmpeg.org/ffmpeg/trunk
* intreadwrite: allow arch-specific 24-bit access macrosMåns Rullgård2009-08-161-1/+9
| | | | Originally committed as revision 19657 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Replace WORDS_BIGENDIAN with HAVE_BIGENDIANMåns Rullgård2009-07-261-2/+2
| | | | Originally committed as revision 19508 to svn://svn.ffmpeg.org/ffmpeg/trunk
* Check for __attribute__((packed)) supportMåns Rullgård2009-07-171-1/+1
| | | | | | Not all compilers claiming to be gcc support this attribute. Originally committed as revision 19453 to svn://svn.ffmpeg.org/ffmpeg/trunk
* MIPS: inline asm for intreadwrite.hMåns Rullgård2009-05-281-0/+2
| | | | Originally committed as revision 18980 to svn://svn.ffmpeg.org/ffmpeg/trunk
* PPC asm for AV_RL*()Måns Rullgård2009-04-181-0/+2
| | | | | | | | | | | | PPC is normally big endian but has special little endian load/store instructions. Using these avoids a separate byteswap. This makes the vorbis decoder about 5% faster. Not much else uses little-endian read/write extensively. GCC generates horrible PPC code for the default AV_[RW]B64 (which uses a packed struct), so we override it with a plain pointer cast. Originally committed as revision 18602 to svn://svn.ffmpeg.org/ffmpeg/trunk
* ARM asm for AV_RN*()Måns Rullgård2009-04-181-0/+3
| | | | | | | | | | | | | | | ARMv6 and later support unaligned loads and stores for single word/halfword but not double/multiple. GCC is ignorant of this and will always use bytewise accesses for unaligned data. Casting to an int32_t pointer is dangerous since a load/store double or multiple instruction might be used (this happens with some code in FFmpeg). Implementing the AV_[RW]* macros with inline asm using only supported instructions gives fast and safe unaligned accesses. ARM RVCT does the right thing with generic code. This gives an overall speedup of up to 10%. Originally committed as revision 18601 to svn://svn.ffmpeg.org/ffmpeg/trunk