tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

BraIA64.c (1176B)


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