Skip to content

Commit

Permalink
Bug 1501523 - part 2 - remove separate jpeg_nbits_table copies from a…
Browse files Browse the repository at this point in the history
…ssembly files; r=aosmond

Continuing the theme from the first part, the optimized assembly files
for x86-64 and i386 include their own private copies of
jpeg_nbits_table.  There's no need for them to do so; they can make use
of the C copy that we commonized in the first patch.
  • Loading branch information
froydnj committed Oct 24, 2018
1 parent b3c9f58 commit cf475d1
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 9 deletions.
70 changes: 70 additions & 0 deletions media/libjpeg/assembly-tables.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
diff --git a/media/libjpeg/simd/i386/jchuff-sse2.asm b/media/libjpeg/simd/i386/jchuff-sse2.asm
index 6ea69f6..fea4de3 100644
--- a/media/libjpeg/simd/i386/jchuff-sse2.asm
+++ b/media/libjpeg/simd/i386/jchuff-sse2.asm
@@ -27,11 +27,10 @@

alignz 32
GLOBAL_DATA(jconst_huff_encode_one_block)
+ EXTERN EXTN(jpeg_nbits_table)

EXTN(jconst_huff_encode_one_block):

-%include "jpeg_nbits_table.inc"
-
alignz 32

; --------------------------------------------------------------------------
@@ -233,7 +232,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):

; Find the number of bits needed for the magnitude of the coefficient
movpic ebp, POINTER [esp+gotptr] ; load GOT address (ebp)
- movzx edx, byte [GOTOFF(ebp, jpeg_nbits_table + ecx)] ; nbits = JPEG_NBITS(temp);
+ movzx edx, byte [GOTOFF(ebp, EXTN(jpeg_nbits_table) + ecx)] ; nbits = JPEG_NBITS(temp);
mov DWORD [esp+temp2], edx ; backup nbits in temp2

; Emit the Huffman-coded symbol for the number of bits
@@ -305,7 +304,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
.ERLOOP:
movsx eax, word [esi] ; temp = t1[k];
movpic edx, POINTER [esp+gotptr] ; load GOT address (edx)
- movzx eax, byte [GOTOFF(edx, jpeg_nbits_table + eax)] ; nbits = JPEG_NBITS(temp);
+ movzx eax, byte [GOTOFF(edx, EXTN(jpeg_nbits_table) + eax)] ; nbits = JPEG_NBITS(temp);
mov DWORD [esp+temp2], eax
; Emit Huffman symbol for run length / number of bits
shl ecx, 4 ; temp3 = (r << 4) + nbits;
diff --git a/media/libjpeg/simd/x86_64/jchuff-sse2.asm b/media/libjpeg/simd/x86_64/jchuff-sse2.asm
index 1b091ad..5ec8b1a 100644
--- a/media/libjpeg/simd/x86_64/jchuff-sse2.asm
+++ b/media/libjpeg/simd/x86_64/jchuff-sse2.asm
@@ -27,11 +27,10 @@

alignz 32
GLOBAL_DATA(jconst_huff_encode_one_block)
+ EXTERN EXTN(jpeg_nbits_table)

EXTN(jconst_huff_encode_one_block):

-%include "jpeg_nbits_table.inc"
-
alignz 32

; --------------------------------------------------------------------------
@@ -222,7 +221,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
add ebx, esi ; temp2 += temp3;

; Find the number of bits needed for the magnitude of the coefficient
- lea r11, [rel jpeg_nbits_table]
+ lea r11, [rel EXTN(jpeg_nbits_table)]
movzx rdi, byte [r11 + rdi] ; nbits = JPEG_NBITS(temp);
; Emit the Huffman-coded symbol for the number of bits
mov r11d, INT [r14 + rdi * 4] ; code = dctbl->ehufco[nbits];
@@ -289,7 +288,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
lea rsi, [rsi+r12*2] ; k += r;
shr r11, cl ; index >>= r;
movzx rdi, word [rsi] ; temp = t1[k];
- lea rbx, [rel jpeg_nbits_table]
+ lea rbx, [rel EXTN(jpeg_nbits_table)]
movzx rdi, byte [rbx + rdi] ; nbits = JPEG_NBITS(temp);
.BRLOOP:
cmp r12, 16 ; while (r > 15) {
7 changes: 3 additions & 4 deletions media/libjpeg/simd/i386/jchuff-sse2.asm
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,10 @@

alignz 32
GLOBAL_DATA(jconst_huff_encode_one_block)
EXTERN EXTN(jpeg_nbits_table)

EXTN(jconst_huff_encode_one_block):

%include "jpeg_nbits_table.inc"

alignz 32

; --------------------------------------------------------------------------
Expand Down Expand Up @@ -233,7 +232,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):

