MMI: Support 32-bit Loongson architectures
This commit is contained in:
@@ -132,7 +132,7 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"subu $9, $9, 1\r\n"
|
||||
"xor $12, $12, $12\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lbu $12, 0($13)\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
@@ -143,7 +143,7 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"subu $9, $9, 2\r\n"
|
||||
"xor $11, $11, $11\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lhu $11, 0($13)\r\n"
|
||||
"sll $12, $12, 16\r\n"
|
||||
"or $12, $12, $11\r\n"
|
||||
@@ -156,7 +156,7 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lwu $14, 0($13)\r\n"
|
||||
"dmtc1 $14, %1\r\n"
|
||||
"dsll32 $12, $12, 0\r\n"
|
||||
@@ -242,9 +242,9 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"beqz $10, 1f\r\n"
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 1\r\n"
|
||||
"dsll $11, $9, 2\r\n"
|
||||
PTR_SLL "$11, $9, 2\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"daddu $13, $13, $11\r\n"
|
||||
PTR_ADDU "$13, $13, $11\r\n"
|
||||
"lwc1 %0, 0($13)\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
@@ -253,9 +253,9 @@ void jsimd_rgb_ycc_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"beqz $10, 2f\r\n"
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"dsll $11, $9, 2\r\n"
|
||||
PTR_SLL "$11, $9, 2\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"daddu $13, $13, $11\r\n"
|
||||
PTR_ADDU "$13, $13, $11\r\n"
|
||||
"mov.s %1, %0\r\n"
|
||||
"ldc1 %0, 0($13)\r\n"
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"subu $9, $9, 1\r\n"
|
||||
"xor $12, $12, $12\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lbu $12, 0($13)\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
@@ -134,7 +134,7 @@ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"subu $9, $9, 2\r\n"
|
||||
"xor $11, $11, $11\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lhu $11, 0($13)\r\n"
|
||||
"sll $12, $12, 16\r\n"
|
||||
"or $12, $12, $11\r\n"
|
||||
@@ -147,7 +147,7 @@ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"dadd $13, $13, $9\r\n"
|
||||
PTR_ADDU "$13, $13, $9\r\n"
|
||||
"lwu $14, 0($13)\r\n"
|
||||
"dmtc1 $14, %1\r\n"
|
||||
"dsll32 $12, $12, 0\r\n"
|
||||
@@ -233,9 +233,9 @@ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"beqz $10, 1f\r\n"
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 1\r\n"
|
||||
"dsll $11, $9, 2\r\n"
|
||||
PTR_SLL "$11, $9, 2\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"daddu $13, $13, $11\r\n"
|
||||
PTR_ADDU "$13, $13, $11\r\n"
|
||||
"lwc1 %0, 0($13)\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
@@ -244,9 +244,9 @@ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
|
||||
"beqz $10, 2f\r\n"
|
||||
"nop \r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"dsll $11, $9, 2\r\n"
|
||||
PTR_SLL "$11, $9, 2\r\n"
|
||||
"move $13, %5\r\n"
|
||||
"daddu $13, $13, $11\r\n"
|
||||
PTR_ADDU "$13, $13, $11\r\n"
|
||||
"mov.s %1, %0\r\n"
|
||||
"ldc1 %0, 0($13)\r\n"
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"gssdrc1 $f6, 8($10)\r\n"
|
||||
"mov.s $f4, %2\r\n"
|
||||
"subu $9, $9, 16\r\n"
|
||||
"daddu $10, $10, 16\r\n"
|
||||
PTR_ADDU "$10, $10, 16\r\n"
|
||||
"b 2f\r\n"
|
||||
"nop \r\n"
|
||||
|
||||
@@ -269,10 +269,10 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"bltu $9, $8, 2f\r\n"
|
||||
"nop \r\n"
|
||||
"gssdlc1 $f4, 7($10)\r\n"
|
||||
"gssdrc1 $f4, ($10)\r\n"
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"mov.s $f4, %3\r\n"
|
||||
"subu $9, $9, 8\r\n"
|
||||
"daddu $10, $10, 8\r\n"
|
||||
PTR_ADDU "$10, $10, 8\r\n"
|
||||
|
||||
"2: \r\n"
|
||||
"li $8, 4\r\n" /* st4 */
|
||||
@@ -286,7 +286,7 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"dsrl $f4, $f4, $f6\r\n"
|
||||
"mfc1 $11, $f4\r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"daddu $10, $10, 4\r\n"
|
||||
PTR_ADDU "$10, $10, 4\r\n"
|
||||
|
||||
"3: \r\n"
|
||||
"li $8, 2\r\n" /* st2 */
|
||||
@@ -295,7 +295,7 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"ush $11, 0($10)\r\n"
|
||||
"srl $11, 16\r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"daddu $10, $10, 2\r\n"
|
||||
PTR_ADDU "$10, $10, 2\r\n"
|
||||
|
||||
"4: \r\n"
|
||||
"li $8, 1\r\n" /* st1 */
|
||||
@@ -365,13 +365,13 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"bltu $9, $8, 1f\r\n"
|
||||
"nop \r\n"
|
||||
"gssdlc1 $f4, 7($10)\r\n"
|
||||
"gssdrc1 $f4, ($10)\r\n"
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"gssdlc1 $f6, 7+8($10)\r\n"
|
||||
"gssdrc1 $f6, 8($10)\r\n"
|
||||
"mov.s $f4, %3\r\n"
|
||||
"mov.s $f6, %5\r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"daddu $10, $10, 16\r\n"
|
||||
PTR_ADDU "$10, $10, 16\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
"li $8, 2\r\n" /* st8 */
|
||||
@@ -381,7 +381,7 @@ void jsimd_ycc_rgb_convert_mmi(JDIMENSION out_width, JSAMPIMAGE input_buf,
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"mov.s $f4, $f6\r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"daddu $10, $10, 8\r\n"
|
||||
PTR_ADDU "$10, $10, 8\r\n"
|
||||
|
||||
"2: \r\n"
|
||||
"li $8, 1\r\n" /* st4 */
|
||||
|
||||
@@ -296,7 +296,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"mov.s $f6, %5\r\n"
|
||||
"mov.s $f8, %6\r\n"
|
||||
"subu $9, $9, 24\r\n"
|
||||
"daddu $10, $10, 24\r\n"
|
||||
PTR_ADDU "$10, $10, 24\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
"li $8, 16\r\n" /* st16 */
|
||||
@@ -308,7 +308,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"gssdrc1 $f6, 8($10)\r\n"
|
||||
"mov.s $f4, $f8\r\n"
|
||||
"subu $9, $9, 16\r\n"
|
||||
"daddu $10, $10, 16\r\n"
|
||||
PTR_ADDU "$10, $10, 16\r\n"
|
||||
|
||||
"2: \r\n"
|
||||
"li $8, 8\r\n" /* st8 */
|
||||
@@ -318,7 +318,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"mov.s $f4, $f6\r\n"
|
||||
"subu $9, $9, 8\r\n"
|
||||
"daddu $10, $10, 8\r\n"
|
||||
PTR_ADDU "$10, $10, 8\r\n"
|
||||
|
||||
"3: \r\n"
|
||||
"li $8, 4\r\n" /* st4 */
|
||||
@@ -332,7 +332,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"dsrl $f4, $f4, $f6\r\n"
|
||||
"mfc1 $11, $f4\r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"daddu $10, $10, 4\r\n"
|
||||
PTR_ADDU "$10, $10, 4\r\n"
|
||||
|
||||
"4: \r\n"
|
||||
"li $8, 2\r\n" /* st2 */
|
||||
@@ -341,7 +341,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"ush $11, 0($10)\r\n"
|
||||
"srl $11, 16\r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"daddu $10, $10, 2\r\n"
|
||||
PTR_ADDU "$10, $10, 2\r\n"
|
||||
|
||||
"5: \r\n"
|
||||
"li $8, 1\r\n" /* st1 */
|
||||
@@ -440,7 +440,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"bltu $9, $8, 1f\r\n"
|
||||
"nop \r\n"
|
||||
"gssdlc1 $f4, 7($10)\r\n"
|
||||
"gssdrc1 $f4, ($10)\r\n"
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"gssdlc1 $f6, 7+8($10)\r\n"
|
||||
"gssdrc1 $f6, 8($10)\r\n"
|
||||
"gssdlc1 $f8, 7+16($10)\r\n"
|
||||
@@ -452,7 +452,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"mov.s $f8, %8\r\n"
|
||||
"mov.s $f10, %9\r\n"
|
||||
"subu $9, $9, 8\r\n"
|
||||
"daddu $10, $10, 32\r\n"
|
||||
PTR_ADDU "$10, $10, 32\r\n"
|
||||
|
||||
"1: \r\n"
|
||||
"li $8, 4\r\n" /* st16 */
|
||||
@@ -465,7 +465,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"mov.s $f4, $f8\r\n"
|
||||
"mov.s $f6, $f10\r\n"
|
||||
"subu $9, $9, 4\r\n"
|
||||
"daddu $10, $10, 16\r\n"
|
||||
PTR_ADDU "$10, $10, 16\r\n"
|
||||
|
||||
"2: \r\n"
|
||||
"li $8, 2\r\n" /* st8 */
|
||||
@@ -475,7 +475,7 @@ void jsimd_h2v1_merged_upsample_mmi(JDIMENSION output_width,
|
||||
"gssdrc1 $f4, 0($10)\r\n"
|
||||
"mov.s $f4, $f6\r\n"
|
||||
"subu $9, $9, 2\r\n"
|
||||
"daddu $10, $10, 8\r\n"
|
||||
PTR_ADDU "$10, $10, 8\r\n"
|
||||
|
||||
"3: \r\n"
|
||||
"li $8, 1\r\n" /* st4 */
|
||||
|
||||
@@ -135,17 +135,17 @@ void jsimd_h2v2_fancy_upsample_mmi(int max_v_samp_factor,
|
||||
if (downsampled_width & 7) {
|
||||
tmp = (downsampled_width - 1) * sizeof(JSAMPLE);
|
||||
tmp1 = downsampled_width * sizeof(JSAMPLE);
|
||||
asm("daddu $8, %3, %6\r\n"
|
||||
asm(PTR_ADDU "$8, %3, %6\r\n"
|
||||
"lb $9, ($8)\r\n"
|
||||
"daddu $8, %3, %7\r\n"
|
||||
PTR_ADDU "$8, %3, %7\r\n"
|
||||
"sb $9, ($8)\r\n"
|
||||
"daddu $8, %4, %6\r\n"
|
||||
PTR_ADDU "$8, %4, %6\r\n"
|
||||
"lb $9, ($8)\r\n"
|
||||
"daddu $8, %4, %7\r\n"
|
||||
PTR_ADDU "$8, %4, %7\r\n"
|
||||
"sb $9, ($8)\r\n"
|
||||
"daddu $8, %5, %6\r\n"
|
||||
PTR_ADDU "$8, %5, %6\r\n"
|
||||
"lb $9, ($8)\r\n"
|
||||
"daddu $8, %5, %7\r\n"
|
||||
PTR_ADDU "$8, %5, %7\r\n"
|
||||
"sb $9, ($8)\r\n"
|
||||
: "=m" (*inptr_1), "=m" (*inptr0), "=m" (*inptr1)
|
||||
: "r" (inptr_1), "r" (inptr0), "r" (inptr1), "r" (tmp), "r" (tmp1)
|
||||
@@ -262,9 +262,9 @@ void jsimd_h2v1_fancy_upsample_mmi(int max_v_samp_factor,
|
||||
if (downsampled_width & 7) {
|
||||
tmp = (downsampled_width - 1) * sizeof(JSAMPLE);
|
||||
tmp1 = downsampled_width * sizeof(JSAMPLE);
|
||||
asm("daddu $8, %1, %2\r\n"
|
||||
asm(PTR_ADDU "$8, %1, %2\r\n"
|
||||
"lb $9, ($8)\r\n"
|
||||
"daddu $8, %1, %3\r\n"
|
||||
PTR_ADDU "$8, %1, %3\r\n"
|
||||
"sb $9, ($8)\r\n"
|
||||
: "=m" (*inptr0)
|
||||
: "r" (inptr0), "r" (tmp), "r" (tmp1)
|
||||
|
||||
@@ -33,6 +33,13 @@
|
||||
|
||||
|
||||
/* Common code */
|
||||
#if defined(_ABI64) && _MIPS_SIM == _ABI64
|
||||
# define PTR_ADDU "daddu "
|
||||
# define PTR_SLL "dsll "
|
||||
#else
|
||||
# define PTR_ADDU "addu "
|
||||
# define PTR_SLL "sll "
|
||||
#endif
|
||||
|
||||
#define SIZEOF_MMWORD 8
|
||||
#define BYTE_BIT 8
|
||||
|
||||
Reference in New Issue
Block a user