
/* char32_t std::(anonymous namespace)::read_utf16_code_point<false>(std::(anonymous
   namespace)::range<char16_t const, false>&, unsigned long, std::codecvt_mode) */

wchar32 __regparm3
std::(anonymous_namespace)::read_utf16_code_point<false>(int *param_1,wchar32 param_2,uint param_3)

{
  ushort *puVar1;
  int iVar2;
  ushort uVar3;
  wchar32 wVar4;
  
  puVar1 = (ushort *)*param_1;
  if ((uint)(param_1[1] - (int)puVar1) < 2) {
    return L'\xfffffffe';
  }
  uVar3 = *puVar1;
  if ((param_3 & 1) == 0) {
    uVar3 = uVar3 << 8 | uVar3 >> 8;
  }
  wVar4 = (wchar32)uVar3;
  if ((uint)(wVar4 + L'\xffff2800') < 0x400) {
    if ((uint)(param_1[1] - (int)puVar1) < 4) {
      return L'\xfffffffe';
    }
    uVar3 = puVar1[1];
    if ((param_3 & 1) == 0) {
      uVar3 = uVar3 << 8 | uVar3 >> 8;
    }
    if (0x3ff < uVar3 - 0xdc00) {
      return L'\xffffffff';
    }
    iVar2 = 2;
    wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;
  }
  else {
    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {
      return L'\xffffffff';
    }
    iVar2 = 1;
  }
  if ((uint)wVar4 <= (uint)param_2) {
    *param_1 = (int)(puVar1 + iVar2);
  }
  return wVar4;
}



uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)

