annotate ffmpeg/libavutil/tomi/intreadwrite.h @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
yading@11 3 *
yading@11 4 * This file is part of FFmpeg.
yading@11 5 *
yading@11 6 * FFmpeg is free software; you can redistribute it and/or
yading@11 7 * modify it under the terms of the GNU Lesser General Public
yading@11 8 * License as published by the Free Software Foundation; either
yading@11 9 * version 2.1 of the License, or (at your option) any later version.
yading@11 10 *
yading@11 11 * FFmpeg is distributed in the hope that it will be useful,
yading@11 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 14 * Lesser General Public License for more details.
yading@11 15 *
yading@11 16 * You should have received a copy of the GNU Lesser General Public
yading@11 17 * License along with FFmpeg; if not, write to the Free Software
yading@11 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 19 */
yading@11 20
yading@11 21 #ifndef AVUTIL_TOMI_INTREADWRITE_H
yading@11 22 #define AVUTIL_TOMI_INTREADWRITE_H
yading@11 23
yading@11 24 #include <stdint.h>
yading@11 25
yading@11 26 #include "config.h"
yading@11 27 #include "libavutil/attributes.h"
yading@11 28
yading@11 29 #define AV_RB16 AV_RB16
yading@11 30 static av_always_inline uint16_t AV_RB16(const void *p)
yading@11 31 {
yading@11 32 uint16_t v;
yading@11 33 __asm__ ("loadacc, (%1+) \n\t"
yading@11 34 "rol8 \n\t"
yading@11 35 "storeacc, %0 \n\t"
yading@11 36 "loadacc, (%1+) \n\t"
yading@11 37 "add, %0 \n\t"
yading@11 38 : "=r"(v), "+a"(p));
yading@11 39 return v;
yading@11 40 }
yading@11 41
yading@11 42 #define AV_WB16 AV_WB16
yading@11 43 static av_always_inline void AV_WB16(void *p, uint16_t v)
yading@11 44 {
yading@11 45 __asm__ volatile ("loadacc, %1 \n\t"
yading@11 46 "lsr8 \n\t"
yading@11 47 "storeacc, (%0+) \n\t"
yading@11 48 "loadacc, %1 \n\t"
yading@11 49 "storeacc, (%0+) \n\t"
yading@11 50 : "+&a"(p) : "r"(v));
yading@11 51 }
yading@11 52
yading@11 53 #define AV_RL16 AV_RL16
yading@11 54 static av_always_inline uint16_t AV_RL16(const void *p)
yading@11 55 {
yading@11 56 uint16_t v;
yading@11 57 __asm__ ("loadacc, (%1+) \n\t"
yading@11 58 "storeacc, %0 \n\t"
yading@11 59 "loadacc, (%1+) \n\t"
yading@11 60 "rol8 \n\t"
yading@11 61 "add, %0 \n\t"
yading@11 62 : "=r"(v), "+a"(p));
yading@11 63 return v;
yading@11 64 }
yading@11 65
yading@11 66 #define AV_WL16 AV_WL16
yading@11 67 static av_always_inline void AV_WL16(void *p, uint16_t v)
yading@11 68 {
yading@11 69 __asm__ volatile ("loadacc, %1 \n\t"
yading@11 70 "storeacc, (%0+) \n\t"
yading@11 71 "lsr8 \n\t"
yading@11 72 "storeacc, (%0+) \n\t"
yading@11 73 : "+&a"(p) : "r"(v));
yading@11 74 }
yading@11 75
yading@11 76 #define AV_RB32 AV_RB32
yading@11 77 static av_always_inline uint32_t AV_RB32(const void *p)
yading@11 78 {
yading@11 79 uint32_t v;
yading@11 80 __asm__ ("loadacc, (%1+) \n\t"
yading@11 81 "rol8 \n\t"
yading@11 82 "rol8 \n\t"
yading@11 83 "rol8 \n\t"
yading@11 84 "storeacc, %0 \n\t"
yading@11 85 "loadacc, (%1+) \n\t"
yading@11 86 "rol8 \n\t"
yading@11 87 "rol8 \n\t"
yading@11 88 "add, %0 \n\t"
yading@11 89 "loadacc, (%1+) \n\t"
yading@11 90 "rol8 \n\t"
yading@11 91 "add, %0 \n\t"
yading@11 92 "loadacc, (%1+) \n\t"
yading@11 93 "add, %0 \n\t"
yading@11 94 : "=r"(v), "+a"(p));
yading@11 95 return v;
yading@11 96 }
yading@11 97
yading@11 98 #define AV_WB32 AV_WB32
yading@11 99 static av_always_inline void AV_WB32(void *p, uint32_t v)
yading@11 100 {
yading@11 101 __asm__ volatile ("loadacc, #4 \n\t"
yading@11 102 "add, %0 \n\t"
yading@11 103 "loadacc, %1 \n\t"
yading@11 104 "storeacc, (-%0) \n\t"
yading@11 105 "lsr8 \n\t"
yading@11 106 "storeacc, (-%0) \n\t"
yading@11 107 "lsr8 \n\t"
yading@11 108 "storeacc, (-%0) \n\t"
yading@11 109 "lsr8 \n\t"
yading@11 110 "storeacc, (-%0) \n\t"
yading@11 111 : "+&a"(p) : "r"(v));
yading@11 112 }
yading@11 113
yading@11 114 #define AV_RL32 AV_RL32
yading@11 115 static av_always_inline uint32_t AV_RL32(const void *p)
yading@11 116 {
yading@11 117 uint32_t v;
yading@11 118 __asm__ ("loadacc, (%1+) \n\t"
yading@11 119 "storeacc, %0 \n\t"
yading@11 120 "loadacc, (%1+) \n\t"
yading@11 121 "rol8 \n\t"
yading@11 122 "add, %0 \n\t"
yading@11 123 "loadacc, (%1+) \n\t"
yading@11 124 "rol8 \n\t"
yading@11 125 "rol8 \n\t"
yading@11 126 "add, %0 \n\t"
yading@11 127 "loadacc, (%1+) \n\t"
yading@11 128 "rol8 \n\t"
yading@11 129 "rol8 \n\t"
yading@11 130 "rol8 \n\t"
yading@11 131 "add, %0 \n\t"
yading@11 132 : "=r"(v), "+a"(p));
yading@11 133 return v;
yading@11 134 }
yading@11 135
yading@11 136 #define AV_WL32 AV_WL32
yading@11 137 static av_always_inline void AV_WL32(void *p, uint32_t v)
yading@11 138 {
yading@11 139 __asm__ volatile ("loadacc, %1 \n\t"
yading@11 140 "storeacc, (%0+) \n\t"
yading@11 141 "lsr8 \n\t"
yading@11 142 "storeacc, (%0+) \n\t"
yading@11 143 "lsr8 \n\t"
yading@11 144 "storeacc, (%0+) \n\t"
yading@11 145 "lsr8 \n\t"
yading@11 146 "storeacc, (%0+) \n\t"
yading@11 147 : "+&a"(p) : "r"(v));
yading@11 148 }
yading@11 149
yading@11 150 #endif /* AVUTIL_TOMI_INTREADWRITE_H */