You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-libs/flac/files/flac-1.2.1-asm.patch

81 lines
2.8 KiB

diff -urp flac-1.2.1-old/src/libFLAC/ia32/bitreader_asm.nasm flac-1.2.1/src/libFLAC/ia32/bitreader_asm.nasm
--- flac-1.2.1-old/src/libFLAC/ia32/bitreader_asm.nasm 2007-03-30 02:54:53.000000000 +0200
+++ flac-1.2.1/src/libFLAC/ia32/bitreader_asm.nasm 2007-09-27 21:39:45.000000000 +0200
@@ -140,8 +140,13 @@ cident FLAC__bitreader_read_rice_signed_
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 16] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align
@@ -216,8 +221,13 @@ cident FLAC__bitreader_read_rice_signed_
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 16] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align
@@ -315,8 +325,13 @@ cident FLAC__bitreader_read_rice_signed_
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
call _bitreader_read_from_client_
%else
+%ifdef OBJ_FORMAT_elf
+ mov ebx, [esp + 20] ; saved ebx (GOT base)
+ call bitreader_read_from_client_ wrt ..plt
+%else
call bitreader_read_from_client_
%endif
+%endif
pop edx ; /* discard, unused */
pop ecx ; /* restore */
mov esi, [ebp + 16] ; cwords = br->consumed_words;
@@ -362,13 +377,20 @@ cident FLAC__bitreader_read_rice_signed_
mov [ebp + 16], esi ; br->consumed_words = cwords;
mov [ebp + 20], ecx ; br->consumed_bits = cbits;
push ecx ; /* save */
+ push ebx ; /* save */
push ebp ; /* push br argument */
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
call _bitreader_read_from_client_
%else
+%ifdef OBJ_FORMAT_elf
+ mov ebx, [esp + 24] ; saved ebx (GOT base)
+ call bitreader_read_from_client_ wrt ..plt
+%else
call bitreader_read_from_client_
%endif
+%endif
pop edx ; /* discard, unused */
+ pop ebx ; /* restore */
pop ecx ; /* restore */
mov esi, [ebp + 16] ; cwords = br->consumed_words;
; ucbits = (br->words-cwords)*FLAC__BITS_PER_WORD + br->bytes*8 - cbits;
@@ -437,8 +459,13 @@ cident FLAC__bitreader_read_rice_signed_
%ifdef FLAC__PUBLIC_NEEDS_UNDERSCORE
mov edi, _FLAC__crc16_table
%else
+%ifdef OBJ_FORMAT_elf
+ mov edi, [esp + 24] ; saved ebx (GOT base)
+ lea edi, [edi + FLAC__crc16_table wrt ..gotoff]
+%else
mov edi, FLAC__crc16_table
%endif
+%endif
;; eax (ax) crc a.k.a. br->read_crc
;; ebx (bl) intermediate result index into FLAC__crc16_table[]
;; ecx br->crc16_align