mcst-linux-kernel/patches-2024.06.26/x264-0.164/0003-Add-source-sparc.patch

1347 lines
28 KiB
Diff

--- /dev/null 2019-08-08 12:00:33.421404933 +0300
+++ b/common/sparc/pixel.h 2020-02-02 17:35:59.661227370 +0300
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * pixel.h: sparc pixel metrics
+ *****************************************************************************
+ * Copyright (C) 2005-2014 x264 project
+ *
+ * Authors: Phil Jensen <philj@csufresno.edu>
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
+ *
+ * This program is also available under a commercial proprietary license.
+ * For more information, contact us at licensing@x264.com.
+ *****************************************************************************/
+
+#ifndef X264_SPARC_PIXEL_H
+#define X264_SPARC_PIXEL_H
+
+int x264_pixel_sad_8x8_vis ( uint8_t *, intptr_t, uint8_t *, intptr_t );
+int x264_pixel_sad_8x16_vis ( uint8_t *, intptr_t, uint8_t *, intptr_t );
+int x264_pixel_sad_16x8_vis ( uint8_t *, intptr_t, uint8_t *, intptr_t );
+int x264_pixel_sad_16x16_vis( uint8_t *, intptr_t, uint8_t *, intptr_t );
+
+#endif
--- /dev/null 2019-08-08 12:00:33.421404933 +0300
+++ ./common/sparc/pixel-a.S 2020-01-27 14:40:28.593197122 +0300
@@ -0,0 +1,1089 @@
+/*****************************************************************************
+ * pixel.asm: sparc pixel metrics
+ *****************************************************************************
+ * Copyright (C) 2005-2014 x264 project
+ *
+ * Authors: Phil Jensen <philj@csufresno.edu>
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
+ *
+ * This program is also available under a commercial proprietary license.
+ * For more information, contact us at licensing@x264.com.
+ *****************************************************************************/
+
+! VIS optimized SAD for UltraSPARC
+
+.text
+.global x264_pixel_sad_8x8_vis
+x264_pixel_sad_8x8_vis:
+ save %sp, -120, %sp
+
+ fzero %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ std %f12, [%fp-24]
+ ld [%fp-20], %i0
+
+ ret
+ restore
+
+.global x264_pixel_sad_8x16_vis
+x264_pixel_sad_8x16_vis:
+ save %sp, -120, %sp
+
+ fzero %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ std %f12, [%fp-24]
+ ld [%fp-20], %i0
+
+ ret
+ restore
+
+.global x264_pixel_sad_16x8_vis
+x264_pixel_sad_16x8_vis:
+ save %sp, -120, %sp
+
+ fzero %f12 ! zero out the accumulator used for pdist
+
+ sub %i1, 8, %i1 ! reduce stride by 8, since we are moving forward 8 each block
+ sub %i3, 8, %i3 ! same here, reduce stride by 8
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ std %f12, [%fp-24]
+ ld [%fp-20], %i0
+
+ ret
+ restore
+
+.global x264_pixel_sad_16x16_vis
+x264_pixel_sad_16x16_vis:
+ save %sp, -120, %sp
+
+ fzero %f12 ! zero out the accumulator used for pdist
+
+ sub %i1, 8, %i1 ! reduce stride by 8, since we are moving forward 8 each block
+ sub %i3, 8, %i3 ! same here, reduce stride by 8
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, 8, %i0
+ add %i2, 8, %i2
+ pdist %f4, %f10, %f12
+
+ alignaddr %i0, %g0, %l0
+ ldd [%l0], %f0
+ ldd [%l0+8], %f2
+ faligndata %f0, %f2, %f4
+
+ alignaddr %i2, %g0, %l2
+ ldd [%l2], %f6
+ ldd [%l2+8], %f8
+ faligndata %f6, %f8, %f10
+
+ add %i0, %i1, %i0
+ add %i2, %i3, %i2
+ pdist %f4, %f10, %f12
+
+ std %f12, [%fp-24]
+ ld [%fp-20], %i0
+
+ ret
+ restore
--- a/Makefile 2023-07-04 13:41:52.580553608 +0300
+++ b/Makefile 2023-07-04 13:32:56.885639096 +0300
@@ -195,6 +195,16 @@
OBJCHK += tools/checkasm-aarch64.o
endif
+# VIS optims
+ifeq ($(SYS_ARCH),SPARC)
+ifneq ($(findstring HAVE_VIS 1, $(CONFIG)),)
+ifeq ($(findstring HIGH_BIT_DEPTH, $(CONFIG)),)
+ASMSRC += common/sparc/pixel-a.S
+OBJASM = $(ASMSRC:%.S=%.o)
+endif
+endif
+endif
+
# MSA optims
ifeq ($(SYS_ARCH),MIPS)
ifneq ($(findstring HAVE_MSA 1, $(CONFIG)),)
--- a/configure 2023-07-04 13:41:52.588553771 +0300
+++ b/configure 2023-07-04 13:29:18.933199715 +0300
@@ -825,6 +825,23 @@
;;
sparc)
ARCH="SPARC"
+ case $host_os in
+ sunos*|solaris*)
+ if [ $asm = auto ]; then
+ if ! echo $CFLAGS | grep -Eq '\-mcpu' ; then
+ CFLAGS="$CFLAGS -mcpu=ultrasparc"
+ LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
+ fi
+ AS="${AS-${cross_prefix}as}"
+ ASFLAGS="$ASFLAGS -xarch=v8plusa"
+ fi
+ ;;
+ *linux*)
+ if [ $asm = auto ]; then
+ AS="$CC -c"
+ fi
+ ;;
+ esac
;;
mips*)
ARCH="MIPS"
@@ -1033,6 +1050,16 @@
fi
fi
+if [ $asm = auto -a $ARCH = SPARC ] ; then
+ if cc_check '' '' '__asm__("pdist %f4, %f10, %f12");' ; then
+ define HAVE_VIS
+ elif [ $host_cpu = sparc64 ]; then
+ echo "You specified a pre-VIS SPARC CPU in your CFLAGS."
+ echo "If you really want to run on such a CPU, configure with --disable-asm."
+ exit 1
+ fi
+fi
+
[ $asm = no ] && AS=""
[ "x$AS" = x ] && asm="no" || asm="yes"
@@ -1392,12 +1419,15 @@
fi
if [ "$bit_depth" = "all" ]; then
+ define HIGH_BIT_DEPTH
define HAVE_BITDEPTH8
define HAVE_BITDEPTH10
elif [ "$bit_depth" -eq "8" ]; then
define HAVE_BITDEPTH8
+ ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=0"
elif [ "$bit_depth" -eq "10" ]; then
define HAVE_BITDEPTH10
+ ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH=1"
opencl="no"
fi
--- a/x264.h 2023-07-04 13:41:52.588553771 +0300
+++ b/x264.h 2023-07-04 12:33:13.144797664 +0300
@@ -184,6 +184,12 @@
/* MIPS */
#define X264_CPU_MSA 0x0000001U /* MIPS MSA */
+/* SPARC */
+#define X264_CPU_VIS1 0x0000001 /* SPARC VIS */
+#define X264_CPU_VIS2 0x0000004 /* SPARC VIS2 */
+#define X264_CPU_VIS2P 0x0000008 /* SPARC VIS2+ */
+#define X264_CPU_VIS3 0x0000010 /* SPARC VIS3 */
+
/* Analyse flags */
#define X264_ANALYSE_I4x4 0x0001U /* Analyse i4x4 */
#define X264_ANALYSE_I8x8 0x0002U /* Analyse i8x8 (requires 8x8 transform) */
--- a/common/cpu.c 2023-07-04 13:41:52.580553608 +0300
+++ b/common/cpu.c 2023-07-04 12:50:35.601946609 +0300
@@ -100,6 +100,11 @@
{"NEON", X264_CPU_NEON},
#elif ARCH_MIPS
{"MSA", X264_CPU_MSA},
+#elif ARCH_SPARC
+ {"VIS", X264_CPU_VIS1},
+ {"VIS2", X264_CPU_VIS2},
+ {"VIS2+", X264_CPU_VIS2P},
+ {"VIS3", X264_CPU_VIS2},
#endif
{"", 0},
};
@@ -369,6 +374,17 @@
return X264_CPU_E2K;
}
+#elif ARCH_SPARC
+
+uint32_t x264_cpu_detect( void )
+{
+ uint32_t flags = 0;
+#if HAVE_VIS
+ flags |= X264_CPU_VIS1;
+#endif
+ return flags;
+}
+
#elif HAVE_ARMV6
void x264_cpu_neon_test( void );
--- a/common/pixel.c 2023-07-04 13:41:52.584553689 +0300
+++ b/common/pixel.c 2023-07-04 12:30:24.753382896 +0300
@@ -34,6 +34,9 @@
#if HAVE_ALTIVEC
# include "ppc/pixel.h"
#endif
+#if ARCH_SPARC
+# include "sparc/pixel.h"
+#endif
#if ARCH_E2K
# include "e2k/pixel.h"
#endif
@@ -464,6 +467,15 @@
SAD_X( 4x8 )
SAD_X( 4x4 )
+#if !HIGH_BIT_DEPTH
+#if ARCH_SPARC && HAVE_VIS
+SAD_X( 16x16_vis )
+SAD_X( 16x8_vis )
+SAD_X( 8x16_vis )
+SAD_X( 8x8_vis )
+#endif
+#endif // !HIGH_BIT_DEPTH
+
/****************************************************************************
* pixel_satd_x4
* no faster than single satd, but needed for satd to be a drop-in replacement for sad
@@ -1502,6 +1514,15 @@
}
#endif // HAVE_MSA
+#if ARCH_SPARC && HAVE_VIS
+ if( cpu&X264_CPU_VIS1 )
+ {
+ INIT4( sad, _vis );
+ INIT4( sad_x3, _vis );
+ INIT4( sad_x4, _vis );
+ }
+#endif // ARCH_SPARC && HAVE_VIS
+
#endif // HIGH_BIT_DEPTH
#if HAVE_ALTIVEC
if( cpu&X264_CPU_ALTIVEC )
--- a/tools/checkasm.c 2023-07-04 13:41:52.588553771 +0300
+++ b/tools/checkasm.c 2023-07-04 13:16:51.489976959 +0300
@@ -124,6 +124,8 @@
a = b;
#elif ARCH_MIPS
asm volatile( "rdhwr %0, $2" : "=r"(a) :: "memory" );
+#elif ARCH_SPARC && defined(__sparc_v9__)
+ asm volatile( "rd %%tick, %0" : "=r" (a));
#endif
return a;
}
@@ -224,6 +226,11 @@
b->cpu&X264_CPU_ARMV8 ? "armv8" :
#elif ARCH_MIPS
b->cpu&X264_CPU_MSA ? "msa" :
+#elif ARCH_SPARC
+ b->cpu&X264_CPU_VIS3 ? "vis3" :
+ b->cpu&X264_CPU_VIS2P ? "vis2p" :
+ b->cpu&X264_CPU_VIS2 ? "vis2" :
+ b->cpu&X264_CPU_VIS1 ? "vis" :
#endif
"c",
#if ARCH_X86 || ARCH_X86_64
@@ -2991,6 +2998,15 @@
#elif ARCH_MIPS
if( cpu_detect & X264_CPU_MSA )
ret |= add_flags( &cpu0, &cpu1, X264_CPU_MSA, "MSA" );
+#elif ARCH_SPARC
+ if( cpu_detect & X264_CPU_VIS1 )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_VIS1, "VIS" );
+ if( cpu_detect & X264_CPU_VIS2 )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_VIS1, "VIS2" );
+ if( cpu_detect & X264_CPU_VIS2P )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_VIS1, "VIS2+" );
+ if( cpu_detect & X264_CPU_VIS3 )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_VIS1, "VIS3" );
#endif
return ret;
}
@@ -3004,7 +3020,7 @@
if( argc > 1 && !strncmp( argv[1], "--bench", 7 ) )
{
-#if !ARCH_X86 && !ARCH_X86_64 && !ARCH_PPC && !ARCH_E2K && !ARCH_ARM && !ARCH_AARCH64 && !ARCH_MIPS
+#if !ARCH_X86 && !ARCH_X86_64 && !ARCH_PPC && !ARCH_E2K && !ARCH_ARM && !ARCH_AARCH64 && !ARCH_MIPS && !(ARCH_SPARC && defined(__sparc_v9__))
fprintf( stderr, "no --bench for your cpu until you port rdtsc\n" );
return 1;
#endif