]> git.sesse.net Git - x264/blob - common/aarch64/bitstream-a.S
96ab42f8f5a2738069dd6334868cd139f596ff65
[x264] / common / aarch64 / bitstream-a.S
1 /*****************************************************************************
2  * bitstream-a.S: aarch64 bitstream functions
3  *****************************************************************************
4  * Copyright (C) 2014-2015 x264 project
5  *
6  * Authors: Janne Grunau <janne-x264@jannau.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
21  *
22  * This program is also available under a commercial proprietary license.
23  * For more information, contact us at licensing@x264.com.
24  *****************************************************************************/
25
26 #include "asm.S"
27
28 function x264_nal_escape_neon, export=1
29     movi        v0.16b,  #0xff
30     movi        v4.16b,  #4
31     mov         w3,  #3
32     subs        x6,  x1,  x2
33     cbz         x6,  99f
34 0:
35     cmn         x6,  #15
36     b.lt        16f
37     mov         x1,  x2
38     b           100f
39 16:
40     ld1         {v1.16b}, [x1], #16
41     ext         v2.16b, v0.16b, v1.16b, #14
42     ext         v3.16b, v0.16b, v1.16b, #15
43     cmhi        v7.16b, v4.16b, v1.16b
44     cmeq        v5.16b, v2.16b, #0
45     cmeq        v6.16b, v3.16b, #0
46     and         v5.16b, v5.16b, v7.16b
47     and         v5.16b, v5.16b, v6.16b
48     shrn        v7.8b,  v5.8h,  #4
49     mov         x7,  v7.d[0]
50     cbz         x7,  16f
51     mov         x6,  #-16
52 100:
53     umov        w5,  v0.b[14]
54     umov        w4,  v0.b[15]
55     orr         w5,  w4,  w5, lsl #8
56 101:
57     ldrb        w4,  [x1, x6]
58     orr         w9,  w4,  w5, lsl #16
59     cmp         w9,  #3
60     b.hi        102f
61     strb        w3,  [x0], #1
62     orr         w5,  w3,  w5, lsl #8
63 102:
64     adds        x6,  x6,  #1
65     strb        w4,  [x0], #1
66     orr         w5,  w4,  w5, lsl #8
67     b.lt        101b
68     subs        x6,  x1,  x2
69     lsr         w9,  w5,  #8
70     mov         v0.b[14],  w9
71     mov         v0.b[15],  w5
72     b.lt        0b
73
74     ret
75 16:
76     subs        x6,  x1,  x2
77     st1         {v1.16b}, [x0], #16
78     mov         v0.16b, v1.16b
79     b.lt        0b
80 99:
81     ret
82 endfunc