// File: sisong[P]ApkDiffPatch/lzma/C/LzFindMt.c
// Function: MatchFinderMt_CreateVTable
void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder2 *vTable)
{
  vTable->Init = MatchFinderMt_Init;
  vTable->GetNumAvailableBytes = MatchFinderMt_GetNumAvailableBytes;
  vTable->GetPointerToCurrentPos = MatchFinderMt_GetPointerToCurrentPos;
  vTable->GetMatches = MatchFinderMt_GetMatches;
  
  switch (MF(p)->numHashBytes)
  {
    case 2:
      p->GetHeadsFunc = GetHeads2;
      p->MixMatchesFunc = NULL;
      vTable->Skip = MatchFinderMt0_Skip;
      vTable->GetMatches = MatchFinderMt2_GetMatches;
      break;
    case 3:
      p->GetHeadsFunc = MF(p)->bigHash ? GetHeads3b : GetHeads3;
      p->MixMatchesFunc = MixMatches2;
      vTable->Skip = MatchFinderMt2_Skip;
      break;
    case 4:
      p->GetHeadsFunc = MF(p)->bigHash ? GetHeads4b : GetHeads4;

      // it's fast inline version of GetMatches()
      // vTable->GetMatches = MatchFinderMt_GetMatches_Bt4;

      p->MixMatchesFunc = MixMatches3;
      vTable->Skip = MatchFinderMt3_Skip;
      break;
    default:
      p->GetHeadsFunc = MF(p)->bigHash ? GetHeads5b : GetHeads5;
      p->MixMatchesFunc = MixMatches4;
      vTable->Skip =
          MatchFinderMt3_Skip;
          // MatchFinderMt4_Skip;
      break;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
leaq 0x199(%rip), %rcx       # 0x75c30
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
leaq 0x30b(%rip), %rcx       # 0x75db0
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
leaq 0x34c(%rip), %rcx       # 0x75e00
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
leaq 0x35d(%rip), %rcx       # 0x75e20
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rax
movq 0x520(%rax), %rax
movl 0x5c(%rax), %eax
movl %eax, -0x14(%rbp)
subl $0x2, %eax
je 0x75afa
jmp 0x75adf
movl -0x14(%rbp), %eax
subl $0x3, %eax
je 0x75b3b
jmp 0x75ae9
movl -0x14(%rbp), %eax
subl $0x4, %eax
je 0x75b8d
jmp 0x75bdc
movq -0x8(%rbp), %rax
leaq 0x47b(%rip), %rcx       # 0x75f80
movq %rcx, 0x518(%rax)
movq -0x8(%rbp), %rax
movq $0x0, 0x40(%rax)
movq -0x10(%rbp), %rax
leaq 0x4dd(%rip), %rcx       # 0x76000
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
leaq 0x55e(%rip), %rcx       # 0x76090
movq %rcx, 0x18(%rax)
jmp 0x75c29
movq -0x8(%rbp), %rax
movq 0x520(%rax), %rax
movzbl 0x22(%rax), %edx
leaq 0x69f(%rip), %rcx       # 0x761f0
leaq 0x608(%rip), %rax       # 0x76160
cmpl $0x0, %edx
cmovneq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x518(%rax)
movq -0x8(%rbp), %rax
leaq 0x70b(%rip), %rcx       # 0x76280
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
leaq 0x7cc(%rip), %rcx       # 0x76350
movq %rcx, 0x20(%rax)
jmp 0x75c29
movq -0x8(%rbp), %rax
movq 0x520(%rax), %rax
movzbl 0x22(%rax), %edx
leaq 0x98d(%rip), %rcx       # 0x76530
leaq 0x896(%rip), %rax       # 0x76440
cmpl $0x0, %edx
cmovneq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x518(%rax)
movq -0x8(%rbp), %rax
leaq 0xa99(%rip), %rcx       # 0x76660
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
leaq 0xc2a(%rip), %rcx       # 0x76800
movq %rcx, 0x20(%rax)
jmp 0x75c29
movq -0x8(%rbp), %rax
movq 0x520(%rax), %rax
movzbl 0x22(%rax), %edx
leaq 0xe5e(%rip), %rcx       # 0x76a50
leaq 0xd27(%rip), %rax       # 0x76920
cmpl $0x0, %edx
cmovneq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x518(%rax)
movq -0x8(%rbp), %rax
leaq 0xf8a(%rip), %rcx       # 0x76ba0
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
leaq 0xbdb(%rip), %rcx       # 0x76800
movq %rcx, 0x20(%rax)
popq %rbp
retq
nopl (%rax,%rax)