all repos — mgba @ 2dc710feeb0e36fc2179ec7c5f90b3d0430dd00c

mGBA Game Boy Advance Emulator

src/third-party/lzma/Bra.h (view raw)

 1/* Bra.h -- Branch converters for executables
 22013-01-18 : Igor Pavlov : Public domain */
 3
 4#ifndef __BRA_H
 5#define __BRA_H
 6
 7#include "7zTypes.h"
 8
 9EXTERN_C_BEGIN
10
11/*
12These functions convert relative addresses to absolute addresses
13in CALL instructions to increase the compression ratio.
14  
15  In:
16    data     - data buffer
17    size     - size of data
18    ip       - current virtual Instruction Pinter (IP) value
19    state    - state variable for x86 converter
20    encoding - 0 (for decoding), 1 (for encoding)
21  
22  Out:
23    state    - state variable for x86 converter
24
25  Returns:
26    The number of processed bytes. If you call these functions with multiple calls,
27    you must start next call with first byte after block of processed bytes.
28  
29  Type   Endian  Alignment  LookAhead
30  
31  x86    little      1          4
32  ARMT   little      2          2
33  ARM    little      4          0
34  PPC     big        4          0
35  SPARC   big        4          0
36  IA64   little     16          0
37
38  size must be >= Alignment + LookAhead, if it's not last block.
39  If (size < Alignment + LookAhead), converter returns 0.
40
41  Example:
42
43    UInt32 ip = 0;
44    for ()
45    {
46      ; size must be >= Alignment + LookAhead, if it's not last block
47      SizeT processed = Convert(data, size, ip, 1);
48      data += processed;
49      size -= processed;
50      ip += processed;
51    }
52*/
53
54#define x86_Convert_Init(state) { state = 0; }
55SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding);
56SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
57SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
58SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
59SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
60SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding);
61
62EXTERN_C_END
63
64#endif