Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: google.patch

Issue 1271803002: Add jpeg_skip_scanlines() API to libjpeg-turbo (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « djpeg.c ('k') | jdapistd.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: google.patch
diff --git a/google.patch b/google.patch
deleted file mode 100644
index f12156b4eecc5f5d219844cce2c54c60b1e6d4f3..0000000000000000000000000000000000000000
--- a/google.patch
+++ /dev/null
@@ -1,4438 +0,0 @@
-Index: jdmarker.c
-===================================================================
---- jdmarker.c (revision 829)
-+++ jdmarker.c (working copy)
-@@ -910,7 +910,7 @@
- }
-
- if (cinfo->marker->discarded_bytes != 0) {
-- WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
-+ TRACEMS2(cinfo, 1, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
- cinfo->marker->discarded_bytes = 0;
- }
-
-@@ -944,7 +944,144 @@
- return TRUE;
- }
-
-+#ifdef MOTION_JPEG_SUPPORTED
-
-+/* The default Huffman tables used by motion JPEG frames. When a motion JPEG
-+ * frame does not have DHT tables, we should use the huffman tables suggested by
-+ * the JPEG standard. Each of these tables represents a member of the JHUFF_TBLS
-+ * struct so we can just copy it to the according JHUFF_TBLS member.
-+ */
-+/* DC table 0 */
-+LOCAL(const unsigned char) mjpg_dc0_bits[] = {
-+ 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
-+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-+};
-+
-+LOCAL(const unsigned char) mjpg_dc0_huffval[] = {
-+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-+ 0x08, 0x09, 0x0A, 0x0B
-+};
-+
-+/* DC table 1 */
-+LOCAL(const unsigned char) mjpg_dc1_bits[] = {
-+ 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-+ 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-+};
-+
-+LOCAL(const unsigned char) mjpg_dc1_huffval[] = {
-+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-+ 0x08, 0x09, 0x0A, 0x0B
-+};
-+
-+/* AC table 0 */
-+LOCAL(const unsigned char) mjpg_ac0_bits[] = {
-+ 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03,
-+ 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D
-+};
-+
-+LOCAL(const unsigned char) mjpg_ac0_huffval[] = {
-+ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
-+ 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
-+ 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08,
-+ 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
-+ 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16,
-+ 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
-+ 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
-+ 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
-+ 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-+ 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-+ 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-+ 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
-+ 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-+ 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
-+ 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
-+ 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
-+ 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
-+ 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
-+ 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
-+ 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
-+ 0xF9, 0xFA
-+};
-+
-+/* AC table 1 */
-+LOCAL(const unsigned char) mjpg_ac1_bits[] = {
-+ 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
-+ 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77
-+};
-+
-+LOCAL(const unsigned char) mjpg_ac1_huffval[] = {
-+ 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-+ 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-+ 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-+ 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
-+ 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34,
-+ 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
-+ 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38,
-+ 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-+ 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-+ 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-+ 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-+ 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-+ 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
-+ 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
-+ 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4,
-+ 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
-+ 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2,
-+ 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
-+ 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
-+ 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
-+ 0xF9, 0xFA
-+};
-+
-+/* Loads the default Huffman tables used by motion JPEG frames. This function
-+ * just copies the huffman tables suggested in the JPEG standard when we have
-+ * not load them.
-+ */
-+LOCAL(void)
-+mjpg_load_huff_tables (j_decompress_ptr cinfo)
-+{
-+ JHUFF_TBL *htblptr;
-+
-+ if (! cinfo->dc_huff_tbl_ptrs[0]) {
-+ htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-+ MEMZERO(htblptr, SIZEOF(JHUFF_TBL));
-+ MEMCOPY(&htblptr->bits[1], mjpg_dc0_bits, SIZEOF(mjpg_dc0_bits));
-+ MEMCOPY(&htblptr->huffval[0], mjpg_dc0_huffval, SIZEOF(mjpg_dc0_huffval));
-+ cinfo->dc_huff_tbl_ptrs[0] = htblptr;
-+ }
-+
-+ if (! cinfo->dc_huff_tbl_ptrs[1]) {
-+ htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-+ MEMZERO(htblptr, SIZEOF(JHUFF_TBL));
-+ MEMCOPY(&htblptr->bits[1], mjpg_dc1_bits, SIZEOF(mjpg_dc1_bits));
-+ MEMCOPY(&htblptr->huffval[0], mjpg_dc1_huffval, SIZEOF(mjpg_dc1_huffval));
-+ cinfo->dc_huff_tbl_ptrs[1] = htblptr;
-+ }
-+
-+ if (! cinfo->ac_huff_tbl_ptrs[0]) {
-+ htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-+ MEMZERO(htblptr, SIZEOF(JHUFF_TBL));
-+ MEMCOPY(&htblptr->bits[1], mjpg_ac0_bits, SIZEOF(mjpg_ac0_bits));
-+ MEMCOPY(&htblptr->huffval[0], mjpg_ac0_huffval, SIZEOF(mjpg_ac0_huffval));
-+ cinfo->ac_huff_tbl_ptrs[0] = htblptr;
-+ }
-+
-+ if (! cinfo->ac_huff_tbl_ptrs[1]) {
-+ htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-+ MEMZERO(htblptr, SIZEOF(JHUFF_TBL));
-+ MEMCOPY(&htblptr->bits[1], mjpg_ac1_bits, SIZEOF(mjpg_ac1_bits));
-+ MEMCOPY(&htblptr->huffval[0], mjpg_ac1_huffval, SIZEOF(mjpg_ac1_huffval));
-+ cinfo->ac_huff_tbl_ptrs[1] = htblptr;
-+ }
-+}
-+
-+#else
-+
-+#define mjpg_load_huff_tables(cinfo)
-+
-+#endif /* MOTION_JPEG_SUPPORTED */
-+
-+
- /*
- * Read markers until SOS or EOI.
- *
-@@ -1013,6 +1150,7 @@
- break;
-
- case M_SOS:
-+ mjpg_load_huff_tables(cinfo);
- if (! get_sos(cinfo))
- return JPEG_SUSPENDED;
- cinfo->unread_marker = 0; /* processed the marker */
-Index: jmorecfg.h
-===================================================================
---- jmorecfg.h (revision 829)
-+++ jmorecfg.h (working copy)
-@@ -153,14 +153,18 @@
- /* INT16 must hold at least the values -32768..32767. */
-
- #ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
-+#ifndef _BASETSD_H_ /* basetsd.h correctly defines INT32 */
- typedef short INT16;
- #endif
-+#endif
-
- /* INT32 must hold at least signed 32-bit values. */
-
- #ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
-+#ifndef _BASETSD_H_ /* basetsd.h correctly defines INT32 */
- typedef long INT32;
- #endif
-+#endif
-
- /* Datatype used for image dimensions. The JPEG standard only supports
- * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore
-@@ -210,11 +214,13 @@
- * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
- */
-
-+#ifndef FAR
- #ifdef NEED_FAR_POINTERS
- #define FAR far
- #else
- #define FAR
- #endif
-+#endif
-
-
- /*
-Index: jpeglib.h
-===================================================================
---- jpeglib.h (revision 829)
-+++ jpeglib.h (working copy)
-@@ -15,6 +15,10 @@
- #ifndef JPEGLIB_H
- #define JPEGLIB_H
-
-+/* Begin chromium edits */
-+#include "jpeglibmangler.h"
-+/* End chromium edits */
-+
- /*
- * First we include the configuration files that record how this
- * installation of the JPEG library is set up. jconfig.h can be
-Index: jpeglibmangler.h
-===================================================================
---- jpeglibmangler.h (revision 0)
-+++ jpeglibmangler.h (revision 0)
-@@ -0,0 +1,113 @@
-+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#ifndef THIRD_PARTY_LIBJPEG_TURBO_JPEGLIBMANGLER_H_
-+#define THIRD_PARTY_LIBJPEG_TURBO_JPEGLIBMANGLER_H_
-+
-+// Mangle all externally visible function names so we can build our own libjpeg
-+// without system libraries trying to use it.
-+
-+#define jpeg_make_c_derived_tbl chromium_jpeg_make_c_derived_tbl
-+#define jpeg_gen_optimal_table chromium_jpeg_gen_optimal_table
-+#define jpeg_make_d_derived_tbl chromium_jpeg_make_d_derived_tbl
-+#define jpeg_fill_bit_buffer chromium_jpeg_fill_bit_buffer
-+#define jpeg_huff_decode chromium_jpeg_huff_decode
-+#define jpeg_fdct_islow chromium_jpeg_fdct_islow
-+#define jpeg_fdct_ifast chromium_jpeg_fdct_ifast
-+#define jpeg_fdct_float chromium_jpeg_fdct_float
-+#define jpeg_idct_islow chromium_jpeg_idct_islow
-+#define jpeg_idct_ifast chromium_jpeg_idct_ifast
-+#define jpeg_idct_float chromium_jpeg_idct_float
-+#define jpeg_idct_4x4 chromium_jpeg_idct_4x4
-+#define jpeg_idct_2x2 chromium_jpeg_idct_2x2
-+#define jpeg_idct_1x1 chromium_jpeg_idct_1x1
-+#define jinit_compress_master chromium_jinit_compress_master
-+#define jinit_c_master_control chromium_jinit_c_master_control
-+#define jinit_c_main_controller chromium_jinit_c_main_controller
-+#define jinit_c_prep_controller chromium_jinit_c_prep_controller
-+#define jinit_c_coef_controller chromium_jinit_c_coef_controller
-+#define jinit_color_converter chromium_jinit_color_converter
-+#define jinit_downsampler chromium_jinit_downsampler
-+#define jinit_forward_dct chromium_jinit_forward_dct
-+#define jinit_huff_encoder chromium_jinit_huff_encoder
-+#define jinit_phuff_encoder chromium_jinit_phuff_encoder
-+#define jinit_marker_writer chromium_jinit_marker_writer
-+#define jinit_master_decompress chromium_jinit_master_decompress
-+#define jinit_d_main_controller chromium_jinit_d_main_controller
-+#define jinit_d_coef_controller chromium_jinit_d_coef_controller
-+#define jinit_d_post_controller chromium_jinit_d_post_controller
-+#define jinit_input_controller chromium_jinit_input_controller
-+#define jinit_marker_reader chromium_jinit_marker_reader
-+#define jinit_huff_decoder chromium_jinit_huff_decoder
-+#define jinit_phuff_decoder chromium_jinit_phuff_decoder
-+#define jinit_inverse_dct chromium_jinit_inverse_dct
-+#define jinit_upsampler chromium_jinit_upsampler
-+#define jinit_color_deconverter chromium_jinit_color_deconverter
-+#define jinit_1pass_quantizer chromium_jinit_1pass_quantizer
-+#define jinit_2pass_quantizer chromium_jinit_2pass_quantizer
-+#define jinit_merged_upsampler chromium_jinit_merged_upsampler
-+#define jinit_memory_mgr chromium_jinit_memory_mgr
-+#define jdiv_round_up chromium_jdiv_round_up
-+#define jround_up chromium_jround_up
-+#define jcopy_sample_rows chromium_jcopy_sample_rows
-+#define jcopy_block_row chromium_jcopy_block_row
-+#define jzero_far chromium_jzero_far
-+#define jpeg_std_error chromium_jpeg_std_error
-+#define jpeg_CreateCompress chromium_jpeg_CreateCompress
-+#define jpeg_CreateDecompress chromium_jpeg_CreateDecompress
-+#define jpeg_destroy_compress chromium_jpeg_destroy_compress
-+#define jpeg_destroy_decompress chromium_jpeg_destroy_decompress
-+#define jpeg_stdio_dest chromium_jpeg_stdio_dest
-+#define jpeg_stdio_src chromium_jpeg_stdio_src
-+#define jpeg_set_defaults chromium_jpeg_set_defaults
-+#define jpeg_set_colorspace chromium_jpeg_set_colorspace
-+#define jpeg_default_colorspace chromium_jpeg_default_colorspace
-+#define jpeg_set_quality chromium_jpeg_set_quality
-+#define jpeg_set_linear_quality chromium_jpeg_set_linear_quality
-+#define jpeg_add_quant_table chromium_jpeg_add_quant_table
-+#define jpeg_quality_scaling chromium_jpeg_quality_scaling
-+#define jpeg_simple_progression chromium_jpeg_simple_progression
-+#define jpeg_suppress_tables chromium_jpeg_suppress_tables
-+#define jpeg_alloc_quant_table chromium_jpeg_alloc_quant_table
-+#define jpeg_alloc_huff_table chromium_jpeg_alloc_huff_table
-+#define jpeg_start_compress chromium_jpeg_start_compress
-+#define jpeg_write_scanlines chromium_jpeg_write_scanlines
-+#define jpeg_finish_compress chromium_jpeg_finish_compress
-+#define jpeg_write_raw_data chromium_jpeg_write_raw_data
-+#define jpeg_write_marker chromium_jpeg_write_marker
-+#define jpeg_write_m_header chromium_jpeg_write_m_header
-+#define jpeg_write_m_byte chromium_jpeg_write_m_byte
-+#define jpeg_write_tables chromium_jpeg_write_tables
-+#define jpeg_read_header chromium_jpeg_read_header
-+#define jpeg_start_decompress chromium_jpeg_start_decompress
-+#define jpeg_read_scanlines chromium_jpeg_read_scanlines
-+#define jpeg_finish_decompress chromium_jpeg_finish_decompress
-+#define jpeg_read_raw_data chromium_jpeg_read_raw_data
-+#define jpeg_has_multiple_scans chromium_jpeg_has_multiple_scans
-+#define jpeg_start_output chromium_jpeg_start_output
-+#define jpeg_finish_output chromium_jpeg_finish_output
-+#define jpeg_input_complete chromium_jpeg_input_complete
-+#define jpeg_new_colormap chromium_jpeg_new_colormap
-+#define jpeg_consume_input chromium_jpeg_consume_input
-+#define jpeg_calc_output_dimensions chromium_jpeg_calc_output_dimensions
-+#define jpeg_save_markers chromium_jpeg_save_markers
-+#define jpeg_set_marker_processor chromium_jpeg_set_marker_processor
-+#define jpeg_read_coefficients chromium_jpeg_read_coefficients
-+#define jpeg_write_coefficients chromium_jpeg_write_coefficients
-+#define jpeg_copy_critical_parameters chromium_jpeg_copy_critical_parameters
-+#define jpeg_abort_compress chromium_jpeg_abort_compress
-+#define jpeg_abort_decompress chromium_jpeg_abort_decompress
-+#define jpeg_abort chromium_jpeg_abort
-+#define jpeg_destroy chromium_jpeg_destroy
-+#define jpeg_resync_to_restart chromium_jpeg_resync_to_restart
-+#define jpeg_get_small chromium_jpeg_get_small
-+#define jpeg_free_small chromium_jpeg_free_small
-+#define jpeg_get_large chromium_jpeg_get_large
-+#define jpeg_free_large chromium_jpeg_free_large
-+#define jpeg_mem_available chromium_jpeg_mem_available
-+#define jpeg_open_backing_store chromium_jpeg_open_backing_store
-+#define jpeg_mem_init chromium_jpeg_mem_init
-+#define jpeg_mem_term chromium_jpeg_mem_term
-+
-+#endif // THIRD_PARTY_LIBJPEG_TURBO_JPEGLIBMANGLER_H_
-Index: simd/jcgrass2-64.asm
-===================================================================
---- simd/jcgrass2-64.asm (revision 829)
-+++ simd/jcgrass2-64.asm (working copy)
-@@ -30,7 +30,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_gray_convert_sse2)
-+ global EXTN(jconst_rgb_gray_convert_sse2) PRIVATE
-
- EXTN(jconst_rgb_gray_convert_sse2):
-
-Index: simd/jiss2fst.asm
-===================================================================
---- simd/jiss2fst.asm (revision 829)
-+++ simd/jiss2fst.asm (working copy)
-@@ -59,7 +59,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_idct_ifast_sse2)
-+ global EXTN(jconst_idct_ifast_sse2) PRIVATE
-
- EXTN(jconst_idct_ifast_sse2):
-
-@@ -92,7 +92,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_idct_ifast_sse2)
-+ global EXTN(jsimd_idct_ifast_sse2) PRIVATE
-
- EXTN(jsimd_idct_ifast_sse2):
- push ebp
-Index: simd/jcclrss2-64.asm
-===================================================================
---- simd/jcclrss2-64.asm (revision 829)
-+++ simd/jcclrss2-64.asm (working copy)
-@@ -37,7 +37,7 @@
-
- align 16
-
-- global EXTN(jsimd_rgb_ycc_convert_sse2)
-+ global EXTN(jsimd_rgb_ycc_convert_sse2) PRIVATE
-
- EXTN(jsimd_rgb_ycc_convert_sse2):
- push rbp
-Index: simd/jiss2red-64.asm
-===================================================================
---- simd/jiss2red-64.asm (revision 829)
-+++ simd/jiss2red-64.asm (working copy)
-@@ -73,7 +73,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_red_sse2)
-+ global EXTN(jconst_idct_red_sse2) PRIVATE
-
- EXTN(jconst_idct_red_sse2):
-
-@@ -114,7 +114,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_idct_4x4_sse2)
-+ global EXTN(jsimd_idct_4x4_sse2) PRIVATE
-
- EXTN(jsimd_idct_4x4_sse2):
- push rbp
-@@ -413,7 +413,7 @@
- ; r13 = JDIMENSION output_col
-
- align 16
-- global EXTN(jsimd_idct_2x2_sse2)
-+ global EXTN(jsimd_idct_2x2_sse2) PRIVATE
-
- EXTN(jsimd_idct_2x2_sse2):
- push rbp
-Index: simd/ji3dnflt.asm
-===================================================================
---- simd/ji3dnflt.asm (revision 829)
-+++ simd/ji3dnflt.asm (working copy)
-@@ -27,7 +27,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_float_3dnow)
-+ global EXTN(jconst_idct_float_3dnow) PRIVATE
-
- EXTN(jconst_idct_float_3dnow):
-
-@@ -63,7 +63,7 @@
- ; FAST_FLOAT workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_float_3dnow)
-+ global EXTN(jsimd_idct_float_3dnow) PRIVATE
-
- EXTN(jsimd_idct_float_3dnow):
- push ebp
-Index: simd/jsimdcpu.asm
-===================================================================
---- simd/jsimdcpu.asm (revision 829)
-+++ simd/jsimdcpu.asm (working copy)
-@@ -29,7 +29,7 @@
- ;
-
- align 16
-- global EXTN(jpeg_simd_cpu_support)
-+ global EXTN(jpeg_simd_cpu_support) PRIVATE
-
- EXTN(jpeg_simd_cpu_support):
- push ebx
-Index: simd/jdmerss2-64.asm
-===================================================================
---- simd/jdmerss2-64.asm (revision 829)
-+++ simd/jdmerss2-64.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_merged_upsample_sse2)
-+ global EXTN(jconst_merged_upsample_sse2) PRIVATE
-
- EXTN(jconst_merged_upsample_sse2):
-
-Index: simd/jdsammmx.asm
-===================================================================
---- simd/jdsammmx.asm (revision 829)
-+++ simd/jdsammmx.asm (working copy)
-@@ -22,7 +22,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fancy_upsample_mmx)
-+ global EXTN(jconst_fancy_upsample_mmx) PRIVATE
-
- EXTN(jconst_fancy_upsample_mmx):
-
-@@ -58,7 +58,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_fancy_upsample_mmx)
-+ global EXTN(jsimd_h2v1_fancy_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v1_fancy_upsample_mmx):
- push ebp
-@@ -216,7 +216,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_h2v2_fancy_upsample_mmx)
-+ global EXTN(jsimd_h2v2_fancy_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v2_fancy_upsample_mmx):
- push ebp
-@@ -542,7 +542,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_upsample_mmx)
-+ global EXTN(jsimd_h2v1_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v1_upsample_mmx):
- push ebp
-@@ -643,7 +643,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v2_upsample_mmx)
-+ global EXTN(jsimd_h2v2_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v2_upsample_mmx):
- push ebp
-Index: simd/jdmrgmmx.asm
-===================================================================
---- simd/jdmrgmmx.asm (revision 829)
-+++ simd/jdmrgmmx.asm (working copy)
-@@ -40,7 +40,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_h2v1_merged_upsample_mmx)
-+ global EXTN(jsimd_h2v1_merged_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v1_merged_upsample_mmx):
- push ebp
-@@ -409,7 +409,7 @@
- %define output_buf(b) (b)+20 ; JSAMPARRAY output_buf
-
- align 16
-- global EXTN(jsimd_h2v2_merged_upsample_mmx)
-+ global EXTN(jsimd_h2v2_merged_upsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v2_merged_upsample_mmx):
- push ebp
-Index: simd/jdsamss2.asm
-===================================================================
---- simd/jdsamss2.asm (revision 829)
-+++ simd/jdsamss2.asm (working copy)
-@@ -22,7 +22,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fancy_upsample_sse2)
-+ global EXTN(jconst_fancy_upsample_sse2) PRIVATE
-
- EXTN(jconst_fancy_upsample_sse2):
-
-@@ -58,7 +58,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_fancy_upsample_sse2)
-+ global EXTN(jsimd_h2v1_fancy_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_fancy_upsample_sse2):
- push ebp
-@@ -214,7 +214,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_h2v2_fancy_upsample_sse2)
-+ global EXTN(jsimd_h2v2_fancy_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_fancy_upsample_sse2):
- push ebp
-@@ -538,7 +538,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_upsample_sse2)
-+ global EXTN(jsimd_h2v1_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_upsample_sse2):
- push ebp
-@@ -637,7 +637,7 @@
- %define output_data_ptr(b) (b)+20 ; JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v2_upsample_sse2)
-+ global EXTN(jsimd_h2v2_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_upsample_sse2):
- push ebp
-Index: simd/jiss2flt-64.asm
-===================================================================
---- simd/jiss2flt-64.asm (revision 829)
-+++ simd/jiss2flt-64.asm (working copy)
-@@ -38,7 +38,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_float_sse2)
-+ global EXTN(jconst_idct_float_sse2) PRIVATE
-
- EXTN(jconst_idct_float_sse2):
-
-@@ -74,7 +74,7 @@
- ; FAST_FLOAT workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_float_sse2)
-+ global EXTN(jsimd_idct_float_sse2) PRIVATE
-
- EXTN(jsimd_idct_float_sse2):
- push rbp
-Index: simd/jfss2int-64.asm
-===================================================================
---- simd/jfss2int-64.asm (revision 829)
-+++ simd/jfss2int-64.asm (working copy)
-@@ -67,7 +67,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_islow_sse2)
-+ global EXTN(jconst_fdct_islow_sse2) PRIVATE
-
- EXTN(jconst_fdct_islow_sse2):
-
-@@ -101,7 +101,7 @@
- %define WK_NUM 6
-
- align 16
-- global EXTN(jsimd_fdct_islow_sse2)
-+ global EXTN(jsimd_fdct_islow_sse2) PRIVATE
-
- EXTN(jsimd_fdct_islow_sse2):
- push rbp
-Index: simd/jcqnts2f.asm
-===================================================================
---- simd/jcqnts2f.asm (revision 829)
-+++ simd/jcqnts2f.asm (working copy)
-@@ -35,7 +35,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_float_sse2)
-+ global EXTN(jsimd_convsamp_float_sse2) PRIVATE
-
- EXTN(jsimd_convsamp_float_sse2):
- push ebp
-@@ -115,7 +115,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_quantize_float_sse2)
-+ global EXTN(jsimd_quantize_float_sse2) PRIVATE
-
- EXTN(jsimd_quantize_float_sse2):
- push ebp
-Index: simd/jdmrgss2.asm
-===================================================================
---- simd/jdmrgss2.asm (revision 829)
-+++ simd/jdmrgss2.asm (working copy)
-@@ -40,7 +40,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_h2v1_merged_upsample_sse2)
-+ global EXTN(jsimd_h2v1_merged_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_merged_upsample_sse2):
- push ebp
-@@ -560,7 +560,7 @@
- %define output_buf(b) (b)+20 ; JSAMPARRAY output_buf
-
- align 16
-- global EXTN(jsimd_h2v2_merged_upsample_sse2)
-+ global EXTN(jsimd_h2v2_merged_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_merged_upsample_sse2):
- push ebp
-Index: simd/jfmmxint.asm
-===================================================================
---- simd/jfmmxint.asm (revision 829)
-+++ simd/jfmmxint.asm (working copy)
-@@ -66,7 +66,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_islow_mmx)
-+ global EXTN(jconst_fdct_islow_mmx) PRIVATE
-
- EXTN(jconst_fdct_islow_mmx):
-
-@@ -101,7 +101,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_islow_mmx)
-+ global EXTN(jsimd_fdct_islow_mmx) PRIVATE
-
- EXTN(jsimd_fdct_islow_mmx):
- push ebp
-Index: simd/jcgryss2-64.asm
-===================================================================
---- simd/jcgryss2-64.asm (revision 829)
-+++ simd/jcgryss2-64.asm (working copy)
-@@ -37,7 +37,7 @@
-
- align 16
-
-- global EXTN(jsimd_rgb_gray_convert_sse2)
-+ global EXTN(jsimd_rgb_gray_convert_sse2) PRIVATE
-
- EXTN(jsimd_rgb_gray_convert_sse2):
- push rbp
-Index: simd/jcqnts2i.asm
-===================================================================
---- simd/jcqnts2i.asm (revision 829)
-+++ simd/jcqnts2i.asm (working copy)
-@@ -35,7 +35,7 @@
- %define workspace ebp+16 ; DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_sse2)
-+ global EXTN(jsimd_convsamp_sse2) PRIVATE
-
- EXTN(jsimd_convsamp_sse2):
- push ebp
-@@ -117,7 +117,7 @@
- %define workspace ebp+16 ; DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_quantize_sse2)
-+ global EXTN(jsimd_quantize_sse2) PRIVATE
-
- EXTN(jsimd_quantize_sse2):
- push ebp
-Index: simd/jiss2fst-64.asm
-===================================================================
---- simd/jiss2fst-64.asm (revision 829)
-+++ simd/jiss2fst-64.asm (working copy)
-@@ -60,7 +60,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_idct_ifast_sse2)
-+ global EXTN(jconst_idct_ifast_sse2) PRIVATE
-
- EXTN(jconst_idct_ifast_sse2):
-
-@@ -93,7 +93,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_idct_ifast_sse2)
-+ global EXTN(jsimd_idct_ifast_sse2) PRIVATE
-
- EXTN(jsimd_idct_ifast_sse2):
- push rbp
-Index: simd/jiss2flt.asm
-===================================================================
---- simd/jiss2flt.asm (revision 829)
-+++ simd/jiss2flt.asm (working copy)
-@@ -37,7 +37,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_float_sse2)
-+ global EXTN(jconst_idct_float_sse2) PRIVATE
-
- EXTN(jconst_idct_float_sse2):
-
-@@ -73,7 +73,7 @@
- ; FAST_FLOAT workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_float_sse2)
-+ global EXTN(jsimd_idct_float_sse2) PRIVATE
-
- EXTN(jsimd_idct_float_sse2):
- push ebp
-Index: simd/jiss2int.asm
-===================================================================
---- simd/jiss2int.asm (revision 829)
-+++ simd/jiss2int.asm (working copy)
-@@ -66,7 +66,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_islow_sse2)
-+ global EXTN(jconst_idct_islow_sse2) PRIVATE
-
- EXTN(jconst_idct_islow_sse2):
-
-@@ -105,7 +105,7 @@
- %define WK_NUM 12
-
- align 16
-- global EXTN(jsimd_idct_islow_sse2)
-+ global EXTN(jsimd_idct_islow_sse2) PRIVATE
-
- EXTN(jsimd_idct_islow_sse2):
- push ebp
-Index: simd/jfsseflt-64.asm
-===================================================================
---- simd/jfsseflt-64.asm (revision 829)
-+++ simd/jfsseflt-64.asm (working copy)
-@@ -38,7 +38,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_float_sse)
-+ global EXTN(jconst_fdct_float_sse) PRIVATE
-
- EXTN(jconst_fdct_float_sse):
-
-@@ -65,7 +65,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_float_sse)
-+ global EXTN(jsimd_fdct_float_sse) PRIVATE
-
- EXTN(jsimd_fdct_float_sse):
- push rbp
-Index: simd/jccolss2-64.asm
-===================================================================
---- simd/jccolss2-64.asm (revision 829)
-+++ simd/jccolss2-64.asm (working copy)
-@@ -34,7 +34,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_ycc_convert_sse2)
-+ global EXTN(jconst_rgb_ycc_convert_sse2) PRIVATE
-
- EXTN(jconst_rgb_ycc_convert_sse2):
-
-Index: simd/jcsamss2-64.asm
-===================================================================
---- simd/jcsamss2-64.asm (revision 829)
-+++ simd/jcsamss2-64.asm (working copy)
-@@ -41,7 +41,7 @@
- ; r15 = JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v1_downsample_sse2)
-+ global EXTN(jsimd_h2v1_downsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_downsample_sse2):
- push rbp
-@@ -185,7 +185,7 @@
- ; r15 = JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v2_downsample_sse2)
-+ global EXTN(jsimd_h2v2_downsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_downsample_sse2):
- push rbp
-Index: simd/jdclrss2-64.asm
-===================================================================
---- simd/jdclrss2-64.asm (revision 829)
-+++ simd/jdclrss2-64.asm (working copy)
-@@ -39,7 +39,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_ycc_rgb_convert_sse2)
-+ global EXTN(jsimd_ycc_rgb_convert_sse2) PRIVATE
-
- EXTN(jsimd_ycc_rgb_convert_sse2):
- push rbp
-Index: simd/jdcolmmx.asm
-===================================================================
---- simd/jdcolmmx.asm (revision 829)
-+++ simd/jdcolmmx.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_ycc_rgb_convert_mmx)
-+ global EXTN(jconst_ycc_rgb_convert_mmx) PRIVATE
-
- EXTN(jconst_ycc_rgb_convert_mmx):
-
-Index: simd/jcclrmmx.asm
-===================================================================
---- simd/jcclrmmx.asm (revision 829)
-+++ simd/jcclrmmx.asm (working copy)
-@@ -40,7 +40,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_rgb_ycc_convert_mmx)
-+ global EXTN(jsimd_rgb_ycc_convert_mmx) PRIVATE
-
- EXTN(jsimd_rgb_ycc_convert_mmx):
- push ebp
-Index: simd/jfsseflt.asm
-===================================================================
---- simd/jfsseflt.asm (revision 829)
-+++ simd/jfsseflt.asm (working copy)
-@@ -37,7 +37,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_float_sse)
-+ global EXTN(jconst_fdct_float_sse) PRIVATE
-
- EXTN(jconst_fdct_float_sse):
-
-@@ -65,7 +65,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_float_sse)
-+ global EXTN(jsimd_fdct_float_sse) PRIVATE
-
- EXTN(jsimd_fdct_float_sse):
- push ebp
-Index: simd/jdmrgss2-64.asm
-===================================================================
---- simd/jdmrgss2-64.asm (revision 829)
-+++ simd/jdmrgss2-64.asm (working copy)
-@@ -39,7 +39,7 @@
- %define WK_NUM 3
-
- align 16
-- global EXTN(jsimd_h2v1_merged_upsample_sse2)
-+ global EXTN(jsimd_h2v1_merged_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_merged_upsample_sse2):
- push rbp
-@@ -543,7 +543,7 @@
- ; r13 = JSAMPARRAY output_buf
-
- align 16
-- global EXTN(jsimd_h2v2_merged_upsample_sse2)
-+ global EXTN(jsimd_h2v2_merged_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_merged_upsample_sse2):
- push rbp
-Index: simd/jdcolss2.asm
-===================================================================
---- simd/jdcolss2.asm (revision 829)
-+++ simd/jdcolss2.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_ycc_rgb_convert_sse2)
-+ global EXTN(jconst_ycc_rgb_convert_sse2) PRIVATE
-
- EXTN(jconst_ycc_rgb_convert_sse2):
-
-Index: simd/jdmermmx.asm
-===================================================================
---- simd/jdmermmx.asm (revision 829)
-+++ simd/jdmermmx.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_merged_upsample_mmx)
-+ global EXTN(jconst_merged_upsample_mmx) PRIVATE
-
- EXTN(jconst_merged_upsample_mmx):
-
-Index: simd/jcclrss2.asm
-===================================================================
---- simd/jcclrss2.asm (revision 829)
-+++ simd/jcclrss2.asm (working copy)
-@@ -38,7 +38,7 @@
-
- align 16
-
-- global EXTN(jsimd_rgb_ycc_convert_sse2)
-+ global EXTN(jsimd_rgb_ycc_convert_sse2) PRIVATE
-
- EXTN(jsimd_rgb_ycc_convert_sse2):
- push ebp
-Index: simd/jiss2red.asm
-===================================================================
---- simd/jiss2red.asm (revision 829)
-+++ simd/jiss2red.asm (working copy)
-@@ -72,7 +72,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_red_sse2)
-+ global EXTN(jconst_idct_red_sse2) PRIVATE
-
- EXTN(jconst_idct_red_sse2):
-
-@@ -113,7 +113,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_idct_4x4_sse2)
-+ global EXTN(jsimd_idct_4x4_sse2) PRIVATE
-
- EXTN(jsimd_idct_4x4_sse2):
- push ebp
-@@ -424,7 +424,7 @@
- %define output_col(b) (b)+20 ; JDIMENSION output_col
-
- align 16
-- global EXTN(jsimd_idct_2x2_sse2)
-+ global EXTN(jsimd_idct_2x2_sse2) PRIVATE
-
- EXTN(jsimd_idct_2x2_sse2):
- push ebp
-Index: simd/jdmerss2.asm
-===================================================================
---- simd/jdmerss2.asm (revision 829)
-+++ simd/jdmerss2.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_merged_upsample_sse2)
-+ global EXTN(jconst_merged_upsample_sse2) PRIVATE
-
- EXTN(jconst_merged_upsample_sse2):
-
-Index: simd/jfss2fst-64.asm
-===================================================================
---- simd/jfss2fst-64.asm (revision 829)
-+++ simd/jfss2fst-64.asm (working copy)
-@@ -53,7 +53,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_fdct_ifast_sse2)
-+ global EXTN(jconst_fdct_ifast_sse2) PRIVATE
-
- EXTN(jconst_fdct_ifast_sse2):
-
-@@ -80,7 +80,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_ifast_sse2)
-+ global EXTN(jsimd_fdct_ifast_sse2) PRIVATE
-
- EXTN(jsimd_fdct_ifast_sse2):
- push rbp
-Index: simd/jcqntmmx.asm
-===================================================================
---- simd/jcqntmmx.asm (revision 829)
-+++ simd/jcqntmmx.asm (working copy)
-@@ -35,7 +35,7 @@
- %define workspace ebp+16 ; DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_mmx)
-+ global EXTN(jsimd_convsamp_mmx) PRIVATE
-
- EXTN(jsimd_convsamp_mmx):
- push ebp
-@@ -140,7 +140,7 @@
- %define workspace ebp+16 ; DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_quantize_mmx)
-+ global EXTN(jsimd_quantize_mmx) PRIVATE
-
- EXTN(jsimd_quantize_mmx):
- push ebp
-Index: simd/jimmxfst.asm
-===================================================================
---- simd/jimmxfst.asm (revision 829)
-+++ simd/jimmxfst.asm (working copy)
-@@ -59,7 +59,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_idct_ifast_mmx)
-+ global EXTN(jconst_idct_ifast_mmx) PRIVATE
-
- EXTN(jconst_idct_ifast_mmx):
-
-@@ -94,7 +94,7 @@
- ; JCOEF workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_ifast_mmx)
-+ global EXTN(jsimd_idct_ifast_mmx) PRIVATE
-
- EXTN(jsimd_idct_ifast_mmx):
- push ebp
-Index: simd/jfss2fst.asm
-===================================================================
---- simd/jfss2fst.asm (revision 829)
-+++ simd/jfss2fst.asm (working copy)
-@@ -52,7 +52,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_fdct_ifast_sse2)
-+ global EXTN(jconst_fdct_ifast_sse2) PRIVATE
-
- EXTN(jconst_fdct_ifast_sse2):
-
-@@ -80,7 +80,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_ifast_sse2)
-+ global EXTN(jsimd_fdct_ifast_sse2) PRIVATE
-
- EXTN(jsimd_fdct_ifast_sse2):
- push ebp
-Index: simd/jcgrammx.asm
-===================================================================
---- simd/jcgrammx.asm (revision 829)
-+++ simd/jcgrammx.asm (working copy)
-@@ -33,7 +33,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_gray_convert_mmx)
-+ global EXTN(jconst_rgb_gray_convert_mmx) PRIVATE
-
- EXTN(jconst_rgb_gray_convert_mmx):
-
-Index: simd/jdcolss2-64.asm
-===================================================================
---- simd/jdcolss2-64.asm (revision 829)
-+++ simd/jdcolss2-64.asm (working copy)
-@@ -35,7 +35,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_ycc_rgb_convert_sse2)
-+ global EXTN(jconst_ycc_rgb_convert_sse2) PRIVATE
-
- EXTN(jconst_ycc_rgb_convert_sse2):
-
-Index: simd/jf3dnflt.asm
-===================================================================
---- simd/jf3dnflt.asm (revision 829)
-+++ simd/jf3dnflt.asm (working copy)
-@@ -27,7 +27,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_float_3dnow)
-+ global EXTN(jconst_fdct_float_3dnow) PRIVATE
-
- EXTN(jconst_fdct_float_3dnow):
-
-@@ -55,7 +55,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_float_3dnow)
-+ global EXTN(jsimd_fdct_float_3dnow) PRIVATE
-
- EXTN(jsimd_fdct_float_3dnow):
- push ebp
-Index: simd/jdsamss2-64.asm
-===================================================================
---- simd/jdsamss2-64.asm (revision 829)
-+++ simd/jdsamss2-64.asm (working copy)
-@@ -23,7 +23,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fancy_upsample_sse2)
-+ global EXTN(jconst_fancy_upsample_sse2) PRIVATE
-
- EXTN(jconst_fancy_upsample_sse2):
-
-@@ -59,7 +59,7 @@
- ; r13 = JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_fancy_upsample_sse2)
-+ global EXTN(jsimd_h2v1_fancy_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_fancy_upsample_sse2):
- push rbp
-@@ -201,7 +201,7 @@
- %define WK_NUM 4
-
- align 16
-- global EXTN(jsimd_h2v2_fancy_upsample_sse2)
-+ global EXTN(jsimd_h2v2_fancy_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_fancy_upsample_sse2):
- push rbp
-@@ -498,7 +498,7 @@
- ; r13 = JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v1_upsample_sse2)
-+ global EXTN(jsimd_h2v1_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_upsample_sse2):
- push rbp
-@@ -587,7 +587,7 @@
- ; r13 = JSAMPARRAY * output_data_ptr
-
- align 16
-- global EXTN(jsimd_h2v2_upsample_sse2)
-+ global EXTN(jsimd_h2v2_upsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_upsample_sse2):
- push rbp
-Index: simd/jcgrass2.asm
-===================================================================
---- simd/jcgrass2.asm (revision 829)
-+++ simd/jcgrass2.asm (working copy)
-@@ -30,7 +30,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_gray_convert_sse2)
-+ global EXTN(jconst_rgb_gray_convert_sse2) PRIVATE
-
- EXTN(jconst_rgb_gray_convert_sse2):
-
-Index: simd/jcsammmx.asm
-===================================================================
---- simd/jcsammmx.asm (revision 829)
-+++ simd/jcsammmx.asm (working copy)
-@@ -40,7 +40,7 @@
- %define output_data(b) (b)+28 ; JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v1_downsample_mmx)
-+ global EXTN(jsimd_h2v1_downsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v1_downsample_mmx):
- push ebp
-@@ -182,7 +182,7 @@
- %define output_data(b) (b)+28 ; JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v2_downsample_mmx)
-+ global EXTN(jsimd_h2v2_downsample_mmx) PRIVATE
-
- EXTN(jsimd_h2v2_downsample_mmx):
- push ebp
-+Index: simd/jsimd_arm.c
-+===================================================================
-+--- simd/jsimd_arm.c (revision 272637)
-++++ simd/jsimd_arm.c (working copy)
-+@@ -29,0 +29,0 @@
-+
-+ static unsigned int simd_support = ~0;
-+
-+-#if defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
-++#if !defined(__ARM_NEON__) && (defined(__linux__) || defined(ANDROID) || defined(__ANDROID__))
-+
-+ #define SOMEWHAT_SANE_PROC_CPUINFO_SIZE_LIMIT (1024 * 1024)
-+
-+@@ -100,6 +100,6 @@
-+ init_simd (void)
-+ {
-+ char *env = NULL;
-+-#if !defined(__ARM_NEON__) && defined(__linux__) || defined(ANDROID) || defined(__ANDROID__)
-++#if !defined(__ARM_NEON__) && (defined(__linux__) || defined(ANDROID) || defined(__ANDROID__))
-+ int bufsize = 1024; /* an initial guess for the line buffer size limit */
-+ #endif
-+
-Index: simd/jsimd_arm_neon.S
-===================================================================
---- simd/jsimd_arm_neon.S (revision 272637)
-+++ simd/jsimd_arm_neon.S (working copy)
-@@ -41,11 +41,9 @@
- /* Supplementary macro for setting function attributes */
- .macro asm_function fname
- #ifdef __APPLE__
-- .func _\fname
- .globl _\fname
- _\fname:
- #else
-- .func \fname
- .global \fname
- #ifdef __ELF__
- .hidden \fname
-@@ -670,7 +668,6 @@
- .unreq ROW6R
- .unreq ROW7L
- .unreq ROW7R
--.endfunc
-
-
- /*****************************************************************************/
-@@ -895,7 +892,6 @@
- .unreq TMP2
- .unreq TMP3
- .unreq TMP4
--.endfunc
-
-
- /*****************************************************************************/
-@@ -1108,7 +1104,6 @@
- .unreq TMP2
- .unreq TMP3
- .unreq TMP4
--.endfunc
-
- .purgem idct_helper
-
-@@ -1263,7 +1258,6 @@
- .unreq OUTPUT_COL
- .unreq TMP1
- .unreq TMP2
--.endfunc
-
- .purgem idct_helper
-
-@@ -1547,7 +1541,6 @@
- .unreq U
- .unreq V
- .unreq N
--.endfunc
-
- .purgem do_yuv_to_rgb
- .purgem do_yuv_to_rgb_stage1
-@@ -1858,7 +1851,6 @@
- .unreq U
- .unreq V
- .unreq N
--.endfunc
-
- .purgem do_rgb_to_yuv
- .purgem do_rgb_to_yuv_stage1
-@@ -1940,7 +1932,6 @@
- .unreq TMP2
- .unreq TMP3
- .unreq TMP4
--.endfunc
-
-
- /*****************************************************************************/
-@@ -2064,7 +2055,6 @@
-
- .unreq DATA
- .unreq TMP
--.endfunc
-
-
- /*****************************************************************************/
-@@ -2166,7 +2156,6 @@
- .unreq CORRECTION
- .unreq SHIFT
- .unreq LOOP_COUNT
--.endfunc
-
-
- /*****************************************************************************/
-@@ -2401,7 +2390,6 @@
- .unreq WIDTH
- .unreq TMP
-
--.endfunc
-
- .purgem upsample16
- .purgem upsample32
-Index: simd/jsimd_i386.c
-===================================================================
---- simd/jsimd_i386.c (revision 829)
-+++ simd/jsimd_i386.c (working copy)
-@@ -61,6 +61,7 @@
- simd_support &= JSIMD_SSE2;
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_rgb_ycc (void)
- {
-@@ -82,6 +83,7 @@
-
- return 0;
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_rgb_gray (void)
-@@ -127,6 +129,7 @@
- return 0;
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(void)
- jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
- JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-@@ -179,6 +182,7 @@
- mmxfct(cinfo->image_width, input_buf,
- output_buf, output_row, num_rows);
- }
-+#endif
-
- GLOBAL(void)
- jsimd_rgb_gray_convert (j_compress_ptr cinfo,
-@@ -286,6 +290,7 @@
- input_row, output_buf, num_rows);
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_h2v2_downsample (void)
- {
-@@ -351,6 +356,7 @@
- compptr->v_samp_factor, compptr->width_in_blocks,
- input_data, output_data);
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_h2v2_upsample (void)
-@@ -636,6 +642,7 @@
- in_row_group_ctr, output_buf);
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_convsamp (void)
- {
-@@ -855,6 +862,7 @@
- else if (simd_support & JSIMD_3DNOW)
- jsimd_quantize_float_3dnow(coef_block, divisors, workspace);
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_idct_2x2 (void)
-@@ -1045,4 +1053,3 @@
- jsimd_idct_float_3dnow(compptr->dct_table, coef_block,
- output_buf, output_col);
- }
--
-Index: simd/jcqnts2f-64.asm
-===================================================================
---- simd/jcqnts2f-64.asm (revision 829)
-+++ simd/jcqnts2f-64.asm (working copy)
-@@ -36,7 +36,7 @@
- ; r12 = FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_float_sse2)
-+ global EXTN(jsimd_convsamp_float_sse2) PRIVATE
-
- EXTN(jsimd_convsamp_float_sse2):
- push rbp
-@@ -110,7 +110,7 @@
- ; r12 = FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_quantize_float_sse2)
-+ global EXTN(jsimd_quantize_float_sse2) PRIVATE
-
- EXTN(jsimd_quantize_float_sse2):
- push rbp
-Index: simd/jcqnt3dn.asm
-===================================================================
---- simd/jcqnt3dn.asm (revision 829)
-+++ simd/jcqnt3dn.asm (working copy)
-@@ -35,7 +35,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_float_3dnow)
-+ global EXTN(jsimd_convsamp_float_3dnow) PRIVATE
-
- EXTN(jsimd_convsamp_float_3dnow):
- push ebp
-@@ -138,7 +138,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_quantize_float_3dnow)
-+ global EXTN(jsimd_quantize_float_3dnow) PRIVATE
-
- EXTN(jsimd_quantize_float_3dnow):
- push ebp
-Index: simd/jcsamss2.asm
-===================================================================
---- simd/jcsamss2.asm (revision 829)
-+++ simd/jcsamss2.asm (working copy)
-@@ -40,7 +40,7 @@
- %define output_data(b) (b)+28 ; JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v1_downsample_sse2)
-+ global EXTN(jsimd_h2v1_downsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v1_downsample_sse2):
- push ebp
-@@ -195,7 +195,7 @@
- %define output_data(b) (b)+28 ; JSAMPARRAY output_data
-
- align 16
-- global EXTN(jsimd_h2v2_downsample_sse2)
-+ global EXTN(jsimd_h2v2_downsample_sse2) PRIVATE
-
- EXTN(jsimd_h2v2_downsample_sse2):
- push ebp
-Index: simd/jsimd_x86_64.c
-===================================================================
---- simd/jsimd_x86_64.c (revision 829)
-+++ simd/jsimd_x86_64.c (working copy)
-@@ -29,6 +29,7 @@
-
- #define IS_ALIGNED_SSE(ptr) (IS_ALIGNED(ptr, 4)) /* 16 byte alignment */
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_rgb_ycc (void)
- {
-@@ -45,6 +46,7 @@
-
- return 1;
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_rgb_gray (void)
-@@ -80,6 +82,7 @@
- return 1;
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(void)
- jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
- JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-@@ -118,6 +121,7 @@
-
- sse2fct(cinfo->image_width, input_buf, output_buf, output_row, num_rows);
- }
-+#endif
-
- GLOBAL(void)
- jsimd_rgb_gray_convert (j_compress_ptr cinfo,
-@@ -197,6 +201,7 @@
- sse2fct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_h2v2_downsample (void)
- {
-@@ -242,6 +247,7 @@
- compptr->width_in_blocks,
- input_data, output_data);
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_h2v2_upsample (void)
-@@ -451,6 +457,7 @@
- sse2fct(cinfo->output_width, input_buf, in_row_group_ctr, output_buf);
- }
-
-+#ifndef JPEG_DECODE_ONLY
- GLOBAL(int)
- jsimd_can_convsamp (void)
- {
-@@ -601,6 +608,7 @@
- {
- jsimd_quantize_float_sse2(coef_block, divisors, workspace);
- }
-+#endif
-
- GLOBAL(int)
- jsimd_can_idct_2x2 (void)
-@@ -750,4 +758,3 @@
- jsimd_idct_float_sse2(compptr->dct_table, coef_block,
- output_buf, output_col);
- }
--
-Index: simd/jimmxint.asm
-===================================================================
---- simd/jimmxint.asm (revision 829)
-+++ simd/jimmxint.asm (working copy)
-@@ -66,7 +66,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_islow_mmx)
-+ global EXTN(jconst_idct_islow_mmx) PRIVATE
-
- EXTN(jconst_idct_islow_mmx):
-
-@@ -107,7 +107,7 @@
- ; JCOEF workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_islow_mmx)
-+ global EXTN(jsimd_idct_islow_mmx) PRIVATE
-
- EXTN(jsimd_idct_islow_mmx):
- push ebp
-Index: simd/jcgrymmx.asm
-===================================================================
---- simd/jcgrymmx.asm (revision 829)
-+++ simd/jcgrymmx.asm (working copy)
-@@ -41,7 +41,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_rgb_gray_convert_mmx)
-+ global EXTN(jsimd_rgb_gray_convert_mmx) PRIVATE
-
- EXTN(jsimd_rgb_gray_convert_mmx):
- push ebp
-Index: simd/jfss2int.asm
-===================================================================
---- simd/jfss2int.asm (revision 829)
-+++ simd/jfss2int.asm (working copy)
-@@ -66,7 +66,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_fdct_islow_sse2)
-+ global EXTN(jconst_fdct_islow_sse2) PRIVATE
-
- EXTN(jconst_fdct_islow_sse2):
-
-@@ -101,7 +101,7 @@
- %define WK_NUM 6
-
- align 16
-- global EXTN(jsimd_fdct_islow_sse2)
-+ global EXTN(jsimd_fdct_islow_sse2) PRIVATE
-
- EXTN(jsimd_fdct_islow_sse2):
- push ebp
-Index: simd/jcgryss2.asm
-===================================================================
---- simd/jcgryss2.asm (revision 829)
-+++ simd/jcgryss2.asm (working copy)
-@@ -39,7 +39,7 @@
-
- align 16
-
-- global EXTN(jsimd_rgb_gray_convert_sse2)
-+ global EXTN(jsimd_rgb_gray_convert_sse2) PRIVATE
-
- EXTN(jsimd_rgb_gray_convert_sse2):
- push ebp
-Index: simd/jccolmmx.asm
-===================================================================
---- simd/jccolmmx.asm (revision 829)
-+++ simd/jccolmmx.asm (working copy)
-@@ -37,7 +37,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_ycc_convert_mmx)
-+ global EXTN(jconst_rgb_ycc_convert_mmx) PRIVATE
-
- EXTN(jconst_rgb_ycc_convert_mmx):
-
-Index: simd/jimmxred.asm
-===================================================================
---- simd/jimmxred.asm (revision 829)
-+++ simd/jimmxred.asm (working copy)
-@@ -72,7 +72,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_red_mmx)
-+ global EXTN(jconst_idct_red_mmx) PRIVATE
-
- EXTN(jconst_idct_red_mmx):
-
-@@ -115,7 +115,7 @@
- ; JCOEF workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_4x4_mmx)
-+ global EXTN(jsimd_idct_4x4_mmx) PRIVATE
-
- EXTN(jsimd_idct_4x4_mmx):
- push ebp
-@@ -503,7 +503,7 @@
- %define output_col(b) (b)+20 ; JDIMENSION output_col
-
- align 16
-- global EXTN(jsimd_idct_2x2_mmx)
-+ global EXTN(jsimd_idct_2x2_mmx) PRIVATE
-
- EXTN(jsimd_idct_2x2_mmx):
- push ebp
-Index: simd/jsimdext.inc
-===================================================================
---- simd/jsimdext.inc (revision 829)
-+++ simd/jsimdext.inc (working copy)
-@@ -73,6 +73,9 @@
- ; * *BSD family Unix using elf format
- ; * Unix System V, including Solaris x86, UnixWare and SCO Unix
-
-+; PIC is the default on Linux
-+%define PIC
-+
- ; mark stack as non-executable
- section .note.GNU-stack noalloc noexec nowrite progbits
-
-@@ -375,4 +378,14 @@
- ;
- %include "jsimdcfg.inc"
-
-+; Begin chromium edits
-+%ifdef MACHO ; ----(nasm -fmacho -DMACHO ...)--------
-+%define PRIVATE :private_extern
-+%elifdef ELF ; ----(nasm -felf[64] -DELF ...)------------
-+%define PRIVATE :hidden
-+%else
-+%define PRIVATE
-+%endif
-+; End chromium edits
-+
- ; --------------------------------------------------------------------------
-Index: simd/jdclrmmx.asm
-===================================================================
---- simd/jdclrmmx.asm (revision 829)
-+++ simd/jdclrmmx.asm (working copy)
-@@ -40,7 +40,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_ycc_rgb_convert_mmx)
-+ global EXTN(jsimd_ycc_rgb_convert_mmx) PRIVATE
-
- EXTN(jsimd_ycc_rgb_convert_mmx):
- push ebp
-Index: simd/jccolss2.asm
-===================================================================
---- simd/jccolss2.asm (revision 829)
-+++ simd/jccolss2.asm (working copy)
-@@ -34,7 +34,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_rgb_ycc_convert_sse2)
-+ global EXTN(jconst_rgb_ycc_convert_sse2) PRIVATE
-
- EXTN(jconst_rgb_ycc_convert_sse2):
-
-Index: simd/jisseflt.asm
-===================================================================
---- simd/jisseflt.asm (revision 829)
-+++ simd/jisseflt.asm (working copy)
-@@ -37,7 +37,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_float_sse)
-+ global EXTN(jconst_idct_float_sse) PRIVATE
-
- EXTN(jconst_idct_float_sse):
-
-@@ -73,7 +73,7 @@
- ; FAST_FLOAT workspace[DCTSIZE2]
-
- align 16
-- global EXTN(jsimd_idct_float_sse)
-+ global EXTN(jsimd_idct_float_sse) PRIVATE
-
- EXTN(jsimd_idct_float_sse):
- push ebp
-Index: simd/jcqnts2i-64.asm
-===================================================================
---- simd/jcqnts2i-64.asm (revision 829)
-+++ simd/jcqnts2i-64.asm (working copy)
-@@ -36,7 +36,7 @@
- ; r12 = DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_sse2)
-+ global EXTN(jsimd_convsamp_sse2) PRIVATE
-
- EXTN(jsimd_convsamp_sse2):
- push rbp
-@@ -112,7 +112,7 @@
- ; r12 = DCTELEM * workspace
-
- align 16
-- global EXTN(jsimd_quantize_sse2)
-+ global EXTN(jsimd_quantize_sse2) PRIVATE
-
- EXTN(jsimd_quantize_sse2):
- push rbp
-Index: simd/jdclrss2.asm
-===================================================================
---- simd/jdclrss2.asm (revision 829)
-+++ simd/jdclrss2.asm (working copy)
-@@ -40,7 +40,7 @@
- %define gotptr wk(0)-SIZEOF_POINTER ; void * gotptr
-
- align 16
-- global EXTN(jsimd_ycc_rgb_convert_sse2)
-+ global EXTN(jsimd_ycc_rgb_convert_sse2) PRIVATE
-
- EXTN(jsimd_ycc_rgb_convert_sse2):
- push ebp
-Index: simd/jcqntsse.asm
-===================================================================
---- simd/jcqntsse.asm (revision 829)
-+++ simd/jcqntsse.asm (working copy)
-@@ -35,7 +35,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_convsamp_float_sse)
-+ global EXTN(jsimd_convsamp_float_sse) PRIVATE
-
- EXTN(jsimd_convsamp_float_sse):
- push ebp
-@@ -138,7 +138,7 @@
- %define workspace ebp+16 ; FAST_FLOAT * workspace
-
- align 16
-- global EXTN(jsimd_quantize_float_sse)
-+ global EXTN(jsimd_quantize_float_sse) PRIVATE
-
- EXTN(jsimd_quantize_float_sse):
- push ebp
-Index: simd/jiss2int-64.asm
-===================================================================
---- simd/jiss2int-64.asm (revision 829)
-+++ simd/jiss2int-64.asm (working copy)
-@@ -67,7 +67,7 @@
- SECTION SEG_CONST
-
- alignz 16
-- global EXTN(jconst_idct_islow_sse2)
-+ global EXTN(jconst_idct_islow_sse2) PRIVATE
-
- EXTN(jconst_idct_islow_sse2):
-
-@@ -106,7 +106,7 @@
- %define WK_NUM 12
-
- align 16
-- global EXTN(jsimd_idct_islow_sse2)
-+ global EXTN(jsimd_idct_islow_sse2) PRIVATE
-
- EXTN(jsimd_idct_islow_sse2):
- push rbp
-Index: simd/jfmmxfst.asm
-===================================================================
---- simd/jfmmxfst.asm (revision 829)
-+++ simd/jfmmxfst.asm (working copy)
-@@ -52,7 +52,7 @@
- %define CONST_SHIFT (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)
-
- alignz 16
-- global EXTN(jconst_fdct_ifast_mmx)
-+ global EXTN(jconst_fdct_ifast_mmx) PRIVATE
-
- EXTN(jconst_fdct_ifast_mmx):
-
-@@ -80,7 +80,7 @@
- %define WK_NUM 2
-
- align 16
-- global EXTN(jsimd_fdct_ifast_mmx)
-+ global EXTN(jsimd_fdct_ifast_mmx) PRIVATE
-
- EXTN(jsimd_fdct_ifast_mmx):
- push ebp
-Index: jdarith.c
-===================================================================
---- jdarith.c (revision 829)
-+++ jdarith.c (working copy)
-@@ -150,8 +150,8 @@
- */
- sv = *st;
- qe = jpeg_aritab[sv & 0x7F]; /* => Qe_Value */
-- nl = qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */
-- nm = qe & 0xFF; qe >>= 8; /* Next_Index_MPS */
-+ nl = (unsigned char) qe & 0xFF; qe >>= 8; /* Next_Index_LPS + Switch_MPS */
-+ nm = (unsigned char) qe & 0xFF; qe >>= 8; /* Next_Index_MPS */
-
- /* Decode & estimation procedures per sections D.2.4 & D.2.5 */
- temp = e->a - qe;
-Index: jdhuff.c
-===================================================================
---- jdhuff.c (revision 1541)
-+++ jdhuff.c (working copy)
-@@ -662,7 +662,7 @@
- d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn];
- register int s, k, r, l;
-
-- HUFF_DECODE_FAST(s, l, dctbl);
-+ HUFF_DECODE_FAST(s, l, dctbl, slow_decode_mcu);
- if (s) {
- FILL_BIT_BUFFER_FAST
- r = GET_BITS(s);
-@@ -679,7 +679,7 @@
- if (entropy->ac_needed[blkn]) {
-
- for (k = 1; k < DCTSIZE2; k++) {
-- HUFF_DECODE_FAST(s, l, actbl);
-+ HUFF_DECODE_FAST(s, l, actbl, slow_decode_mcu);
- r = s >> 4;
- s &= 15;
-
-@@ -698,7 +698,7 @@
- } else {
-
- for (k = 1; k < DCTSIZE2; k++) {
-- HUFF_DECODE_FAST(s, l, actbl);
-+ HUFF_DECODE_FAST(s, l, actbl, slow_decode_mcu);
- r = s >> 4;
- s &= 15;
-
-@@ -715,6 +715,7 @@
- }
-
- if (cinfo->unread_marker != 0) {
-+slow_decode_mcu:
- cinfo->unread_marker = 0;
- return FALSE;
- }
-@@ -742,7 +743,7 @@
- * this module, since we'll just re-assign them on the next call.)
- */
-
--#define BUFSIZE (DCTSIZE2 * 2)
-+#define BUFSIZE (DCTSIZE2 * 2u)
-
- METHODDEF(boolean)
- decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-Index: jdhuff.h
-===================================================================
---- jdhuff.h (revision 1541)
-+++ jdhuff.h (working copy)
-@@ -208,7 +208,7 @@
- } \
- }
-
--#define HUFF_DECODE_FAST(s,nb,htbl) \
-+#define HUFF_DECODE_FAST(s,nb,htbl,slowlabel) \
- FILL_BIT_BUFFER_FAST; \
- s = PEEK_BITS(HUFF_LOOKAHEAD); \
- s = htbl->lookup[s]; \
-@@ -225,7 +225,9 @@
- s |= GET_BITS(1); \
- nb++; \
- } \
-- s = htbl->pub->huffval[ (int) (s + htbl->valoffset[nb]) & 0xFF ]; \
-+ if (nb > 16) \
-+ goto slowlabel; \
-+ s = htbl->pub->huffval[ (int) (s + htbl->valoffset[nb]) ]; \
- }
-
- /* Out-of-line case for Huffman code fetching */
-
-Index: jchuff.c
-===================================================================
---- jchuff.c (revision 1219)
-+++ jchuff.c (revision 1220)
-@@ -22,8 +22,36 @@
- #include "jchuff.h" /* Declarations shared with jcphuff.c */
- #include <limits.h>
-
-+/*
-+ * NOTE: If USE_CLZ_INTRINSIC is defined, then clz/bsr instructions will be
-+ * used for bit counting rather than the lookup table. This will reduce the
-+ * memory footprint by 64k, which is important for some mobile applications
-+ * that create many isolated instances of libjpeg-turbo (web browsers, for
-+ * instance.) This may improve performance on some mobile platforms as well.
-+ * This feature is enabled by default only on ARM processors, because some x86
-+ * chips have a slow implementation of bsr, and the use of clz/bsr cannot be
-+ * shown to have a significant performance impact even on the x86 chips that
-+ * have a fast implementation of it. When building for ARMv6, you can
-+ * explicitly disable the use of clz/bsr by adding -mthumb to the compiler
-+ * flags (this defines __thumb__).
-+ */
-+
-+/* NOTE: Both GCC and Clang define __GNUC__ */
-+#if defined __GNUC__ && defined __arm__
-+#if !defined __thumb__ || defined __thumb2__
-+#define USE_CLZ_INTRINSIC
-+#endif
-+#endif
-+
-+#ifdef USE_CLZ_INTRINSIC
-+#define JPEG_NBITS_NONZERO(x) (32 - __builtin_clz(x))
-+#define JPEG_NBITS(x) (x ? JPEG_NBITS_NONZERO(x) : 0)
-+#else
- static unsigned char jpeg_nbits_table[65536];
- static int jpeg_nbits_table_init = 0;
-+#define JPEG_NBITS(x) (jpeg_nbits_table[x])
-+#define JPEG_NBITS_NONZERO(x) JPEG_NBITS(x)
-+#endif
-
- #ifndef min
- #define min(a,b) ((a)<(b)?(a):(b))
-@@ -272,6 +300,7 @@
- dtbl->ehufsi[i] = huffsize[p];
- }
-
-+#ifndef USE_CLZ_INTRINSIC
- if(!jpeg_nbits_table_init) {
- for(i = 0; i < 65536; i++) {
- int nbits = 0, temp = i;
-@@ -280,6 +309,7 @@
- }
- jpeg_nbits_table_init = 1;
- }
-+#endif
- }
-
-
-@@ -482,7 +512,7 @@
- temp2 += temp3;
-
- /* Find the number of bits needed for the magnitude of the coefficient */
-- nbits = jpeg_nbits_table[temp];
-+ nbits = JPEG_NBITS(temp);
-
- /* Emit the Huffman-coded symbol for the number of bits */
- code = dctbl->ehufco[nbits];
-@@ -516,7 +546,7 @@
- temp ^= temp3; \
- temp -= temp3; \
- temp2 += temp3; \
-- nbits = jpeg_nbits_table[temp]; \
-+ nbits = JPEG_NBITS_NONZERO(temp); \
- /* if run length > 15, must emit special run-length-16 codes (0xF0) */ \
- while (r > 15) { \
- EMIT_BITS(code_0xf0, size_0xf0) \
-Index: simd/jsimd_arm64.c
-===================================================================
---- /dev/null
-+++ simd/jsimd_arm64.c
-@@ -0,0 +1,544 @@
-+/*
-+ * jsimd_arm64.c
-+ *
-+ * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
-+ * Copyright 2009-2011, 2013-2014 D. R. Commander
-+ *
-+ * Based on the x86 SIMD extension for IJG JPEG library,
-+ * Copyright (C) 1999-2006, MIYASAKA Masaru.
-+ * For conditions of distribution and use, see copyright notice in jsimdext.inc
-+ *
-+ * This file contains the interface between the "normal" portions
-+ * of the library and the SIMD implementations when running on a
-+ * 64-bit ARM architecture.
-+ */
-+
-+#define JPEG_INTERNALS
-+#include "../jinclude.h"
-+#include "../jpeglib.h"
-+#include "../jsimd.h"
-+#include "../jdct.h"
-+#include "../jsimddct.h"
-+#include "jsimd.h"
-+
-+#include <stdio.h>
-+#include <string.h>
-+#include <ctype.h>
-+
-+static unsigned int simd_support = ~0;
-+
-+/*
-+ * Check what SIMD accelerations are supported.
-+ *
-+ * FIXME: This code is racy under a multi-threaded environment.
-+ */
-+
-+/*
-+ * ARMv8 architectures support NEON extensions by default.
-+ * It is no longer optional as it was with ARMv7.
-+ */
-+
-+
-+LOCAL(void)
-+init_simd (void)
-+{
-+ char *env = NULL;
-+
-+ if (simd_support != ~0U)
-+ return;
-+
-+ simd_support = 0;
-+
-+ simd_support |= JSIMD_ARM_NEON;
-+
-+ /* Force different settings through environment variables */
-+ env = getenv("JSIMD_FORCENEON");
-+ if ((env != NULL) && (strcmp(env, "1") == 0))
-+ simd_support &= JSIMD_ARM_NEON;
-+ env = getenv("JSIMD_FORCENONE");
-+ if ((env != NULL) && (strcmp(env, "1") == 0))
-+ simd_support = 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_rgb_ycc (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_rgb_gray (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_ycc_rgb (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+ if ((RGB_PIXELSIZE != 3) && (RGB_PIXELSIZE != 4))
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_ycc_rgb565 (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_rgb_ycc_convert (j_compress_ptr cinfo,
-+ JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-+ JDIMENSION output_row, int num_rows)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_rgb_gray_convert (j_compress_ptr cinfo,
-+ JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-+ JDIMENSION output_row, int num_rows)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_ycc_rgb_convert (j_decompress_ptr cinfo,
-+ JSAMPIMAGE input_buf, JDIMENSION input_row,
-+ JSAMPARRAY output_buf, int num_rows)
-+{
-+ void (*neonfct)(JDIMENSION, JSAMPIMAGE, JDIMENSION, JSAMPARRAY, int);
-+
-+ switch(cinfo->out_color_space) {
-+ case JCS_EXT_RGB:
-+ neonfct=jsimd_ycc_extrgb_convert_neon;
-+ break;
-+ case JCS_EXT_RGBX:
-+ case JCS_EXT_RGBA:
-+ neonfct=jsimd_ycc_extrgbx_convert_neon;
-+ break;
-+ case JCS_EXT_BGR:
-+ neonfct=jsimd_ycc_extbgr_convert_neon;
-+ break;
-+ case JCS_EXT_BGRX:
-+ case JCS_EXT_BGRA:
-+ neonfct=jsimd_ycc_extbgrx_convert_neon;
-+ break;
-+ case JCS_EXT_XBGR:
-+ case JCS_EXT_ABGR:
-+ neonfct=jsimd_ycc_extxbgr_convert_neon;
-+ break;
-+ case JCS_EXT_XRGB:
-+ case JCS_EXT_ARGB:
-+ neonfct=jsimd_ycc_extxrgb_convert_neon;
-+ break;
-+ default:
-+ neonfct=jsimd_ycc_extrgb_convert_neon;
-+ break;
-+ }
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ neonfct(cinfo->output_width, input_buf, input_row, output_buf, num_rows);
-+}
-+
-+GLOBAL(void)
-+jsimd_ycc_rgb565_convert (j_decompress_ptr cinfo,
-+ JSAMPIMAGE input_buf, JDIMENSION input_row,
-+ JSAMPARRAY output_buf, int num_rows)
-+{
-+ if (simd_support & JSIMD_ARM_NEON)
-+ jsimd_ycc_rgb565_convert_neon(cinfo->output_width, input_buf, input_row,
-+ output_buf, num_rows);
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v2_downsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v1_downsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-+ JSAMPARRAY input_data, JSAMPARRAY output_data)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-+ JSAMPARRAY input_data, JSAMPARRAY output_data)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v2_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v1_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v2_upsample (j_decompress_ptr cinfo,
-+ jpeg_component_info * compptr,
-+ JSAMPARRAY input_data,
-+ JSAMPARRAY * output_data_ptr)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v1_upsample (j_decompress_ptr cinfo,
-+ jpeg_component_info * compptr,
-+ JSAMPARRAY input_data,
-+ JSAMPARRAY * output_data_ptr)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v2_fancy_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v1_fancy_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v2_fancy_upsample (j_decompress_ptr cinfo,
-+ jpeg_component_info * compptr,
-+ JSAMPARRAY input_data,
-+ JSAMPARRAY * output_data_ptr)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v1_fancy_upsample (j_decompress_ptr cinfo,
-+ jpeg_component_info * compptr,
-+ JSAMPARRAY input_data,
-+ JSAMPARRAY * output_data_ptr)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v2_merged_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_h2v1_merged_upsample (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v2_merged_upsample (j_decompress_ptr cinfo,
-+ JSAMPIMAGE input_buf,
-+ JDIMENSION in_row_group_ctr,
-+ JSAMPARRAY output_buf)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_h2v1_merged_upsample (j_decompress_ptr cinfo,
-+ JSAMPIMAGE input_buf,
-+ JDIMENSION in_row_group_ctr,
-+ JSAMPARRAY output_buf)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_convsamp (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_convsamp_float (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_convsamp (JSAMPARRAY sample_data, JDIMENSION start_col,
-+ DCTELEM * workspace)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_convsamp_float (JSAMPARRAY sample_data, JDIMENSION start_col,
-+ FAST_FLOAT * workspace)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_fdct_islow (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_fdct_ifast (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_fdct_float (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_fdct_islow (DCTELEM * data)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_fdct_ifast (DCTELEM * data)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_fdct_float (FAST_FLOAT * data)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_quantize (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_quantize_float (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_quantize (JCOEFPTR coef_block, DCTELEM * divisors,
-+ DCTELEM * workspace)
-+{
-+}
-+
-+GLOBAL(void)
-+jsimd_quantize_float (JCOEFPTR coef_block, FAST_FLOAT * divisors,
-+ FAST_FLOAT * workspace)
-+{
-+}
-+
-+GLOBAL(int)
-+jsimd_can_idct_2x2 (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (DCTSIZE != 8)
-+ return 0;
-+ if (sizeof(JCOEF) != 2)
-+ return 0;
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+ if (sizeof(ISLOW_MULT_TYPE) != 2)
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_idct_4x4 (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (DCTSIZE != 8)
-+ return 0;
-+ if (sizeof(JCOEF) != 2)
-+ return 0;
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+ if (sizeof(ISLOW_MULT_TYPE) != 2)
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-+ JCOEFPTR coef_block, JSAMPARRAY output_buf,
-+ JDIMENSION output_col)
-+{
-+ if (simd_support & JSIMD_ARM_NEON)
-+ jsimd_idct_2x2_neon(compptr->dct_table, coef_block, output_buf,
-+ output_col);
-+}
-+
-+GLOBAL(void)
-+jsimd_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-+ JCOEFPTR coef_block, JSAMPARRAY output_buf,
-+ JDIMENSION output_col)
-+{
-+ if (simd_support & JSIMD_ARM_NEON)
-+ jsimd_idct_4x4_neon(compptr->dct_table, coef_block, output_buf,
-+ output_col);
-+}
-+
-+GLOBAL(int)
-+jsimd_can_idct_islow (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (DCTSIZE != 8)
-+ return 0;
-+ if (sizeof(JCOEF) != 2)
-+ return 0;
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+ if (sizeof(ISLOW_MULT_TYPE) != 2)
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_idct_ifast (void)
-+{
-+ init_simd();
-+
-+ /* The code is optimised for these values only */
-+ if (DCTSIZE != 8)
-+ return 0;
-+ if (sizeof(JCOEF) != 2)
-+ return 0;
-+ if (BITS_IN_JSAMPLE != 8)
-+ return 0;
-+ if (sizeof(JDIMENSION) != 4)
-+ return 0;
-+ if (sizeof(IFAST_MULT_TYPE) != 2)
-+ return 0;
-+ if (IFAST_SCALE_BITS != 2)
-+ return 0;
-+
-+ if (simd_support & JSIMD_ARM_NEON)
-+ return 1;
-+
-+ return 0;
-+}
-+
-+GLOBAL(int)
-+jsimd_can_idct_float (void)
-+{
-+ init_simd();
-+
-+ return 0;
-+}
-+
-+GLOBAL(void)
-+jsimd_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-+ JCOEFPTR coef_block, JSAMPARRAY output_buf,
-+ JDIMENSION output_col)
-+{
-+ if (simd_support & JSIMD_ARM_NEON)
-+ jsimd_idct_islow_neon(compptr->dct_table, coef_block, output_buf,
-+ output_col);
-+}
-+
-+GLOBAL(void)
-+jsimd_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-+ JCOEFPTR coef_block, JSAMPARRAY output_buf,
-+ JDIMENSION output_col)
-+{
-+ if (simd_support & JSIMD_ARM_NEON)
-+ jsimd_idct_ifast_neon(compptr->dct_table, coef_block, output_buf,
-+ output_col);
-+}
-+
-+GLOBAL(void)
-+jsimd_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-+ JCOEFPTR coef_block, JSAMPARRAY output_buf,
-+ JDIMENSION output_col)
-+{
-+}
-Index: simd/jsimd_arm64_neon.S
-new file mode 100644
-===================================================================
---- /dev/null
-+++ simd/jsimd_arm64_neon.S
-@@ -0,0 +1,1861 @@
-+/*
-+ * ARMv8 NEON optimizations for libjpeg-turbo
-+ *
-+ * Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies).
-+ * All rights reserved.
-+ * Author: Siarhei Siamashka <siarhei.siamashka@nokia.com>
-+ * Copyright (C) 2013-2014, Linaro Limited
-+ * Author: Ragesh Radhakrishnan <ragesh.r@linaro.org>
-+ *
-+ * This software is provided 'as-is', without any express or implied
-+ * warranty. In no event will the authors be held liable for any damages
-+ * arising from the use of this software.
-+ *
-+ * Permission is granted to anyone to use this software for any purpose,
-+ * including commercial applications, and to alter it and redistribute it
-+ * freely, subject to the following restrictions:
-+ *
-+ * 1. The origin of this software must not be misrepresented; you must not
-+ * claim that you wrote the original software. If you use this software
-+ * in a product, an acknowledgment in the product documentation would be
-+ * appreciated but is not required.
-+ * 2. Altered source versions must be plainly marked as such, and must not be
-+ * misrepresented as being the original software.
-+ * 3. This notice may not be removed or altered from any source distribution.
-+ */
-+
-+#if defined(__linux__) && defined(__ELF__)
-+.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
-+#endif
-+
-+.text
-+.arch armv8-a+fp+simd
-+
-+
-+#define RESPECT_STRICT_ALIGNMENT 1
-+
-+
-+/*****************************************************************************/
-+
-+/* Supplementary macro for setting function attributes */
-+.macro asm_function fname
-+#ifdef __APPLE__
-+ .globl _\fname
-+_\fname:
-+#else
-+ .global \fname
-+#ifdef __ELF__
-+ .hidden \fname
-+ .type \fname, %function
-+#endif
-+\fname:
-+#endif
-+.endm
-+
-+/* Transpose elements of single 128 bit registers */
-+.macro transpose_single x0,x1,xi,xilen,literal
-+ ins \xi\xilen[0], \x0\xilen[0]
-+ ins \x1\xilen[0], \x0\xilen[1]
-+ trn1 \x0\literal, \x0\literal, \x1\literal
-+ trn2 \x1\literal, \xi\literal, \x1\literal
-+.endm
-+
-+/* Transpose elements of 2 differnet registers */
-+.macro transpose x0,x1,xi,xilen,literal
-+ mov \xi\xilen, \x0\xilen
-+ trn1 \x0\literal, \x0\literal, \x1\literal
-+ trn2 \x1\literal, \xi\literal, \x1\literal
-+.endm
-+
-+/* Transpose a block of 4x4 coefficients in four 64-bit registers */
-+.macro transpose_4x4_32 x0,x0len x1,x1len x2,x2len x3,x3len,xi,xilen
-+ mov \xi\xilen, \x0\xilen
-+ trn1 \x0\x0len, \x0\x0len, \x2\x2len
-+ trn2 \x2\x2len, \xi\x0len, \x2\x2len
-+ mov \xi\xilen, \x1\xilen
-+ trn1 \x1\x1len, \x1\x1len, \x3\x3len
-+ trn2 \x3\x3len, \xi\x1len, \x3\x3len
-+.endm
-+
-+.macro transpose_4x4_16 x0,x0len x1,x1len, x2,x2len, x3,x3len,xi,xilen
-+ mov \xi\xilen, \x0\xilen
-+ trn1 \x0\x0len, \x0\x0len, \x1\x1len
-+ trn2 \x1\x2len, \xi\x0len, \x1\x2len
-+ mov \xi\xilen, \x2\xilen
-+ trn1 \x2\x2len, \x2\x2len, \x3\x3len
-+ trn2 \x3\x2len, \xi\x1len, \x3\x3len
-+.endm
-+
-+.macro transpose_4x4 x0, x1, x2, x3,x5
-+ transpose_4x4_16 \x0,.4h, \x1,.4h, \x2,.4h,\x3,.4h,\x5,.16b
-+ transpose_4x4_32 \x0,.2s, \x1,.2s, \x2,.2s,\x3,.2s,\x5,.16b
-+.endm
-+
-+
-+#define CENTERJSAMPLE 128
-+
-+/*****************************************************************************/
-+
-+/*
-+ * Perform dequantization and inverse DCT on one block of coefficients.
-+ *
-+ * GLOBAL(void)
-+ * jsimd_idct_islow_neon (void * dct_table, JCOEFPTR coef_block,
-+ * JSAMPARRAY output_buf, JDIMENSION output_col)
-+ */
-+
-+#define FIX_0_298631336 (2446)
-+#define FIX_0_390180644 (3196)
-+#define FIX_0_541196100 (4433)
-+#define FIX_0_765366865 (6270)
-+#define FIX_0_899976223 (7373)
-+#define FIX_1_175875602 (9633)
-+#define FIX_1_501321110 (12299)
-+#define FIX_1_847759065 (15137)
-+#define FIX_1_961570560 (16069)
-+#define FIX_2_053119869 (16819)
-+#define FIX_2_562915447 (20995)
-+#define FIX_3_072711026 (25172)
-+
-+#define FIX_1_175875602_MINUS_1_961570560 (FIX_1_175875602 - FIX_1_961570560)
-+#define FIX_1_175875602_MINUS_0_390180644 (FIX_1_175875602 - FIX_0_390180644)
-+#define FIX_0_541196100_MINUS_1_847759065 (FIX_0_541196100 - FIX_1_847759065)
-+#define FIX_3_072711026_MINUS_2_562915447 (FIX_3_072711026 - FIX_2_562915447)
-+#define FIX_0_298631336_MINUS_0_899976223 (FIX_0_298631336 - FIX_0_899976223)
-+#define FIX_1_501321110_MINUS_0_899976223 (FIX_1_501321110 - FIX_0_899976223)
-+#define FIX_2_053119869_MINUS_2_562915447 (FIX_2_053119869 - FIX_2_562915447)
-+#define FIX_0_541196100_PLUS_0_765366865 (FIX_0_541196100 + FIX_0_765366865)
-+
-+/*
-+ * Reference SIMD-friendly 1-D ISLOW iDCT C implementation.
-+ * Uses some ideas from the comments in 'simd/jiss2int-64.asm'
-+ */
-+#define REF_1D_IDCT(xrow0, xrow1, xrow2, xrow3, xrow4, xrow5, xrow6, xrow7) \
-+{ \
-+ DCTELEM row0, row1, row2, row3, row4, row5, row6, row7; \
-+ INT32 q1, q2, q3, q4, q5, q6, q7; \
-+ INT32 tmp11_plus_tmp2, tmp11_minus_tmp2; \
-+ \
-+ /* 1-D iDCT input data */ \
-+ row0 = xrow0; \
-+ row1 = xrow1; \
-+ row2 = xrow2; \
-+ row3 = xrow3; \
-+ row4 = xrow4; \
-+ row5 = xrow5; \
-+ row6 = xrow6; \
-+ row7 = xrow7; \
-+ \
-+ q5 = row7 + row3; \
-+ q4 = row5 + row1; \
-+ q6 = MULTIPLY(q5, FIX_1_175875602_MINUS_1_961570560) + \
-+ MULTIPLY(q4, FIX_1_175875602); \
-+ q7 = MULTIPLY(q5, FIX_1_175875602) + \
-+ MULTIPLY(q4, FIX_1_175875602_MINUS_0_390180644); \
-+ q2 = MULTIPLY(row2, FIX_0_541196100) + \
-+ MULTIPLY(row6, FIX_0_541196100_MINUS_1_847759065); \
-+ q4 = q6; \
-+ q3 = ((INT32) row0 - (INT32) row4) << 13; \
-+ q6 += MULTIPLY(row5, -FIX_2_562915447) + \
-+ MULTIPLY(row3, FIX_3_072711026_MINUS_2_562915447); \
-+ /* now we can use q1 (reloadable constants have been used up) */ \
-+ q1 = q3 + q2; \
-+ q4 += MULTIPLY(row7, FIX_0_298631336_MINUS_0_899976223) + \
-+ MULTIPLY(row1, -FIX_0_899976223); \
-+ q5 = q7; \
-+ q1 = q1 + q6; \
-+ q7 += MULTIPLY(row7, -FIX_0_899976223) + \
-+ MULTIPLY(row1, FIX_1_501321110_MINUS_0_899976223); \
-+ \
-+ /* (tmp11 + tmp2) has been calculated (out_row1 before descale) */ \
-+ tmp11_plus_tmp2 = q1; \
-+ row1 = 0; \
-+ \
-+ q1 = q1 - q6; \
-+ q5 += MULTIPLY(row5, FIX_2_053119869_MINUS_2_562915447) + \
-+ MULTIPLY(row3, -FIX_2_562915447); \
-+ q1 = q1 - q6; \
-+ q6 = MULTIPLY(row2, FIX_0_541196100_PLUS_0_765366865) + \
-+ MULTIPLY(row6, FIX_0_541196100); \
-+ q3 = q3 - q2; \
-+ \
-+ /* (tmp11 - tmp2) has been calculated (out_row6 before descale) */ \
-+ tmp11_minus_tmp2 = q1; \
-+ \
-+ q1 = ((INT32) row0 + (INT32) row4) << 13; \
-+ q2 = q1 + q6; \
-+ q1 = q1 - q6; \
-+ \
-+ /* pick up the results */ \
-+ tmp0 = q4; \
-+ tmp1 = q5; \
-+ tmp2 = (tmp11_plus_tmp2 - tmp11_minus_tmp2) / 2; \
-+ tmp3 = q7; \
-+ tmp10 = q2; \
-+ tmp11 = (tmp11_plus_tmp2 + tmp11_minus_tmp2) / 2; \
-+ tmp12 = q3; \
-+ tmp13 = q1; \
-+}
-+
-+#define XFIX_0_899976223 v0.4h[0]
-+#define XFIX_0_541196100 v0.4h[1]
-+#define XFIX_2_562915447 v0.4h[2]
-+#define XFIX_0_298631336_MINUS_0_899976223 v0.4h[3]
-+#define XFIX_1_501321110_MINUS_0_899976223 v1.4h[0]
-+#define XFIX_2_053119869_MINUS_2_562915447 v1.4h[1]
-+#define XFIX_0_541196100_PLUS_0_765366865 v1.4h[2]
-+#define XFIX_1_175875602 v1.4h[3]
-+#define XFIX_1_175875602_MINUS_0_390180644 v2.4h[0]
-+#define XFIX_0_541196100_MINUS_1_847759065 v2.4h[1]
-+#define XFIX_3_072711026_MINUS_2_562915447 v2.4h[2]
-+#define XFIX_1_175875602_MINUS_1_961570560 v2.4h[3]
-+
-+.balign 16
-+jsimd_idct_islow_neon_consts:
-+ .short FIX_0_899976223 /* d0[0] */
-+ .short FIX_0_541196100 /* d0[1] */
-+ .short FIX_2_562915447 /* d0[2] */
-+ .short FIX_0_298631336_MINUS_0_899976223 /* d0[3] */
-+ .short FIX_1_501321110_MINUS_0_899976223 /* d1[0] */
-+ .short FIX_2_053119869_MINUS_2_562915447 /* d1[1] */
-+ .short FIX_0_541196100_PLUS_0_765366865 /* d1[2] */
-+ .short FIX_1_175875602 /* d1[3] */
-+ /* reloadable constants */
-+ .short FIX_1_175875602_MINUS_0_390180644 /* d2[0] */
-+ .short FIX_0_541196100_MINUS_1_847759065 /* d2[1] */
-+ .short FIX_3_072711026_MINUS_2_562915447 /* d2[2] */
-+ .short FIX_1_175875602_MINUS_1_961570560 /* d2[3] */
-+
-+asm_function jsimd_idct_islow_neon
-+
-+ DCT_TABLE .req x0
-+ COEF_BLOCK .req x1
-+ OUTPUT_BUF .req x2
-+ OUTPUT_COL .req x3
-+ TMP1 .req x0
-+ TMP2 .req x1
-+ TMP3 .req x2
-+ TMP4 .req x15
-+
-+ ROW0L .req v16
-+ ROW0R .req v17
-+ ROW1L .req v18
-+ ROW1R .req v19
-+ ROW2L .req v20
-+ ROW2R .req v21
-+ ROW3L .req v22
-+ ROW3R .req v23
-+ ROW4L .req v24
-+ ROW4R .req v25
-+ ROW5L .req v26
-+ ROW5R .req v27
-+ ROW6L .req v28
-+ ROW6R .req v29
-+ ROW7L .req v30
-+ ROW7R .req v31
-+ /* Save all NEON registers and x15 (32 NEON registers * 8 bytes + 16) */
-+ sub sp, sp, 272
-+ str x15, [sp], 16
-+ adr x15, jsimd_idct_islow_neon_consts
-+ st1 {v0.8b - v3.8b}, [sp], 32
-+ st1 {v4.8b - v7.8b}, [sp], 32
-+ st1 {v8.8b - v11.8b}, [sp], 32
-+ st1 {v12.8b - v15.8b}, [sp], 32
-+ st1 {v16.8b - v19.8b}, [sp], 32
-+ st1 {v20.8b - v23.8b}, [sp], 32
-+ st1 {v24.8b - v27.8b}, [sp], 32
-+ st1 {v28.8b - v31.8b}, [sp], 32
-+ ld1 {v16.4h, v17.4h, v18.4h, v19.4h}, [COEF_BLOCK], 32
-+ ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [DCT_TABLE], 32
-+ ld1 {v20.4h, v21.4h, v22.4h, v23.4h}, [COEF_BLOCK], 32
-+ mul v16.4h, v16.4h, v0.4h
-+ mul v17.4h, v17.4h, v1.4h
-+ ins v16.2d[1], v17.2d[0] /* 128 bit q8 */
-+ ld1 {v4.4h, v5.4h, v6.4h, v7.4h}, [DCT_TABLE], 32
-+ mul v18.4h, v18.4h, v2.4h
-+ mul v19.4h, v19.4h, v3.4h
-+ ins v18.2d[1], v19.2d[0] /* 128 bit q9 */
-+ ld1 {v24.4h, v25.4h, v26.4h, v27.4h}, [COEF_BLOCK], 32
-+ mul v20.4h, v20.4h, v4.4h
-+ mul v21.4h, v21.4h, v5.4h
-+ ins v20.2d[1], v21.2d[0] /* 128 bit q10 */
-+ ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [DCT_TABLE], 32
-+ mul v22.4h, v22.4h, v6.4h
-+ mul v23.4h, v23.4h, v7.4h
-+ ins v22.2d[1], v23.2d[0] /* 128 bit q11 */
-+ ld1 {v28.4h, v29.4h, v30.4h, v31.4h}, [COEF_BLOCK]
-+ mul v24.4h, v24.4h, v0.4h
-+ mul v25.4h, v25.4h, v1.4h
-+ ins v24.2d[1], v25.2d[0] /* 128 bit q12 */
-+ ld1 {v4.4h, v5.4h, v6.4h, v7.4h}, [DCT_TABLE], 32
-+ mul v28.4h, v28.4h, v4.4h
-+ mul v29.4h, v29.4h, v5.4h
-+ ins v28.2d[1], v29.2d[0] /* 128 bit q14 */
-+ mul v26.4h, v26.4h, v2.4h
-+ mul v27.4h, v27.4h, v3.4h
-+ ins v26.2d[1], v27.2d[0] /* 128 bit q13 */
-+ ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [x15] /* load constants */
-+ add x15, x15, #16
-+ mul v30.4h, v30.4h, v6.4h
-+ mul v31.4h, v31.4h, v7.4h
-+ ins v30.2d[1], v31.2d[0] /* 128 bit q15 */
-+ /* Go to the bottom of the stack */
-+ sub sp, sp, 352
-+ stp x4, x5, [sp], 16
-+ st1 {v8.4h - v11.4h}, [sp], 32 /* save NEON registers */
-+ st1 {v12.4h - v15.4h}, [sp], 32
-+ /* 1-D IDCT, pass 1, left 4x8 half */
-+ add v4.4h, ROW7L.4h, ROW3L.4h
-+ add v5.4h, ROW5L.4h, ROW1L.4h
-+ smull v12.4s, v4.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smlal v12.4s, v5.4h, XFIX_1_175875602
-+ smull v14.4s, v4.4h, XFIX_1_175875602
-+ /* Check for the zero coefficients in the right 4x8 half */
-+ smlal v14.4s, v5.4h, XFIX_1_175875602_MINUS_0_390180644
-+ ssubl v6.4s, ROW0L.4h, ROW4L.4h
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 1 * 8))]
-+ smull v4.4s, ROW2L.4h, XFIX_0_541196100
-+ smlal v4.4s, ROW6L.4h, XFIX_0_541196100_MINUS_1_847759065
-+ orr x0, x4, x5
-+ mov v8.16b, v12.16b
-+ smlsl v12.4s, ROW5L.4h, XFIX_2_562915447
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 2 * 8))]
-+ smlal v12.4s, ROW3L.4h, XFIX_3_072711026_MINUS_2_562915447
-+ shl v6.4s, v6.4s, #13
-+ orr x0, x0, x4
-+ smlsl v8.4s, ROW1L.4h, XFIX_0_899976223
-+ orr x0, x0 , x5
-+ add v2.4s, v6.4s, v4.4s
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 3 * 8))]
-+ mov v10.16b, v14.16b
-+ add v2.4s, v2.4s, v12.4s
-+ orr x0, x0, x4
-+ smlsl v14.4s, ROW7L.4h, XFIX_0_899976223
-+ orr x0, x0, x5
-+ smlal v14.4s, ROW1L.4h, XFIX_1_501321110_MINUS_0_899976223
-+ rshrn ROW1L.4h, v2.4s, #11
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 4 * 8))]
-+ sub v2.4s, v2.4s, v12.4s
-+ smlal v10.4s, ROW5L.4h, XFIX_2_053119869_MINUS_2_562915447
-+ orr x0, x0, x4
-+ smlsl v10.4s, ROW3L.4h, XFIX_2_562915447
-+ orr x0, x0, x5
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW2L.4h, XFIX_0_541196100_PLUS_0_765366865
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 5 * 8))]
-+ smlal v12.4s, ROW6L.4h, XFIX_0_541196100
-+ sub v6.4s, v6.4s, v4.4s
-+ orr x0, x0, x4
-+ rshrn ROW6L.4h, v2.4s, #11
-+ orr x0, x0, x5
-+ add v2.4s, v6.4s, v10.4s
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 6 * 8))]
-+ sub v6.4s, v6.4s, v10.4s
-+ saddl v10.4s, ROW0L.4h, ROW4L.4h
-+ orr x0, x0, x4
-+ rshrn ROW2L.4h, v2.4s, #11
-+ orr x0, x0, x5
-+ rshrn ROW5L.4h, v6.4s, #11
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 7 * 8))]
-+ shl v10.4s, v10.4s, #13
-+ smlal v8.4s, ROW7L.4h, XFIX_0_298631336_MINUS_0_899976223
-+ orr x0, x0, x4
-+ add v4.4s, v10.4s, v12.4s
-+ orr x0, x0, x5
-+ cmp x0, #0 /* orrs instruction removed */
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ ldp w4, w5, [COEF_BLOCK, #(-96 + 2 * (4 + 0 * 8))]
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ orr x0, x4, x5
-+ sub v6.4s, v2.4s, v8.4s
-+ /* pop {x4, x5} */
-+ sub sp, sp, 80
-+ ldp x4, x5, [sp], 16
-+ rshrn ROW7L.4h, v4.4s, #11
-+ rshrn ROW3L.4h, v10.4s, #11
-+ rshrn ROW0L.4h, v12.4s, #11
-+ rshrn ROW4L.4h, v6.4s, #11
-+
-+ beq 3f /* Go to do some special handling for the sparse right 4x8 half */
-+
-+ /* 1-D IDCT, pass 1, right 4x8 half */
-+ ld1 {v2.4h}, [x15] /* reload constants */
-+ add v10.4h, ROW7R.4h, ROW3R.4h
-+ add v8.4h, ROW5R.4h, ROW1R.4h
-+ /* Transpose ROW6L <-> ROW7L (v3 available free register) */
-+ transpose ROW6L, ROW7L, v3, .16b, .4h
-+ smull v12.4s, v10.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smlal v12.4s, v8.4h, XFIX_1_175875602
-+ /* Transpose ROW2L <-> ROW3L (v3 available free register) */
-+ transpose ROW2L, ROW3L, v3, .16b, .4h
-+ smull v14.4s, v10.4h, XFIX_1_175875602
-+ smlal v14.4s, v8.4h, XFIX_1_175875602_MINUS_0_390180644
-+ /* Transpose ROW0L <-> ROW1L (v3 available free register) */
-+ transpose ROW0L, ROW1L, v3, .16b, .4h
-+ ssubl v6.4s, ROW0R.4h, ROW4R.4h
-+ smull v4.4s, ROW2R.4h, XFIX_0_541196100
-+ smlal v4.4s, ROW6R.4h, XFIX_0_541196100_MINUS_1_847759065
-+ /* Transpose ROW4L <-> ROW5L (v3 available free register) */
-+ transpose ROW4L, ROW5L, v3, .16b, .4h
-+ mov v8.16b, v12.16b
-+ smlsl v12.4s, ROW5R.4h, XFIX_2_562915447
-+ smlal v12.4s, ROW3R.4h, XFIX_3_072711026_MINUS_2_562915447
-+ /* Transpose ROW1L <-> ROW3L (v3 available free register) */
-+ transpose ROW1L, ROW3L, v3, .16b, .2s
-+ shl v6.4s, v6.4s, #13
-+ smlsl v8.4s, ROW1R.4h, XFIX_0_899976223
-+ /* Transpose ROW4L <-> ROW6L (v3 available free register) */
-+ transpose ROW4L, ROW6L, v3, .16b, .2s
-+ add v2.4s, v6.4s, v4.4s
-+ mov v10.16b, v14.16b
-+ add v2.4s, v2.4s, v12.4s
-+ /* Transpose ROW0L <-> ROW2L (v3 available free register) */
-+ transpose ROW0L, ROW2L, v3, .16b, .2s
-+ smlsl v14.4s, ROW7R.4h, XFIX_0_899976223
-+ smlal v14.4s, ROW1R.4h, XFIX_1_501321110_MINUS_0_899976223
-+ rshrn ROW1R.4h, v2.4s, #11
-+ /* Transpose ROW5L <-> ROW7L (v3 available free register) */
-+ transpose ROW5L, ROW7L, v3, .16b, .2s
-+ sub v2.4s, v2.4s, v12.4s
-+ smlal v10.4s, ROW5R.4h, XFIX_2_053119869_MINUS_2_562915447
-+ smlsl v10.4s, ROW3R.4h, XFIX_2_562915447
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW2R.4h, XFIX_0_541196100_PLUS_0_765366865
-+ smlal v12.4s, ROW6R.4h, XFIX_0_541196100
-+ sub v6.4s, v6.4s, v4.4s
-+ rshrn ROW6R.4h, v2.4s, #11
-+ add v2.4s, v6.4s, v10.4s
-+ sub v6.4s, v6.4s, v10.4s
-+ saddl v10.4s, ROW0R.4h, ROW4R.4h
-+ rshrn ROW2R.4h, v2.4s, #11
-+ rshrn ROW5R.4h, v6.4s, #11
-+ shl v10.4s, v10.4s, #13
-+ smlal v8.4s, ROW7R.4h, XFIX_0_298631336_MINUS_0_899976223
-+ add v4.4s, v10.4s, v12.4s
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ sub v6.4s, v2.4s, v8.4s
-+ rshrn ROW7R.4h, v4.4s, #11
-+ rshrn ROW3R.4h, v10.4s, #11
-+ rshrn ROW0R.4h, v12.4s, #11
-+ rshrn ROW4R.4h, v6.4s, #11
-+ /* Transpose right 4x8 half */
-+ transpose ROW6R, ROW7R, v3, .16b, .4h
-+ transpose ROW2R, ROW3R, v3, .16b, .4h
-+ transpose ROW0R, ROW1R, v3, .16b, .4h
-+ transpose ROW4R, ROW5R, v3, .16b, .4h
-+ transpose ROW1R, ROW3R, v3, .16b, .2s
-+ transpose ROW4R, ROW6R, v3, .16b, .2s
-+ transpose ROW0R, ROW2R, v3, .16b, .2s
-+ transpose ROW5R, ROW7R, v3, .16b, .2s
-+
-+1: /* 1-D IDCT, pass 2 (normal variant), left 4x8 half */
-+ ld1 {v2.4h}, [x15] /* reload constants */
-+ smull v12.4S, ROW1R.4h, XFIX_1_175875602 /* ROW5L.4h <-> ROW1R.4h */
-+ smlal v12.4s, ROW1L.4h, XFIX_1_175875602
-+ smlal v12.4s, ROW3R.4h, XFIX_1_175875602_MINUS_1_961570560 /* ROW7L.4h <-> ROW3R.4h */
-+ smlal v12.4s, ROW3L.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smull v14.4s, ROW3R.4h, XFIX_1_175875602 /* ROW7L.4h <-> ROW3R.4h */
-+ smlal v14.4s, ROW3L.4h, XFIX_1_175875602
-+ smlal v14.4s, ROW1R.4h, XFIX_1_175875602_MINUS_0_390180644 /* ROW5L.4h <-> ROW1R.4h */
-+ smlal v14.4s, ROW1L.4h, XFIX_1_175875602_MINUS_0_390180644
-+ ssubl v6.4s, ROW0L.4h, ROW0R.4h /* ROW4L.4h <-> ROW0R.4h */
-+ smull v4.4s, ROW2L.4h, XFIX_0_541196100
-+ smlal v4.4s, ROW2R.4h, XFIX_0_541196100_MINUS_1_847759065 /* ROW6L.4h <-> ROW2R.4h */
-+ mov v8.16b, v12.16b
-+ smlsl v12.4s, ROW1R.4h, XFIX_2_562915447 /* ROW5L.4h <-> ROW1R.4h */
-+ smlal v12.4s, ROW3L.4h, XFIX_3_072711026_MINUS_2_562915447
-+ shl v6.4s, v6.4s, #13
-+ smlsl v8.4s, ROW1L.4h, XFIX_0_899976223
-+ add v2.4s, v6.4s, v4.4s
-+ mov v10.16b, v14.16b
-+ add v2.4s, v2.4s, v12.4s
-+ smlsl v14.4s, ROW3R.4h, XFIX_0_899976223 /* ROW7L.4h <-> ROW3R.4h */
-+ smlal v14.4s, ROW1L.4h, XFIX_1_501321110_MINUS_0_899976223
-+ shrn ROW1L.4h, v2.4s, #16
-+ sub v2.4s, v2.4s, v12.4s
-+ smlal v10.4s, ROW1R.4h, XFIX_2_053119869_MINUS_2_562915447 /* ROW5L.4h <-> ROW1R.4h */
-+ smlsl v10.4s, ROW3L.4h, XFIX_2_562915447
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW2L.4h, XFIX_0_541196100_PLUS_0_765366865
-+ smlal v12.4s, ROW2R.4h, XFIX_0_541196100 /* ROW6L.4h <-> ROW2R.4h */
-+ sub v6.4s, v6.4s, v4.4s
-+ shrn ROW2R.4h, v2.4s, #16 /* ROW6L.4h <-> ROW2R.4h */
-+ add v2.4s, v6.4s, v10.4s
-+ sub v6.4s, v6.4s, v10.4s
-+ saddl v10.4s, ROW0L.4h, ROW0R.4h /* ROW4L.4h <-> ROW0R.4h */
-+ shrn ROW2L.4h, v2.4s, #16
-+ shrn ROW1R.4h, v6.4s, #16 /* ROW5L.4h <-> ROW1R.4h */
-+ shl v10.4s, v10.4s, #13
-+ smlal v8.4s, ROW3R.4h, XFIX_0_298631336_MINUS_0_899976223 /* ROW7L.4h <-> ROW3R.4h */
-+ add v4.4s, v10.4s, v12.4s
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ sub v6.4s, v2.4s, v8.4s
-+ shrn ROW3R.4h, v4.4s, #16 /* ROW7L.4h <-> ROW3R.4h */
-+ shrn ROW3L.4h, v10.4s, #16
-+ shrn ROW0L.4h, v12.4s, #16
-+ shrn ROW0R.4h, v6.4s, #16 /* ROW4L.4h <-> ROW0R.4h */
-+ /* 1-D IDCT, pass 2, right 4x8 half */
-+ ld1 {v2.4h}, [x15] /* reload constants */
-+ smull v12.4s, ROW5R.4h, XFIX_1_175875602
-+ smlal v12.4s, ROW5L.4h, XFIX_1_175875602 /* ROW5L.4h <-> ROW1R.4h */
-+ smlal v12.4s, ROW7R.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smlal v12.4s, ROW7L.4h, XFIX_1_175875602_MINUS_1_961570560 /* ROW7L.4h <-> ROW3R.4h */
-+ smull v14.4s, ROW7R.4h, XFIX_1_175875602
-+ smlal v14.4s, ROW7L.4h, XFIX_1_175875602 /* ROW7L.4h <-> ROW3R.4h */
-+ smlal v14.4s, ROW5R.4h, XFIX_1_175875602_MINUS_0_390180644
-+ smlal v14.4s, ROW5L.4h, XFIX_1_175875602_MINUS_0_390180644 /* ROW5L.4h <-> ROW1R.4h */
-+ ssubl v6.4s, ROW4L.4h, ROW4R.4h /* ROW4L.4h <-> ROW0R.4h */
-+ smull v4.4s, ROW6L.4h, XFIX_0_541196100 /* ROW6L.4h <-> ROW2R.4h */
-+ smlal v4.4s, ROW6R.4h, XFIX_0_541196100_MINUS_1_847759065
-+ mov v8.16b, v12.16b
-+ smlsl v12.4s, ROW5R.4h, XFIX_2_562915447
-+ smlal v12.4s, ROW7L.4h, XFIX_3_072711026_MINUS_2_562915447 /* ROW7L.4h <-> ROW3R.4h */
-+ shl v6.4s, v6.4s, #13
-+ smlsl v8.4s, ROW5L.4h, XFIX_0_899976223 /* ROW5L.4h <-> ROW1R.4h */
-+ add v2.4s, v6.4s, v4.4s
-+ mov v10.16b, v14.16b
-+ add v2.4s, v2.4s, v12.4s
-+ smlsl v14.4s, ROW7R.4h, XFIX_0_899976223
-+ smlal v14.4s, ROW5L.4h, XFIX_1_501321110_MINUS_0_899976223 /* ROW5L.4h <-> ROW1R.4h */
-+ shrn ROW5L.4h, v2.4s, #16 /* ROW5L.4h <-> ROW1R.4h */
-+ sub v2.4s, v2.4s, v12.4s
-+ smlal v10.4s, ROW5R.4h, XFIX_2_053119869_MINUS_2_562915447
-+ smlsl v10.4s, ROW7L.4h, XFIX_2_562915447 /* ROW7L.4h <-> ROW3R.4h */
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW6L.4h, XFIX_0_541196100_PLUS_0_765366865 /* ROW6L.4h <-> ROW2R.4h */
-+ smlal v12.4s, ROW6R.4h, XFIX_0_541196100
-+ sub v6.4s, v6.4s, v4.4s
-+ shrn ROW6R.4h, v2.4s, #16
-+ add v2.4s, v6.4s, v10.4s
-+ sub v6.4s, v6.4s, v10.4s
-+ saddl v10.4s, ROW4L.4h, ROW4R.4h /* ROW4L.4h <-> ROW0R.4h */
-+ shrn ROW6L.4h, v2.4s, #16 /* ROW6L.4h <-> ROW2R.4h */
-+ shrn ROW5R.4h, v6.4s, #16
-+ shl v10.4s, v10.4s, #13
-+ smlal v8.4s, ROW7R.4h, XFIX_0_298631336_MINUS_0_899976223
-+ add v4.4s, v10.4s, v12.4s
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ sub v6.4s, v2.4s, v8.4s
-+ shrn ROW7R.4h, v4.4s, #16
-+ shrn ROW7L.4h, v10.4s, #16 /* ROW7L.4h <-> ROW3R.4h */
-+ shrn ROW4L.4h, v12.4s, #16 /* ROW4L.4h <-> ROW0R.4h */
-+ shrn ROW4R.4h, v6.4s, #16
-+
-+2: /* Descale to 8-bit and range limit */
-+ ins v16.2d[1], v17.2d[0]
-+ ins v18.2d[1], v19.2d[0]
-+ ins v20.2d[1], v21.2d[0]
-+ ins v22.2d[1], v23.2d[0]
-+ sqrshrn v16.8b, v16.8h, #2
-+ sqrshrn2 v16.16b, v18.8h, #2
-+ sqrshrn v18.8b, v20.8h, #2
-+ sqrshrn2 v18.16b, v22.8h, #2
-+
-+ /* vpop {v8.4h - d15.4h} */ /* restore NEON registers */
-+ ld1 {v8.4h - v11.4h}, [sp], 32
-+ ld1 {v12.4h - v15.4h}, [sp], 32
-+ ins v24.2d[1], v25.2d[0]
-+
-+ sqrshrn v20.8b, v24.8h, #2
-+ /* Transpose the final 8-bit samples and do signed->unsigned conversion */
-+ /* trn1 v16.8h, v16.8h, v18.8h */
-+ transpose v16, v18, v3, .16b, .8h
-+ ins v26.2d[1], v27.2d[0]
-+ ins v28.2d[1], v29.2d[0]
-+ ins v30.2d[1], v31.2d[0]
-+ sqrshrn2 v20.16b, v26.8h, #2
-+ sqrshrn v22.8b, v28.8h, #2
-+ movi v0.16b, #(CENTERJSAMPLE)
-+ sqrshrn2 v22.16b, v30.8h, #2
-+ transpose_single v16, v17, v3, .2d, .8b
-+ transpose_single v18, v19, v3, .2d, .8b
-+ add v16.8b, v16.8b, v0.8b
-+ add v17.8b, v17.8b, v0.8b
-+ add v18.8b, v18.8b, v0.8b
-+ add v19.8b, v19.8b, v0.8b
-+ transpose v20, v22, v3, .16b, .8h
-+ /* Store results to the output buffer */
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ st1 {v16.8b}, [TMP1]
-+ transpose_single v20, v21, v3, .2d, .8b
-+ st1 {v17.8b}, [TMP2]
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ st1 {v18.8b}, [TMP1]
-+ add v20.8b, v20.8b, v0.8b
-+ add v21.8b, v21.8b, v0.8b
-+ st1 {v19.8b}, [TMP2]
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ ldp TMP3, TMP4, [OUTPUT_BUF]
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ add TMP3, TMP3, OUTPUT_COL
-+ add TMP4, TMP4, OUTPUT_COL
-+ transpose_single v22, v23, v3, .2d, .8b
-+ st1 {v20.8b}, [TMP1]
-+ add v22.8b, v22.8b, v0.8b
-+ add v23.8b, v23.8b, v0.8b
-+ st1 {v21.8b}, [TMP2]
-+ st1 {v22.8b}, [TMP3]
-+ st1 {v23.8b}, [TMP4]
-+ ldr x15, [sp], 16
-+ ld1 {v0.8b - v3.8b}, [sp], 32
-+ ld1 {v4.8b - v7.8b}, [sp], 32
-+ ld1 {v8.8b - v11.8b}, [sp], 32
-+ ld1 {v12.8b - v15.8b}, [sp], 32
-+ ld1 {v16.8b - v19.8b}, [sp], 32
-+ ld1 {v20.8b - v23.8b}, [sp], 32
-+ ld1 {v24.8b - v27.8b}, [sp], 32
-+ ld1 {v28.8b - v31.8b}, [sp], 32
-+ blr x30
-+
-+3: /* Left 4x8 half is done, right 4x8 half contains mostly zeros */
-+
-+ /* Transpose left 4x8 half */
-+ transpose ROW6L, ROW7L, v3, .16b, .4h
-+ transpose ROW2L, ROW3L, v3, .16b, .4h
-+ transpose ROW0L, ROW1L, v3, .16b, .4h
-+ transpose ROW4L, ROW5L, v3, .16b, .4h
-+ shl ROW0R.4h, ROW0R.4h, #2 /* PASS1_BITS */
-+ transpose ROW1L, ROW3L, v3, .16b, .2s
-+ transpose ROW4L, ROW6L, v3, .16b, .2s
-+ transpose ROW0L, ROW2L, v3, .16b, .2s
-+ transpose ROW5L, ROW7L, v3, .16b, .2s
-+ cmp x0, #0
-+ beq 4f /* Right 4x8 half has all zeros, go to 'sparse' second pass */
-+
-+ /* Only row 0 is non-zero for the right 4x8 half */
-+ dup ROW1R.4h, ROW0R.4h[1]
-+ dup ROW2R.4h, ROW0R.4h[2]
-+ dup ROW3R.4h, ROW0R.4h[3]
-+ dup ROW4R.4h, ROW0R.4h[0]
-+ dup ROW5R.4h, ROW0R.4h[1]
-+ dup ROW6R.4h, ROW0R.4h[2]
-+ dup ROW7R.4h, ROW0R.4h[3]
-+ dup ROW0R.4h, ROW0R.4h[0]
-+ b 1b /* Go to 'normal' second pass */
-+
-+4: /* 1-D IDCT, pass 2 (sparse variant with zero rows 4-7), left 4x8 half */
-+ ld1 {v2.4h}, [x15] /* reload constants */
-+ smull v12.4s, ROW1L.4h, XFIX_1_175875602
-+ smlal v12.4s, ROW3L.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smull v14.4s, ROW3L.4h, XFIX_1_175875602
-+ smlal v14.4s, ROW1L.4h, XFIX_1_175875602_MINUS_0_390180644
-+ smull v4.4s, ROW2L.4h, XFIX_0_541196100
-+ sshll v6.4s, ROW0L.4h, #13
-+ mov v8.16b, v12.16b
-+ smlal v12.4s, ROW3L.4h, XFIX_3_072711026_MINUS_2_562915447
-+ smlsl v8.4s, ROW1L.4h, XFIX_0_899976223
-+ add v2.4s, v6.4s, v4.4s
-+ mov v10.16b, v14.16b
-+ smlal v14.4s, ROW1L.4h, XFIX_1_501321110_MINUS_0_899976223
-+ add v2.4s, v2.4s, v12.4s
-+ add v12.4s, v12.4s, v12.4s
-+ smlsl v10.4s, ROW3L.4h, XFIX_2_562915447
-+ shrn ROW1L.4h, v2.4s, #16
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW2L.4h, XFIX_0_541196100_PLUS_0_765366865
-+ sub v6.4s, v6.4s, v4.4s
-+ shrn ROW2R.4h, v2.4s, #16 /* ROW6L.4h <-> ROW2R.4h */
-+ add v2.4s, v6.4s, v10.4s
-+ sub v6.4s, v6.4s, v10.4s
-+ sshll v10.4s, ROW0L.4h, #13
-+ shrn ROW2L.4h, v2.4s, #16
-+ shrn ROW1R.4h, v6.4s, #16 /* ROW5L.4h <-> ROW1R.4h */
-+ add v4.4s, v10.4s, v12.4s
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ sub v6.4s, v2.4s, v8.4s
-+ shrn ROW3R.4h, v4.4s, #16 /* ROW7L.4h <-> ROW3R.4h */
-+ shrn ROW3L.4h, v10.4s, #16
-+ shrn ROW0L.4h, v12.4s, #16
-+ shrn ROW0R.4h, v6.4s, #16 /* ROW4L.4h <-> ROW0R.4h */
-+ /* 1-D IDCT, pass 2 (sparse variant with zero rows 4-7), right 4x8 half */
-+ ld1 {v2.4h}, [x15] /* reload constants */
-+ smull v12.4s, ROW5L.4h, XFIX_1_175875602
-+ smlal v12.4s, ROW7L.4h, XFIX_1_175875602_MINUS_1_961570560
-+ smull v14.4s, ROW7L.4h, XFIX_1_175875602
-+ smlal v14.4s, ROW5L.4h, XFIX_1_175875602_MINUS_0_390180644
-+ smull v4.4s, ROW6L.4h, XFIX_0_541196100
-+ sshll v6.4s, ROW4L.4h, #13
-+ mov v8.16b, v12.16b
-+ smlal v12.4s, ROW7L.4h, XFIX_3_072711026_MINUS_2_562915447
-+ smlsl v8.4s, ROW5L.4h, XFIX_0_899976223
-+ add v2.4s, v6.4s, v4.4s
-+ mov v10.16b, v14.16b
-+ smlal v14.4s, ROW5L.4h, XFIX_1_501321110_MINUS_0_899976223
-+ add v2.4s, v2.4s, v12.4s
-+ add v12.4s, v12.4s, v12.4s
-+ smlsl v10.4s, ROW7L.4h, XFIX_2_562915447
-+ shrn ROW5L.4h, v2.4s, #16 /* ROW5L.4h <-> ROW1R.4h */
-+ sub v2.4s, v2.4s, v12.4s
-+ smull v12.4s, ROW6L.4h, XFIX_0_541196100_PLUS_0_765366865
-+ sub v6.4s, v6.4s, v4.4s
-+ shrn ROW6R.4h, v2.4s, #16
-+ add v2.4s, v6.4s, v10.4s
-+ sub v6.4s, v6.4s, v10.4s
-+ sshll v10.4s, ROW4L.4h, #13
-+ shrn ROW6L.4h, v2.4s, #16 /* ROW6L.4h <-> ROW2R.4h */
-+ shrn ROW5R.4h, v6.4s, #16
-+ add v4.4s, v10.4s, v12.4s
-+ sub v2.4s, v10.4s, v12.4s
-+ add v12.4s, v4.4s, v14.4s
-+ sub v4.4s, v4.4s, v14.4s
-+ add v10.4s, v2.4s, v8.4s
-+ sub v6.4s, v2.4s, v8.4s
-+ shrn ROW7R.4h, v4.4s, #16
-+ shrn ROW7L.4h, v10.4s, #16 /* ROW7L.4h <-> ROW3R.4h */
-+ shrn ROW4L.4h, v12.4s, #16 /* ROW4L.4h <-> ROW0R.4h */
-+ shrn ROW4R.4h, v6.4s, #16
-+ b 2b /* Go to epilogue */
-+
-+ .unreq DCT_TABLE
-+ .unreq COEF_BLOCK
-+ .unreq OUTPUT_BUF
-+ .unreq OUTPUT_COL
-+ .unreq TMP1
-+ .unreq TMP2
-+ .unreq TMP3
-+ .unreq TMP4
-+
-+ .unreq ROW0L
-+ .unreq ROW0R
-+ .unreq ROW1L
-+ .unreq ROW1R
-+ .unreq ROW2L
-+ .unreq ROW2R
-+ .unreq ROW3L
-+ .unreq ROW3R
-+ .unreq ROW4L
-+ .unreq ROW4R
-+ .unreq ROW5L
-+ .unreq ROW5R
-+ .unreq ROW6L
-+ .unreq ROW6R
-+ .unreq ROW7L
-+ .unreq ROW7R
-+
-+
-+/*****************************************************************************/
-+
-+/*
-+ * jsimd_idct_ifast_neon
-+ *
-+ * This function contains a fast, not so accurate integer implementation of
-+ * the inverse DCT (Discrete Cosine Transform). It uses the same calculations
-+ * and produces exactly the same output as IJG's original 'jpeg_idct_ifast'
-+ * function from jidctfst.c
-+ *
-+ * Normally 1-D AAN DCT needs 5 multiplications and 29 additions.
-+ * But in ARM NEON case some extra additions are required because VQDMULH
-+ * instruction can't handle the constants larger than 1. So the expressions
-+ * like "x * 1.082392200" have to be converted to "x * 0.082392200 + x",
-+ * which introduces an extra addition. Overall, there are 6 extra additions
-+ * per 1-D IDCT pass, totalling to 5 VQDMULH and 35 VADD/VSUB instructions.
-+ */
-+
-+#define XFIX_1_082392200 v0.4h[0]
-+#define XFIX_1_414213562 v0.4h[1]
-+#define XFIX_1_847759065 v0.4h[2]
-+#define XFIX_2_613125930 v0.4h[3]
-+
-+.balign 16
-+jsimd_idct_ifast_neon_consts:
-+ .short (277 * 128 - 256 * 128) /* XFIX_1_082392200 */
-+ .short (362 * 128 - 256 * 128) /* XFIX_1_414213562 */
-+ .short (473 * 128 - 256 * 128) /* XFIX_1_847759065 */
-+ .short (669 * 128 - 512 * 128) /* XFIX_2_613125930 */
-+
-+asm_function jsimd_idct_ifast_neon
-+
-+ DCT_TABLE .req x0
-+ COEF_BLOCK .req x1
-+ OUTPUT_BUF .req x2
-+ OUTPUT_COL .req x3
-+ TMP1 .req x0
-+ TMP2 .req x1
-+ TMP3 .req x2
-+ TMP4 .req x22
-+ TMP5 .req x23
-+
-+ /* Load and dequantize coefficients into NEON registers
-+ * with the following allocation:
-+ * 0 1 2 3 | 4 5 6 7
-+ * ---------+--------
-+ * 0 | d16 | d17 ( v8.8h )
-+ * 1 | d18 | d19 ( v9.8h )
-+ * 2 | d20 | d21 ( v10.8h )
-+ * 3 | d22 | d23 ( v11.8h )
-+ * 4 | d24 | d25 ( v12.8h )
-+ * 5 | d26 | d27 ( v13.8h )
-+ * 6 | d28 | d29 ( v14.8h )
-+ * 7 | d30 | d31 ( v15.8h )
-+ */
-+ /* Save NEON registers used in fast IDCT */
-+ sub sp, sp, #176
-+ stp x22, x23, [sp], 16
-+ adr x23, jsimd_idct_ifast_neon_consts
-+ st1 {v0.8b - v3.8b}, [sp], 32
-+ st1 {v4.8b - v7.8b}, [sp], 32
-+ st1 {v8.8b - v11.8b}, [sp], 32
-+ st1 {v12.8b - v15.8b}, [sp], 32
-+ st1 {v16.8b - v19.8b}, [sp], 32
-+ ld1 {v8.8h, v9.8h}, [COEF_BLOCK], 32
-+ ld1 {v0.8h, v1.8h}, [DCT_TABLE], 32
-+ ld1 {v10.8h, v11.8h}, [COEF_BLOCK], 32
-+ mul v8.8h, v8.8h, v0.8h
-+ ld1 {v2.8h, v3.8h}, [DCT_TABLE], 32
-+ mul v9.8h, v9.8h, v1.8h
-+ ld1 {v12.8h, v13.8h}, [COEF_BLOCK], 32
-+ mul v10.8h, v10.8h, v2.8h
-+ ld1 {v0.8h, v1.8h}, [DCT_TABLE], 32
-+ mul v11.8h, v11.8h, v3.8h
-+ ld1 {v14.8h, v15.8h}, [COEF_BLOCK], 32
-+ mul v12.8h, v12.8h, v0.8h
-+ ld1 {v2.8h, v3.8h}, [DCT_TABLE], 32
-+ mul v14.8h, v14.8h, v2.8h
-+ mul v13.8h, v13.8h, v1.8h
-+ ld1 {v0.4h}, [x23] /* load constants */
-+ mul v15.8h, v15.8h, v3.8h
-+
-+ /* 1-D IDCT, pass 1 */
-+ sub v2.8h, v10.8h, v14.8h
-+ add v14.8h, v10.8h, v14.8h
-+ sub v1.8h, v11.8h, v13.8h
-+ add v13.8h, v11.8h, v13.8h
-+ sub v5.8h, v9.8h, v15.8h
-+ add v15.8h, v9.8h, v15.8h
-+ sqdmulh v4.8h, v2.8h, XFIX_1_414213562
-+ sqdmulh v6.8h, v1.8h, XFIX_2_613125930
-+ add v3.8h, v1.8h, v1.8h
-+ sub v1.8h, v5.8h, v1.8h
-+ add v10.8h, v2.8h, v4.8h
-+ sqdmulh v4.8h, v1.8h, XFIX_1_847759065
-+ sub v2.8h, v15.8h, v13.8h
-+ add v3.8h, v3.8h, v6.8h
-+ sqdmulh v6.8h, v2.8h, XFIX_1_414213562
-+ add v1.8h, v1.8h, v4.8h
-+ sqdmulh v4.8h, v5.8h, XFIX_1_082392200
-+ sub v10.8h, v10.8h, v14.8h
-+ add v2.8h, v2.8h, v6.8h
-+ sub v6.8h, v8.8h, v12.8h
-+ add v12.8h, v8.8h, v12.8h
-+ add v9.8h, v5.8h, v4.8h
-+ add v5.8h, v6.8h, v10.8h
-+ sub v10.8h, v6.8h, v10.8h
-+ add v6.8h, v15.8h, v13.8h
-+ add v8.8h, v12.8h, v14.8h
-+ sub v3.8h, v6.8h, v3.8h
-+ sub v12.8h, v12.8h, v14.8h
-+ sub v3.8h, v3.8h, v1.8h
-+ sub v1.8h, v9.8h, v1.8h
-+ add v2.8h, v3.8h, v2.8h
-+ sub v15.8h, v8.8h, v6.8h
-+ add v1.8h, v1.8h, v2.8h
-+ add v8.8h, v8.8h, v6.8h
-+ add v14.8h, v5.8h, v3.8h
-+ sub v9.8h, v5.8h, v3.8h
-+ sub v13.8h, v10.8h, v2.8h
-+ add v10.8h, v10.8h, v2.8h
-+ /* Transpose q8-q9 */
-+ mov v18.16b, v8.16b
-+ trn1 v8.8h, v8.8h, v9.8h
-+ trn2 v9.8h, v18.8h, v9.8h
-+ sub v11.8h, v12.8h, v1.8h
-+ /* Transpose q14-q15 */
-+ mov v18.16b, v14.16b
-+ trn1 v14.8h, v14.8h, v15.8h
-+ trn2 v15.8h, v18.8h, v15.8h
-+ add v12.8h, v12.8h, v1.8h
-+ /* Transpose q10-q11 */
-+ mov v18.16b, v10.16b
-+ trn1 v10.8h, v10.8h, v11.8h
-+ trn2 v11.8h, v18.8h, v11.8h
-+ /* Transpose q12-q13 */
-+ mov v18.16b, v12.16b
-+ trn1 v12.8h, v12.8h, v13.8h
-+ trn2 v13.8h, v18.8h, v13.8h
-+ /* Transpose q9-q11 */
-+ mov v18.16b, v9.16b
-+ trn1 v9.4s, v9.4s, v11.4s
-+ trn2 v11.4s, v18.4s, v11.4s
-+ /* Transpose q12-q14 */
-+ mov v18.16b, v12.16b
-+ trn1 v12.4s, v12.4s, v14.4s
-+ trn2 v14.4s, v18.4s, v14.4s
-+ /* Transpose q8-q10 */
-+ mov v18.16b, v8.16b
-+ trn1 v8.4s, v8.4s, v10.4s
-+ trn2 v10.4s, v18.4s, v10.4s
-+ /* Transpose q13-q15 */
-+ mov v18.16b, v13.16b
-+ trn1 v13.4s, v13.4s, v15.4s
-+ trn2 v15.4s, v18.4s, v15.4s
-+ /* vswp v14.4h, v10-MSB.4h */
-+ umov x22, v14.d[0]
-+ ins v14.2d[0], v10.2d[1]
-+ ins v10.2d[1], x22
-+ /* vswp v13.4h, v9MSB.4h */
-+
-+ umov x22, v13.d[0]
-+ ins v13.2d[0], v9.2d[1]
-+ ins v9.2d[1], x22
-+ /* 1-D IDCT, pass 2 */
-+ sub v2.8h, v10.8h, v14.8h
-+ /* vswp v15.4h, v11MSB.4h */
-+ umov x22, v15.d[0]
-+ ins v15.2d[0], v11.2d[1]
-+ ins v11.2d[1], x22
-+ add v14.8h, v10.8h, v14.8h
-+ /* vswp v12.4h, v8-MSB.4h */
-+ umov x22, v12.d[0]
-+ ins v12.2d[0], v8.2d[1]
-+ ins v8.2d[1], x22
-+ sub v1.8h, v11.8h, v13.8h
-+ add v13.8h, v11.8h, v13.8h
-+ sub v5.8h, v9.8h, v15.8h
-+ add v15.8h, v9.8h, v15.8h
-+ sqdmulh v4.8h, v2.8h, XFIX_1_414213562
-+ sqdmulh v6.8h, v1.8h, XFIX_2_613125930
-+ add v3.8h, v1.8h, v1.8h
-+ sub v1.8h, v5.8h, v1.8h
-+ add v10.8h, v2.8h, v4.8h
-+ sqdmulh v4.8h, v1.8h, XFIX_1_847759065
-+ sub v2.8h, v15.8h, v13.8h
-+ add v3.8h, v3.8h, v6.8h
-+ sqdmulh v6.8h, v2.8h, XFIX_1_414213562
-+ add v1.8h, v1.8h, v4.8h
-+ sqdmulh v4.8h, v5.8h, XFIX_1_082392200
-+ sub v10.8h, v10.8h, v14.8h
-+ add v2.8h, v2.8h, v6.8h
-+ sub v6.8h, v8.8h, v12.8h
-+ add v12.8h, v8.8h, v12.8h
-+ add v9.8h, v5.8h, v4.8h
-+ add v5.8h, v6.8h, v10.8h
-+ sub v10.8h, v6.8h, v10.8h
-+ add v6.8h, v15.8h, v13.8h
-+ add v8.8h, v12.8h, v14.8h
-+ sub v3.8h, v6.8h, v3.8h
-+ sub v12.8h, v12.8h, v14.8h
-+ sub v3.8h, v3.8h, v1.8h
-+ sub v1.8h, v9.8h, v1.8h
-+ add v2.8h, v3.8h, v2.8h
-+ sub v15.8h, v8.8h, v6.8h
-+ add v1.8h, v1.8h, v2.8h
-+ add v8.8h, v8.8h, v6.8h
-+ add v14.8h, v5.8h, v3.8h
-+ sub v9.8h, v5.8h, v3.8h
-+ sub v13.8h, v10.8h, v2.8h
-+ add v10.8h, v10.8h, v2.8h
-+ sub v11.8h, v12.8h, v1.8h
-+ add v12.8h, v12.8h, v1.8h
-+ /* Descale to 8-bit and range limit */
-+ movi v0.16b, #0x80
-+ sqshrn v8.8b, v8.8h, #5
-+ sqshrn2 v8.16b, v9.8h, #5
-+ sqshrn v9.8b, v10.8h, #5
-+ sqshrn2 v9.16b, v11.8h, #5
-+ sqshrn v10.8b, v12.8h, #5
-+ sqshrn2 v10.16b, v13.8h, #5
-+ sqshrn v11.8b, v14.8h, #5
-+ sqshrn2 v11.16b, v15.8h, #5
-+ add v8.16b, v8.16b, v0.16b
-+ add v9.16b, v9.16b, v0.16b
-+ add v10.16b, v10.16b, v0.16b
-+ add v11.16b, v11.16b, v0.16b
-+ /* Transpose the final 8-bit samples */
-+ /* Transpose q8-q9 */
-+ mov v18.16b, v8.16b
-+ trn1 v8.8h, v8.8h, v9.8h
-+ trn2 v9.8h, v18.8h, v9.8h
-+ /* Transpose q10-q11 */
-+ mov v18.16b, v10.16b
-+ trn1 v10.8h, v10.8h, v11.8h
-+ trn2 v11.8h, v18.8h, v11.8h
-+ /* Transpose q8-q10 */
-+ mov v18.16b, v8.16b
-+ trn1 v8.4s, v8.4s, v10.4s
-+ trn2 v10.4s, v18.4s, v10.4s
-+ /* Transpose q9-q11 */
-+ mov v18.16b, v9.16b
-+ trn1 v9.4s, v9.4s, v11.4s
-+ trn2 v11.4s, v18.4s, v11.4s
-+ /* make copy */
-+ ins v17.2d[0], v8.2d[1]
-+ /* Transpose d16-d17-msb */
-+ mov v18.16b, v8.16b
-+ trn1 v8.8b, v8.8b, v17.8b
-+ trn2 v17.8b, v18.8b, v17.8b
-+ /* make copy */
-+ ins v19.2d[0], v9.2d[1]
-+ mov v18.16b, v9.16b
-+ trn1 v9.8b, v9.8b, v19.8b
-+ trn2 v19.8b, v18.8b, v19.8b
-+ /* Store results to the output buffer */
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ st1 {v8.8b}, [TMP1]
-+ st1 {v17.8b}, [TMP2]
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ st1 {v9.8b}, [TMP1]
-+ /* make copy */
-+ ins v7.2d[0], v10.2d[1]
-+ mov v18.16b, v10.16b
-+ trn1 v10.8b, v10.8b, v7.8b
-+ trn2 v7.8b, v18.8b, v7.8b
-+ st1 {v19.8b}, [TMP2]
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ ldp TMP4, TMP5, [OUTPUT_BUF], 16
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ add TMP4, TMP4, OUTPUT_COL
-+ add TMP5, TMP5, OUTPUT_COL
-+ st1 {v10.8b}, [TMP1]
-+ /* make copy */
-+ ins v16.2d[0], v11.2d[1]
-+ mov v18.16b, v11.16b
-+ trn1 v11.8b, v11.8b, v16.8b
-+ trn2 v16.8b, v18.8b, v16.8b
-+ st1 {v7.8b}, [TMP2]
-+ st1 {v11.8b}, [TMP4]
-+ st1 {v16.8b}, [TMP5]
-+ sub sp, sp, #176
-+ ldp x22, x23, [sp], 16
-+ ld1 {v0.8b - v3.8b}, [sp], 32
-+ ld1 {v4.8b - v7.8b}, [sp], 32
-+ ld1 {v8.8b - v11.8b}, [sp], 32
-+ ld1 {v12.8b - v15.8b}, [sp], 32
-+ ld1 {v16.8b - v19.8b}, [sp], 32
-+ blr x30
-+
-+ .unreq DCT_TABLE
-+ .unreq COEF_BLOCK
-+ .unreq OUTPUT_BUF
-+ .unreq OUTPUT_COL
-+ .unreq TMP1
-+ .unreq TMP2
-+ .unreq TMP3
-+ .unreq TMP4
-+
-+
-+/*****************************************************************************/
-+
-+/*
-+ * jsimd_idct_4x4_neon
-+ *
-+ * This function contains inverse-DCT code for getting reduced-size
-+ * 4x4 pixels output from an 8x8 DCT block. It uses the same calculations
-+ * and produces exactly the same output as IJG's original 'jpeg_idct_4x4'
-+ * function from jpeg-6b (jidctred.c).
-+ *
-+ * NOTE: jpeg-8 has an improved implementation of 4x4 inverse-DCT, which
-+ * requires much less arithmetic operations and hence should be faster.
-+ * The primary purpose of this particular NEON optimized function is
-+ * bit exact compatibility with jpeg-6b.
-+ *
-+ * TODO: a bit better instructions scheduling can be achieved by expanding
-+ * idct_helper/transpose_4x4 macros and reordering instructions,
-+ * but readability will suffer somewhat.
-+ */
-+
-+#define CONST_BITS 13
-+
-+#define FIX_0_211164243 (1730) /* FIX(0.211164243) */
-+#define FIX_0_509795579 (4176) /* FIX(0.509795579) */
-+#define FIX_0_601344887 (4926) /* FIX(0.601344887) */
-+#define FIX_0_720959822 (5906) /* FIX(0.720959822) */
-+#define FIX_0_765366865 (6270) /* FIX(0.765366865) */
-+#define FIX_0_850430095 (6967) /* FIX(0.850430095) */
-+#define FIX_0_899976223 (7373) /* FIX(0.899976223) */
-+#define FIX_1_061594337 (8697) /* FIX(1.061594337) */
-+#define FIX_1_272758580 (10426) /* FIX(1.272758580) */
-+#define FIX_1_451774981 (11893) /* FIX(1.451774981) */
-+#define FIX_1_847759065 (15137) /* FIX(1.847759065) */
-+#define FIX_2_172734803 (17799) /* FIX(2.172734803) */
-+#define FIX_2_562915447 (20995) /* FIX(2.562915447) */
-+#define FIX_3_624509785 (29692) /* FIX(3.624509785) */
-+
-+.balign 16
-+jsimd_idct_4x4_neon_consts:
-+ .short FIX_1_847759065 /* v0.4h[0] */
-+ .short -FIX_0_765366865 /* v0.4h[1] */
-+ .short -FIX_0_211164243 /* v0.4h[2] */
-+ .short FIX_1_451774981 /* v0.4h[3] */
-+ .short -FIX_2_172734803 /* d1[0] */
-+ .short FIX_1_061594337 /* d1[1] */
-+ .short -FIX_0_509795579 /* d1[2] */
-+ .short -FIX_0_601344887 /* d1[3] */
-+ .short FIX_0_899976223 /* v2.4h[0] */
-+ .short FIX_2_562915447 /* v2.4h[1] */
-+ .short 1 << (CONST_BITS+1) /* v2.4h[2] */
-+ .short 0 /* v2.4h[3] */
-+
-+.macro idct_helper x4, x6, x8, x10, x12, x14, x16, shift, y26, y27, y28, y29
-+ smull v28.4s, \x4, v2.4h[2]
-+ smlal v28.4s, \x8, v0.4h[0]
-+ smlal v28.4s, \x14, v0.4h[1]
-+
-+ smull v26.4s, \x16, v1.4h[2]
-+ smlal v26.4s, \x12, v1.4h[3]
-+ smlal v26.4s, \x10, v2.4h[0]
-+ smlal v26.4s, \x6, v2.4h[1]
-+
-+ smull v30.4s, \x4, v2.4h[2]
-+ smlsl v30.4s, \x8, v0.4h[0]
-+ smlsl v30.4s, \x14, v0.4h[1]
-+
-+ smull v24.4s, \x16, v0.4h[2]
-+ smlal v24.4s, \x12, v0.4h[3]
-+ smlal v24.4s, \x10, v1.4h[0]
-+ smlal v24.4s, \x6, v1.4h[1]
-+
-+ add v20.4s, v28.4s, v26.4s
-+ sub v28.4s, v28.4s, v26.4s
-+
-+.if \shift > 16
-+ srshr v20.4s, v20.4s, #\shift
-+ srshr v28.4s, v28.4s, #\shift
-+ xtn \y26, v20.4s
-+ xtn \y29, v28.4s
-+.else
-+ rshrn \y26, v20.4s, #\shift
-+ rshrn \y29, v28.4s, #\shift
-+.endif
-+
-+ add v20.4s, v30.4s, v24.4s
-+ sub v30.4s, v30.4s, v24.4s
-+
-+.if \shift > 16
-+ srshr v20.4s, v20.4s, #\shift
-+ srshr v30.4s, v30.4s, #\shift
-+ xtn \y27, v20.4s
-+ xtn \y28, v30.4s
-+.else
-+ rshrn \y27, v20.4s, #\shift
-+ rshrn \y28, v30.4s, #\shift
-+.endif
-+
-+.endm
-+
-+asm_function jsimd_idct_4x4_neon
-+
-+ DCT_TABLE .req x0
-+ COEF_BLOCK .req x1
-+ OUTPUT_BUF .req x2
-+ OUTPUT_COL .req x3
-+ TMP1 .req x0
-+ TMP2 .req x1
-+ TMP3 .req x2
-+ TMP4 .req x15
-+
-+ /* Save all used NEON registers */
-+ sub sp, sp, 272
-+ str x15, [sp], 16
-+ /* Load constants (v3.4h is just used for padding) */
-+ adr TMP4, jsimd_idct_4x4_neon_consts
-+ st1 {v0.8b - v3.8b}, [sp], 32
-+ st1 {v4.8b - v7.8b}, [sp], 32
-+ st1 {v8.8b - v11.8b}, [sp], 32
-+ st1 {v12.8b - v15.8b}, [sp], 32
-+ st1 {v16.8b - v19.8b}, [sp], 32
-+ st1 {v20.8b - v23.8b}, [sp], 32
-+ st1 {v24.8b - v27.8b}, [sp], 32
-+ st1 {v28.8b - v31.8b}, [sp], 32
-+ ld1 {v0.4h, v1.4h, v2.4h, v3.4h}, [TMP4]
-+
-+ /* Load all COEF_BLOCK into NEON registers with the following allocation:
-+ * 0 1 2 3 | 4 5 6 7
-+ * ---------+--------
-+ * 0 | v4.4h | v5.4h
-+ * 1 | v6.4h | v7.4h
-+ * 2 | v8.4h | v9.4h
-+ * 3 | v10.4h | v11.4h
-+ * 4 | - | -
-+ * 5 | v12.4h | v13.4h
-+ * 6 | v14.4h | v15.4h
-+ * 7 | v16.4h | v17.4h
-+ */
-+ ld1 {v4.4h, v5.4h, v6.4h, v7.4h}, [COEF_BLOCK], 32
-+ ld1 {v8.4h, v9.4h, v10.4h, v11.4h}, [COEF_BLOCK], 32
-+ add COEF_BLOCK, COEF_BLOCK, #16
-+ ld1 {v12.4h, v13.4h, v14.4h, v15.4h}, [COEF_BLOCK], 32
-+ ld1 {v16.4h, v17.4h}, [COEF_BLOCK], 16
-+ /* dequantize */
-+ ld1 {v18.4h, v19.4h, v20.4h, v21.4h}, [DCT_TABLE], 32
-+ mul v4.4h, v4.4h, v18.4h
-+ mul v5.4h, v5.4h, v19.4h
-+ ins v4.2d[1], v5.2d[0] /* 128 bit q4 */
-+ ld1 {v22.4h, v23.4h, v24.4h, v25.4h}, [DCT_TABLE], 32
-+ mul v6.4h, v6.4h, v20.4h
-+ mul v7.4h, v7.4h, v21.4h
-+ ins v6.2d[1], v7.2d[0] /* 128 bit q6 */
-+ mul v8.4h, v8.4h, v22.4h
-+ mul v9.4h, v9.4h, v23.4h
-+ ins v8.2d[1], v9.2d[0] /* 128 bit q8 */
-+ add DCT_TABLE, DCT_TABLE, #16
-+ ld1 {v26.4h, v27.4h, v28.4h, v29.4h}, [DCT_TABLE], 32
-+ mul v10.4h, v10.4h, v24.4h
-+ mul v11.4h, v11.4h, v25.4h
-+ ins v10.2d[1], v11.2d[0] /* 128 bit q10 */
-+ mul v12.4h, v12.4h, v26.4h
-+ mul v13.4h, v13.4h, v27.4h
-+ ins v12.2d[1], v13.2d[0] /* 128 bit q12 */
-+ ld1 {v30.4h, v31.4h}, [DCT_TABLE], 16
-+ mul v14.4h, v14.4h, v28.4h
-+ mul v15.4h, v15.4h, v29.4h
-+ ins v14.2d[1], v15.2d[0] /* 128 bit q14 */
-+ mul v16.4h, v16.4h, v30.4h
-+ mul v17.4h, v17.4h, v31.4h
-+ ins v16.2d[1], v17.2d[0] /* 128 bit q16 */
-+
-+ /* Pass 1 */
-+ idct_helper v4.4h, v6.4h, v8.4h, v10.4h, v12.4h, v14.4h, v16.4h, 12, v4.4h, v6.4h, v8.4h, v10.4h
-+ transpose_4x4 v4, v6, v8, v10, v3
-+ ins v10.2d[1], v11.2d[0]
-+ idct_helper v5.4h, v7.4h, v9.4h, v11.4h, v13.4h, v15.4h, v17.4h, 12, v5.4h, v7.4h, v9.4h, v11.4h
-+ transpose_4x4 v5, v7, v9, v11, v3
-+ ins v10.2d[1], v11.2d[0]
-+ /* Pass 2 */
-+ idct_helper v4.4h, v6.4h, v8.4h, v10.4h, v7.4h, v9.4h, v11.4h, 19, v26.4h, v27.4h, v28.4h, v29.4h
-+ transpose_4x4 v26, v27, v28, v29, v3
-+
-+ /* Range limit */
-+ movi v30.8h, #0x80
-+ ins v26.2d[1], v27.2d[0]
-+ ins v28.2d[1], v29.2d[0]
-+ add v26.8h, v26.8h, v30.8h
-+ add v28.8h, v28.8h, v30.8h
-+ sqxtun v26.8b, v26.8h
-+ sqxtun v27.8b, v28.8h
-+
-+ /* Store results to the output buffer */
-+ ldp TMP1, TMP2, [OUTPUT_BUF], 16
-+ ldp TMP3, TMP4, [OUTPUT_BUF]
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+ add TMP3, TMP3, OUTPUT_COL
-+ add TMP4, TMP4, OUTPUT_COL
-+
-+#if defined(__ARMEL__) && !RESPECT_STRICT_ALIGNMENT
-+ /* We can use much less instructions on little endian systems if the
-+ * OS kernel is not configured to trap unaligned memory accesses
-+ */
-+ st1 {v26.s}[0], [TMP1], 4
-+ st1 {v27.s}[0], [TMP3], 4
-+ st1 {v26.s}[1], [TMP2], 4
-+ st1 {v27.s}[1], [TMP4], 4
-+#else
-+ st1 {v26.b}[0], [TMP1], 1
-+ st1 {v27.b}[0], [TMP3], 1
-+ st1 {v26.b}[1], [TMP1], 1
-+ st1 {v27.b}[1], [TMP3], 1
-+ st1 {v26.b}[2], [TMP1], 1
-+ st1 {v27.b}[2], [TMP3], 1
-+ st1 {v26.b}[3], [TMP1], 1
-+ st1 {v27.b}[3], [TMP3], 1
-+
-+ st1 {v26.b}[4], [TMP2], 1
-+ st1 {v27.b}[4], [TMP4], 1
-+ st1 {v26.b}[5], [TMP2], 1
-+ st1 {v27.b}[5], [TMP4], 1
-+ st1 {v26.b}[6], [TMP2], 1
-+ st1 {v27.b}[6], [TMP4], 1
-+ st1 {v26.b}[7], [TMP2], 1
-+ st1 {v27.b}[7], [TMP4], 1
-+#endif
-+
-+ /* vpop {v8.4h - v15.4h} ;not available */
-+ sub sp, sp, #272
-+ ldr x15, [sp], 16
-+ ld1 {v0.8b - v3.8b}, [sp], 32
-+ ld1 {v4.8b - v7.8b}, [sp], 32
-+ ld1 {v8.8b - v11.8b}, [sp], 32
-+ ld1 {v12.8b - v15.8b}, [sp], 32
-+ ld1 {v16.8b - v19.8b}, [sp], 32
-+ ld1 {v20.8b - v23.8b}, [sp], 32
-+ ld1 {v24.8b - v27.8b}, [sp], 32
-+ ld1 {v28.8b - v31.8b}, [sp], 32
-+ blr x30
-+
-+ .unreq DCT_TABLE
-+ .unreq COEF_BLOCK
-+ .unreq OUTPUT_BUF
-+ .unreq OUTPUT_COL
-+ .unreq TMP1
-+ .unreq TMP2
-+ .unreq TMP3
-+ .unreq TMP4
-+
-+.purgem idct_helper
-+
-+
-+/*****************************************************************************/
-+
-+/*
-+ * jsimd_idct_2x2_neon
-+ *
-+ * This function contains inverse-DCT code for getting reduced-size
-+ * 2x2 pixels output from an 8x8 DCT block. It uses the same calculations
-+ * and produces exactly the same output as IJG's original 'jpeg_idct_2x2'
-+ * function from jpeg-6b (jidctred.c).
-+ *
-+ * NOTE: jpeg-8 has an improved implementation of 2x2 inverse-DCT, which
-+ * requires much less arithmetic operations and hence should be faster.
-+ * The primary purpose of this particular NEON optimized function is
-+ * bit exact compatibility with jpeg-6b.
-+ */
-+
-+.balign 8
-+jsimd_idct_2x2_neon_consts:
-+ .short -FIX_0_720959822 /* v14[0] */
-+ .short FIX_0_850430095 /* v14[1] */
-+ .short -FIX_1_272758580 /* v14[2] */
-+ .short FIX_3_624509785 /* v14[3] */
-+
-+.macro idct_helper x4, x6, x10, x12, x16, shift, y26, y27
-+ sshll v15.4s, \x4, #15
-+ smull v26.4s, \x6, v14.4h[3]
-+ smlal v26.4s, \x10, v14.4h[2]
-+ smlal v26.4s, \x12, v14.4h[1]
-+ smlal v26.4s, \x16, v14.4h[0]
-+
-+ add v20.4s, v15.4s, v26.4s
-+ sub v15.4s, v15.4s, v26.4s
-+
-+.if \shift > 16
-+ srshr v20.4s, v20.4s, #\shift
-+ srshr v15.4s, v15.4s, #\shift
-+ xtn \y26, v20.4s
-+ xtn \y27, v15.4s
-+.else
-+ rshrn \y26, v20.4s, #\shift
-+ rshrn \y27, v15.4s, #\shift
-+.endif
-+
-+.endm
-+
-+asm_function jsimd_idct_2x2_neon
-+
-+ DCT_TABLE .req x0
-+ COEF_BLOCK .req x1
-+ OUTPUT_BUF .req x2
-+ OUTPUT_COL .req x3
-+ TMP1 .req x0
-+ TMP2 .req x15
-+
-+ /* vpush {v8.4h - v15.4h} ; not available */
-+ sub sp, sp, 208
-+ str x15, [sp], 16
-+
-+ /* Load constants */
-+ adr TMP2, jsimd_idct_2x2_neon_consts
-+ st1 {v4.8b - v7.8b}, [sp], 32
-+ st1 {v8.8b - v11.8b}, [sp], 32
-+ st1 {v12.8b - v15.8b}, [sp], 32
-+ st1 {v16.8b - v19.8b}, [sp], 32
-+ st1 {v21.8b - v22.8b}, [sp], 16
-+ st1 {v24.8b - v27.8b}, [sp], 32
-+ st1 {v30.8b - v31.8b}, [sp], 16
-+ ld1 {v14.4h}, [TMP2]
-+
-+ /* Load all COEF_BLOCK into NEON registers with the following allocation:
-+ * 0 1 2 3 | 4 5 6 7
-+ * ---------+--------
-+ * 0 | v4.4h | v5.4h
-+ * 1 | v6.4h | v7.4h
-+ * 2 | - | -
-+ * 3 | v10.4h | v11.4h
-+ * 4 | - | -
-+ * 5 | v12.4h | v13.4h
-+ * 6 | - | -
-+ * 7 | v16.4h | v17.4h
-+ */
-+ ld1 {v4.4h, v5.4h, v6.4h, v7.4h}, [COEF_BLOCK], 32
-+ add COEF_BLOCK, COEF_BLOCK, #16
-+ ld1 {v10.4h, v11.4h}, [COEF_BLOCK], 16
-+ add COEF_BLOCK, COEF_BLOCK, #16
-+ ld1 {v12.4h, v13.4h}, [COEF_BLOCK], 16
-+ add COEF_BLOCK, COEF_BLOCK, #16
-+ ld1 {v16.4h, v17.4h}, [COEF_BLOCK], 16
-+ /* Dequantize */
-+ ld1 {v18.4h, v19.4h, v20.4h, v21.4h}, [DCT_TABLE], 32
-+ mul v4.4h, v4.4h, v18.4h
-+ mul v5.4h, v5.4h, v19.4h
-+ ins v4.2d[1], v5.2d[0]
-+ mul v6.4h, v6.4h, v20.4h
-+ mul v7.4h, v7.4h, v21.4h
-+ ins v6.2d[1], v7.2d[0]
-+ add DCT_TABLE, DCT_TABLE, #16
-+ ld1 {v24.4h, v25.4h}, [DCT_TABLE], 16
-+ mul v10.4h, v10.4h, v24.4h
-+ mul v11.4h, v11.4h, v25.4h
-+ ins v10.2d[1], v11.2d[0]
-+ add DCT_TABLE, DCT_TABLE, #16
-+ ld1 {v26.4h, v27.4h}, [DCT_TABLE], 16
-+ mul v12.4h, v12.4h, v26.4h
-+ mul v13.4h, v13.4h, v27.4h
-+ ins v12.2d[1], v13.2d[0]
-+ add DCT_TABLE, DCT_TABLE, #16
-+ ld1 {v30.4h, v31.4h}, [DCT_TABLE], 16
-+ mul v16.4h, v16.4h, v30.4h
-+ mul v17.4h, v17.4h, v31.4h
-+ ins v16.2d[1], v17.2d[0]
-+
-+ /* Pass 1 */
-+#if 0
-+ idct_helper v4.4h, v6.4h, v10.4h, v12.4h, v16.4h, 13, v4.4h, v6.4h
-+ transpose_4x4 v4.4h, v6.4h, v8.4h, v10.4h
-+ idct_helper v5.4h, v7.4h, v11.4h, v13.4h, v17.4h, 13, v5.4h, v7.4h
-+ transpose_4x4 v5.4h, v7.4h, v9.4h, v11.4h
-+#else
-+ smull v26.4s, v6.4h, v14.4h[3]
-+ smlal v26.4s, v10.4h, v14.4h[2]
-+ smlal v26.4s, v12.4h, v14.4h[1]
-+ smlal v26.4s, v16.4h, v14.4h[0]
-+ smull v24.4s, v7.4h, v14.4h[3]
-+ smlal v24.4s, v11.4h, v14.4h[2]
-+ smlal v24.4s, v13.4h, v14.4h[1]
-+ smlal v24.4s, v17.4h, v14.4h[0]
-+ sshll v15.4s, v4.4h, #15
-+ sshll v30.4s, v5.4h, #15
-+ add v20.4s, v15.4s, v26.4s
-+ sub v15.4s, v15.4s, v26.4s
-+ rshrn v4.4h, v20.4s, #13
-+ rshrn v6.4h, v15.4s, #13
-+ add v20.4s, v30.4s, v24.4s
-+ sub v15.4s, v30.4s, v24.4s
-+ rshrn v5.4h, v20.4s, #13
-+ rshrn v7.4h, v15.4s, #13
-+ ins v4.2d[1], v5.2d[0]
-+ ins v6.2d[1], v7.2d[0]
-+ transpose v4, v6, v3, .16b, .8h
-+ transpose v6, v10, v3, .16b, .4s
-+ ins v11.2d[0], v10.2d[1]
-+ ins v7.2d[0], v6.2d[1]
-+#endif
-+
-+ /* Pass 2 */
-+ idct_helper v4.4h, v6.4h, v10.4h, v7.4h, v11.4h, 20, v26.4h, v27.4h
-+
-+ /* Range limit */
-+ movi v30.8h, #0x80
-+ ins v26.2d[1], v27.2d[0]
-+ add v26.8h, v26.8h, v30.8h
-+ sqxtun v30.8b, v26.8h
-+ ins v26.2d[0], v30.2d[0]
-+ sqxtun v27.8b, v26.8h
-+
-+ /* Store results to the output buffer */
-+ ldp TMP1, TMP2, [OUTPUT_BUF]
-+ add TMP1, TMP1, OUTPUT_COL
-+ add TMP2, TMP2, OUTPUT_COL
-+
-+ st1 {v26.b}[0], [TMP1], 1
-+ st1 {v27.b}[4], [TMP1], 1
-+ st1 {v26.b}[1], [TMP2], 1
-+ st1 {v27.b}[5], [TMP2], 1
-+
-+ sub sp, sp, #208
-+ ldr x15, [sp], 16
-+ ld1 {v4.8b - v7.8b}, [sp], 32
-+ ld1 {v8.8b - v11.8b}, [sp], 32
-+ ld1 {v12.8b - v15.8b}, [sp], 32
-+ ld1 {v16.8b - v19.8b}, [sp], 32
-+ ld1 {v21.8b - v22.8b}, [sp], 16
-+ ld1 {v24.8b - v27.8b}, [sp], 32
-+ ld1 {v30.8b - v31.8b}, [sp], 16
-+ blr x30
-+
-+ .unreq DCT_TABLE
-+ .unreq COEF_BLOCK
-+ .unreq OUTPUT_BUF
-+ .unreq OUTPUT_COL
-+ .unreq TMP1
-+ .unreq TMP2
-+
-+.purgem idct_helper
-+
-+
-+/*****************************************************************************/
-+
-+/*
-+ * jsimd_ycc_extrgb_convert_neon
-+ * jsimd_ycc_extbgr_convert_neon
-+ * jsimd_ycc_extrgbx_convert_neon
-+ * jsimd_ycc_extbgrx_convert_neon
-+ * jsimd_ycc_extxbgr_convert_neon
-+ * jsimd_ycc_extxrgb_convert_neon
-+ *
-+ * Colorspace conversion YCbCr -> RGB
-+ */
-+
-+
-+.macro do_load size
-+ .if \size == 8
-+ ld1 {v4.8b}, [U], 8
-+ ld1 {v5.8b}, [V], 8
-+ ld1 {v0.8b}, [Y], 8
-+ prfm PLDL1KEEP, [U, #64]
-+ prfm PLDL1KEEP, [V, #64]
-+ prfm PLDL1KEEP, [Y, #64]
-+ .elseif \size == 4
-+ ld1 {v4.b}[0], [U], 1
-+ ld1 {v4.b}[1], [U], 1
-+ ld1 {v4.b}[2], [U], 1
-+ ld1 {v4.b}[3], [U], 1
-+ ld1 {v5.b}[0], [V], 1
-+ ld1 {v5.b}[1], [V], 1
-+ ld1 {v5.b}[2], [V], 1
-+ ld1 {v5.b}[3], [V], 1
-+ ld1 {v0.b}[0], [Y], 1
-+ ld1 {v0.b}[1], [Y], 1
-+ ld1 {v0.b}[2], [Y], 1
-+ ld1 {v0.b}[3], [Y], 1
-+ .elseif \size == 2
-+ ld1 {v4.b}[4], [U], 1
-+ ld1 {v4.b}[5], [U], 1
-+ ld1 {v5.b}[4], [V], 1
-+ ld1 {v5.b}[5], [V], 1
-+ ld1 {v0.b}[4], [Y], 1
-+ ld1 {v0.b}[5], [Y], 1
-+ .elseif \size == 1
-+ ld1 {v4.b}[6], [U], 1
-+ ld1 {v5.b}[6], [V], 1
-+ ld1 {v0.b}[6], [Y], 1
-+ .else
-+ .error unsupported macroblock size
-+ .endif
-+.endm
-+
-+.macro do_store bpp, size
-+ .if \bpp == 24
-+ .if \size == 8
-+ st3 {v10.8b, v11.8b, v12.8b}, [RGB], 24
-+ .elseif \size == 4
-+ st3 {v10.b, v11.b, v12.b}[0], [RGB], 3
-+ st3 {v10.b, v11.b, v12.b}[1], [RGB], 3
-+ st3 {v10.b, v11.b, v12.b}[2], [RGB], 3
-+ st3 {v10.b, v11.b, v12.b}[3], [RGB], 3
-+ .elseif \size == 2
-+ st3 {v10.b, v11.b, v12.b}[4], [RGB], 3
-+ st3 {v10.b, v11.b, v12.b}[5], [RGB], 3
-+ .elseif \size == 1
-+ st3 {v10.b, v11.b, v12.b}[6], [RGB], 3
-+ .else
-+ .error unsupported macroblock size
-+ .endif
-+ .elseif \bpp == 32
-+ .if \size == 8
-+ st4 {v10.8b, v11.8b, v12.8b, v13.8b}, [RGB], 32
-+ .elseif \size == 4
-+ st4 {v10.b, v11.b, v12.b, v13.b}[0], [RGB], 4
-+ st4 {v10.b, v11.b, v12.b, v13.b}[1], [RGB], 4
-+ st4 {v10.b, v11.b, v12.b, v13.b}[2], [RGB], 4
-+ st4 {v10.b, v11.b, v12.b, v13.b}[3], [RGB], 4
-+ .elseif \size == 2
-+ st4 {v10.b, v11.b, v12.b, v13.b}[4], [RGB], 4
-+ st4 {v10.b, v11.b, v12.b, v13.b}[5], [RGB], 4
-+ .elseif \size == 1
-+ st4 {v10.b, v11.b, v12.b, v13.b}[6], [RGB], 4
-+ .else
-+ .error unsupported macroblock size
-+ .endif
-+ .elseif \bpp==16
-+ .if \size == 8
-+ st1 {v25.8h}, [RGB],16
-+ .elseif \size == 4
-+ st1 {v25.4h}, [RGB],8
-+ .elseif \size == 2
-+ st1 {v25.h}[4], [RGB],2
-+ st1 {v25.h}[5], [RGB],2
-+ .elseif \size == 1
-+ st1 {v25.h}[6], [RGB],2
-+ .else
-+ .error unsupported macroblock size
-+ .endif
-+ .else
-+ .error unsupported bpp
-+ .endif
-+.endm
-+
-+.macro generate_jsimd_ycc_rgb_convert_neon colorid, bpp, r_offs, rsize, g_offs, gsize, b_offs, bsize, defsize
-+
-+/*
-+ * 2-stage pipelined YCbCr->RGB conversion
-+ */
-+
-+.macro do_yuv_to_rgb_stage1
-+ uaddw v6.8h, v2.8h, v4.8b /* q3 = u - 128 */
-+ uaddw v8.8h, v2.8h, v5.8b /* q2 = v - 128 */
-+ smull v20.4s, v6.4h, v1.4h[1] /* multiply by -11277 */
-+ smlal v20.4s, v8.4h, v1.4h[2] /* multiply by -23401 */
-+ smull2 v22.4s, v6.8h, v1.4h[1] /* multiply by -11277 */
-+ smlal2 v22.4s, v8.8h, v1.4h[2] /* multiply by -23401 */
-+ smull v24.4s, v8.4h, v1.4h[0] /* multiply by 22971 */
-+ smull2 v26.4s, v8.8h, v1.4h[0] /* multiply by 22971 */
-+ smull v28.4s, v6.4h, v1.4h[3] /* multiply by 29033 */
-+ smull2 v30.4s, v6.8h, v1.4h[3] /* multiply by 29033 */
-+.endm
-+
-+.macro do_yuv_to_rgb_stage2
-+ rshrn v20.4h, v20.4s, #15
-+ rshrn2 v20.8h, v22.4s, #15
-+ rshrn v24.4h, v24.4s, #14
-+ rshrn2 v24.8h, v26.4s, #14
-+ rshrn v28.4h, v28.4s, #14
-+ rshrn2 v28.8h, v30.4s, #14
-+ uaddw v20.8h, v20.8h, v0.8b
-+ uaddw v24.8h, v24.8h, v0.8b
-+ uaddw v28.8h, v28.8h, v0.8b
-+.if \bpp != 16
-+ sqxtun v1\g_offs\defsize, v20.8h
-+ sqxtun v1\r_offs\defsize, v24.8h
-+ sqxtun v1\b_offs\defsize, v28.8h
-+.else
-+ sqshlu v21.8h, v20.8h, #8
-+ sqshlu v25.8h, v24.8h, #8
-+ sqshlu v29.8h, v28.8h, #8
-+ sri v25.8h, v21.8h, #5
-+ sri v25.8h, v29.8h, #11
-+.endif
-+
-+.endm
-+
-+.macro do_yuv_to_rgb_stage2_store_load_stage1
-+ rshrn v20.4h, v20.4s, #15
-+ rshrn v24.4h, v24.4s, #14
-+ rshrn v28.4h, v28.4s, #14
-+ ld1 {v4.8b}, [U], 8
-+ rshrn2 v20.8h, v22.4s, #15
-+ rshrn2 v24.8h, v26.4s, #14
-+ rshrn2 v28.8h, v30.4s, #14
-+ ld1 {v5.8b}, [V], 8
-+ uaddw v20.8h, v20.8h, v0.8b
-+ uaddw v24.8h, v24.8h, v0.8b
-+ uaddw v28.8h, v28.8h, v0.8b
-+.if \bpp != 16 /**************** rgb24/rgb32 *********************************/
-+ sqxtun v1\g_offs\defsize, v20.8h
-+ ld1 {v0.8b}, [Y], 8
-+ sqxtun v1\r_offs\defsize, v24.8h
-+ prfm PLDL1KEEP, [U, #64]
-+ prfm PLDL1KEEP, [V, #64]
-+ prfm PLDL1KEEP, [Y, #64]
-+ sqxtun v1\b_offs\defsize, v28.8h
-+ uaddw v6.8h, v2.8h, v4.8b /* v6.16b = u - 128 */
-+ uaddw v8.8h, v2.8h, v5.8b /* q2 = v - 128 */
-+ smull v20.4s, v6.4h, v1.4h[1] /* multiply by -11277 */
-+ smlal v20.4s, v8.4h, v1.4h[2] /* multiply by -23401 */
-+ smull2 v22.4s, v6.8h, v1.4h[1] /* multiply by -11277 */
-+ smlal2 v22.4s, v8.8h, v1.4h[2] /* multiply by -23401 */
-+ smull v24.4s, v8.4h, v1.4h[0] /* multiply by 22971 */
-+ smull2 v26.4s, v8.8h, v1.4h[0] /* multiply by 22971 */
-+.else /**************************** rgb565 ***********************************/
-+ sqshlu v21.8h, v20.8h, #8
-+ sqshlu v25.8h, v24.8h, #8
-+ sqshlu v29.8h, v28.8h, #8
-+ uaddw v6.8h, v2.8h, v4.8b /* v6.16b = u - 128 */
-+ uaddw v8.8h, v2.8h, v5.8b /* q2 = v - 128 */
-+ ld1 {v0.8b}, [Y], 8
-+ smull v20.4s, v6.4h, v1.4h[1] /* multiply by -11277 */
-+ smlal v20.4s, v8.4h, v1.4h[2] /* multiply by -23401 */
-+ smull2 v22.4s, v6.8h, v1.4h[1] /* multiply by -11277 */
-+ smlal2 v22.4s, v8.8h, v1.4h[2] /* multiply by -23401 */
-+ sri v25.8h, v21.8h, #5
-+ smull v24.4s, v8.4h, v1.4h[0] /* multiply by 22971 */
-+ smull2 v26.4s, v8.8h, v1.4h[0] /* multiply by 22971 */
-+ prfm PLDL1KEEP, [U, #64]
-+ prfm PLDL1KEEP, [V, #64]
-+ prfm PLDL1KEEP, [Y, #64]
-+ sri v25.8h, v29.8h, #11
-+.endif
-+ do_store \bpp, 8
-+ smull v28.4s, v6.4h, v1.4h[3] /* multiply by 29033 */
-+ smull2 v30.4s, v6.8h, v1.4h[3] /* multiply by 29033 */
-+.endm
-+
-+.macro do_yuv_to_rgb
-+ do_yuv_to_rgb_stage1
-+ do_yuv_to_rgb_stage2
-+.endm
-+
-+/* Apple gas crashes on adrl, work around that by using adr.
-+ * But this requires a copy of these constants for each function.
-+ */
-+
-+.balign 16
-+jsimd_ycc_\colorid\()_neon_consts:
-+ .short 0, 0, 0, 0
-+ .short 22971, -11277, -23401, 29033
-+ .short -128, -128, -128, -128
-+ .short -128, -128, -128, -128
-+
-+asm_function jsimd_ycc_\colorid\()_convert_neon
-+ OUTPUT_WIDTH .req x0
-+ INPUT_BUF .req x1
-+ INPUT_ROW .req x2
-+ OUTPUT_BUF .req x3
-+ NUM_ROWS .req x4
-+
-+ INPUT_BUF0 .req x5
-+ INPUT_BUF1 .req x6
-+ INPUT_BUF2 .req INPUT_BUF
-+
-+ RGB .req x7
-+ Y .req x8
-+ U .req x9
-+ V .req x10
-+ N .req x15
-+
-+ sub sp, sp, 336
-+ str x15, [sp], 16
-+ /* Load constants to d1, d2, d3 (v0.4h is just used for padding) */
-+ adr x15, jsimd_ycc_\colorid\()_neon_consts
-+ /* Save NEON registers */
-+ st1 {v0.8b - v3.8b}, [sp], 32
-+ st1 {v4.8b - v7.8b}, [sp], 32
-+ st1 {v8.8b - v11.8b}, [sp], 32
-+ st1 {v12.8b - v15.8b}, [sp], 32
-+ st1 {v16.8b - v19.8b}, [sp], 32
-+ st1 {v20.8b - v23.8b}, [sp], 32
-+ st1 {v24.8b - v27.8b}, [sp], 32
-+ st1 {v28.8b - v31.8b}, [sp], 32
-+ ld1 {v0.4h, v1.4h}, [x15], 16
-+ ld1 {v2.8h}, [x15]
-+
-+ /* Save ARM registers and handle input arguments */
-+ /* push {x4, x5, x6, x7, x8, x9, x10, x30} */
-+ stp x4, x5, [sp], 16
-+ stp x6, x7, [sp], 16
-+ stp x8, x9, [sp], 16
-+ stp x10, x30, [sp], 16
-+ ldr INPUT_BUF0, [INPUT_BUF]
-+ ldr INPUT_BUF1, [INPUT_BUF, 8]
-+ ldr INPUT_BUF2, [INPUT_BUF, 16]
-+ .unreq INPUT_BUF
-+
-+ /* Initially set v10, v11.4h, v12.8b, d13 to 0xFF */
-+ movi v10.16b, #255
-+ movi v13.16b, #255
-+
-+ /* Outer loop over scanlines */
-+ cmp NUM_ROWS, #1
-+ blt 9f
-+0:
-+ lsl x16, INPUT_ROW, #3
-+ ldr Y, [INPUT_BUF0, x16]
-+ ldr U, [INPUT_BUF1, x16]
-+ mov N, OUTPUT_WIDTH
-+ ldr V, [INPUT_BUF2, x16]
-+ add INPUT_ROW, INPUT_ROW, #1
-+ ldr RGB, [OUTPUT_BUF], #8
-+
-+ /* Inner loop over pixels */
-+ subs N, N, #8
-+ blt 3f
-+ do_load 8
-+ do_yuv_to_rgb_stage1
-+ subs N, N, #8
-+ blt 2f
-+1:
-+ do_yuv_to_rgb_stage2_store_load_stage1
-+ subs N, N, #8
-+ bge 1b
-+2:
-+ do_yuv_to_rgb_stage2
-+ do_store \bpp, 8
-+ tst N, #7
-+ beq 8f
-+3:
-+ tst N, #4
-+ beq 3f
-+ do_load 4
-+3:
-+ tst N, #2
-+ beq 4f
-+ do_load 2
-+4:
-+ tst N, #1
-+ beq 5f
-+ do_load 1
-+5:
-+ do_yuv_to_rgb
-+ tst N, #4
-+ beq 6f
-+ do_store \bpp, 4
-+6:
-+ tst N, #2
-+ beq 7f
-+ do_store \bpp, 2
-+7:
-+ tst N, #1
-+ beq 8f
-+ do_store \bpp, 1
-+8:
-+ subs NUM_ROWS, NUM_ROWS, #1
-+ bgt 0b
-+9:
-+ /* Restore all registers and return */
-+ sub sp, sp, #336
-+ ldr x15, [sp], 16
-+ ld1 {v0.8b - v3.8b}, [sp], 32
-+ ld1 {v4.8b - v7.8b}, [sp], 32
-+ ld1 {v8.8b - v11.8b}, [sp], 32
-+ ld1 {v12.8b - v15.8b}, [sp], 32
-+ ld1 {v16.8b - v19.8b}, [sp], 32
-+ ld1 {v20.8b - v23.8b}, [sp], 32
-+ ld1 {v24.8b - v27.8b}, [sp], 32
-+ ld1 {v28.8b - v31.8b}, [sp], 32
-+ /* pop {r4, r5, r6, r7, r8, r9, r10, pc} */
-+ ldp x4, x5, [sp], 16
-+ ldp x6, x7, [sp], 16
-+ ldp x8, x9, [sp], 16
-+ ldp x10, x30, [sp], 16
-+ br x30
-+ .unreq OUTPUT_WIDTH
-+ .unreq INPUT_ROW
-+ .unreq OUTPUT_BUF
-+ .unreq NUM_ROWS
-+ .unreq INPUT_BUF0
-+ .unreq INPUT_BUF1
-+ .unreq INPUT_BUF2
-+ .unreq RGB
-+ .unreq Y
-+ .unreq U
-+ .unreq V
-+ .unreq N
-+
-+.purgem do_yuv_to_rgb
-+.purgem do_yuv_to_rgb_stage1
-+.purgem do_yuv_to_rgb_stage2
-+.purgem do_yuv_to_rgb_stage2_store_load_stage1
-+.endm
-+
-+/*--------------------------------- id ----- bpp R rsize G gsize B bsize defsize */
-+generate_jsimd_ycc_rgb_convert_neon extrgb, 24, 0, .4h, 1, .4h, 2, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon extbgr, 24, 2, .4h, 1, .4h, 0, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon extrgbx, 32, 0, .4h, 1, .4h, 2, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon extbgrx, 32, 2, .4h, 1, .4h, 0, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon extxbgr, 32, 3, .4h, 2, .4h, 1, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon extxrgb, 32, 1, .4h, 2, .4h, 3, .4h, .8b
-+generate_jsimd_ycc_rgb_convert_neon rgb565, 16, 0, .4h, 0, .4h, 0, .4h, .8b
-+.purgem do_load
-+.purgem do_store
« no previous file with comments | « djpeg.c ('k') | jdapistd.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698