This commit is contained in:
László Molnár
2010-06-04 17:56:52 +02:00
18 changed files with 745 additions and 538 deletions
File diff suppressed because it is too large Load Diff
@@ -90,6 +90,42 @@ section NRV2D
section NRV2E
#include "arch/powerpc/32/nrv2e_d.S"
section NRV_TAIL
eof_nrv:
#define dst0 a4
#define tmp a1
lwz dst0,0(ldst) // original dst
mtlr t3 // return address
subf a0,lsrc,src
subf tmp,dst0,dst // -1+ dst length
addi a0,a0,1 // return 0: good; else: bad [+1: correct for lbzu]
addi tmp,tmp,1 // dst length
stw tmp,0(ldst)
#undef tmp
// CACHELINE=32 is the observed minimum line size of any cache.
// Some caches may have larger lines, but it is cumbersome to lookup
// {AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE: /usr/include/elf.h},
// then save the correct size in a variable {where to put it?}, or to modify
// the two instructions here. If a cache has larger lines, then we expect
// that the second dcbst (or icbi) on a the same line will be fast.
// If not, then too bad.
section CFLUSH // In: a2=dst= &highest stored byte; a4=dst0= &lowest stored byte
CACHELINE=32
ori dst0,dst0,-1+ CACHELINE // highest addr on cache line
cfl_nrv:
dcbst 0,dst0 // initiate store (modified) cacheline to memory
cmpl cr0,dst0,dst // did we cover the highest-addressed byte?
icbi 0,dst0 // discard instructions from cacheline
addi dst0,dst0,CACHELINE // highest addr on next line
blt cr0,cfl_nrv // not done yet
#undef dst0
sync // wait for all memory operations to finish
isync // discard prefetched instructions (if any)
cfl_ret:
ret
#undef hibit
#undef src
@@ -0,0 +1,61 @@
file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 MACHMAINX 00000015 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000066 0000000000000000 0000000000000000 00000055 2**0 CONTENTS, READONLY
2 NRV2E 000000b7 0000000000000000 0000000000000000 000000bb 2**0 CONTENTS, RELOC, READONLY
3 NRV2D 0000009e 0000000000000000 0000000000000000 00000172 2**0 CONTENTS, RELOC, READONLY
4 NRV2B 00000090 0000000000000000 0000000000000000 00000210 2**0 CONTENTS, RELOC, READONLY
5 LZMA_ELF00 00000064 0000000000000000 0000000000000000 000002a0 2**0 CONTENTS, RELOC, READONLY
6 LZMA_DEC10 000009f7 0000000000000000 0000000000000000 00000304 2**0 CONTENTS, READONLY
7 LZMA_DEC20 000009f7 0000000000000000 0000000000000000 00000cfb 2**0 CONTENTS, READONLY
8 LZMA_DEC30 00000014 0000000000000000 0000000000000000 000016f2 2**0 CONTENTS, READONLY
9 NRV_TAIL 00000000 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY
10 MACHMAINY 00000011 0000000000000000 0000000000000000 00001706 2**0 CONTENTS, READONLY
11 MACHMAINZ 00000135 0000000000000000 0000000000000000 00001717 2**0 CONTENTS, RELOC, READONLY
SYMBOL TABLE:
0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
0000000000000000 l d NRV2E 0000000000000000 NRV2E
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 g MACHMAINX 0000000000000000 _start
0000000000000011 g MACHMAINY 0000000000000000 end_decompress
RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE
0000000000000009 R_X86_64_PC32 MACHMAINZ+0xffffffffffffffff
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
00000000000000ae R_X86_64_PC32 NRV_HEAD+0x0000000000000021
000000000000005b R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
0000000000000095 R_X86_64_PC32 NRV_HEAD+0x0000000000000021
000000000000005b R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
000000000000008a R_X86_64_PC32 NRV_HEAD+0x0000000000000021
0000000000000052 R_X86_64_PC32 MACHMAINY+0xfffffffffffffffc
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000006 R_X86_64_PC32 LZMA_DEC30+0x0000000000000010
RELOCATION RECORDS FOR [MACHMAINZ]:
OFFSET TYPE VALUE
000000000000000f R_X86_64_32 MACHMAINZ+0x0000000000000135
0000000000000014 R_X86_64_32 MACHMAINX+0x000000000000000d
0000000000000048 R_X86_64_32 MACHMAINZ+0x0000000000000135
000000000000004e R_X86_64_32 MACHMAINX+0x000000000000000d
@@ -9,21 +9,25 @@ Idx Name Size VMA LMA File off Algn Flags
4 NRV2B 000000f0 00000000 00000000 000000a8 2**0 CONTENTS, RELOC, READONLY
5 NRV2D 0000012c 00000000 00000000 00000198 2**0 CONTENTS, RELOC, READONLY
6 NRV2E 00000148 00000000 00000000 000002c4 2**0 CONTENTS, RELOC, READONLY
7 LZMA 00000000 00000000 00000000 0000040c 2**0 CONTENTS, READONLY
8 LZMA_ELF00 0000008c 00000000 00000000 0000040c 2**0 CONTENTS, RELOC, READONLY
9 LZMA_DEC10 0000099c 00000000 00000000 00000498 2**0 CONTENTS, READONLY
10 LZMA_DEC20 0000099c 00000000 00000000 00000e34 2**0 CONTENTS, READONLY
11 LZMA_DEC30 00000020 00000000 00000000 000017d0 2**0 CONTENTS, READONLY
12 UPX1HEAD 00000020 00000000 00000000 000017f0 2**0 CONTENTS, READONLY
7 NRV_TAIL 0000001c 00000000 00000000 0000040c 2**0 CONTENTS, READONLY
8 CFLUSH 00000024 00000000 00000000 00000428 2**0 CONTENTS, READONLY
9 LZMA 00000000 00000000 00000000 0000044c 2**0 CONTENTS, READONLY
10 LZMA_ELF00 0000008c 00000000 00000000 0000044c 2**0 CONTENTS, RELOC, READONLY
11 LZMA_DEC10 0000099c 00000000 00000000 000004d8 2**0 CONTENTS, READONLY
12 LZMA_DEC20 0000099c 00000000 00000000 00000e74 2**0 CONTENTS, READONLY
13 LZMA_DEC30 00000020 00000000 00000000 00001810 2**0 CONTENTS, READONLY
14 UPX1HEAD 00000020 00000000 00000000 00001830 2**0 CONTENTS, READONLY
SYMBOL TABLE:
00000000 l d LINUX020 00000000 LINUX020
00000000 l d LINUX030 00000000 LINUX030
00000000 l d NRV_TAIL 00000000 NRV_TAIL
00000000 l d LZMA_DEC30 00000000 LZMA_DEC30
00000000 l d LINUX000 00000000 LINUX000
00000000 l d LINUX010 00000000 LINUX010
00000000 l d NRV2B 00000000 NRV2B
00000000 l d NRV2D 00000000 NRV2D
00000000 l d NRV2E 00000000 NRV2E
00000000 l d CFLUSH 00000000 CFLUSH
00000000 l d LZMA 00000000 LZMA
00000000 l d LZMA_ELF00 00000000 LZMA_ELF00
00000000 l d LZMA_DEC10 00000000 LZMA_DEC10
@@ -31,7 +35,6 @@ SYMBOL TABLE:
00000000 l d UPX1HEAD 00000000 UPX1HEAD
00000000 *UND* 00000000 filter_length
00000000 *UND* 00000000 filter_cto
00000000 *UND* 00000000 eof_nrv
RELOCATION RECORDS FOR [LINUX000]:
OFFSET TYPE VALUE
@@ -45,15 +48,15 @@ OFFSET TYPE VALUE
RELOCATION RECORDS FOR [NRV2B]:
OFFSET TYPE VALUE
00000090 R_PPC_REL14 eof_nrv
00000090 R_PPC_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2D]:
OFFSET TYPE VALUE
000000b4 R_PPC_REL14 eof_nrv
000000b4 R_PPC_REL14 NRV_TAIL
RELOCATION RECORDS FOR [NRV2E]:
OFFSET TYPE VALUE
000000b4 R_PPC_REL14 eof_nrv
000000b4 R_PPC_REL14 NRV_TAIL
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE