]> git.sesse.net Git - x264/blobdiff - common/arm/dct-a.S
cli: Refactor filter option parsing
[x264] / common / arm / dct-a.S
index c5490bdbf2ff260c06a8c5c3080f734fef9cfb42..a1984a5517d51d9e7c36983964e89482e5168036 100644 (file)
@@ -1,9 +1,10 @@
 /****************************************************************************
  * dct-a.S: arm transform and zigzag
  *****************************************************************************
- * Copyright (C) 2009-2014 x264 project
+ * Copyright (C) 2009-2016 x264 project
  *
  * Authors: David Conrad <lessen42@gmail.com>
+ *          Martin Storsjo <martin@martin.st>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,8 +26,6 @@
 
 #include "asm.S"
 
-.fpu neon
-
 .section .rodata
 .align 4
 
@@ -82,7 +81,7 @@ function x264_dct4x4dc_neon
     vrhadd.s16      d3,  d6,  d7
     vst1.64         {d0-d3}, [r0,:128]
     bx              lr
-.endfunc
+endfunc
 
 function x264_idct4x4dc_neon
     vld1.64         {d0-d3}, [r0,:128]
@@ -94,7 +93,7 @@ function x264_idct4x4dc_neon
     HADAMARD        2, sumsub, d3, d2, d6, d7
     vst1.64         {d0-d3}, [r0,:128]
     bx              lr
-.endfunc
+endfunc
 
 
 .macro DCT_1D d0 d1 d2 d3  d4 d5 d6 d7
@@ -129,7 +128,7 @@ function x264_sub4x4_dct_neon
     DCT_1D          d4, d5, d6, d7, d0, d1, d2, d3
     vst1.64         {d4-d7}, [r0,:128]
     bx              lr
-.endfunc
+endfunc
 
 function x264_sub8x4_dct_neon, export=0
     vld1.64         {d0}, [r1,:64], r3
@@ -165,7 +164,7 @@ function x264_sub8x4_dct_neon, export=0
     vst1.64         {d4-d5}, [r0,:128]!
     vst1.64         {d6-d7}, [r0,:128]!
     bx              lr
-.endfunc
+endfunc
 
 function x264_sub8x8_dct_neon
     push            {lr}
@@ -174,7 +173,7 @@ function x264_sub8x8_dct_neon
     bl              x264_sub8x4_dct_neon
     pop             {lr}
     b               x264_sub8x4_dct_neon
-.endfunc
+endfunc
 
 function x264_sub16x16_dct_neon
     push            {lr}
@@ -195,7 +194,7 @@ function x264_sub16x16_dct_neon
     bl              x264_sub8x4_dct_neon
     pop             {lr}
     b               x264_sub8x4_dct_neon
-.endfunc
+endfunc
 
 
 .macro DCT8_1D type
@@ -279,7 +278,7 @@ function x264_sub8x8_dct8_neon
     vst1.64         {d24-d27}, [r0,:128]!
     vst1.64         {d28-d31}, [r0,:128]!
     bx              lr
-.endfunc
+endfunc
 
 function x264_sub16x16_dct8_neon
     push            {lr}
@@ -294,7 +293,7 @@ function x264_sub16x16_dct8_neon
     sub             r1,  r1,  #FENC_STRIDE*8 - 8
     sub             r2,  r2,  #FDEC_STRIDE*8 - 8
     b               X(x264_sub8x8_dct8_neon)
-.endfunc
+endfunc
 
 
 // First part of IDCT (minus final SUMSUB_BA)
@@ -336,7 +335,7 @@ function x264_add4x4_idct_neon
     vst1.32         {d2[1]}, [r0,:32], r2
     vst1.32         {d2[0]}, [r0,:32], r2
     bx              lr
-.endfunc
+endfunc
 
 function x264_add8x4_idct_neon, export=0
     vld1.64         {d0-d3}, [r1,:128]!
@@ -376,7 +375,7 @@ function x264_add8x4_idct_neon, export=0
     vst1.32         {d2}, [r0,:64], r2
     vst1.32         {d3}, [r0,:64], r2
     bx              lr
-.endfunc
+endfunc
 
 function x264_add8x8_idct_neon
     mov             r2, #FDEC_STRIDE
@@ -384,7 +383,7 @@ function x264_add8x8_idct_neon
     bl              x264_add8x4_idct_neon
     mov             lr, ip
     b               x264_add8x4_idct_neon
-.endfunc
+endfunc
 
 function x264_add16x16_idct_neon
     mov             r2, #FDEC_STRIDE
@@ -401,7 +400,7 @@ function x264_add16x16_idct_neon
     bl              x264_add8x4_idct_neon
     mov             lr, ip
     b               x264_add8x4_idct_neon
-.endfunc
+endfunc
 
 
 .macro IDCT8_1D type
@@ -498,7 +497,7 @@ function x264_add8x8_idct8_neon
     vst1.64         {d6}, [r0,:64], r2
     vst1.64         {d7}, [r0,:64], r2
     bx              lr
-.endfunc
+endfunc
 
 function x264_add16x16_idct8_neon
     mov             ip,  lr
@@ -510,7 +509,7 @@ function x264_add16x16_idct8_neon
     sub             r0,  r0,  #8*FDEC_STRIDE-8
     mov             lr,  ip
     b               X(x264_add8x8_idct8_neon)
-.endfunc
+endfunc
 
 
 function x264_add8x8_idct_dc_neon
@@ -562,7 +561,7 @@ function x264_add8x8_idct_dc_neon
     vst1.64         {d6}, [r0,:64], r2
     vst1.64         {d7}, [r0,:64], r2
     bx              lr
-.endfunc
+endfunc
 
 .macro ADD16x4_IDCT_DC dc
     vld1.64         {d16-d17}, [r0,:128], r3
@@ -610,7 +609,7 @@ function x264_add16x16_idct_dc_neon
     ADD16x4_IDCT_DC d2
     ADD16x4_IDCT_DC d3
     bx              lr
-.endfunc
+endfunc
 
 function x264_sub8x8_dct_dc_neon
     mov             r3,  #FENC_STRIDE
@@ -658,7 +657,100 @@ function x264_sub8x8_dct_dc_neon
     vpadd.s16       d0,  d0,  d1
     vst1.64         {d0}, [r0,:64]
     bx              lr
-.endfunc
+endfunc
+
+function x264_sub8x16_dct_dc_neon
+    mov             r3,  #FENC_STRIDE
+    mov             ip,  #FDEC_STRIDE
+    vld1.64         {d16}, [r1,:64], r3
+    vld1.64         {d17}, [r2,:64], ip
+    vsubl.u8        q8,  d16, d17
+    vld1.64         {d18}, [r1,:64], r3
+    vld1.64         {d19}, [r2,:64], ip
+    vsubl.u8        q9,  d18, d19
+    vld1.64         {d20}, [r1,:64], r3
+    vld1.64         {d21}, [r2,:64], ip
+    vsubl.u8        q10, d20, d21
+    vld1.64         {d22}, [r1,:64], r3
+    vadd.s16        q0,  q8,  q9
+    vld1.64         {d23}, [r2,:64], ip
+    vsubl.u8        q11, d22, d23
+    vld1.64         {d24}, [r1,:64], r3
+    vadd.s16        q0,  q0,  q10
+    vld1.64         {d25}, [r2,:64], ip
+    vsubl.u8        q12, d24, d25
+    vld1.64         {d26}, [r1,:64], r3
+    vadd.s16        q0,  q0,  q11
+    vld1.64         {d27}, [r2,:64], ip
+    vsubl.u8        q13, d26, d27
+    vld1.64         {d28}, [r1,:64], r3
+    vld1.64         {d29}, [r2,:64], ip
+    vsubl.u8        q14, d28, d29
+    vld1.64         {d30}, [r1,:64], r3
+    vadd.s16        q1,  q12, q13
+    vld1.64         {d31}, [r2,:64], ip
+    vsubl.u8        q15, d30, d31
+
+    vld1.64         {d16}, [r1,:64], r3
+    vadd.s16        q1,  q1,  q14
+    vld1.64         {d17}, [r2,:64], ip
+    vadd.s16        q1,  q1,  q15
+    vld1.64         {d18}, [r1,:64], r3
+    vsubl.u8        q8,  d16, d17
+    vld1.64         {d19}, [r2,:64], ip
+    vsubl.u8        q9,  d18, d19
+    vld1.64         {d20}, [r1,:64], r3
+    vld1.64         {d21}, [r2,:64], ip
+    vsubl.u8        q10, d20, d21
+    vld1.64         {d22}, [r1,:64], r3
+    vadd.s16        q2,  q8,  q9
+    vld1.64         {d23}, [r2,:64], ip
+    vsubl.u8        q11, d22, d23
+    vld1.64         {d24}, [r1,:64], r3
+    vadd.s16        q2,  q2,  q10
+    vld1.64         {d25}, [r2,:64], ip
+    vsubl.u8        q12, d24, d25
+    vld1.64         {d26}, [r1,:64], r3
+    vadd.s16        q2,  q2,  q11
+    vld1.64         {d27}, [r2,:64], ip
+    vsubl.u8        q13, d26, d27
+    vld1.64         {d28}, [r1,:64], r3
+    vld1.64         {d29}, [r2,:64], ip
+    vsubl.u8        q14, d28, d29
+    vld1.64         {d30}, [r1,:64], r3
+    vadd.s16        q3,  q12, q13
+    vld1.64         {d31}, [r2,:64], ip
+    vsubl.u8        q15, d30, d31
+    vadd.s16        q3,  q3,  q14
+
+    vadd.s16        d16, d0,  d1  @ b0
+    vadd.s16        q3,  q3,  q15
+    vsub.s16        d17, d0,  d1  @ b4
+    vadd.s16        d18, d2,  d3  @ b1
+    vsub.s16        d19, d2,  d3  @ b5
+    vadd.s16        d20, d4,  d5  @ b2
+    vsub.s16        d21, d4,  d5  @ b6
+    vadd.s16        d22, d6,  d7  @ b3
+    vsub.s16        d23, d6,  d7  @ b7
+    vadd.s16        q0,  q8,  q9  @ b0 + b1, b4 + b5; a0, a2
+    vsub.s16        q1,  q8,  q9  @ b0 - b1, b4 - b5; a4, a6
+    vadd.s16        q2,  q10, q11 @ b2 + b3, b6 + b7; a1, a3
+    vsub.s16        q3,  q10, q11 @ b2 - b3, b6 - b7; a5, a7
+
+    vadd.s16        q8,  q0,  q2  @ a0 + a1, a2 + a3
+    vsub.s16        q9,  q0,  q2  @ a0 - a1, a2 - a3
+    vsub.s16        q10, q1,  q3  @ a4 - a5, a6 - a7
+    vadd.s16        q11, q1,  q3  @ a4 + a5, a6 + a7
+
+    vpadd.s16       d0,  d16, d17
+    vpadd.s16       d1,  d18, d19
+    vpadd.s16       d2,  d20, d21
+    vpadd.s16       d3,  d22, d23
+    vpadd.s16       d0,  d0,  d1
+    vpadd.s16       d1,  d2,  d3
+    vst1.64         {q0}, [r0,:64]
+    bx              lr
+endfunc
 
 
 function x264_zigzag_scan_4x4_frame_neon
@@ -671,4 +763,4 @@ function x264_zigzag_scan_4x4_frame_neon
     vtbl.8      d7, {d2-d3}, d19
     vst1.64     {d4-d7},   [r0,:128]
     bx          lr
-.endfunc
+endfunc