| 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 |