1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2009 Mans Rullgard <mans@mansr.com> 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#include "libavutil/arm/asm.S" 22cabdff1aSopenharmony_ci 23cabdff1aSopenharmony_cifunction ff_pix_abs16_armv6, export=1 24cabdff1aSopenharmony_ci ldr r0, [sp] 25cabdff1aSopenharmony_ci push {r4-r9, lr} 26cabdff1aSopenharmony_ci mov r12, #0 27cabdff1aSopenharmony_ci mov lr, #0 28cabdff1aSopenharmony_ci ldm r1, {r4-r7} 29cabdff1aSopenharmony_ci ldr r8, [r2] 30cabdff1aSopenharmony_ci1: 31cabdff1aSopenharmony_ci ldr r9, [r2, #4] 32cabdff1aSopenharmony_ci pld [r1, r3] 33cabdff1aSopenharmony_ci usada8 r12, r4, r8, r12 34cabdff1aSopenharmony_ci ldr r8, [r2, #8] 35cabdff1aSopenharmony_ci pld [r2, r3] 36cabdff1aSopenharmony_ci usada8 lr, r5, r9, lr 37cabdff1aSopenharmony_ci ldr r9, [r2, #12] 38cabdff1aSopenharmony_ci usada8 r12, r6, r8, r12 39cabdff1aSopenharmony_ci subs r0, r0, #1 40cabdff1aSopenharmony_ci usada8 lr, r7, r9, lr 41cabdff1aSopenharmony_ci beq 2f 42cabdff1aSopenharmony_ci add r1, r1, r3 43cabdff1aSopenharmony_ci ldm r1, {r4-r7} 44cabdff1aSopenharmony_ci add r2, r2, r3 45cabdff1aSopenharmony_ci ldr r8, [r2] 46cabdff1aSopenharmony_ci b 1b 47cabdff1aSopenharmony_ci2: 48cabdff1aSopenharmony_ci add r0, r12, lr 49cabdff1aSopenharmony_ci pop {r4-r9, pc} 50cabdff1aSopenharmony_ciendfunc 51cabdff1aSopenharmony_ci 52cabdff1aSopenharmony_cifunction ff_pix_abs16_x2_armv6, export=1 53cabdff1aSopenharmony_ci ldr r12, [sp] 54cabdff1aSopenharmony_ci push {r4-r11, lr} 55cabdff1aSopenharmony_ci mov r0, #0 56cabdff1aSopenharmony_ci mov lr, #1 57cabdff1aSopenharmony_ci orr lr, lr, lr, lsl #8 58cabdff1aSopenharmony_ci orr lr, lr, lr, lsl #16 59cabdff1aSopenharmony_ci1: 60cabdff1aSopenharmony_ci ldr r8, [r2] 61cabdff1aSopenharmony_ci ldr r9, [r2, #4] 62cabdff1aSopenharmony_ci lsr r10, r8, #8 63cabdff1aSopenharmony_ci ldr r4, [r1] 64cabdff1aSopenharmony_ci lsr r6, r9, #8 65cabdff1aSopenharmony_ci orr r10, r10, r9, lsl #24 66cabdff1aSopenharmony_ci ldr r5, [r2, #8] 67cabdff1aSopenharmony_ci eor r11, r8, r10 68cabdff1aSopenharmony_ci uhadd8 r7, r8, r10 69cabdff1aSopenharmony_ci orr r6, r6, r5, lsl #24 70cabdff1aSopenharmony_ci and r11, r11, lr 71cabdff1aSopenharmony_ci uadd8 r7, r7, r11 72cabdff1aSopenharmony_ci ldr r8, [r1, #4] 73cabdff1aSopenharmony_ci usada8 r0, r4, r7, r0 74cabdff1aSopenharmony_ci eor r7, r9, r6 75cabdff1aSopenharmony_ci lsr r10, r5, #8 76cabdff1aSopenharmony_ci and r7, r7, lr 77cabdff1aSopenharmony_ci uhadd8 r4, r9, r6 78cabdff1aSopenharmony_ci ldr r6, [r2, #12] 79cabdff1aSopenharmony_ci uadd8 r4, r4, r7 80cabdff1aSopenharmony_ci pld [r1, r3] 81cabdff1aSopenharmony_ci orr r10, r10, r6, lsl #24 82cabdff1aSopenharmony_ci usada8 r0, r8, r4, r0 83cabdff1aSopenharmony_ci ldr r4, [r1, #8] 84cabdff1aSopenharmony_ci eor r11, r5, r10 85cabdff1aSopenharmony_ci ldrb r7, [r2, #16] 86cabdff1aSopenharmony_ci and r11, r11, lr 87cabdff1aSopenharmony_ci uhadd8 r8, r5, r10 88cabdff1aSopenharmony_ci ldr r5, [r1, #12] 89cabdff1aSopenharmony_ci uadd8 r8, r8, r11 90cabdff1aSopenharmony_ci pld [r2, r3] 91cabdff1aSopenharmony_ci lsr r10, r6, #8 92cabdff1aSopenharmony_ci usada8 r0, r4, r8, r0 93cabdff1aSopenharmony_ci orr r10, r10, r7, lsl #24 94cabdff1aSopenharmony_ci subs r12, r12, #1 95cabdff1aSopenharmony_ci eor r11, r6, r10 96cabdff1aSopenharmony_ci add r1, r1, r3 97cabdff1aSopenharmony_ci uhadd8 r9, r6, r10 98cabdff1aSopenharmony_ci and r11, r11, lr 99cabdff1aSopenharmony_ci uadd8 r9, r9, r11 100cabdff1aSopenharmony_ci add r2, r2, r3 101cabdff1aSopenharmony_ci usada8 r0, r5, r9, r0 102cabdff1aSopenharmony_ci bgt 1b 103cabdff1aSopenharmony_ci 104cabdff1aSopenharmony_ci pop {r4-r11, pc} 105cabdff1aSopenharmony_ciendfunc 106cabdff1aSopenharmony_ci 107cabdff1aSopenharmony_ci.macro usad_y2 p0, p1, p2, p3, n0, n1, n2, n3 108cabdff1aSopenharmony_ci ldr \n0, [r2] 109cabdff1aSopenharmony_ci eor \n1, \p0, \n0 110cabdff1aSopenharmony_ci uhadd8 \p0, \p0, \n0 111cabdff1aSopenharmony_ci and \n1, \n1, lr 112cabdff1aSopenharmony_ci ldr \n2, [r1] 113cabdff1aSopenharmony_ci uadd8 \p0, \p0, \n1 114cabdff1aSopenharmony_ci ldr \n1, [r2, #4] 115cabdff1aSopenharmony_ci usada8 r0, \p0, \n2, r0 116cabdff1aSopenharmony_ci pld [r1, r3] 117cabdff1aSopenharmony_ci eor \n3, \p1, \n1 118cabdff1aSopenharmony_ci uhadd8 \p1, \p1, \n1 119cabdff1aSopenharmony_ci and \n3, \n3, lr 120cabdff1aSopenharmony_ci ldr \p0, [r1, #4] 121cabdff1aSopenharmony_ci uadd8 \p1, \p1, \n3 122cabdff1aSopenharmony_ci ldr \n2, [r2, #8] 123cabdff1aSopenharmony_ci usada8 r0, \p1, \p0, r0 124cabdff1aSopenharmony_ci pld [r2, r3] 125cabdff1aSopenharmony_ci eor \p0, \p2, \n2 126cabdff1aSopenharmony_ci uhadd8 \p2, \p2, \n2 127cabdff1aSopenharmony_ci and \p0, \p0, lr 128cabdff1aSopenharmony_ci ldr \p1, [r1, #8] 129cabdff1aSopenharmony_ci uadd8 \p2, \p2, \p0 130cabdff1aSopenharmony_ci ldr \n3, [r2, #12] 131cabdff1aSopenharmony_ci usada8 r0, \p2, \p1, r0 132cabdff1aSopenharmony_ci eor \p1, \p3, \n3 133cabdff1aSopenharmony_ci uhadd8 \p3, \p3, \n3 134cabdff1aSopenharmony_ci and \p1, \p1, lr 135cabdff1aSopenharmony_ci ldr \p0, [r1, #12] 136cabdff1aSopenharmony_ci uadd8 \p3, \p3, \p1 137cabdff1aSopenharmony_ci add r1, r1, r3 138cabdff1aSopenharmony_ci usada8 r0, \p3, \p0, r0 139cabdff1aSopenharmony_ci add r2, r2, r3 140cabdff1aSopenharmony_ci.endm 141cabdff1aSopenharmony_ci 142cabdff1aSopenharmony_cifunction ff_pix_abs16_y2_armv6, export=1 143cabdff1aSopenharmony_ci pld [r1] 144cabdff1aSopenharmony_ci pld [r2] 145cabdff1aSopenharmony_ci ldr r12, [sp] 146cabdff1aSopenharmony_ci push {r4-r11, lr} 147cabdff1aSopenharmony_ci mov r0, #0 148cabdff1aSopenharmony_ci mov lr, #1 149cabdff1aSopenharmony_ci orr lr, lr, lr, lsl #8 150cabdff1aSopenharmony_ci orr lr, lr, lr, lsl #16 151cabdff1aSopenharmony_ci ldr r4, [r2] 152cabdff1aSopenharmony_ci ldr r5, [r2, #4] 153cabdff1aSopenharmony_ci ldr r6, [r2, #8] 154cabdff1aSopenharmony_ci ldr r7, [r2, #12] 155cabdff1aSopenharmony_ci add r2, r2, r3 156cabdff1aSopenharmony_ci1: 157cabdff1aSopenharmony_ci usad_y2 r4, r5, r6, r7, r8, r9, r10, r11 158cabdff1aSopenharmony_ci subs r12, r12, #2 159cabdff1aSopenharmony_ci usad_y2 r8, r9, r10, r11, r4, r5, r6, r7 160cabdff1aSopenharmony_ci bgt 1b 161cabdff1aSopenharmony_ci 162cabdff1aSopenharmony_ci pop {r4-r11, pc} 163cabdff1aSopenharmony_ciendfunc 164cabdff1aSopenharmony_ci 165cabdff1aSopenharmony_cifunction ff_pix_abs8_armv6, export=1 166cabdff1aSopenharmony_ci pld [r2, r3] 167cabdff1aSopenharmony_ci ldr r12, [sp] 168cabdff1aSopenharmony_ci push {r4-r9, lr} 169cabdff1aSopenharmony_ci mov r0, #0 170cabdff1aSopenharmony_ci mov lr, #0 171cabdff1aSopenharmony_ci ldrd_post r4, r5, r1, r3 172cabdff1aSopenharmony_ci1: 173cabdff1aSopenharmony_ci subs r12, r12, #2 174cabdff1aSopenharmony_ci ldr r7, [r2, #4] 175cabdff1aSopenharmony_ci ldr_post r6, r2, r3 176cabdff1aSopenharmony_ci ldrd_post r8, r9, r1, r3 177cabdff1aSopenharmony_ci usada8 r0, r4, r6, r0 178cabdff1aSopenharmony_ci pld [r2, r3] 179cabdff1aSopenharmony_ci usada8 lr, r5, r7, lr 180cabdff1aSopenharmony_ci ldr r7, [r2, #4] 181cabdff1aSopenharmony_ci ldr_post r6, r2, r3 182cabdff1aSopenharmony_ci beq 2f 183cabdff1aSopenharmony_ci ldrd_post r4, r5, r1, r3 184cabdff1aSopenharmony_ci usada8 r0, r8, r6, r0 185cabdff1aSopenharmony_ci pld [r2, r3] 186cabdff1aSopenharmony_ci usada8 lr, r9, r7, lr 187cabdff1aSopenharmony_ci b 1b 188cabdff1aSopenharmony_ci2: 189cabdff1aSopenharmony_ci usada8 r0, r8, r6, r0 190cabdff1aSopenharmony_ci usada8 lr, r9, r7, lr 191cabdff1aSopenharmony_ci add r0, r0, lr 192cabdff1aSopenharmony_ci pop {r4-r9, pc} 193cabdff1aSopenharmony_ciendfunc 194cabdff1aSopenharmony_ci 195cabdff1aSopenharmony_cifunction ff_sse16_armv6, export=1 196cabdff1aSopenharmony_ci ldr r12, [sp] 197cabdff1aSopenharmony_ci push {r4-r9, lr} 198cabdff1aSopenharmony_ci mov r0, #0 199cabdff1aSopenharmony_ci1: 200cabdff1aSopenharmony_ci ldrd r4, r5, [r1] 201cabdff1aSopenharmony_ci ldr r8, [r2] 202cabdff1aSopenharmony_ci uxtb16 lr, r4 203cabdff1aSopenharmony_ci uxtb16 r4, r4, ror #8 204cabdff1aSopenharmony_ci uxtb16 r9, r8 205cabdff1aSopenharmony_ci uxtb16 r8, r8, ror #8 206cabdff1aSopenharmony_ci ldr r7, [r2, #4] 207cabdff1aSopenharmony_ci usub16 lr, lr, r9 208cabdff1aSopenharmony_ci usub16 r4, r4, r8 209cabdff1aSopenharmony_ci smlad r0, lr, lr, r0 210cabdff1aSopenharmony_ci uxtb16 r6, r5 211cabdff1aSopenharmony_ci uxtb16 lr, r5, ror #8 212cabdff1aSopenharmony_ci uxtb16 r8, r7 213cabdff1aSopenharmony_ci uxtb16 r9, r7, ror #8 214cabdff1aSopenharmony_ci smlad r0, r4, r4, r0 215cabdff1aSopenharmony_ci ldrd r4, r5, [r1, #8] 216cabdff1aSopenharmony_ci usub16 r6, r6, r8 217cabdff1aSopenharmony_ci usub16 r8, lr, r9 218cabdff1aSopenharmony_ci ldr r7, [r2, #8] 219cabdff1aSopenharmony_ci smlad r0, r6, r6, r0 220cabdff1aSopenharmony_ci uxtb16 lr, r4 221cabdff1aSopenharmony_ci uxtb16 r4, r4, ror #8 222cabdff1aSopenharmony_ci uxtb16 r9, r7 223cabdff1aSopenharmony_ci uxtb16 r7, r7, ror #8 224cabdff1aSopenharmony_ci smlad r0, r8, r8, r0 225cabdff1aSopenharmony_ci ldr r8, [r2, #12] 226cabdff1aSopenharmony_ci usub16 lr, lr, r9 227cabdff1aSopenharmony_ci usub16 r4, r4, r7 228cabdff1aSopenharmony_ci smlad r0, lr, lr, r0 229cabdff1aSopenharmony_ci uxtb16 r6, r5 230cabdff1aSopenharmony_ci uxtb16 r5, r5, ror #8 231cabdff1aSopenharmony_ci uxtb16 r9, r8 232cabdff1aSopenharmony_ci uxtb16 r8, r8, ror #8 233cabdff1aSopenharmony_ci smlad r0, r4, r4, r0 234cabdff1aSopenharmony_ci usub16 r6, r6, r9 235cabdff1aSopenharmony_ci usub16 r5, r5, r8 236cabdff1aSopenharmony_ci smlad r0, r6, r6, r0 237cabdff1aSopenharmony_ci add r1, r1, r3 238cabdff1aSopenharmony_ci add r2, r2, r3 239cabdff1aSopenharmony_ci subs r12, r12, #1 240cabdff1aSopenharmony_ci smlad r0, r5, r5, r0 241cabdff1aSopenharmony_ci bgt 1b 242cabdff1aSopenharmony_ci 243cabdff1aSopenharmony_ci pop {r4-r9, pc} 244cabdff1aSopenharmony_ciendfunc 245