; Find the number of bits needed for the magnitude of the coefficient
movpic ebp, POINTER [esp+gotptr] ; load GOT address (ebp)
movzx edx, byte [GOTOFF(ebp, jpeg_nbits_table + ecx)] ; nbits = JPEG_NBITS(temp);
movzx edx, byte [GOTOFF(ebp, EXTN(jpeg_nbits_table) + ecx)] ; nbits = JPEG_NBITS(temp);
mov DWORD [esp+temp2], edx ; backup nbits in temp2

; Emit the Huffman-coded symbol for the number of bits
Expand Down Expand Up @@ -305,7 +304,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
.ERLOOP:
movsx eax, word [esi] ; temp = t1[k];
movpic edx, POINTER [esp+gotptr] ; load GOT address (edx)
movzx eax, byte [GOTOFF(edx, jpeg_nbits_table + eax)] ; nbits = JPEG_NBITS(temp);
movzx eax, byte [GOTOFF(edx, EXTN(jpeg_nbits_table) + eax)] ; nbits = JPEG_NBITS(temp);
mov DWORD [esp+temp2], eax
; Emit Huffman symbol for run length / number of bits
shl ecx, 4 ; temp3 = (r << 4) + nbits;
Expand Down
7 changes: 3 additions & 4 deletions media/libjpeg/simd/x86_64/jchuff-sse2.asm
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,10 @@

alignz 32
GLOBAL_DATA(jconst_huff_encode_one_block)
EXTERN EXTN(jpeg_nbits_table)

EXTN(jconst_huff_encode_one_block):

%include "jpeg_nbits_table.inc"

alignz 32

; --------------------------------------------------------------------------
Expand Down Expand Up @@ -222,7 +221,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
add ebx, esi ; temp2 += temp3;

; Find the number of bits needed for the magnitude of the coefficient
lea r11, [rel jpeg_nbits_table]
lea r11, [rel EXTN(jpeg_nbits_table)]
movzx rdi, byte [r11 + rdi] ; nbits = JPEG_NBITS(temp);
; Emit the Huffman-coded symbol for the number of bits
mov r11d, INT [r14 + rdi * 4] ; code = dctbl->ehufco[nbits];
Expand Down Expand Up @@ -289,7 +288,7 @@ EXTN(jsimd_huff_encode_one_block_sse2):
lea rsi, [rsi+r12*2] ; k += r;
shr r11, cl ; index >>= r;
movzx rdi, word [rsi] ; temp = t1[k];
lea rbx, [rel jpeg_nbits_table]
lea rbx, [rel EXTN(jpeg_nbits_table)]
movzx rdi, byte [rbx + rdi] ; nbits = JPEG_NBITS(temp);
.BRLOOP:
cmp r12, 16 ; while (r > 15) {
Expand Down
3 changes: 2 additions & 1 deletion media/update-libjpeg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ tag=${2-HEAD}
cd $srcdir/libjpeg
cp win/jsimdcfg.inc simd/

revert_files="1050342.diff externalize-table.diff jconfig.h jconfigint.h jpeg_nbits_table.c moz.build MOZCHANGES mozilla.diff simd/jsimdcfg.inc"
revert_files="1050342.diff assembly-tables.diff externalize-table.diff jconfig.h jconfigint.h jpeg_nbits_table.c moz.build MOZCHANGES mozilla.diff simd/jsimdcfg.inc"
if test -d ${topsrcdir}/.hg; then
hg revert --no-backup $revert_files
elif test -d ${topsrcdir}/.git; then
Expand All @@ -29,3 +29,4 @@ fi
patch -p0 -i mozilla.diff
patch -p0 -i 1050342.diff
patch -p3 -i externalize-table.diff
patch -p3 -i assembly-tables.diff

0 comments on commit cf475d1

Please sign in to comment.