
int __gmpn_fft_best_k(mp_size_t n,int sqr)

{
  undefined1 *puVar1;
  byte bVar2;
  long lVar3;
  fft_table_nk *pfVar4;
  
  pfVar4 = mpn_fft_table3[sqr] + 1;
  bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3;
  lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2;
  while (lVar3 < n) {
    puVar1 = &pfVar4->field_0x3;
    pfVar4 = pfVar4 + 1;
    bVar2 = (byte)*puVar1 >> 3;
    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;
  }
  return (uint)bVar2;
}



byte __gmpn_fft_best_k(long param_1,int param_2)

{
  byte *pbVar1;
  byte bVar2;
  long lVar3;
  uint *puVar4;
  
  lVar3 = (long)param_2 * 0x358;
  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);
  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;
  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;
  while (lVar3 < param_1) {
    pbVar1 = (byte *)((long)puVar4 + 3);
    puVar4 = puVar4 + 1;
    bVar2 = *pbVar1 >> 3;
    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;
  }
  return bVar2;
}


MOVSXD RDX,ESI
LEA RAX,[0x16c7a0]
IMUL RDX,RDX,0x358
ADD RDX,RAX
MOVZX ECX,byte ptr [RDX + 0x3]
LEA RSI,[RDX + 0x4]
MOV EDX,dword ptr [RDX + 0x4]
SHR CL,0x3
AND EDX,0x7ffffff
SHL RDX,CL
MOVZX EAX,CL
CMP RDI,RDX
JLE 0x0012f7d6
NOP dword ptr [RAX + RAX*0x1]
MOVZX ECX,byte ptr [RSI + 0x3]
ADD RSI,0x4
MOV EDX,dword ptr [RSI]
SHR CL,0x3
AND EDX,0x7ffffff
SHL RDX,CL
MOVZX EAX,CL
CMP RDX,RDI
JL 0x0012f7b8
RET
(translation_unit "byte __gmpn_fft_best_k(long param_1,int param_2)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}\n\n" (function_definition "byte __gmpn_fft_best_k(long param_1,int param_2)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" type_identifier (function_declarator "__gmpn_fft_best_k(long param_1,int param_2)" identifier (parameter_list "(long param_1,int param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (expression_statement "lVar3 = (long)param_2 * 0x358;" (assignment_expression "lVar3 = (long)param_2 * 0x358" identifier = (binary_expression "(long)param_2 * 0x358" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (expression_statement "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);" (assignment_expression "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3)" identifier = (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" ( (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" & identifier) + identifier) )))) ;) (expression_statement "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;" (assignment_expression "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3" identifier = (binary_expression "(byte)(&DAT_0016c7a3)[lVar3] >> 3" (subscript_expression "(byte)(&DAT_0016c7a3)[lVar3]" (call_expression "(byte)(&DAT_0016c7a3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_0016c7a3)" ( (pointer_expression "&DAT_0016c7a3" & identifier) ))) [ identifier ]) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" (call_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" ( (binary_expression "*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff" (pointer_expression "*(uint *)(&DAT_0016c7a4 + lVar3)" * (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" ( (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" & identifier) + identifier) )))) & number_literal) ))) << identifier)) ;) (while_statement "while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" while (parenthesized_expression "(lVar3 < param_1)" ( (binary_expression "lVar3 < param_1" identifier < identifier) )) (compound_statement "{\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" { (expression_statement "pbVar1 = (byte *)((long)puVar4 + 3);" (assignment_expression "pbVar1 = (byte *)((long)puVar4 + 3)" identifier = (cast_expression "(byte *)((long)puVar4 + 3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 3)" ( (binary_expression "(long)puVar4 + 3" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = *pbVar1 >> 3;" (assignment_expression "bVar2 = *pbVar1 >> 3" identifier = (binary_expression "*pbVar1 >> 3" (pointer_expression "*pbVar1" * identifier) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)(*puVar4 & 0x7ffffff) << bVar2" (call_expression "(ulong)(*puVar4 & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*puVar4 & 0x7ffffff)" ( (binary_expression "*puVar4 & 0x7ffffff" (pointer_expression "*puVar4" * identifier) & number_literal) ))) << identifier)) ;) })) (return_statement "return bVar2;" return identifier ;) })))
(translation_unit "int __gmpn_fft_best_k(mp_size_t n,int sqr)\n\n{\n  undefined1 *puVar1;\n  byte bVar2;\n  long lVar3;\n  fft_table_nk *pfVar4;\n  \n  pfVar4 = mpn_fft_table3[sqr] + 1;\n  bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3;\n  lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2;\n  while (lVar3 < n) {\n    puVar1 = &pfVar4->field_0x3;\n    pfVar4 = pfVar4 + 1;\n    bVar2 = (byte)*puVar1 >> 3;\n    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;\n  }\n  return (uint)bVar2;\n}\n\n" (function_definition "int __gmpn_fft_best_k(mp_size_t n,int sqr)\n\n{\n  undefined1 *puVar1;\n  byte bVar2;\n  long lVar3;\n  fft_table_nk *pfVar4;\n  \n  pfVar4 = mpn_fft_table3[sqr] + 1;\n  bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3;\n  lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2;\n  while (lVar3 < n) {\n    puVar1 = &pfVar4->field_0x3;\n    pfVar4 = pfVar4 + 1;\n    bVar2 = (byte)*puVar1 >> 3;\n    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;\n  }\n  return (uint)bVar2;\n}" primitive_type (function_declarator "__gmpn_fft_best_k(mp_size_t n,int sqr)" identifier (parameter_list "(mp_size_t n,int sqr)" ( (parameter_declaration "mp_size_t n" type_identifier identifier) , (parameter_declaration "int sqr" primitive_type identifier) ))) (compound_statement "{\n  undefined1 *puVar1;\n  byte bVar2;\n  long lVar3;\n  fft_table_nk *pfVar4;\n  \n  pfVar4 = mpn_fft_table3[sqr] + 1;\n  bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3;\n  lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2;\n  while (lVar3 < n) {\n    puVar1 = &pfVar4->field_0x3;\n    pfVar4 = pfVar4 + 1;\n    bVar2 = (byte)*puVar1 >> 3;\n    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;\n  }\n  return (uint)bVar2;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "fft_table_nk *pfVar4;" type_identifier (pointer_declarator "*pfVar4" * identifier) ;) (expression_statement "pfVar4 = mpn_fft_table3[sqr] + 1;" (assignment_expression "pfVar4 = mpn_fft_table3[sqr] + 1" identifier = (binary_expression "mpn_fft_table3[sqr] + 1" (subscript_expression "mpn_fft_table3[sqr]" identifier [ identifier ]) + number_literal)) ;) (expression_statement "bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3;" (assignment_expression "bVar2 = (byte)mpn_fft_table3[sqr][0].field_0x3 >> 3" identifier = (binary_expression "(byte)mpn_fft_table3[sqr][0].field_0x3 >> 3" (cast_expression "(byte)mpn_fft_table3[sqr][0].field_0x3" ( (type_descriptor "byte" type_identifier) ) (field_expression "mpn_fft_table3[sqr][0].field_0x3" (subscript_expression "mpn_fft_table3[sqr][0]" (subscript_expression "mpn_fft_table3[sqr]" identifier [ identifier ]) [ number_literal ]) . field_identifier)) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff) << bVar2" (call_expression "(ulong)((uint)mpn_fft_table3[sqr][1] & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)mpn_fft_table3[sqr][1] & 0x7ffffff)" ( (binary_expression "(uint)mpn_fft_table3[sqr][1] & 0x7ffffff" (cast_expression "(uint)mpn_fft_table3[sqr][1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "mpn_fft_table3[sqr][1]" (subscript_expression "mpn_fft_table3[sqr]" identifier [ identifier ]) [ number_literal ])) & number_literal) ))) << identifier)) ;) (while_statement "while (lVar3 < n) {\n    puVar1 = &pfVar4->field_0x3;\n    pfVar4 = pfVar4 + 1;\n    bVar2 = (byte)*puVar1 >> 3;\n    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;\n  }" while (parenthesized_expression "(lVar3 < n)" ( (binary_expression "lVar3 < n" identifier < identifier) )) (compound_statement "{\n    puVar1 = &pfVar4->field_0x3;\n    pfVar4 = pfVar4 + 1;\n    bVar2 = (byte)*puVar1 >> 3;\n    lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;\n  }" { (expression_statement "puVar1 = &pfVar4->field_0x3;" (assignment_expression "puVar1 = &pfVar4->field_0x3" identifier = (pointer_expression "&pfVar4->field_0x3" & (field_expression "pfVar4->field_0x3" identifier -> field_identifier))) ;) (expression_statement "pfVar4 = pfVar4 + 1;" (assignment_expression "pfVar4 = pfVar4 + 1" identifier = (binary_expression "pfVar4 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = (byte)*puVar1 >> 3;" (assignment_expression "bVar2 = (byte)*puVar1 >> 3" identifier = (binary_expression "(byte)*puVar1 >> 3" (binary_expression "(byte)*puVar1" (parenthesized_expression "(byte)" ( identifier )) * identifier) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)((uint)*pfVar4 & 0x7ffffff) << bVar2" (call_expression "(ulong)((uint)*pfVar4 & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)*pfVar4 & 0x7ffffff)" ( (binary_expression "(uint)*pfVar4 & 0x7ffffff" (binary_expression "(uint)*pfVar4" (parenthesized_expression "(uint)" ( identifier )) * identifier) & number_literal) ))) << identifier)) ;) })) (return_statement "return (uint)bVar2;" return (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) ;) })))
(translation_unit "byte __gmpn_fft_best_k(long param_1,int param_2)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}\n\n" (function_definition "byte __gmpn_fft_best_k(long param_1,int param_2)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" type_identifier (function_declarator "__gmpn_fft_best_k(long param_1,int param_2)" identifier (parameter_list "(long param_1,int param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (expression_statement "lVar3 = (long)param_2 * 0x358;" (assignment_expression "lVar3 = (long)param_2 * 0x358" identifier = (binary_expression "(long)param_2 * 0x358" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (expression_statement "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);" (assignment_expression "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3)" identifier = (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" ( (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" & identifier) + identifier) )))) ;) (expression_statement "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;" (assignment_expression "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3" identifier = (binary_expression "(byte)(&DAT_0016c7a3)[lVar3] >> 3" (subscript_expression "(byte)(&DAT_0016c7a3)[lVar3]" (call_expression "(byte)(&DAT_0016c7a3)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_0016c7a3)" ( (pointer_expression "&DAT_0016c7a3" & identifier) ))) [ identifier ]) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" (call_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" ( (binary_expression "*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff" (pointer_expression "*(uint *)(&DAT_0016c7a4 + lVar3)" * (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" ( (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" & identifier) + identifier) )))) & number_literal) ))) << identifier)) ;) (while_statement "while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" while (parenthesized_expression "(lVar3 < param_1)" ( (binary_expression "lVar3 < param_1" identifier < identifier) )) (compound_statement "{\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" { (expression_statement "pbVar1 = (byte *)((long)puVar4 + 3);" (assignment_expression "pbVar1 = (byte *)((long)puVar4 + 3)" identifier = (cast_expression "(byte *)((long)puVar4 + 3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 3)" ( (binary_expression "(long)puVar4 + 3" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = *pbVar1 >> 3;" (assignment_expression "bVar2 = *pbVar1 >> 3" identifier = (binary_expression "*pbVar1 >> 3" (pointer_expression "*pbVar1" * identifier) >> number_literal)) ;) (expression_statement "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2" identifier = (binary_expression "(ulong)(*puVar4 & 0x7ffffff) << bVar2" (call_expression "(ulong)(*puVar4 & 0x7ffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*puVar4 & 0x7ffffff)" ( (binary_expression "*puVar4 & 0x7ffffff" (pointer_expression "*puVar4" * identifier) & number_literal) ))) << identifier)) ;) })) (return_statement "return bVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (pointer_expression & IDENT) ))) [ IDENT ]) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) )))) & LIT) ))) << IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) & LIT) ))) << IDENT)) ;) })) (return_statement return IDENT ;) })))
(function_definition "byte __gmpn_fft_best_k(long param_1,int param_2)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" (type_identifier "byte") (function_declarator "__gmpn_fft_best_k(long param_1,int param_2)" (identifier "__gmpn_fft_best_k") (parameter_list "(long param_1,int param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  uint *puVar4;\n  \n  lVar3 = (long)param_2 * 0x358;\n  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);\n  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;\n  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;\n  while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }\n  return bVar2;\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (expression_statement "lVar3 = (long)param_2 * 0x358;" (assignment_expression "lVar3 = (long)param_2 * 0x358" (identifier "lVar3") (= "=") (binary_expression "(long)param_2 * 0x358" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (* "*") (number_literal "0x358"))) (; ";")) (expression_statement "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);" (assignment_expression "puVar4 = (uint *)(&DAT_0016c7a4 + lVar3)" (identifier "puVar4") (= "=") (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" (( "(") (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" (& "&") (identifier "DAT_0016c7a4")) (+ "+") (identifier "lVar3")) () ")")))) (; ";")) (expression_statement "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;" (assignment_expression "bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3" (identifier "bVar2") (= "=") (binary_expression "(byte)(&DAT_0016c7a3)[lVar3] >> 3" (subscript_expression "(byte)(&DAT_0016c7a3)[lVar3]" (call_expression "(byte)(&DAT_0016c7a3)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(&DAT_0016c7a3)" (( "(") (pointer_expression "&DAT_0016c7a3" (& "&") (identifier "DAT_0016c7a3")) () ")"))) ([ "[") (identifier "lVar3") (] "]")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" (identifier "lVar3") (= "=") (binary_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2" (call_expression "(ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff)" (( "(") (binary_expression "*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff" (pointer_expression "*(uint *)(&DAT_0016c7a4 + lVar3)" (* "*") (cast_expression "(uint *)(&DAT_0016c7a4 + lVar3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_0016c7a4 + lVar3)" (( "(") (binary_expression "&DAT_0016c7a4 + lVar3" (pointer_expression "&DAT_0016c7a4" (& "&") (identifier "DAT_0016c7a4")) (+ "+") (identifier "lVar3")) () ")")))) (& "&") (number_literal "0x7ffffff")) () ")"))) (<< "<<") (identifier "bVar2"))) (; ";")) (while_statement "while (lVar3 < param_1) {\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" (while "while") (parenthesized_expression "(lVar3 < param_1)" (( "(") (binary_expression "lVar3 < param_1" (identifier "lVar3") (< "<") (identifier "param_1")) () ")")) (compound_statement "{\n    pbVar1 = (byte *)((long)puVar4 + 3);\n    puVar4 = puVar4 + 1;\n    bVar2 = *pbVar1 >> 3;\n    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;\n  }" ({ "{") (expression_statement "pbVar1 = (byte *)((long)puVar4 + 3);" (assignment_expression "pbVar1 = (byte *)((long)puVar4 + 3)" (identifier "pbVar1") (= "=") (cast_expression "(byte *)((long)puVar4 + 3)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 3)" (( "(") (binary_expression "(long)puVar4 + 3" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "3")) () ")")))) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar2 = *pbVar1 >> 3;" (assignment_expression "bVar2 = *pbVar1 >> 3" (identifier "bVar2") (= "=") (binary_expression "*pbVar1 >> 3" (pointer_expression "*pbVar1" (* "*") (identifier "pbVar1")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;" (assignment_expression "lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2" (identifier "lVar3") (= "=") (binary_expression "(ulong)(*puVar4 & 0x7ffffff) << bVar2" (call_expression "(ulong)(*puVar4 & 0x7ffffff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(*puVar4 & 0x7ffffff)" (( "(") (binary_expression "*puVar4 & 0x7ffffff" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (& "&") (number_literal "0x7ffffff")) () ")"))) (<< "<<") (identifier "bVar2"))) (; ";")) (} "}"))) (return_statement "return bVar2;" (return "return") (identifier "bVar2") (; ";")) (} "}")))

int function_1(type_1 var_3,int sqr)

{
  type_2 *var_5;
  type_3 var_1;
  long var_2;
  type_4 *var_4;
  
  var_4 = mpn_fft_table3[sqr] + 1;
  var_1 = (type_3)mpn_fft_table3[sqr][0].field_0x3 >> 3;
  var_2 = (ulong)((type_5)mpn_fft_table3[sqr][1] & 0x7ffffff) << var_1;
  while (var_2 < var_3) {
    var_5 = &var_4->field_0x3;
    var_4 = var_4 + 1;
    var_1 = (type_3)*var_5 >> 3;
    var_2 = (ulong)((type_5)*var_4 & 0x7ffffff) << var_1;
  }
  return (type_5)var_1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (pointer_expression argument: (identifier)))) index: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) right: (number_literal)))) right: (identifier)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) right: (identifier)))))) (return_statement (identifier)))))

byte MASKED(long param_1,int param_2)

{
  byte *pbVar1;
  byte bVar2;
  long lVar3;
  uint *puVar4;
  
  lVar3 = (long)param_2 * 0x358;
  puVar4 = (uint *)(&DAT_0016c7a4 + lVar3);
  bVar2 = (byte)(&DAT_0016c7a3)[lVar3] >> 3;
  lVar3 = (ulong)(*(uint *)(&DAT_0016c7a4 + lVar3) & 0x7ffffff) << bVar2;
  while (lVar3 < param_1) {
    pbVar1 = (byte *)((long)puVar4 + 3);
    puVar4 = puVar4 + 1;
    bVar2 = *pbVar1 >> 3;
    lVar3 = (ulong)(*puVar4 & 0x7ffffff) << bVar2;
  }
  return bVar2;
}

