1 /* 2 * Copyright (c) 2016 Google Inc. 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #include "libavutil/aarch64/asm.S" 22 23 // All public functions in this file have the following signature: 24 // typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride, 25 // const uint8_t *ref, ptrdiff_t ref_stride, 26 // int h, int mx, int my); 27 28 function ff_vp9_copy128_aarch64, export=1 29 1: 30 ldp x5, x6, [x2] 31 ldp x7, x8, [x2, #16] 32 stp x5, x6, [x0] 33 ldp x9, x10, [x2, #32] 34 stp x7, x8, [x0, #16] 35 subs w4, w4, #1 36 ldp x11, x12, [x2, #48] 37 stp x9, x10, [x0, #32] 38 stp x11, x12, [x0, #48] 39 ldp x5, x6, [x2, #64] 40 ldp x7, x8, [x2, #80] 41 stp x5, x6, [x0, #64] 42 ldp x9, x10, [x2, #96] 43 stp x7, x8, [x0, #80] 44 ldp x11, x12, [x2, #112] 45 stp x9, x10, [x0, #96] 46 stp x11, x12, [x0, #112] 47 add x2, x2, x3 48 add x0, x0, x1 49 b.ne 1b 50 ret 51 endfunc 52 53 function ff_vp9_copy64_aarch64, export=1 54 1: 55 ldp x5, x6, [x2] 56 ldp x7, x8, [x2, #16] 57 stp x5, x6, [x0] 58 ldp x9, x10, [x2, #32] 59 stp x7, x8, [x0, #16] 60 subs w4, w4, #1 61 ldp x11, x12, [x2, #48] 62 stp x9, x10, [x0, #32] 63 stp x11, x12, [x0, #48] 64 add x2, x2, x3 65 add x0, x0, x1 66 b.ne 1b 67 ret 68 endfunc 69 70 function ff_vp9_copy32_aarch64, export=1 71 1: 72 ldp x5, x6, [x2] 73 ldp x7, x8, [x2, #16] 74 stp x5, x6, [x0] 75 subs w4, w4, #1 76 stp x7, x8, [x0, #16] 77 add x2, x2, x3 78 add x0, x0, x1 79 b.ne 1b 80 ret 81 endfunc 82