
/* WARNING: Unknown calling convention */

bfd_boolean obj_elf_seen_attribute(int vendor,uint tag)

{
  recorded_attribute_info *prVar1;
  
  prVar1 = recorded_attributes;
  if (recorded_attributes == (recorded_attribute_info *)0x0) {
    return 0;
  }
  while ((prVar1->vendor != vendor || (prVar1->base != tag >> 6))) {
    prVar1 = prVar1->next;
    if (prVar1 == (recorded_attribute_info *)0x0) {
      return 0;
    }
  }
  return (bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0);
}



ulong FUN_001391b0(int param_1,uint param_2)

{
  long *plVar1;
  
  plVar1 = DAT_00163638;
  if (DAT_00163638 == (long *)0x0) {
    return 0;
  }
  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {
    plVar1 = (long *)*plVar1;
    if (plVar1 == (long *)0x0) {
      return (ulong)plVar1;
    }
  }
  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);
}


MOV RAX,qword ptr [0x00163638]
MOV EDX,ESI
SHR EDX,0x6
TEST RAX,RAX
JNZ 0x001391d0
JMP 0x001391f1
MOV RAX,qword ptr [RAX]
TEST RAX,RAX
JZ 0x001391f0
CMP dword ptr [RAX + 0x8],EDI
JNZ 0x001391c8
CMP dword ptr [RAX + 0xc],EDX
JNZ 0x001391c8
MOV ECX,ESI
MOV EDX,0x1
SHL RDX,CL
TEST qword ptr [RAX + 0x10],RDX
SETNZ AL
MOVZX EAX,AL
RET
RET
XOR EAX,EAX
RET
(translation_unit "ulong FUN_001391b0(int param_1,uint param_2)\n\n{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}\n\n" (function_definition "ulong FUN_001391b0(int param_1,uint param_2)\n\n{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" type_identifier (function_declarator "FUN_001391b0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (expression_statement "plVar1 = DAT_00163638;" (assignment_expression "plVar1 = DAT_00163638" identifier = identifier) ;) (if_statement "if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(DAT_00163638 == (long *)0x0)" ( (binary_expression "DAT_00163638 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (while_statement "while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" while (parenthesized_expression "(((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)))" ( (parenthesized_expression "((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))" ( (binary_expression "(int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" (binary_expression "(int)plVar1[1] != param_1" (cast_expression "(int)plVar1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar1[1]" identifier [ number_literal ])) != identifier) || (parenthesized_expression "(*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" ( (binary_expression "*(uint *)((long)plVar1 + 0xc) != param_2 >> 6" (pointer_expression "*(uint *)((long)plVar1 + 0xc)" * (cast_expression "(uint *)((long)plVar1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar1 + 0xc)" ( (binary_expression "(long)plVar1 + 0xc" (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != (binary_expression "param_2 >> 6" identifier >> number_literal)) ))) )) )) (compound_statement "{\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" { (expression_statement "plVar1 = (long *)*plVar1;" (assignment_expression "plVar1 = (long *)*plVar1" identifier = (cast_expression "(long *)*plVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar1" * identifier))) ;) (if_statement "if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (ulong)plVar1;\n    }" { (return_statement "return (ulong)plVar1;" return (cast_expression "(ulong)plVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) ;) })) })) (return_statement "return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);" return (call_expression "(ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" ( (binary_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0" (parenthesized_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f))" ( (binary_expression "plVar1[2] & 1L << ((byte)param_2 & 0x3f)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) & (binary_expression "1L << ((byte)param_2 & 0x3f)" number_literal << (parenthesized_expression "((byte)param_2 & 0x3f)" ( (binary_expression "(byte)param_2 & 0x3f" (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) ))) ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nbfd_boolean obj_elf_seen_attribute(int vendor,uint tag)\n\n{\n  recorded_attribute_info *prVar1;\n  \n  prVar1 = recorded_attributes;\n  if (recorded_attributes == (recorded_attribute_info *)0x0) {\n    return 0;\n  }\n  while ((prVar1->vendor != vendor || (prVar1->base != tag >> 6))) {\n    prVar1 = prVar1->next;\n    if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }\n  }\n  return (bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0);\n}\n\n" comment (function_definition "bfd_boolean obj_elf_seen_attribute(int vendor,uint tag)\n\n{\n  recorded_attribute_info *prVar1;\n  \n  prVar1 = recorded_attributes;\n  if (recorded_attributes == (recorded_attribute_info *)0x0) {\n    return 0;\n  }\n  while ((prVar1->vendor != vendor || (prVar1->base != tag >> 6))) {\n    prVar1 = prVar1->next;\n    if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }\n  }\n  return (bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0);\n}" type_identifier (function_declarator "obj_elf_seen_attribute(int vendor,uint tag)" identifier (parameter_list "(int vendor,uint tag)" ( (parameter_declaration "int vendor" primitive_type identifier) , (parameter_declaration "uint tag" type_identifier identifier) ))) (compound_statement "{\n  recorded_attribute_info *prVar1;\n  \n  prVar1 = recorded_attributes;\n  if (recorded_attributes == (recorded_attribute_info *)0x0) {\n    return 0;\n  }\n  while ((prVar1->vendor != vendor || (prVar1->base != tag >> 6))) {\n    prVar1 = prVar1->next;\n    if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }\n  }\n  return (bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0);\n}" { (declaration "recorded_attribute_info *prVar1;" type_identifier (pointer_declarator "*prVar1" * identifier) ;) (expression_statement "prVar1 = recorded_attributes;" (assignment_expression "prVar1 = recorded_attributes" identifier = identifier) ;) (if_statement "if (recorded_attributes == (recorded_attribute_info *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(recorded_attributes == (recorded_attribute_info *)0x0)" ( (binary_expression "recorded_attributes == (recorded_attribute_info *)0x0" identifier == (cast_expression "(recorded_attribute_info *)0x0" ( (type_descriptor "recorded_attribute_info *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (while_statement "while ((prVar1->vendor != vendor || (prVar1->base != tag >> 6))) {\n    prVar1 = prVar1->next;\n    if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }\n  }" while (parenthesized_expression "((prVar1->vendor != vendor || (prVar1->base != tag >> 6)))" ( (parenthesized_expression "(prVar1->vendor != vendor || (prVar1->base != tag >> 6))" ( (binary_expression "prVar1->vendor != vendor || (prVar1->base != tag >> 6)" (binary_expression "prVar1->vendor != vendor" (field_expression "prVar1->vendor" identifier -> field_identifier) != identifier) || (parenthesized_expression "(prVar1->base != tag >> 6)" ( (binary_expression "prVar1->base != tag >> 6" (field_expression "prVar1->base" identifier -> field_identifier) != (binary_expression "tag >> 6" identifier >> number_literal)) ))) )) )) (compound_statement "{\n    prVar1 = prVar1->next;\n    if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }\n  }" { (expression_statement "prVar1 = prVar1->next;" (assignment_expression "prVar1 = prVar1->next" identifier = (field_expression "prVar1->next" identifier -> field_identifier)) ;) (if_statement "if (prVar1 == (recorded_attribute_info *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(prVar1 == (recorded_attribute_info *)0x0)" ( (binary_expression "prVar1 == (recorded_attribute_info *)0x0" identifier == (cast_expression "(recorded_attribute_info *)0x0" ( (type_descriptor "recorded_attribute_info *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) })) (return_statement "return (bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0);" return (call_expression "(bfd_boolean)((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0)" (parenthesized_expression "(bfd_boolean)" ( identifier )) (argument_list "((prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0)" ( (binary_expression "(prVar1->mask & 1L << ((byte)tag & 0x3f)) != 0" (parenthesized_expression "(prVar1->mask & 1L << ((byte)tag & 0x3f))" ( (binary_expression "prVar1->mask & 1L << ((byte)tag & 0x3f)" (field_expression "prVar1->mask" identifier -> field_identifier) & (binary_expression "1L << ((byte)tag & 0x3f)" number_literal << (parenthesized_expression "((byte)tag & 0x3f)" ( (binary_expression "(byte)tag & 0x3f" (cast_expression "(byte)tag" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) ))) ;) })))
(translation_unit "ulong FUN_001391b0(int param_1,uint param_2)\n\n{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}\n\n" (function_definition "ulong FUN_001391b0(int param_1,uint param_2)\n\n{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" type_identifier (function_declarator "FUN_001391b0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (expression_statement "plVar1 = DAT_00163638;" (assignment_expression "plVar1 = DAT_00163638" identifier = identifier) ;) (if_statement "if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(DAT_00163638 == (long *)0x0)" ( (binary_expression "DAT_00163638 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (while_statement "while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" while (parenthesized_expression "(((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)))" ( (parenthesized_expression "((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))" ( (binary_expression "(int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" (binary_expression "(int)plVar1[1] != param_1" (cast_expression "(int)plVar1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar1[1]" identifier [ number_literal ])) != identifier) || (parenthesized_expression "(*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" ( (binary_expression "*(uint *)((long)plVar1 + 0xc) != param_2 >> 6" (pointer_expression "*(uint *)((long)plVar1 + 0xc)" * (cast_expression "(uint *)((long)plVar1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar1 + 0xc)" ( (binary_expression "(long)plVar1 + 0xc" (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != (binary_expression "param_2 >> 6" identifier >> number_literal)) ))) )) )) (compound_statement "{\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" { (expression_statement "plVar1 = (long *)*plVar1;" (assignment_expression "plVar1 = (long *)*plVar1" identifier = (cast_expression "(long *)*plVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar1" * identifier))) ;) (if_statement "if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (ulong)plVar1;\n    }" { (return_statement "return (ulong)plVar1;" return (cast_expression "(ulong)plVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) ;) })) })) (return_statement "return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);" return (call_expression "(ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" ( (binary_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0" (parenthesized_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f))" ( (binary_expression "plVar1[2] & 1L << ((byte)param_2 & 0x3f)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) & (binary_expression "1L << ((byte)param_2 & 0x3f)" number_literal << (parenthesized_expression "((byte)param_2 & 0x3f)" ( (binary_expression "(byte)param_2 & 0x3f" (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) != IDENT) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) != (binary_expression IDENT >> LIT)) ))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE) ) IDENT) ;) })) })) (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) )) != LIT) ))) ;) })))
(function_definition "ulong FUN_001391b0(int param_1,uint param_2)\n\n{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" (type_identifier "ulong") (function_declarator "FUN_001391b0(int param_1,uint param_2)" (identifier "FUN_001391b0") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  long *plVar1;\n  \n  plVar1 = DAT_00163638;\n  if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }\n  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }\n  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (expression_statement "plVar1 = DAT_00163638;" (assignment_expression "plVar1 = DAT_00163638" (identifier "plVar1") (= "=") (identifier "DAT_00163638")) (; ";")) (if_statement "if (DAT_00163638 == (long *)0x0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(DAT_00163638 == (long *)0x0)" (( "(") (binary_expression "DAT_00163638 == (long *)0x0" (identifier "DAT_00163638") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (while_statement "while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" (while "while") (parenthesized_expression "(((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)))" (( "(") (parenthesized_expression "((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))" (( "(") (binary_expression "(int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" (binary_expression "(int)plVar1[1] != param_1" (cast_expression "(int)plVar1[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar1[1]" (identifier "plVar1") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "param_1")) (|| "||") (parenthesized_expression "(*(uint *)((long)plVar1 + 0xc) != param_2 >> 6)" (( "(") (binary_expression "*(uint *)((long)plVar1 + 0xc) != param_2 >> 6" (pointer_expression "*(uint *)((long)plVar1 + 0xc)" (* "*") (cast_expression "(uint *)((long)plVar1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar1 + 0xc)" (( "(") (binary_expression "(long)plVar1 + 0xc" (cast_expression "(long)plVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar1")) (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (binary_expression "param_2 >> 6" (identifier "param_2") (>> ">>") (number_literal "6"))) () ")"))) () ")")) () ")")) (compound_statement "{\n    plVar1 = (long *)*plVar1;\n    if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }\n  }" ({ "{") (expression_statement "plVar1 = (long *)*plVar1;" (assignment_expression "plVar1 = (long *)*plVar1" (identifier "plVar1") (= "=") (cast_expression "(long *)*plVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar1" (* "*") (identifier "plVar1")))) (; ";")) (if_statement "if (plVar1 == (long *)0x0) {\n      return (ulong)plVar1;\n    }" (if "if") (parenthesized_expression "(plVar1 == (long *)0x0)" (( "(") (binary_expression "plVar1 == (long *)0x0" (identifier "plVar1") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return (ulong)plVar1;\n    }" ({ "{") (return_statement "return (ulong)plVar1;" (return "return") (cast_expression "(ulong)plVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "plVar1")) (; ";")) (} "}"))) (} "}"))) (return_statement "return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);" (return "return") (call_expression "(ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0)" (( "(") (binary_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0" (parenthesized_expression "(plVar1[2] & 1L << ((byte)param_2 & 0x3f))" (( "(") (binary_expression "plVar1[2] & 1L << ((byte)param_2 & 0x3f)" (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")) (& "&") (binary_expression "1L << ((byte)param_2 & 0x3f)" (number_literal "1L") (<< "<<") (parenthesized_expression "((byte)param_2 & 0x3f)" (( "(") (binary_expression "(byte)param_2 & 0x3f" (cast_expression "(byte)param_2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "param_2")) (& "&") (number_literal "0x3f")) () ")")))) () ")")) (!= "!=") (number_literal "0")) () ")"))) (; ";")) (} "}")))

/* WARNING: Unknown calling convention */

type_1 function_1(int var_2,type_2 var_3)

{
  type_3 *var_4;
  
  var_4 = var_1;
  if (var_1 == (type_3 *)0x0) {
    return 0;
  }
  while ((var_4->var_2 != var_2 || (var_4->base != var_3 >> 6))) {
    var_4 = var_4->next;
    if (var_4 == (type_3 *)0x0) {
      return 0;
    }
  }
  return (type_1)((var_4->mask & 1L << ((type_4)var_3 & 0x3f)) != 0);
}


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

ulong MASKED(int param_1,uint param_2)

{
  long *plVar1;
  
  plVar1 = DAT_00163638;
  if (DAT_00163638 == (long *)0x0) {
    return 0;
  }
  while (((int)plVar1[1] != param_1 || (*(uint *)((long)plVar1 + 0xc) != param_2 >> 6))) {
    plVar1 = (long *)*plVar1;
    if (plVar1 == (long *)0x0) {
      return (ulong)plVar1;
    }
  }
  return (ulong)((plVar1[2] & 1L << ((byte)param_2 & 0x3f)) != 0);
}