{
  ushort *puVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  
  puVar1 = (ushort *)*param_1;
  if ((uint)(param_1[1] - (int)puVar1) < 2) {
    return 0xfffffffe;
  }
  uVar3 = *puVar1;
  if ((param_3 & 1) == 0) {
    uVar3 = uVar3 << 8 | uVar3 >> 8;
  }
  uVar4 = (uint)uVar3;
  if (uVar4 - 0xd800 < 0x400) {
    if ((uint)(param_1[1] - (int)puVar1) < 4) {
      return 0xfffffffe;
    }
    uVar3 = puVar1[1];
    if ((param_3 & 1) == 0) {
      uVar3 = uVar3 << 8 | uVar3 >> 8;
    }
    if (0x3ff < uVar3 - 0xdc00) {
      return 0xffffffff;
    }
    iVar2 = 2;
    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;
  }
  else {
    if (uVar4 - 0xdc00 < 0x400) {
      return 0xffffffff;
    }
    iVar2 = 1;
  }
  if (uVar4 <= param_2) {
    *param_1 = (int)(puVar1 + iVar2);
  }
  return uVar4;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDI,dword ptr [EAX]
MOV ESI,dword ptr [EAX + 0x4]
SUB ESI,EDI
CMP ESI,0x1
JBE 0x0026dfd0
MOVZX EBX,word ptr [EDI]
MOV EBP,EBX
ROL BP,0x8
AND ECX,0x1
CMOVZ EBX,EBP
MOVZX EBX,BX
LEA EBP,[EBX + 0xffff2800]
CMP EBP,0x3ff
JBE 0x0026df90
LEA ECX,[EBX + 0xffff2400]
CMP ECX,0x3ff
JBE 0x0026dfe0
MOV ECX,0x1
CMP EBX,EDX
JA 0x0026df80
LEA EDX,[EDI + ECX*0x2]
MOV dword ptr [EAX],EDX
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP ESI,0x3
JBE 0x0026dfd0
MOVZX ESI,word ptr [EDI + 0x2]
MOV EBP,ESI
ROL BP,0x8
TEST ECX,ECX
CMOVZ ESI,EBP
MOVZX ESI,SI
LEA ECX,[ESI + 0xffff2400]
CMP ECX,0x3ff
JA 0x0026dfe0
SHL EBX,0xa
MOV ECX,0x2
LEA EBX,[ESI + EBX*0x1 + 0xfca02400]
JMP 0x0026df77
MOV EBX,0xfffffffe
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,0xffffffff
MOV EAX,EBX
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}\n\n" (function_definition "uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0026df30(int *param_1,uint param_2,uint param_3)" identifier (parameter_list "(int *param_1,uint param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "puVar1 = (ushort *)*param_1;" (assignment_expression "puVar1 = (ushort *)*param_1" identifier = (cast_expression "(ushort *)*param_1" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 2)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 2" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n    return 0xfffffffe;\n  }" { (return_statement "return 0xfffffffe;" return number_literal ;) })) (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "uVar4 = (uint)uVar3;" (assignment_expression "uVar4 = (uint)uVar3" identifier = (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" if (parenthesized_expression "(uVar4 - 0xd800 < 0x400)" ( (binary_expression "uVar4 - 0xd800 < 0x400" (binary_expression "uVar4 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }" { (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 4)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 4" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n      return 0xfffffffe;\n    }" { (return_statement "return 0xfffffffe;" return number_literal ;) })) (expression_statement "uVar3 = puVar1[1];" (assignment_expression "uVar3 = puVar1[1]" identifier = (subscript_expression "puVar1[1]" identifier [ number_literal ])) ;) (if_statement "if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (if_statement "if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(0x3ff < uVar3 - 0xdc00)" ( (binary_expression "0x3ff < uVar3 - 0xdc00" number_literal < (binary_expression "uVar3 - 0xdc00" identifier - number_literal)) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar2 = 2;" (assignment_expression "iVar2 = 2" identifier = number_literal) ;) (expression_statement "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;" (assignment_expression "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400" identifier = (binary_expression "uVar3 + 0xfca02400 + uVar4 * 0x400" (binary_expression "uVar3 + 0xfca02400" identifier + number_literal) + (binary_expression "uVar4 * 0x400" identifier * number_literal))) ;) }) (else_clause "else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" else (compound_statement "{\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" { (if_statement "if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(uVar4 - 0xdc00 < 0x400)" ( (binary_expression "uVar4 - 0xdc00 < 0x400" (binary_expression "uVar4 - 0xdc00" identifier - number_literal) < number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }))) (if_statement "if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }" if (parenthesized_expression "(uVar4 <= param_2)" ( (binary_expression "uVar4 <= param_2" identifier <= identifier) )) (compound_statement "{\n    *param_1 = (int)(puVar1 + iVar2);\n  }" { (expression_statement "*param_1 = (int)(puVar1 + iVar2);" (assignment_expression "*param_1 = (int)(puVar1 + iVar2)" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)(puVar1 + iVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + iVar2)" ( (binary_expression "puVar1 + iVar2" identifier + identifier) )))) ;) })) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "/* char32_t std::(anonymous namespace)::read_utf16_code_point<false>(std::(anonymous\n   namespace)::range<char16_t const, false>&, unsigned long, std::codecvt_mode) */\n\nwchar32 __regparm3\nstd::(anonymous_namespace)::read_utf16_code_point<false>(int *param_1,wchar32 param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  wchar32 wVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return L'\xfffffffe';\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  wVar4 = (wchar32)uVar3;\n  if ((uint)(wVar4 + L'\xffff2800') < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return L'\xfffffffe';\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return L'\xffffffff';\n    }\n    iVar2 = 2;\n    wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;\n  }\n  else {\n    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }\n    iVar2 = 1;\n  }\n  if ((uint)wVar4 <= (uint)param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return wVar4;\n}\n\n" comment (declaration "wchar32 __regparm3" type_identifier identifier ;) (labeled_statement "std::(anonymous_namespace)::read_utf16_code_point<false>(int *param_1,wchar32 param_2,uint param_3)" statement_identifier (ERROR "::(anonymous_namespace):" : : (parenthesized_expression "(anonymous_namespace)" ( identifier )) :) : (expression_statement "read_utf16_code_point<false>(int *param_1,wchar32 param_2,uint param_3)" (binary_expression "read_utf16_code_point<false>(int *param_1,wchar32 param_2,uint param_3)" (binary_expression "read_utf16_code_point<false" identifier < false) > (parenthesized_expression "(int *param_1,wchar32 param_2,uint param_3)" ( (ERROR "int *" (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *))) (comma_expression "param_1,wchar32 param_2,uint param_3" identifier , (ERROR "wchar32" identifier) (comma_expression "param_2,uint param_3" identifier , (ERROR "uint" identifier) identifier)) ))) ;)) (compound_statement "{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  wchar32 wVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return L'\xfffffffe';\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  wVar4 = (wchar32)uVar3;\n  if ((uint)(wVar4 + L'\xffff2800') < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return L'\xfffffffe';\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return L'\xffffffff';\n    }\n    iVar2 = 2;\n    wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;\n  }\n  else {\n    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }\n    iVar2 = 1;\n  }\n  if ((uint)wVar4 <= (uint)param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return wVar4;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "wchar32 wVar4;" type_identifier identifier ;) (expression_statement "puVar1 = (ushort *)*param_1;" (assignment_expression "puVar1 = (ushort *)*param_1" identifier = (cast_expression "(ushort *)*param_1" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return L'\xfffffffe';\n  }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 2)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 2" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n    return L'\xfffffffe';\n  }" { (return_statement "return L'\xfffffffe';" return (char_literal "L'\xfffffffe'" L' escape_sequence character character character character ') ;) })) (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "wVar4 = (wchar32)uVar3;" (assignment_expression "wVar4 = (wchar32)uVar3" identifier = (cast_expression "(wchar32)uVar3" ( (type_descriptor "wchar32" type_identifier) ) identifier)) ;) (if_statement "if ((uint)(wVar4 + L'\xffff2800') < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return L'\xfffffffe';\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return L'\xffffffff';\n    }\n    iVar2 = 2;\n    wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;\n  }\n  else {\n    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }\n    iVar2 = 1;\n  }" if (parenthesized_expression "((uint)(wVar4 + L'\xffff2800') < 0x400)" ( (binary_expression "(uint)(wVar4 + L'\xffff2800') < 0x400" (call_expression "(uint)(wVar4 + L'\xffff2800')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(wVar4 + L'\xffff2800')" ( (binary_expression "wVar4 + L'\xffff2800'" identifier + (char_literal "L'\xffff2800'" L' escape_sequence character character character character ')) ))) < number_literal) )) (compound_statement "{\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return L'\xfffffffe';\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return L'\xffffffff';\n    }\n    iVar2 = 2;\n    wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;\n  }" { (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return L'\xfffffffe';\n    }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 4)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 4" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n      return L'\xfffffffe';\n    }" { (return_statement "return L'\xfffffffe';" return (char_literal "L'\xfffffffe'" L' escape_sequence character character character character ') ;) })) (expression_statement "uVar3 = puVar1[1];" (assignment_expression "uVar3 = puVar1[1]" identifier = (subscript_expression "puVar1[1]" identifier [ number_literal ])) ;) (if_statement "if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (if_statement "if (0x3ff < uVar3 - 0xdc00) {\n      return L'\xffffffff';\n    }" if (parenthesized_expression "(0x3ff < uVar3 - 0xdc00)" ( (binary_expression "0x3ff < uVar3 - 0xdc00" number_literal < (binary_expression "uVar3 - 0xdc00" identifier - number_literal)) )) (compound_statement "{\n      return L'\xffffffff';\n    }" { (return_statement "return L'\xffffffff';" return (char_literal "L'\xffffffff'" L' escape_sequence character character character character ') ;) })) (expression_statement "iVar2 = 2;" (assignment_expression "iVar2 = 2" identifier = number_literal) ;) (expression_statement "wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400;" (assignment_expression "wVar4 = uVar3 + 0xfca02400 + wVar4 * 0x400" identifier = (binary_expression "uVar3 + 0xfca02400 + wVar4 * 0x400" (binary_expression "uVar3 + 0xfca02400" identifier + number_literal) + (binary_expression "wVar4 * 0x400" identifier * number_literal))) ;) }) (else_clause "else {\n    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }\n    iVar2 = 1;\n  }" else (compound_statement "{\n    if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }\n    iVar2 = 1;\n  }" { (if_statement "if ((uint)(wVar4 + L'\xffff2400') < 0x400) {\n      return L'\xffffffff';\n    }" if (parenthesized_expression "((uint)(wVar4 + L'\xffff2400') < 0x400)" ( (binary_expression "(uint)(wVar4 + L'\xffff2400') < 0x400" (call_expression "(uint)(wVar4 + L'\xffff2400')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(wVar4 + L'\xffff2400')" ( (binary_expression "wVar4 + L'\xffff2400'" identifier + (char_literal "L'\xffff2400'" L' escape_sequence character character character character ')) ))) < number_literal) )) (compound_statement "{\n      return L'\xffffffff';\n    }" { (return_statement "return L'\xffffffff';" return (char_literal "L'\xffffffff'" L' escape_sequence character character character character ') ;) })) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }))) (if_statement "if ((uint)wVar4 <= (uint)param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }" if (parenthesized_expression "((uint)wVar4 <= (uint)param_2)" ( (binary_expression "(uint)wVar4 <= (uint)param_2" (cast_expression "(uint)wVar4" ( (type_descriptor "uint" type_identifier) ) identifier) <= (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n    *param_1 = (int)(puVar1 + iVar2);\n  }" { (expression_statement "*param_1 = (int)(puVar1 + iVar2);" (assignment_expression "*param_1 = (int)(puVar1 + iVar2)" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)(puVar1 + iVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + iVar2)" ( (binary_expression "puVar1 + iVar2" identifier + identifier) )))) ;) })) (return_statement "return wVar4;" return identifier ;) }))
(translation_unit "uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}\n\n" (function_definition "uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_0026df30(int *param_1,uint param_2,uint param_3)" identifier (parameter_list "(int *param_1,uint param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" { (declaration "ushort *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "puVar1 = (ushort *)*param_1;" (assignment_expression "puVar1 = (ushort *)*param_1" identifier = (cast_expression "(ushort *)*param_1" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 2)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 2" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n    return 0xfffffffe;\n  }" { (return_statement "return 0xfffffffe;" return number_literal ;) })) (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) (if_statement "if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (expression_statement "uVar4 = (uint)uVar3;" (assignment_expression "uVar4 = (uint)uVar3" identifier = (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" if (parenthesized_expression "(uVar4 - 0xd800 < 0x400)" ( (binary_expression "uVar4 - 0xd800 < 0x400" (binary_expression "uVar4 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }" { (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }" if (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 4)" ( (binary_expression "(uint)(param_1[1] - (int)puVar1) < 4" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] - (int)puVar1)" ( (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n      return 0xfffffffe;\n    }" { (return_statement "return 0xfffffffe;" return number_literal ;) })) (expression_statement "uVar3 = puVar1[1];" (assignment_expression "uVar3 = puVar1[1]" identifier = (subscript_expression "puVar1[1]" identifier [ number_literal ])) ;) (if_statement "if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" if (parenthesized_expression "((param_3 & 1) == 0)" ( (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" { (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" identifier = (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" identifier << number_literal) | (binary_expression "uVar3 >> 8" identifier >> number_literal))) ;) })) (if_statement "if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(0x3ff < uVar3 - 0xdc00)" ( (binary_expression "0x3ff < uVar3 - 0xdc00" number_literal < (binary_expression "uVar3 - 0xdc00" identifier - number_literal)) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar2 = 2;" (assignment_expression "iVar2 = 2" identifier = number_literal) ;) (expression_statement "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;" (assignment_expression "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400" identifier = (binary_expression "uVar3 + 0xfca02400 + uVar4 * 0x400" (binary_expression "uVar3 + 0xfca02400" identifier + number_literal) + (binary_expression "uVar4 * 0x400" identifier * number_literal))) ;) }) (else_clause "else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" else (compound_statement "{\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" { (if_statement "if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(uVar4 - 0xdc00 < 0x400)" ( (binary_expression "uVar4 - 0xdc00 < 0x400" (binary_expression "uVar4 - 0xdc00" identifier - number_literal) < number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }))) (if_statement "if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }" if (parenthesized_expression "(uVar4 <= param_2)" ( (binary_expression "uVar4 <= param_2" identifier <= identifier) )) (compound_statement "{\n    *param_1 = (int)(puVar1 + iVar2);\n  }" { (expression_statement "*param_1 = (int)(puVar1 + iVar2);" (assignment_expression "*param_1 = (int)(puVar1 + iVar2)" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)(puVar1 + iVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar1 + iVar2)" ( (binary_expression "puVar1 + iVar2" identifier + identifier) )))) ;) })) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | (binary_expression IDENT >> LIT))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) })) (return_statement return IDENT ;) })))
(function_definition "uint __regparm3 FUN_0026df30(int *param_1,uint param_2,uint param_3)\n\n{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" (type_identifier "uint") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0026df30(int *param_1,uint param_2,uint param_3)" (identifier "FUN_0026df30") (parameter_list "(int *param_1,uint param_2,uint param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  ushort *puVar1;\n  int iVar2;\n  ushort uVar3;\n  uint uVar4;\n  \n  puVar1 = (ushort *)*param_1;\n  if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }\n  uVar3 = *puVar1;\n  if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }\n  uVar4 = (uint)uVar3;\n  if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }\n  if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }\n  return uVar4;\n}" ({ "{") (declaration "ushort *puVar1;" (type_identifier "ushort") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "ushort uVar3;" (type_identifier "ushort") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (expression_statement "puVar1 = (ushort *)*param_1;" (assignment_expression "puVar1 = (ushort *)*param_1" (identifier "puVar1") (= "=") (cast_expression "(ushort *)*param_1" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 2) {\n    return 0xfffffffe;\n  }" (if "if") (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 2)" (( "(") (binary_expression "(uint)(param_1[1] - (int)puVar1) < 2" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1[1] - (int)puVar1)" (( "(") (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (cast_expression "(int)puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar1"))) () ")"))) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    return 0xfffffffe;\n  }" ({ "{") (return_statement "return 0xfffffffe;" (return "return") (number_literal "0xfffffffe") (; ";")) (} "}"))) (expression_statement "uVar3 = *puVar1;" (assignment_expression "uVar3 = *puVar1" (identifier "uVar3") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (if_statement "if ((param_3 & 1) == 0) {\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" (if "if") (parenthesized_expression "((param_3 & 1) == 0)" (( "(") (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = uVar3 << 8 | uVar3 >> 8;\n  }" ({ "{") (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" (identifier "uVar3") (= "=") (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" (identifier "uVar3") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar3 >> 8" (identifier "uVar3") (>> ">>") (number_literal "8")))) (; ";")) (} "}"))) (expression_statement "uVar4 = (uint)uVar3;" (assignment_expression "uVar4 = (uint)uVar3" (identifier "uVar4") (= "=") (cast_expression "(uint)uVar3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar3"))) (; ";")) (if_statement "if (uVar4 - 0xd800 < 0x400) {\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }\n  else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" (if "if") (parenthesized_expression "(uVar4 - 0xd800 < 0x400)" (( "(") (binary_expression "uVar4 - 0xd800 < 0x400" (binary_expression "uVar4 - 0xd800" (identifier "uVar4") (- "-") (number_literal "0xd800")) (< "<") (number_literal "0x400")) () ")")) (compound_statement "{\n    if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }\n    uVar3 = puVar1[1];\n    if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }\n    if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }\n    iVar2 = 2;\n    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;\n  }" ({ "{") (if_statement "if ((uint)(param_1[1] - (int)puVar1) < 4) {\n      return 0xfffffffe;\n    }" (if "if") (parenthesized_expression "((uint)(param_1[1] - (int)puVar1) < 4)" (( "(") (binary_expression "(uint)(param_1[1] - (int)puVar1) < 4" (call_expression "(uint)(param_1[1] - (int)puVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1[1] - (int)puVar1)" (( "(") (binary_expression "param_1[1] - (int)puVar1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (cast_expression "(int)puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar1"))) () ")"))) (< "<") (number_literal "4")) () ")")) (compound_statement "{\n      return 0xfffffffe;\n    }" ({ "{") (return_statement "return 0xfffffffe;" (return "return") (number_literal "0xfffffffe") (; ";")) (} "}"))) (expression_statement "uVar3 = puVar1[1];" (assignment_expression "uVar3 = puVar1[1]" (identifier "uVar3") (= "=") (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if ((param_3 & 1) == 0) {\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" (if "if") (parenthesized_expression "((param_3 & 1) == 0)" (( "(") (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = uVar3 << 8 | uVar3 >> 8;\n    }" ({ "{") (expression_statement "uVar3 = uVar3 << 8 | uVar3 >> 8;" (assignment_expression "uVar3 = uVar3 << 8 | uVar3 >> 8" (identifier "uVar3") (= "=") (binary_expression "uVar3 << 8 | uVar3 >> 8" (binary_expression "uVar3 << 8" (identifier "uVar3") (<< "<<") (number_literal "8")) (| "|") (binary_expression "uVar3 >> 8" (identifier "uVar3") (>> ">>") (number_literal "8")))) (; ";")) (} "}"))) (if_statement "if (0x3ff < uVar3 - 0xdc00) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(0x3ff < uVar3 - 0xdc00)" (( "(") (binary_expression "0x3ff < uVar3 - 0xdc00" (number_literal "0x3ff") (< "<") (binary_expression "uVar3 - 0xdc00" (identifier "uVar3") (- "-") (number_literal "0xdc00"))) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (expression_statement "iVar2 = 2;" (assignment_expression "iVar2 = 2" (identifier "iVar2") (= "=") (number_literal "2")) (; ";")) (expression_statement "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;" (assignment_expression "uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400" (identifier "uVar4") (= "=") (binary_expression "uVar3 + 0xfca02400 + uVar4 * 0x400" (binary_expression "uVar3 + 0xfca02400" (identifier "uVar3") (+ "+") (number_literal "0xfca02400")) (+ "+") (binary_expression "uVar4 * 0x400" (identifier "uVar4") (* "*") (number_literal "0x400")))) (; ";")) (} "}")) (else_clause "else {\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" (else "else") (compound_statement "{\n    if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }\n    iVar2 = 1;\n  }" ({ "{") (if_statement "if (uVar4 - 0xdc00 < 0x400) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(uVar4 - 0xdc00 < 0x400)" (( "(") (binary_expression "uVar4 - 0xdc00 < 0x400" (binary_expression "uVar4 - 0xdc00" (identifier "uVar4") (- "-") (number_literal "0xdc00")) (< "<") (number_literal "0x400")) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" (identifier "iVar2") (= "=") (number_literal "1")) (; ";")) (} "}")))) (if_statement "if (uVar4 <= param_2) {\n    *param_1 = (int)(puVar1 + iVar2);\n  }" (if "if") (parenthesized_expression "(uVar4 <= param_2)" (( "(") (binary_expression "uVar4 <= param_2" (identifier "uVar4") (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n    *param_1 = (int)(puVar1 + iVar2);\n  }" ({ "{") (expression_statement "*param_1 = (int)(puVar1 + iVar2);" (assignment_expression "*param_1 = (int)(puVar1 + iVar2)" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)(puVar1 + iVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(puVar1 + iVar2)" (( "(") (binary_expression "puVar1 + iVar2" (identifier "puVar1") (+ "+") (identifier "iVar2")) () ")")))) (; ";")) (} "}"))) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))

/* char32_t std::(anonymous namespace)::read_utf16_code_point<false>(std::(anonymous
   namespace)::range<char16_t const, false>&, unsigned long, std::codecvt_mode) */

type_1 __regparm3
std::(anonymous_namespace)::var_1<false>(int *param_1,type_1 param_2,type_3 var_2)

{
  type_2 *var_5;
  int var_6;
  type_2 var_3;
  type_1 var_4;
  
  var_5 = (type_2 *)*param_1;
  if ((type_3)(param_1[1] - (int)var_5) < 2) {
    return L'\xfffffffe';
  }
  var_3 = *var_5;
  if ((var_2 & 1) == 0) {
    var_3 = var_3 << 8 | var_3 >> 8;
  }
  var_4 = (type_1)var_3;
  if ((type_3)(var_4 + L'\xffff2800') < 0x400) {
    if ((type_3)(param_1[1] - (int)var_5) < 4) {
      return L'\xfffffffe';
    }
    var_3 = var_5[1];
    if ((var_2 & 1) == 0) {
      var_3 = var_3 << 8 | var_3 >> 8;
    }
    if (0x3ff < var_3 - 0xdc00) {
      return L'\xffffffff';
    }
    var_6 = 2;
    var_4 = var_3 + 0xfca02400 + var_4 * 0x400;
  }
  else {
    if ((type_3)(var_4 + L'\xffff2400') < 0x400) {
      return L'\xffffffff';
    }
    var_6 = 1;
  }
  if ((type_3)var_4 <= (type_3)param_2) {
    *param_1 = (int)(var_5 + var_6);
  }
  return var_4;
}


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

uint __regparm3 MASKED(int *param_1,uint param_2,uint param_3)

{
  ushort *puVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  
  puVar1 = (ushort *)*param_1;
  if ((uint)(param_1[1] - (int)puVar1) < 2) {
    return 0xfffffffe;
  }
  uVar3 = *puVar1;
  if ((param_3 & 1) == 0) {
    uVar3 = uVar3 << 8 | uVar3 >> 8;
  }
  uVar4 = (uint)uVar3;
  if (uVar4 - 0xd800 < 0x400) {
    if ((uint)(param_1[1] - (int)puVar1) < 4) {
      return 0xfffffffe;
    }
    uVar3 = puVar1[1];
    if ((param_3 & 1) == 0) {
      uVar3 = uVar3 << 8 | uVar3 >> 8;
    }
    if (0x3ff < uVar3 - 0xdc00) {
      return 0xffffffff;
    }
    iVar2 = 2;
    uVar4 = uVar3 + 0xfca02400 + uVar4 * 0x400;
  }
  else {
    if (uVar4 - 0xdc00 < 0x400) {
      return 0xffffffff;
    }
    iVar2 = 1;
  }
  if (uVar4 <= param_2) {
    *param_1 = (int)(puVar1 + iVar2);
  }
  return uVar4;
}

