From ea165c171661cb13e4b8a41048880b7fa7eebc08 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Thu, 17 Sep 2015 10:45:37 +0200 Subject: external/jpeg-turbo: Fix calling convention confusion in asm code ...which becomes evident with recent Clang trunk versions, and is fixed for libjpeg-turbo master with "Fix x86-64 ABI conformance issue in SIMD code" (but unfortunately needs a quite different patch for our libjpeg-turbo 1.3.1 tarball). Change-Id: Id9842cc85b4ea87b2faf73f1c8d10533621557e1 --- external/jpeg-turbo/UnpackedTarball_jpeg-turbo.mk | 1 + external/jpeg-turbo/abi64.patch | 253 ++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 external/jpeg-turbo/abi64.patch (limited to 'external/jpeg-turbo') diff --git a/external/jpeg-turbo/UnpackedTarball_jpeg-turbo.mk b/external/jpeg-turbo/UnpackedTarball_jpeg-turbo.mk index 7f974228d5d0..9676d3a2b517 100644 --- a/external/jpeg-turbo/UnpackedTarball_jpeg-turbo.mk +++ b/external/jpeg-turbo/UnpackedTarball_jpeg-turbo.mk @@ -17,6 +17,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,jpeg-turbo,\ external/jpeg-turbo/jpeg-turbo.build.patch.1 \ $(if $(filter WNT,$(OS)),external/jpeg-turbo/jpeg-turbo.win_build.patch.1) \ external/jpeg-turbo/ubsan.patch \ + external/jpeg-turbo/abi64.patch \ )) # vim: set noet sw=4 ts=4: diff --git a/external/jpeg-turbo/abi64.patch b/external/jpeg-turbo/abi64.patch new file mode 100644 index 000000000000..2bd607260863 --- /dev/null +++ b/external/jpeg-turbo/abi64.patch @@ -0,0 +1,253 @@ +cf. "Fix x86-64 ABI conformance issue in +SIMD code": +--- simd/jcclrss2-64.asm ++++ simd/jcclrss2-64.asm +@@ -50,14 +50,14 @@ + collect_args + push rbx + +- mov rcx, r10 ++ mov ecx, r10d + test rcx,rcx + jz near .return + + push rcx + + mov rsi, r12 +- mov rcx, r13 ++ mov ecx, r13d + mov rdi, JSAMPARRAY [rsi+0*SIZEOF_JSAMPARRAY] + mov rbx, JSAMPARRAY [rsi+1*SIZEOF_JSAMPARRAY] + mov rdx, JSAMPARRAY [rsi+2*SIZEOF_JSAMPARRAY] +--- simd/jcgryss2-64.asm ++++ simd/jcgryss2-64.asm +@@ -50,14 +50,14 @@ + collect_args + push rbx + +- mov rcx, r10 ++ mov ecx, r10d + test rcx,rcx + jz near .return + + push rcx + + mov rsi, r12 +- mov rcx, r13 ++ mov ecx, r13d + mov rdi, JSAMPARRAY [rsi+0*SIZEOF_JSAMPARRAY] + lea rdi, [rdi+rcx*SIZEOF_JSAMPROW] + +--- simd/jcqnts2f-64.asm ++++ simd/jcqnts2f-64.asm +@@ -50,7 +50,7 @@ + packsswb xmm7,xmm7 ; xmm7 = PB_CENTERJSAMPLE (0x808080..) + + mov rsi, r10 +- mov rax, r11 ++ mov eax, r11d + mov rdi, r12 + mov rcx, DCTSIZE/2 + .convloop: +--- simd/jcqnts2i-64.asm ++++ simd/jcqnts2i-64.asm +@@ -50,7 +50,7 @@ + psllw xmm7,7 ; xmm7={0xFF80 0xFF80 0xFF80 0xFF80 ..} + + mov rsi, r10 +- mov rax, r11 ++ mov eax, r11d + mov rdi, r12 + mov rcx, DCTSIZE/4 + .convloop: +--- simd/jcsamss2-64.asm ++++ simd/jcsamss2-64.asm +@@ -49,11 +49,11 @@ + mov rbp,rsp + collect_args + +- mov rcx, r13 ++ mov ecx, r13d + shl rcx,3 ; imul rcx,DCTSIZE (rcx = output_cols) + jz near .return + +- mov rdx, r10 ++ mov edx, r10d + + ; -- expand_right_edge + +@@ -90,7 +90,7 @@ + + ; -- h2v1_downsample + +- mov rax, r12 ; rowctr ++ mov eax, r12d ; rowctr + test eax,eax + jle near .return + +@@ -193,11 +193,11 @@ + mov rbp,rsp + collect_args + +- mov rcx, r13 ++ mov rcx, r13 + shl rcx,3 ; imul rcx,DCTSIZE (rcx = output_cols) + jz near .return + +- mov rdx, r10 ++ mov edx, r10d + + ; -- expand_right_edge + +@@ -234,7 +234,7 @@ + + ; -- h2v2_downsample + +- mov rax, r12 ; rowctr ++ mov eax, r12d ; rowctr + test rax,rax + jle near .return + +--- simd/jdclrss2-64.asm ++++ simd/jdclrss2-64.asm +@@ -52,14 +52,14 @@ + collect_args + push rbx + +- mov rcx, r10 ; num_cols ++ mov ecx, r10d ; num_cols + test rcx,rcx + jz near .return + + push rcx + + mov rdi, r11 +- mov rcx, r12 ++ mov ecx, r12d + mov rsi, JSAMPARRAY [rdi+0*SIZEOF_JSAMPARRAY] + mov rbx, JSAMPARRAY [rdi+1*SIZEOF_JSAMPARRAY] + mov rdx, JSAMPARRAY [rdi+2*SIZEOF_JSAMPARRAY] +--- simd/jdmrgss2-64.asm ++++ simd/jdmrgss2-64.asm +@@ -52,14 +52,14 @@ + collect_args + push rbx + +- mov rcx, r10 ; col ++ mov ecx, r10d ; col + test rcx,rcx + jz near .return + + push rcx + + mov rdi, r11 +- mov rcx, r12 ++ mov ecx, r12d + mov rsi, JSAMPARRAY [rdi+0*SIZEOF_JSAMPARRAY] + mov rbx, JSAMPARRAY [rdi+1*SIZEOF_JSAMPARRAY] + mov rdx, JSAMPARRAY [rdi+2*SIZEOF_JSAMPARRAY] +@@ -455,10 +455,10 @@ + collect_args + push rbx + +- mov rax, r10 ++ mov eax, r10d + + mov rdi, r11 +- mov rcx, r12 ++ mov ecx, r12d + mov rsi, JSAMPARRAY [rdi+0*SIZEOF_JSAMPARRAY] + mov rbx, JSAMPARRAY [rdi+1*SIZEOF_JSAMPARRAY] + mov rdx, JSAMPARRAY [rdi+2*SIZEOF_JSAMPARRAY] +--- simd/jdsamss2-64.asm ++++ simd/jdsamss2-64.asm +@@ -67,7 +67,7 @@ + mov rbp,rsp + collect_args + +- mov rax, r11 ; colctr ++ mov eax, r11d ; colctr + test rax,rax + jz near .return + +@@ -214,7 +214,7 @@ + collect_args + push rbx + +- mov rax, r11 ; colctr ++ mov eax, r11d ; colctr + test rax,rax + jz near .return + +@@ -506,7 +506,7 @@ + mov rbp,rsp + collect_args + +- mov rdx, r11 ++ mov edx, r11d + add rdx, byte (2*SIZEOF_XMMWORD)-1 + and rdx, byte -(2*SIZEOF_XMMWORD) + jz near .return +@@ -596,7 +596,7 @@ + collect_args + push rbx + +- mov rdx, r11 ++ mov edx, r11d + add rdx, byte (2*SIZEOF_XMMWORD)-1 + and rdx, byte -(2*SIZEOF_XMMWORD) + jz near .return +--- simd/jiss2flt-64.asm ++++ simd/jiss2flt-64.asm +@@ -326,7 +326,7 @@ + mov rax, [original_rbp] + lea rsi, [workspace] ; FAST_FLOAT * wsptr + mov rdi, r12 ; (JSAMPROW *) +- mov rax, r13 ++ mov eax, r13d + mov rcx, DCTSIZE/4 ; ctr + .rowloop: + +--- simd/jiss2fst-64.asm ++++ simd/jiss2fst-64.asm +@@ -323,7 +323,7 @@ + + mov rax, [original_rbp] + mov rdi, r12 ; (JSAMPROW *) +- mov rax, r13 ++ mov eax, r13d + + ; -- Even part + +--- simd/jiss2int-64.asm ++++ simd/jiss2int-64.asm +@@ -515,7 +515,7 @@ + + mov rax, [original_rbp] + mov rdi, r12 ; (JSAMPROW *) +- mov rax, r13 ++ mov eax, r13d + + ; -- Even part + +--- simd/jiss2red-64.asm ++++ simd/jiss2red-64.asm +@@ -312,7 +312,7 @@ + + mov rax, [original_rbp] + mov rdi, r12 ; (JSAMPROW *) +- mov rax, r13 ++ mov eax, r13d + + ; -- Even part + +@@ -521,7 +521,7 @@ + ; ---- Pass 2: process rows, store into output array. + + mov rdi, r12 ; (JSAMPROW *) +- mov rax, r13 ++ mov eax, r13d + + ; | input:| result:| + ; | A0 B0 | | -- cgit