Disassembly: 
  L1: 8b ff ?? mov edi, edi
   55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   8b 55 0c ?? mov edx, dword ss:[ebp + 12]
   0f b7 42 06 ?? movzx eax, word ds:[edx + 6]
   53 ?? push ebx
   8b c8 ?? mov ecx, eax
   56 ?? push esi
   57 ?? push edi
   c1 e9 04 ?? shr ecx, 4
   25 00 80 00 00 ?? and eax, 0x00008000<32768>
   bf ff 07 00 00 ?? mov edi, 0x000007ff<2047>
   23 cf ?? and ecx, edi
   89 45 0c ?? mov dword ss:[ebp + 12], eax
   8b 42 04 ?? mov eax, dword ds:[edx + 4]
   8b 12 ?? mov edx, dword ds:[edx]
   0f b7 d9 ?? movzx ebx, cx
   be 00 00 00 80 ?? mov esi, 0x80000000
   25 ff ff 0f 00 ?? and eax, 0x000fffff
   89 75 fc ?? mov dword ss:[ebp + 0xfc<252,-4>], esi
   85 db ?? test ebx, ebx
   74 13 ?? je basic block L5
  
  L2: 3b df ?? cmp ebx, edi
   74 08 ?? je basic block L4
  
  L3: 81 c1 00 3c 00 00 ?? add ecx, 0x00003c00<15360>
   eb 28 ?? jmp basic block L9
  
  L4: bf ff 7f 00 00 ?? mov edi, 0x00007fff<32767>
   eb 24 ?? jmp basic block L10
  
  L5: 33 db ?? xor ebx, ebx
   3b c3 ?? cmp eax, ebx
   75 12 ?? jne basic block L8
  
  L6: 3b d3 ?? cmp edx, ebx
   75 0e ?? jne basic block L8
  
  L7: 8b 45 08 ?? mov eax, dword ss:[ebp + 8]
   66 8b 4d 0c ?? mov cx, word ss:[ebp + 12]
   89 58 04 ?? mov dword ds:[eax + 4], ebx
   89 18 ?? mov dword ds:[eax], ebx
   eb 4c ?? jmp basic block L13
  
  L8: 81 c1 01 3c 00 00 ?? add ecx, 0x00003c01<15361>
   89 5d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], ebx
  
  L9: 0f b7 f9 ?? movzx edi, cx
  
  L10: 8b ca ?? mov ecx, edx
   c1 e9 15 ?? shr ecx, 0x15<21>
   c1 e0 0b ?? shl eax, 11
   0b c8 ?? or ecx, eax
   0b 4d fc ?? or ecx, dword ss:[ebp + 0xfc<252,-4>]
   8b 45 08 ?? mov eax, dword ss:[ebp + 8]
   c1 e2 0b ?? shl edx, 11
   89 48 04 ?? mov dword ds:[eax + 4], ecx
   89 10 ?? mov dword ds:[eax], edx
   85 ce ?? test esi, ecx
   75 1f ?? jne basic block L12
  
  L11: 8b 08 ?? mov ecx, dword ds:[eax]
   8b 50 04 ?? mov edx, dword ds:[eax + 4]
   8b d9 ?? mov ebx, ecx
   03 d2 ?? add edx, edx
   c1 eb 1f ?? shr ebx, 0x1f<31>
   0b d3 ?? or edx, ebx
   03 c9 ?? add ecx, ecx
   81 c7 ff ff 00 00 ?? add edi, 0x0000ffff
   89 50 04 ?? mov dword ds:[eax + 4], edx
   89 08 ?? mov dword ds:[eax], ecx
   85 d6 ?? test esi, edx
   74 e1 ?? je basic block L11
  
  L12: 8b 4d 0c ?? mov ecx, dword ss:[ebp + 12]
   0b cf ?? or ecx, edi
  
  L13: 5f ?? pop edi
   5e ?? pop esi
   66 89 48 08 ?? mov word ds:[eax + 8], cx
   5b ?? pop ebx
   c9 ?? leave
   c3 ?? ret
  
  