obligatory forgotten android fixup
[pcsx_rearmed.git] / deps / libchdr / deps / lzma-22.01 / src / BraIA64.c
CommitLineData
9e052883 1/* BraIA64.c -- Converter for IA-64 code\r
22017-01-26 : Igor Pavlov : Public domain */\r
3\r
4#include "Precomp.h"\r
5\r
6#include "CpuArch.h"\r
7#include "Bra.h"\r
8\r
9SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)\r
10{\r
11 SizeT i;\r
12 if (size < 16)\r
13 return 0;\r
14 size -= 16;\r
15 i = 0;\r
16 do\r
17 {\r
18 unsigned m = ((UInt32)0x334B0000 >> (data[i] & 0x1E)) & 3;\r
19 if (m)\r
20 {\r
21 m++;\r
22 do\r
23 {\r
24 Byte *p = data + (i + (size_t)m * 5 - 8);\r
25 if (((p[3] >> m) & 15) == 5\r
26 && (((p[-1] | ((UInt32)p[0] << 8)) >> m) & 0x70) == 0)\r
27 {\r
28 unsigned raw = GetUi32(p);\r
29 unsigned v = raw >> m;\r
30 v = (v & 0xFFFFF) | ((v & (1 << 23)) >> 3);\r
31 \r
32 v <<= 4;\r
33 if (encoding)\r
34 v += ip + (UInt32)i;\r
35 else\r
36 v -= ip + (UInt32)i;\r
37 v >>= 4;\r
38 \r
39 v &= 0x1FFFFF;\r
40 v += 0x700000;\r
41 v &= 0x8FFFFF;\r
42 raw &= ~((UInt32)0x8FFFFF << m);\r
43 raw |= (v << m);\r
44 SetUi32(p, raw);\r
45 }\r
46 }\r
47 while (++m <= 4);\r
48 }\r
49 i += 16;\r
50 }\r
51 while (i <= size);\r
52 return i;\r
53}\r