1 /* Bra.c -- Converters for RISC code
\r
2 2021-02-09 : Igor Pavlov : Public domain */
\r
9 SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
\r
25 return (SizeT)(p - data);
\r
31 UInt32 v = GetUi32(p - 4);
\r
33 v += ip + (UInt32)(p - data);
\r
46 return (SizeT)(p - data);
\r
52 UInt32 v = GetUi32(p - 4);
\r
54 v -= ip + (UInt32)(p - data);
\r
64 SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
\r
70 lim = data + size - 4;
\r
81 return (SizeT)(p - data);
\r
86 if ((b3 & b1) >= 0xF8)
\r
92 + (((UInt32)p[1] & 0x7) << 8)
\r
93 + (((UInt32)p[-2] << 11))
\r
98 UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
\r
102 p[-4] = (Byte)(v >> 11);
\r
103 p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
\r
105 p[-1] = (Byte)(0xF8 | (v >> 8));
\r
116 return (SizeT)(p - data);
\r
121 if ((b3 & b1) >= 0xF8)
\r
127 + (((UInt32)p[1] & 0x7) << 8)
\r
128 + (((UInt32)p[-2] << 11))
\r
133 UInt32 cur = (ip + (UInt32)(p - data)) >> 1;
\r
138 SetUi16(p - 4, (UInt16)(((v >> 11) & 0x7FF) | 0xF000));
\r
139 SetUi16(p - 2, (UInt16)(v | 0xF800));
\r
142 p[-4] = (Byte)(v >> 11);
\r
143 p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7));
\r
145 p[-1] = (Byte)(0xF8 | (v >> 8));
\r
151 SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
\r
155 size &= ~(size_t)3;
\r
165 return (SizeT)(p - data);
\r
167 /* if ((v & 0xFC000003) == 0x48000001) */
\r
168 if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1)
\r
172 UInt32 v = GetBe32(p - 4);
\r
174 v += ip + (UInt32)(p - data);
\r
176 v -= ip + (UInt32)(p - data);
\r
185 SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding)
\r
189 size &= ~(size_t)3;
\r
199 return (SizeT)(p - data);
\r
203 m = v + ((UInt32)5 << 29);
\r
204 m ^= (UInt32)7 << 29;
\r
205 m += (UInt32)1 << 22;
\r
206 if ((m & ((UInt32)0x1FF << 23)) == 0)
\r
210 if ((p[-4] == 0x40 && (p[-3] & 0xC0) == 0) ||
\r
211 (p[-4] == 0x7F && (p[-3] >= 0xC0)))
\r
215 UInt32 v = GetBe32(p - 4);
\r
218 v += ip + (UInt32)(p - data);
\r
220 v -= ip + (UInt32)(p - data);
\r
223 v -= (UInt32)1 << 24;
\r