[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\nlfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry\ncustom: ['https://raw.githubusercontent.com/focus-creative-games/hybridclr/main/docs/sponsor/weixin.JPG','https://raw.githubusercontent.com/focus-creative-games/hybridclr/main/docs/sponsor/zhifubao.JPG']\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug | 描述问题**\nA clear and concise description of what the bug is.\n\n** Enviroment | 环境 **\n\n- Unity Version: 202x.y.z\n-  com.code-philosophy.hybridclr Version: 4.x.y\n- Platform: Win 64 Standalone|Android|iOS| ...\n\n**To Reproduce | 复制步骤 **\n\nPlease provide a reproduction project. Please try to reproduce this bug on the https://github.com/focus-creative-games/hybridclr_trial project. | 提供复现工程，请尽量在 https://github.com/focus-creative-games/hybridclr_trial 项目上复现这个bug。\n\n\nSteps to reproduce the behavior :\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior | 期望的结果**\nA clear and concise description of what you expected to happen.\n\n**Screenshots | 截图或者日志**\nIf applicable, add screenshots to help explain your problem.\n\n**Additional context | 补充信息**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".gitignore",
    "content": "\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Code Philosophy Technology Ltd.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "- [README 中文](./README.md)\n- [README English](./README_EN.md)\n\n# HybridCLR\n\n[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE)\n\n![logo](./docs/images/logo.jpg)\n\n<br/>\n<br/>\n\nHybridCLR是一个**特性完整、零成本、高性能、低内存**的**近乎完美**的Unity全平台原生c#热更新解决方案。\n\nHybridCLR扩充了il2cpp运行时代码，使它由纯[AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation) runtime变成AOT+Interpreter 混合runtime，进而原生支持动态加载assembly，从底层彻底支持了热更新。使用HybridCLR技术的游戏不仅能在Android平台，也能在IOS、Consoles、WebGL等所有il2cpp支持的平台上高效运行。\n\n由于HybridCLR对ECMA-335规范 的良好支持以及对Unity开发工作流的高度兼容，Unity项目在接入HybridCLR后，可以几乎无缝地获得C#代码热更新的能力，开发者不需要改变日常开发习惯和要求。HybridCLR首次实现了将Unity平台的全平台代码热更新方案的工程难度降到几乎为零的水平。\n\n欢迎拥抱现代原生C#热更新技术 ！！！\n\n## 文档\n\n- [官方文档](https://www.hybridclr.cn/docs/intro)\n- [快速上手](https://www.hybridclr.cn/docs/beginner/quickstart)\n- [商业项目案例](https://www.hybridclr.cn/docs/other/businesscase)\n- [LeanCLR](https://github.com/focus-creative-games/leanclr)\n\n## 特性\n\n- 近乎完整实现了[ECMA-335规范](https://www.ecma-international.org/publications-and-standards/standards/ecma-335/)，只有极少量的[不支持的特性](https://www.hybridclr.cn/docs/basic/notsupportedfeatures)。\n- 零学习和使用成本。对绝大多数开发者来说写代码近乎没有限制。 热更新代码与AOT代码无缝工作，可以随意写继承、**泛型**、**反射**之类的代码。不需要额外写任何特殊代码、没有代码生成\n- 完全支持多线程，包含但不限于 volatile、ThreadStatic、async Task等相关功能和特性。这是其他所有热更新方案都不支持的\n- 几乎完全兼容Unity的工作流。包括且不限于支持热更新**MonoBehaviour**、ScriptableObject、**DOTS**技术，资源上挂载的热更新脚本可以正确实例化，这是其他所有热更新方案都不支持的\n- 执行高效。实现了一个极其高效的寄存器解释器，所有指标都大幅优于其他热更新方案。[性能测试报告](https://www.hybridclr.cn/docs/basic/performance)\n- 内存高效。 热更新脚本中定义的类跟普通c#类占用一样的内存空间，远优于其他热更新方案。[内存占用报告](https://www.hybridclr.cn/docs/basic/memory)\n- 支持MonoPInvokeCallback，可以与native代码或者其他语言如lua、javascript、python良好交互\n- 支持一些il2cpp不支持的特性，如__makeref、 __reftype、__refvalue指令\n- 支持独创的 **Differential Hybrid Execution(DHE)** 差分混合执行技术，即可以对AOT dll任意增删改，会智能地让未改动的函数以AOT方式运行，变化或者新增的函数以interpreter模式运行，让热更新的游戏逻辑的运行性能基本达到原生AOT的水平\n- 支持 **热重载** 技术，可以100%卸载程序集\n- 支持 **热修复** 技术，不需要重启游戏即可无感修复bug\n- 支持现代的dll加密技术，有效保障代码安全\n\n## 支持的版本与平台\n\n- 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x、2023.2.x、6000.x.y全系列LTS版本\n- 支持所有il2cpp支持的平台\n- 支持团结引擎和鸿蒙平台\n\n## 工作原理\n\nHybridCLR从mono的 [mixed mode execution](https://www.mono-project.com/news/2017/11/13/mono-interpreter/) 技术中得到启发，为unity的il2cpp之类的AOT runtime额外提供了interpreter模块，将它们由纯AOT运行时改造为\"AOT + Interpreter\"混合运行方式。\n\n![icon](docs/images/architecture.png)\n\n更具体地说，HybridCLR做了以下几点工作：\n\n- 实现了一个高效的元数据(dll)解析库\n- 改造了元数据管理模块，实现了元数据的动态注册\n- 实现了一个IL指令集到自定义的寄存器指令集的compiler\n- 实现了一个高效的寄存器解释器\n- 额外提供大量的instinct函数，提升解释器性能\n\n## 稳定性状况\n\nHybridCLR已经被广泛验证是非常高效、稳定的Unity热更新解决方案，良好满足大中型商业项目的稳定和性能要求。\n\n目前已经有数千个商业游戏项目接入了HybridCLR，其中有超过千个已经在App Store和Google Player上线，仅仅iOS免费榜前500名中就有近百款使用了HybridCLR。上线的项目中包括MMORPG、重度卡牌、重度塔防之类的游戏。国内绝大多数**Top游戏公司**都已经在使用HybridCLR。\n\n可查看我们已知的头部公司中使用HybridCLR并且已经上线的[项目列表](https://www.hybridclr.cn/docs/other/businesscase)。\n\n## 支持与联系\n\n- 官方1群（3000人）：651188171（满）\n- 新手1群（3000人）：428404198（满）\n- 新手2群（2000人）：680274677（满）\n- 新手3群（2000人）：**920714552（推荐）**\n- discord频道：<https://discord.gg/BATfNfJnm2>\n- 商业合作邮箱： business#code-philosophy.com\n- [商业化支持](https://www.hybridclr.cn/docs/business/intro)\n\n## 相关项目 LeanCLR\n\nhybridclr仅是一个解释器模块，如果你需要一个完整小巧的适合发布到移动和小游戏平台的开源CLR实现，[LeanCLR](https://github.com/focus-creative-games/leanclr) 是当前最合适的方案。\n\nLeanCLR 是一个面向全平台的精益 CLR（Common Language Runtime）实现。LeanCLR 在高度符合 ECMA-335 规范的前提下，提供更紧凑、易嵌入、低内存占用的运行时，实现对移动端、H5 与小游戏等资源受限平台的友好支持。LeanCLR原生支持 AOT + Interpreter 混合执行模式，内置 IL 与 IR 双解释器。\n\nLeanCLR既可以独立嵌入到任何app和游戏项目，发布到任何平台，也可以**替代il2cpp作为Unity（团结引擎）发布到webgl和小游戏平台的运行时**。大幅缩减包体和内存开销。\n\n## 关于作者\n\n**walon** ：**Code Philosophy（代码哲学）** 创始人\n\n毕业于清华大学物理系，2006年CMO金牌，奥数国家集训队成员，保送清华基科班。专注于游戏技术，擅长开发架构和基础技术设施。\n\n## license\n\nHybridCLR is licensed under the [MIT](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE) license\n"
  },
  {
    "path": "README_EN.md",
    "content": "- [README Chinese](./README.md)\n- [README English](./README_EN.md)\n\n# HybridCLR\n\n[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE)\n\n![logo](./docs/images/logo.jpg)\n\n<br/>\n<br/>\n\nHybridCLR is a **feature-complete, zero-cost, high-performance, low-memory** and **nearly perfect** native C# hot update solution for Unity across all platforms.\n\nHybridCLR extends the il2cpp runtime, transforming it from a pure [AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation) runtime into a hybrid AOT+Interpreter runtime, natively supporting dynamic assembly loading and fundamentally enabling hot updates. Games using HybridCLR technology can run efficiently not only on Android but also on iOS, consoles, WebGL, and all platforms supported by il2cpp.\n\nThanks to HybridCLR's strong support for the ECMA-335 specification and high compatibility with Unity's development workflow, Unity projects can seamlessly gain C# hot update capabilities after integration, without developers needing to change their daily habits or requirements. HybridCLR is the first to reduce the engineering difficulty of full-platform code hot updates for Unity to nearly zero.\n\nEmbrace modern native C# hot update technology!\n\n## Documentation\n\n- [Official Documentation](https://www.hybridclr.cn/docs/intro)\n- [Quick Start](https://www.hybridclr.cn/docs/beginner/quickstart)\n- [Commercial Project Cases](https://www.hybridclr.cn/docs/other/businesscase)\n- [LeanCLR](https://github.com/focus-creative-games/leanclr)\n\n## Features\n\n- Nearly complete implementation of the [ECMA-335 specification](https://www.ecma-international.org/publications-and-standards/standards/ecma-335/), with only a few [unsupported features](https://www.hybridclr.cn/docs/basic/notsupportedfeatures).\n- Zero learning and usage cost. For most developers, there are almost no coding restrictions. Hot update code and AOT code work seamlessly; you can freely use inheritance, **generics**, **reflection**, etc. No need for special code or code generation.\n- Full multi-threading support, including but not limited to volatile, ThreadStatic, async Task, and related features. This is not supported by any other hot update solution.\n\n- Almost fully compatible with Unity's workflow, including support for hot update **MonoBehaviour**, ScriptableObject, **DOTS** technology, and correct instantiation of hot update scripts attached to resources. This is not supported by any other hot update solution.\n- Efficient execution. Features an extremely efficient register interpreter, outperforming other hot update solutions in all metrics. [Performance Test Report](https://www.hybridclr.cn/docs/basic/performance)\n- Memory efficient. Classes defined in hot update scripts occupy the same memory as regular C# classes, far superior to other hot update solutions. [Memory Usage Report](https://www.hybridclr.cn/docs/basic/memory)\n\n- Supports MonoPInvokeCallback for good interaction with native code or other languages like lua, javascript, python.\n- Supports some features not supported by il2cpp, such as __makeref, __reftype, __refvalue instructions.\n- Supports the original **Differential Hybrid Execution (DHE)** technology, allowing arbitrary addition, deletion, and modification of AOT dlls. Unchanged functions run in AOT mode, changed or new functions run in interpreter mode, making hot update game logic performance nearly native AOT level.\n\n- Supports **hot reload** technology, allowing 100% assembly unloading.\n- Supports **hotfix** technology, enabling bug fixes without restarting the game.\n- Supports modern dll encryption technology for effective code security.\n\n## Supported Versions and Platforms\n\n- Supports all LTS versions: 2019.4.x, 2020.3.x, 2021.3.x, 2022.3.x, 2023.2.x, 6000.x.y\n- Supports all platforms supported by il2cpp\n- Supports Unity Engine and HarmonyOS platforms\n\n## How It Works\n\nHybridCLR is inspired by mono's [mixed mode execution](https://www.mono-project.com/news/2017/11/13/mono-interpreter/) technology, providing an interpreter module for Unity's il2cpp and similar AOT runtimes, transforming them from pure AOT runtimes to \"AOT + Interpreter\" hybrid execution.\n\n## Stability\n\nHybridCLR has been widely validated as a highly efficient and stable Unity hot update solution, meeting the stability and performance requirements of medium and large commercial projects.\n\nThousands of commercial game projects have integrated HybridCLR, with over a thousand already launched on the App Store and Google Play. Nearly a hundred games in the top 500 free iOS chart use HybridCLR. Released projects include MMORPGs, heavy card games, tower defense, and more. Most top game companies in China are already using HybridCLR.\n\nSee our known list of top companies using HybridCLR and already launched [project list](https://www.hybridclr.cn/docs/other/businesscase).\n\n## Support & Contact\n\n- Official Group 1 (3000 members): 651188171 (full)\n- Newbie Group 1 (3000 members): 428404198 (full)\n- Newbie Group 2 (2000 members): 680274677 (full)\n- Newbie Group 3 (2000 members): **920714552 (recommended)**\n- Discord channel: <https://discord.gg/BATfNfJnm2>\n- Business cooperation email: business#code-philosophy.com\n- [Commercial Support](https://www.hybridclr.cn/docs/business/intro)\n\n## LeanCLR Project\n\nHybridCLR is just an interpreter module. If you need a complete, compact, open-source CLR implementation suitable for mobile and mini-game platforms, [LeanCLR](https://github.com/focus-creative-games/leanclr) is currently the best solution.\n\nLeanCLR can be embedded independently into any app or game project and published to any platform. It can also **replace il2cpp as the runtime for Unity (Unity Engine) when publishing to webgl and mini-game platforms**, greatly reducing package size and memory usage.\n\n## About the Author\n\n**walon**: Founder of **Code Philosophy**\n\nGraduated from Tsinghua University, Department of Physics. 2006 CMO gold medalist, member of the national math olympiad training team, admitted to Tsinghua's basic science class. Focused on game technology, skilled in development architecture and core technical infrastructure.\n\n## License\n\nHybridCLR is licensed under the [MIT](https://github.com/focus-creative-games/hybridclr/blob/main/LICENSE) license\n\n- [README Chinese](./README.md)\n- [README English](./README_EN.md)"
  },
  {
    "path": "docs/_config.yml",
    "content": "theme: jekyll-theme-slate"
  },
  {
    "path": "hybridclr/CommonDef.cpp",
    "content": "#include <iostream>\n\n#include \"CommonDef.h\"\n\n\nnamespace hybridclr\n{\n    void LogPanic(const char* errMsg)\n    {\n        std::cerr << \"panic:\" << std::endl;\n        std::cerr << \"\\t\" << errMsg << std::endl;\n        exit(1);\n    }\n\n    const char* GetAssemblyNameFromPath(const char* assPath)\n    {\n        const char* last = nullptr;\n        for (const char* p = assPath; *p; p++)\n        {\n            if (*p == '/' || *p == '\\\\')\n            {\n                last = p + 1;\n            }\n        }\n        return last ? last : assPath;\n    }\n\n    const char* CopyString(const char* src)\n    {\n        size_t len = std::strlen(src);\n        char* dst = (char*)HYBRIDCLR_MALLOC(len + 1);\n        std::strcpy(dst, src);\n        return dst;\n    }\n\n    const char* ConcatNewString(const char* s1, const char* s2)\n    {\n        size_t len1 = std::strlen(s1);\n        size_t len = len1 + std::strlen(s2);\n        char* dst = (char*)HYBRIDCLR_MALLOC(len + 1);\n        std::strcpy(dst, s1);\n        strcpy(dst + len1, s2);\n        return dst;\n    }\n\n    void* CopyBytes(const void* src, size_t length)\n    {\n        void* dst = HYBRIDCLR_MALLOC(length);\n        std::memcpy(dst, src, length);\n        return dst;\n    }\n}\n\n\n\n\n"
  },
  {
    "path": "hybridclr/CommonDef.h",
    "content": "#pragma once\n\n#include <stdint.h>\n#include <cstring>\n#include <memory>\n\n#include \"Il2CppCompatibleDef.h\"\n\n#include \"utils/Memory.h\"\n#include \"utils/StringView.h\"\n#include \"utils/Il2CppHashSet.h\"\n#include \"utils/Il2CppHashMap.h\"\n#include \"utils/HashUtils.h\"\n#include \"vm/GlobalMetadataFileInternals.h\"\n#include \"vm/Exception.h\"\n#include \"vm/Class.h\"\n#include \"icalls/mscorlib/System/Type.h\"\n#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n#include \"icalls/mscorlib/System/RuntimeType.h\"\n#else\n#include \"icalls/mscorlib/System/MonoType.h\"\n#endif\n\nnamespace hybridclr\n{\n    typedef uint8_t byte;\n\n#define TEMP_FORMAT(var, fmt, ...) char var[600]; \\\n\tsnprintf(var, sizeof(var), fmt, __VA_ARGS__);\n\n    void LogPanic(const char* errMsg);\n\n    const char* GetAssemblyNameFromPath(const char* assPath);\n\n    const char* CopyString(const char* src);\n\n    const char* ConcatNewString(const char* s1, const char* s2);\n\n\tvoid* CopyBytes(const void* src, size_t length);\n\n\tstruct CStringHash\n\t{\n\t\tsize_t operator()(const char* s) const noexcept\n\t\t{\n\t\t\tuint32_t hash = 0;\n\n\t\t\tfor (; *s; ++s)\n\t\t\t{\n\t\t\t\thash += *s;\n\t\t\t\thash += (hash << 10);\n\t\t\t\thash ^= (hash >> 6);\n\t\t\t}\n\n\t\t\thash += (hash << 3);\n\t\t\thash ^= (hash >> 11);\n\t\t\thash += (hash << 15);\n\n\t\t\treturn hash;\n\t\t}\n\t};\n\n\tstruct CStringEqualTo\n\t{\n\t\tbool operator()(const char* _Left, const char* _Right) const\n\t\t{\n\t\t\treturn std::strcmp(_Left, _Right) == 0;\n\t\t}\n\t};\n\n\tinline il2cpp::utils::StringView<char> CStringToStringView(const char* str)\n\t{\n\t\treturn il2cpp::utils::StringView<char>(str, std::strlen(str));\n\t}\n\n\tinline std::string GetKlassCStringFullName(const Il2CppType* type)\n\t{\n\t\treturn GetKlassFullName2(type);\n\t}\n\n\tinline void RaiseNotSupportedException(const char* msg)\n\t{\n\t\tTEMP_FORMAT(errMsg, \"hybridclr doesn't support %s\", msg);\n\t\treturn il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetNotSupportedException(errMsg));\n\t}\n\n\tinline void RaiseExecutionEngineException(const char* msg)\n\t{\n\t\treturn il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(msg));\n\t}\n\n\tinline void RaiseMethodNotFindException(const Il2CppType* type, const char* methodName)\n\t{\n\t\tif (!type)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\"type not exists\"));\n\t\t}\n\n\t\tstd::string fullName = GetKlassCStringFullName(type);\n\t\tTEMP_FORMAT(errMsg, \"MethodNotFind %s::%s\", fullName.c_str(), methodName);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetMissingMethodException(errMsg));\n\t}\n\n\tinline void AppendTypeName(std::string& s, const Il2CppType* type)\n\t{\n\t\ts.append(GetKlassCStringFullName(type));\n\t}\n\n\tinline std::string GetMethodNameWithSignature(const MethodInfo* method)\n\t{\n\t\tstd::string name;\n\t\tAppendTypeName(name, method->return_type);\n\t\tname.append(\" \");\n\t\t\n\t\tname.append(GetKlassCStringFullName(&method->klass->byval_arg));\n\t\tname.append(\"::\");\n\t\tname.append(method->name);\n\t\tif (method->genericMethod && method->genericMethod->context.method_inst)\n\t\t{\n\t\t\tname.append(\"<\");\n\t\t\tconst Il2CppGenericInst* gi= method->genericMethod->context.method_inst;\n\t\t\tfor (uint32_t i = 0; i < gi->type_argc; i++)\n\t\t\t{\n\t\t\t\tif (i > 0)\n\t\t\t\t{\n\t\t\t\t\tname.append(\",\");\n\t\t\t\t}\n\t\t\t\tAppendTypeName(name, gi->type_argv[i]);\n\t\t\t}\n\t\t\tname.append(\">\");\n\t\t}\n\t\tname.append(\"(\");\n\t\tfor (uint8_t i = 0; i < method->parameters_count; i++)\n\t\t{\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\tname.append(\",\");\n\t\t\t}\n\t\t\tAppendTypeName(name, GET_METHOD_PARAMETER_TYPE(method->parameters[i]));\n\t\t}\n\t\tname.append(\")\");\n\t\treturn name;\n\t}\n\n\tinline void RaiseAOTGenericMethodNotInstantiatedException(const MethodInfo* method)\n\t{\n\t\tstd::string methodName = GetMethodNameWithSignature(method);\n\t\tTEMP_FORMAT(errMsg, \"AOT generic method not instantiated in aot. assembly:%s, method:%s\", method->klass->image->name, methodName.c_str());\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetMissingMethodException(errMsg));\n\t}\n\n\tinline void RaiseMissingFieldException(const Il2CppType* type, const char* fieldName)\n\t{\n\t\tif (!type)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\"type not exists\"));\n\t\t}\n\t\tstd::string stdFullName = GetKlassCStringFullName(type);\n\t\tTEMP_FORMAT(errMsg, \"field %s::%s not exists\", stdFullName.c_str(), fieldName);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetMissingFieldException(errMsg));\n\t}\n\n}\n\n\n"
  },
  {
    "path": "hybridclr/Il2CppCompatibleDef.cpp",
    "content": "#include \"Il2CppCompatibleDef.h\"\n\n#include \"vm/Runtime.h\"\n\n#include \"metadata/MetadataModule.h\"\n#include \"interpreter/InterpreterModule.h\"\n\n\nnamespace hybridclr\n{\n\tIl2CppMethodPointer InitAndGetInterpreterDirectlyCallMethodPointerSlow(MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(!method->initInterpCallMethodPointer);\n\t\tmethod->initInterpCallMethodPointer = true;\n\t\tbool isAdjustorThunkMethod = IS_CLASS_VALUE_TYPE(method->klass) && hybridclr::metadata::IsInstanceMethod(method);\n\t\tif (hybridclr::metadata::MetadataModule::IsImplementedByInterpreter(method))\n\t\t{\n\t\t\tmethod->methodPointerCallByInterp = interpreter::InterpreterModule::GetMethodPointer(method);\n\t\t\tif (isAdjustorThunkMethod)\n\t\t\t{\n\t\t\t\tmethod->virtualMethodPointerCallByInterp = interpreter::InterpreterModule::GetAdjustThunkMethodPointer(method);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tmethod->virtualMethodPointerCallByInterp = method->methodPointerCallByInterp;\n\t\t\t}\n\t\t\tif (method->invoker_method == nullptr\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\t|| method->invoker_method == il2cpp::vm::Runtime::GetMissingMethodInvoker()\n\t\t\t\t|| method->has_full_generic_sharing_signature\n#endif\n\t\t\t\t)\n\t\t\t{\n\t\t\t\tmethod->invoker_method = hybridclr::interpreter::InterpreterModule::GetMethodInvoker(method);\n\t\t\t}\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\tif (method->methodPointer == nullptr || method->has_full_generic_sharing_signature)\n\t\t\t{\n\t\t\t\tmethod->methodPointer = method->methodPointerCallByInterp;\n\t\t\t}\n\t\t\tif (method->virtualMethodPointer == nullptr || method->has_full_generic_sharing_signature)\n\t\t\t{\n\t\t\t\tmethod->virtualMethodPointer = method->virtualMethodPointerCallByInterp;\n\t\t\t}\n#else\n\t\t\tif (method->methodPointer == nullptr)\n\t\t\t{\n\t\t\t\tmethod->methodPointer = method->virtualMethodPointerCallByInterp;\n\t\t\t}\n#endif\n\t\t\tmethod->isInterpterImpl = true;\n\t\t}\n\t\treturn method->methodPointerCallByInterp;\n\t}\n}"
  },
  {
    "path": "hybridclr/Il2CppCompatibleDef.h",
    "content": "#pragma once\n\n#include \"il2cpp-config.h\"\n#include \"codegen/il2cpp-codegen-metadata.h\"\n#include \"il2cpp-class-internals.h\"\n\n#include \"vm/Array.h\"\n#include \"vm/Type.h\"\n#include \"vm/Runtime.h\"\n#include \"vm/GlobalMetadataFileInternals.h\"\n#include \"vm/MetadataAlloc.h\"\n#include \"icalls/mscorlib/System/Type.h\"\n#include \"gc/GarbageCollector.h\"\n\n#if HYBRIDCLR_UNITY_2020\n#include \"icalls/mscorlib/System/MonoType.h\"\n#elif HYBRIDCLR_UNITY_2021_OR_NEW\n#include \"icalls/mscorlib/System/RuntimeType.h\"\n#include \"icalls/mscorlib/System/RuntimeTypeHandle.h\"\n#elif HYBRIDCLR_UNITY_2019\n#include \"icalls/mscorlib/System/MonoType.h\"\n#if IL2CPP_SIZEOF_VOID_P == 8\n#define PLATFORM_ARCH_64 1\n#else\n#define PLATFORM_ARCH_64 0\n#endif\n#elif !defined(HYBRIDCLR_UNITY_VERSION)\n#error \"please run 'HybridCLR/Generate/All' before building\"\n#else\n#error \"unsupported unity version\"\n#endif\n\n#if IL2CPP_BYTE_ORDER != IL2CPP_LITTLE_ENDIAN\n#error \"only support litten endian\"\n#endif\n\n#if\tPLATFORM_ARCH_64\n#define HYBRIDCLR_ARCH_64 1\n#else\n#define HYBRIDCLR_ARCH_64 0\n#endif\n\n#define PTR_SIZE IL2CPP_SIZEOF_VOID_P\n\n#if HYBRIDCLR_ARCH_64 || HYBRIDCLR_TARGET_X86\n#define SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS  1\n#else\n#define SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS  0\n#endif\n\n#ifndef ENABLE_PLACEHOLDER_DLL\n#define ENABLE_PLACEHOLDER_DLL 1\n#endif\n\n#if IL2CPP_ENABLE_WRITE_BARRIERS\n#define HYBRIDCLR_ENABLE_WRITE_BARRIERS 1\n#else\n#define HYBRIDCLR_ENABLE_WRITE_BARRIERS 0\n#endif\n\n#ifndef HYBRIDCLR_ENABLE_PROFILER\n#define HYBRIDCLR_ENABLE_PROFILER  IL2CPP_ENABLE_PROFILER\n#endif\n\n#ifndef HYBRIDCLR_ENABLE_STRACKTRACE\n#define HYBRIDCLR_ENABLE_STRACKTRACE IL2CPP_ENABLE_STACKTRACE_SENTRIES\n#endif\n\n#if UNITY_ENGINE_TUANJIE\n#define HYBRIDCLR_MALLOC(size) IL2CPP_MALLOC(size, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_MALLOC_ALIGNED(size, alignment) IL2CPP_MALLOC_ALIGNED(size, alignment, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_MALLOC_ZERO(size) IL2CPP_MALLOC_ZERO(size, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_CALLOC(count, size) IL2CPP_CALLOC(count, size, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_FREE(ptr) IL2CPP_FREE(ptr, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_FREE_ALIGNED(ptr) IL2CPP_FREE_ALIGNED(ptr, IL2CPP_MEM_META_POOL)\n#define HYBRIDCLR_METADATA_MALLOC(size) il2cpp::vm::MetadataMalloc(size, IL2CPP_MSTAT_TYPE)\n#define HYBRIDCLR_METADATA_CALLOC(count, size) il2cpp::vm::MetadataCalloc(count, size, IL2CPP_MSTAT_TYPE)\n#else\n#define HYBRIDCLR_MALLOC(size) IL2CPP_MALLOC(size)\n#define HYBRIDCLR_MALLOC_ALIGNED(size, alignment) IL2CPP_MALLOC_ALIGNED(size, alignment)\n#define HYBRIDCLR_MALLOC_ZERO(size) IL2CPP_MALLOC_ZERO(size)\n#define HYBRIDCLR_CALLOC(count, size) IL2CPP_CALLOC(count, size)\n#define HYBRIDCLR_FREE(ptr) IL2CPP_FREE(ptr)\n#define HYBRIDCLR_FREE_ALIGNED(ptr) IL2CPP_FREE_ALIGNED(ptr)\n#define HYBRIDCLR_METADATA_MALLOC(size) il2cpp::vm::MetadataMalloc(size)\n#define HYBRIDCLR_METADATA_CALLOC(count, size) il2cpp::vm::MetadataCalloc(count, size)\n#endif\n\n\nnamespace hybridclr\n{\n\n\textern const char* g_placeHolderAssemblies[];\n\n\tIl2CppMethodPointer InitAndGetInterpreterDirectlyCallMethodPointerSlow(MethodInfo* method);\n\n\tinline Il2CppMethodPointer InitAndGetInterpreterDirectlyCallMethodPointer(const MethodInfo* method)\n\t{\n\t\tIl2CppMethodPointer methodPointer = method->methodPointerCallByInterp;\n\t\tif (methodPointer)\n\t\t{\n\t\t\treturn methodPointer;\n\t\t}\n\t\tif (method->initInterpCallMethodPointer)\n\t\t{\n\t\t\treturn methodPointer;\n\t\t}\n\t\treturn InitAndGetInterpreterDirectlyCallMethodPointerSlow(const_cast<MethodInfo*>(method));\n\t}\n\n\tinline Il2CppMethodPointer InitAndGetInterpreterDirectlyCallVirtualMethodPointer(const MethodInfo* method)\n\t{\n\t\tIl2CppMethodPointer methodPointer = method->virtualMethodPointerCallByInterp;\n\t\tif (methodPointer)\n\t\t{\n\t\t\treturn methodPointer;\n\t\t}\n\t\tif (method->initInterpCallMethodPointer)\n\t\t{\n\t\t\treturn methodPointer;\n\t\t}\n\t\tInitAndGetInterpreterDirectlyCallMethodPointerSlow(const_cast<MethodInfo*>(method));\n\t\treturn method->virtualMethodPointerCallByInterp;\n\t}\n\n\tinline void HYBRIDCLR_SET_WRITE_BARRIER(void** ptr)\n\t{\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\til2cpp::gc::GarbageCollector::SetWriteBarrier(ptr);\n#endif\n\t}\n\n\tinline void HYBRIDCLR_SET_WRITE_BARRIER(void** ptr, size_t size)\n\t{\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\til2cpp::gc::GarbageCollector::SetWriteBarrier(ptr, size);\n#endif\n\t}\n}\n\n#if HYBRIDCLR_UNITY_2019 || HYBRIDCLR_UNITY_2020\n\ninline bool IS_CLASS_VALUE_TYPE(const Il2CppClass* klass)\n{\n\treturn klass->valuetype;\n}\n\ninline bool IS_CCTOR_FINISH_OR_NO_CCTOR(const Il2CppClass* klass)\n{\n\treturn (klass->cctor_finished) || !(klass->has_cctor);\n}\n\ninline const Il2CppType* GET_METHOD_PARAMETER_TYPE(const ParameterInfo& param)\n{\n\treturn param.parameter_type;\n}\n\ninline uint32_t GET_CUSTOM_ATTRIBUTE_TYPE_RANGE_START(const Il2CppCustomAttributeTypeRange& tr)\n{\n\treturn tr.start;\n}\n\ninline void SET_IL2CPPTYPE_VALUE_TYPE(Il2CppType& type, bool v)\n{\n\n}\n\ninline void COPY_IL2CPPTYPE_VALUE_TYPE_FLAG(Il2CppType& dst, const Il2CppType& src)\n{\n\n}\n\n#define GET_ARRAY_ELEMENT_ADDRESS load_array_elema\n#define VALUE_TYPE_METHOD_POINTER_IS_ADJUST_METHOD 1\n\nnamespace hybridclr\n{\n\tinline Il2CppReflectionType* GetReflectionTypeFromName(Il2CppString* name)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Type::internal_from_name(name, true, false);\n\t}\n\n\tinline void ConstructDelegate(Il2CppDelegate* delegate, Il2CppObject* target, const MethodInfo* method)\n\t{\n\t\tdelegate->method_ptr = InitAndGetInterpreterDirectlyCallVirtualMethodPointer(method);\n\t\tdelegate->method = method;\n\t\tdelegate->target = target;\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\tif (target)\n\t\t{\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)&delegate->target);\n\t\t}\n#endif\n\t\t//il2cpp::vm::Type::ConstructDelegate(delegate, target, InitAndGetInterpreterDirectlyCallMethodPointer(method), method);\n\t}\n\n\tinline const MethodInfo* GetGenericVirtualMethod(const MethodInfo* result, const MethodInfo* inflateMethod)\n\t{\n\t\treturn il2cpp::vm::Runtime::GetGenericVirtualMethod(result, inflateMethod);\n\t}\n\n\tinline void* GetNulllableDataOffset(void* nullableObj, Il2CppClass* nullableClass)\n\t{\n\t\tuint32_t field_offset = nullableClass->fields[0].offset - sizeof(Il2CppObject); // offset of value field\n\t\treturn (uint8_t*)nullableObj + field_offset;\n\t}\n\n\tinline uint8_t* GetNulllableHasValueOffset(void* nullableObj, Il2CppClass* nullableClass)\n\t{\n\t\tuint32_t field_offset = nullableClass->fields[1].offset - sizeof(Il2CppObject); // offset of has_value field\n\t\treturn (uint8_t*)nullableObj + field_offset;\n\t}\n\n\tinline Il2CppString* GetKlassFullName(const Il2CppType* type)\n\t{\n\t\tIl2CppReflectionType* refType = il2cpp::icalls::mscorlib::System::Type::internal_from_handle((intptr_t)type);\n\t\treturn il2cpp::icalls::mscorlib::System::MonoType::getFullName(refType, false, false);\n\t}\n\n\tinline std::string GetKlassFullName2(const Il2CppType* type)\n\t{\n\t\tIl2CppReflectionType* refType = il2cpp::icalls::mscorlib::System::Type::internal_from_handle((intptr_t)type);\n\t\treturn il2cpp::icalls::mscorlib::System::MonoType::getFullName2(refType, false, false);\n\t}\n}\n#elif HYBRIDCLR_UNITY_2021_OR_NEW\n\ninline bool IS_CLASS_VALUE_TYPE(const Il2CppClass* klass)\n{\n\treturn klass->byval_arg.valuetype;\n}\n\ninline bool IS_CCTOR_FINISH_OR_NO_CCTOR(const Il2CppClass* klass)\n{\n\treturn klass->cctor_finished_or_no_cctor;\n}\n\ninline const Il2CppType* GET_METHOD_PARAMETER_TYPE(const Il2CppType* param)\n{\n\treturn param;\n}\n\ninline uint32_t GET_CUSTOM_ATTRIBUTE_TYPE_RANGE_START(const Il2CppCustomAttributeTypeRange& tr)\n{\n\treturn tr.startOffset;\n}\n\ninline void SET_IL2CPPTYPE_VALUE_TYPE(Il2CppType& type, bool v)\n{\n\ttype.valuetype = v;\n}\n\ninline void COPY_IL2CPPTYPE_VALUE_TYPE_FLAG(Il2CppType& dst, const Il2CppType& src)\n{\n\tdst.valuetype = src.valuetype;\n}\n\n#define GET_ARRAY_ELEMENT_ADDRESS il2cpp_array_addr_with_size\n#define VALUE_TYPE_METHOD_POINTER_IS_ADJUST_METHOD 0\n\nnamespace hybridclr\n{\n\n\tinline Il2CppReflectionType* GetReflectionTypeFromName(Il2CppString* name)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::RuntimeTypeHandle::internal_from_name(name, nullptr, nullptr, true, false, false);\n\t}\n\n\tinline void ConstructDelegate(Il2CppDelegate* delegate, Il2CppObject* target, const MethodInfo* method)\n\t{\n\t\tdelegate->target = target;\n\t\tdelegate->method = method;\n\t\tdelegate->invoke_impl = InitAndGetInterpreterDirectlyCallVirtualMethodPointer(method);\n\t\tdelegate->invoke_impl_this = target;\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\tif (target)\n\t\t{\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)&delegate->target);\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)&delegate->invoke_impl_this);\n\t\t}\n#endif\n\t}\n\n\tinline const MethodInfo* GetGenericVirtualMethod(const MethodInfo* result, const MethodInfo* inflateMethod)\n\t{\n#if HYBRIDCLR_UNITY_2021\n\t\tVirtualInvokeData vid;\n\t\til2cpp::vm::Runtime::GetGenericVirtualMethod(result, inflateMethod, &vid);\n\t\treturn vid.method;\n#else\n\t\treturn il2cpp::metadata::GenericMethod::GetGenericVirtualMethod(result, inflateMethod);\n#endif\n\t}\n\n\tinline void* GetNulllableDataOffset(void* nullableObj, Il2CppClass* nullableClass)\n\t{\n\t\tuint32_t field_offset = nullableClass->fields[1].offset - sizeof(Il2CppObject); // offset of value field\n\t\treturn (uint8_t*)nullableObj + field_offset;\n\t}\n\n\tinline uint8_t* GetNulllableHasValueOffset(void* nullableObj, Il2CppClass* nullableClass)\n\t{\n\t\tuint32_t field_offset = nullableClass->fields[0].offset - sizeof(Il2CppObject); // offset of has_value field\n\t\treturn (uint8_t*)nullableObj + field_offset;\n\t}\n\n\tinline Il2CppString* GetKlassFullName(const Il2CppType* type)\n\t{\n\t\tIl2CppReflectionType* refType = il2cpp::icalls::mscorlib::System::Type::internal_from_handle((intptr_t)type);\n\t\treturn il2cpp::icalls::mscorlib::System::RuntimeType::getFullName((Il2CppReflectionRuntimeType*)refType, false, false);\n\t}\n\n\tinline std::string GetKlassFullName2(const Il2CppType* type)\n\t{\n\t\tIl2CppReflectionType* refType = il2cpp::icalls::mscorlib::System::Type::internal_from_handle((intptr_t)type);\n\t\treturn il2cpp::icalls::mscorlib::System::RuntimeType::getFullName2((Il2CppReflectionRuntimeType*)refType, false, false);\n\t}\n\n}\n#endif"
  },
  {
    "path": "hybridclr/Runtime.cpp",
    "content": "#include \"Runtime.h\"\n\n#include \"vm/Exception.h\"\n#include \"vm/String.h\"\n#include \"vm/Assembly.h\"\n#include \"vm/Class.h\"\n#include \"vm/Object.h\"\n#include \"vm/Reflection.h\"\n#include \"icalls/mscorlib/System.Reflection/Assembly.h\"\n\n#include \"RuntimeApi.h\"\n#include \"interpreter/InterpreterModule.h\"\n#include \"metadata/MetadataModule.h\"\n#include \"transform/TransformModule.h\"\n\n\nnamespace hybridclr\n{\n\n\tvoid Runtime::Initialize()\n\t{\n\t\tRuntimeApi::RegisterInternalCalls();\n\t\tmetadata::MetadataModule::Initialize();\n\t\tinterpreter::InterpreterModule::Initialize();\n\t\ttransform::TransformModule::Initialize();\n\t}\n}"
  },
  {
    "path": "hybridclr/Runtime.h",
    "content": "#pragma once\n\n#include \"CommonDef.h\"\n\nnamespace hybridclr\n{\n\n\tclass Runtime\n\t{\n\tpublic:\n\t\tstatic void Initialize();\n\t};\n}"
  },
  {
    "path": "hybridclr/RuntimeApi.cpp",
    "content": "#include \"RuntimeApi.h\"\n\n#include \"codegen/il2cpp-codegen.h\"\n#include \"vm/InternalCalls.h\"\n#include \"vm/Array.h\"\n#include \"vm/Exception.h\"\n#include \"vm/Class.h\"\n\n#include \"metadata/MetadataModule.h\"\n#include \"metadata/MetadataUtil.h\"\n#include \"interpreter/InterpreterModule.h\"\n#include \"RuntimeConfig.h\"\n\nnamespace hybridclr\n{\n\tvoid RuntimeApi::RegisterInternalCalls()\n\t{\n\t\til2cpp::vm::InternalCalls::Add(\"HybridCLR.RuntimeApi::LoadMetadataForAOTAssembly(System.Byte[],HybridCLR.HomologousImageMode)\", (Il2CppMethodPointer)LoadMetadataForAOTAssembly);\n\t\til2cpp::vm::InternalCalls::Add(\"HybridCLR.RuntimeApi::GetRuntimeOption(HybridCLR.RuntimeOptionId)\", (Il2CppMethodPointer)GetRuntimeOption);\n\t\til2cpp::vm::InternalCalls::Add(\"HybridCLR.RuntimeApi::SetRuntimeOption(HybridCLR.RuntimeOptionId,System.Int32)\", (Il2CppMethodPointer)SetRuntimeOption);\n\t\til2cpp::vm::InternalCalls::Add(\"HybridCLR.RuntimeApi::PreJitClass(System.Type)\", (Il2CppMethodPointer)PreJitClass);\n\t\til2cpp::vm::InternalCalls::Add(\"HybridCLR.RuntimeApi::PreJitMethod(System.Reflection.MethodInfo)\", (Il2CppMethodPointer)PreJitMethod);\n\t}\n\n\tint32_t RuntimeApi::LoadMetadataForAOTAssembly(Il2CppArray* dllBytes, int32_t mode)\n\t{\n\t\tif (!dllBytes)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t}\n\t\treturn (int32_t)hybridclr::metadata::Assembly::LoadMetadataForAOTAssembly(il2cpp::vm::Array::GetFirstElementAddress(dllBytes), il2cpp::vm::Array::GetByteLength(dllBytes), (hybridclr::metadata::HomologousImageMode)mode);\n\t}\n\n\tint32_t RuntimeApi::GetRuntimeOption(int32_t optionId)\n\t{\n\t\treturn hybridclr::RuntimeConfig::GetRuntimeOption((hybridclr::RuntimeOptionId)optionId);\n\t}\n\n\tvoid RuntimeApi::SetRuntimeOption(int32_t optionId, int32_t value)\n\t{\n\t\thybridclr::RuntimeConfig::SetRuntimeOption((hybridclr::RuntimeOptionId)optionId, value);\n\t}\n\n\tint32_t PreJitMethod0(const MethodInfo* methodInfo);\n\n\tint32_t RuntimeApi::PreJitClass(Il2CppReflectionType* type)\n\t{\n\t\tif (metadata::HasNotInstantiatedGenericType(type->type))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type->type, false);\n\t\tif (!klass)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tmetadata::Image* image = metadata::MetadataModule::GetImage(klass->image);\n\t\tif (!image)\n\t\t{\n\t\t\timage = (metadata::Image*)hybridclr::metadata::AOTHomologousImage::FindImageByAssembly(\n\t\t\t\tklass->rank ? il2cpp_defaults.corlib->assembly : klass->image->assembly);\n\t\t\tif (!image)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tfor (uint16_t i = 0; i < klass->method_count; i++)\n\t\t{\n\t\t\tconst MethodInfo* methodInfo = klass->methods[i];\n\t\t\tPreJitMethod0(methodInfo);\n\t\t}\n\t\treturn true;\n\t}\n\n\tint32_t PreJitMethod0(const MethodInfo* methodInfo)\n\t{\n\t\tif (!methodInfo->isInterpterImpl)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (methodInfo->klass->is_generic)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!methodInfo->is_inflated)\n\t\t{\n\t\t\tif (methodInfo->is_generic)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst Il2CppGenericMethod* genericMethod = methodInfo->genericMethod;\n\t\t\tif (metadata::HasNotInstantiatedGenericType(genericMethod->context.class_inst) || metadata::HasNotInstantiatedGenericType(genericMethod->context.method_inst))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn interpreter::InterpreterModule::GetInterpMethodInfo(methodInfo) != nullptr;\n\t}\n\n\tint32_t RuntimeApi::PreJitMethod(Il2CppReflectionMethod* method)\n\t{\n\t\treturn PreJitMethod0(method->method);\n\t}\n}\n"
  },
  {
    "path": "hybridclr/RuntimeApi.h",
    "content": "#pragma once\n\n#include <stdint.h>\n#include \"CommonDef.h\"\n\nnamespace hybridclr\n{\n\tclass RuntimeApi\n\t{\n\tpublic:\n\t\tstatic void RegisterInternalCalls();\n\n\t\tstatic int32_t LoadMetadataForAOTAssembly(Il2CppArray* dllData, int32_t mode);\n\n\t\tstatic int32_t GetRuntimeOption(int32_t optionId);\n\t\tstatic void SetRuntimeOption(int32_t optionId, int32_t value);\n\n\t\tstatic int32_t PreJitClass(Il2CppReflectionType* type);\n\t\tstatic int32_t PreJitMethod(Il2CppReflectionMethod* method);\n\t};\n}"
  },
  {
    "path": "hybridclr/RuntimeConfig.cpp",
    "content": "#include \"RuntimeConfig.h\"\n\n#include \"vm/Exception.h\"\n\nnamespace hybridclr\n{\n\tstatic int32_t s_threadObjectStackSize = 1024 * 128;\n\tstatic int32_t s_threadFrameStackSize = 1024 * 2;\n\tstatic int32_t s_threadExceptionFlowSize = 512;\n\tstatic int32_t s_maxMethodBodyCacheSize = 1024;\n\tstatic int32_t s_maxMethodInlineDepth = 3;\n\tstatic int32_t s_maxInlineableMethodBodySize = 32;\n\n\n\n\tint32_t RuntimeConfig::GetRuntimeOption(RuntimeOptionId optionId)\n\t{\n\t\tswitch (optionId)\n\t\t{\t\n\t\tcase RuntimeOptionId::InterpreterThreadObjectStackSize:\n\t\t\treturn s_threadObjectStackSize;\n\t\tcase RuntimeOptionId::InterpreterThreadFrameStackSize:\n\t\t\treturn s_threadFrameStackSize;\n\t\tcase RuntimeOptionId::InterpreterThreadExceptionFlowSize:\n\t\t\treturn s_threadExceptionFlowSize;\n\t\tcase RuntimeOptionId::MaxMethodBodyCacheSize:\n\t\t\treturn s_maxMethodBodyCacheSize;\n\t\tcase RuntimeOptionId::MaxMethodInlineDepth:\n\t\t\treturn s_maxMethodInlineDepth;\n\t\tcase RuntimeOptionId::MaxInlineableMethodBodySize:\n\t\t\treturn s_maxInlineableMethodBodySize;\n\t\tdefault:\n\t\t{\n\t\t\tTEMP_FORMAT(optionIdStr, \"%d\", optionId);\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentException(optionIdStr, \"invalid runtime option id\"));\n\t\t\treturn 0;\n\t\t}\n\t\t}\n\t}\n\n\tvoid RuntimeConfig::SetRuntimeOption(RuntimeOptionId optionId, int32_t value)\n\t{\n\t\tswitch (optionId)\n\t\t{\n\t\tcase hybridclr::RuntimeOptionId::InterpreterThreadObjectStackSize:\n\t\t\ts_threadObjectStackSize = value;\n\t\t\tbreak;\n\t\tcase hybridclr::RuntimeOptionId::InterpreterThreadFrameStackSize:\n\t\t\ts_threadFrameStackSize = value;\n\t\t\tbreak;\n\t\tcase hybridclr::RuntimeOptionId::InterpreterThreadExceptionFlowSize:\n\t\t\ts_threadExceptionFlowSize = value;\n\t\t\tbreak;\n\t\tcase RuntimeOptionId::MaxMethodBodyCacheSize:\n\t\t\ts_maxMethodBodyCacheSize = value;\n\t\t\tbreak;\n\t\tcase RuntimeOptionId::MaxMethodInlineDepth:\n\t\t\ts_maxMethodInlineDepth = value;\n\t\t\tbreak;\n\t\tcase RuntimeOptionId::MaxInlineableMethodBodySize:\n\t\t\ts_maxInlineableMethodBodySize = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t{\n\t\t\tTEMP_FORMAT(optionIdStr, \"%d\", optionId);\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentException(optionIdStr, \"invalid runtime option id\"));\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t}\n\n\tuint32_t RuntimeConfig::GetInterpreterThreadObjectStackSize()\n\t{\n\t\treturn s_threadObjectStackSize;\n\t}\n\n\tuint32_t RuntimeConfig::GetInterpreterThreadFrameStackSize()\n\t{\n\t\treturn s_threadFrameStackSize;\n\t}\n\n\tuint32_t RuntimeConfig::GetInterpreterThreadExceptionFlowSize()\n\t{\n\t\treturn s_threadExceptionFlowSize;\n\t}\n\n\tint32_t RuntimeConfig::GetMaxMethodBodyCacheSize()\n\t{\n\t\treturn s_maxMethodBodyCacheSize;\n\t}\n\n\tint32_t RuntimeConfig::GetMaxMethodInlineDepth()\n\t{\n\t\treturn s_maxMethodInlineDepth;\n\t}\n\n\tint32_t RuntimeConfig::GetMaxInlineableMethodBodySize()\n\t{\n\t\treturn s_maxInlineableMethodBodySize;\n\t}\n\n}\n"
  },
  {
    "path": "hybridclr/RuntimeConfig.h",
    "content": "#pragma once\n\n#include \"CommonDef.h\"\n\nnamespace hybridclr\n{\n\tenum class RuntimeOptionId\n\t{\n\t\tInterpreterThreadObjectStackSize = 1,\n\t\tInterpreterThreadFrameStackSize = 2,\n\t\tInterpreterThreadExceptionFlowSize = 3,\n\t\tMaxMethodBodyCacheSize = 4,\n\t\tMaxMethodInlineDepth = 5,\n\t\tMaxInlineableMethodBodySize = 6,\n\t};\n\n\tclass RuntimeConfig\n\t{\n\n\tpublic:\n\n\t\tstatic int32_t GetRuntimeOption(RuntimeOptionId optionId);\n\t\tstatic void SetRuntimeOption(RuntimeOptionId optionId, int32_t value);\n\n\t\tstatic uint32_t GetInterpreterThreadObjectStackSize();\n\t\tstatic uint32_t GetInterpreterThreadFrameStackSize();\n\t\tstatic uint32_t GetInterpreterThreadExceptionFlowSize();\n\t\tstatic int32_t GetMaxMethodBodyCacheSize();\n\t\tstatic int32_t GetMaxMethodInlineDepth();\n\t\tstatic int32_t GetMaxInlineableMethodBodySize();\n\t};\n}\n\n\n\n"
  },
  {
    "path": "hybridclr/generated/AssemblyManifest.cpp",
    "content": "#include \"../Il2CppCompatibleDef.h\"\n\nnamespace hybridclr\n{\n\tconst char* g_placeHolderAssemblies[] =\n\t{\n\t\t//!!!{{PLACE_HOLDER\n\n\t\t//!!!}}PLACE_HOLDER\n\t\tnullptr,\n\t};\n}\n"
  },
  {
    "path": "hybridclr/generated/MethodBridge.cpp",
    "content": "#include <codegen/il2cpp-codegen-metadata.h>\n#if HYBRIDCLR_UNITY_2023_OR_NEW\n#include <codegen/il2cpp-codegen.h>\n#elif HYBRIDCLR_UNITY_2022\n#include <codegen/il2cpp-codegen-il2cpp.h>\n#elif HYBRIDCLR_UNITY_2020 || HYBRIDCLR_UNITY_2021\n#include <codegen/il2cpp-codegen-common-big.h>\n#else\n#include <codegen/il2cpp-codegen-common.h>\n#endif\n\n#include \"vm/ClassInlines.h\"\n#include \"vm/Object.h\"\n#include \"vm/Class.h\"\n#include \"vm/ScopedThreadAttacher.h\"\n\n#include \"../metadata/MetadataUtil.h\"\n\n\n#include \"../interpreter/InterpreterModule.h\"\n#include \"../interpreter/MethodBridge.h\"\n#include \"../interpreter/Interpreter.h\"\n#include \"../interpreter/MemoryUtil.h\"\n#include \"../interpreter/InstrinctDef.h\"\n\nusing namespace hybridclr::interpreter;\nusing namespace hybridclr::metadata;\n\n//!!!{{CODE\n\nconst FullName2Signature hybridclr::interpreter::g_fullName2SignatureStub[] = {\n\t{ nullptr, nullptr},\n};\n\n\nconst Managed2NativeMethodInfo hybridclr::interpreter::g_managed2nativeStub[] = \n{\n\n\t{nullptr, nullptr},\n};\n\n\nconst Native2ManagedMethodInfo hybridclr::interpreter::g_native2managedStub[] = \n{\n\t{nullptr, nullptr},\n};\n\nconst NativeAdjustThunkMethodInfo hybridclr::interpreter::g_adjustThunkStub[] = \n{\n\t{nullptr, nullptr},\n};\n\nconst ReversePInvokeMethodData hybridclr::interpreter::g_reversePInvokeMethodStub[]\n{\n    {nullptr, nullptr},\n};\n\nconst Managed2NativeFunctionPointerCallData hybridclr::interpreter::g_managed2NativeFunctionPointerCallStub[]\n{\n    {nullptr, nullptr},\n};\n//!!!}}CODE\n"
  },
  {
    "path": "hybridclr/generated/UnityVersion.h",
    "content": "#pragma once\n\n//!!!{{UNITY_VERSION\n\n\n\n//!!!}}UNITY_VERSION"
  },
  {
    "path": "hybridclr/interpreter/Engine.cpp",
    "content": "#include \"Engine.h\"\n\n#include \"codegen/il2cpp-codegen.h\"\n\n#include \"Interpreter.h\"\n#include \"MemoryUtil.h\"\n#include \"../metadata/InterpreterImage.h\"\n#include \"../metadata/MetadataModule.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n#if HYBRIDCLR_ENABLE_STRACKTRACE\n\n#define PUSH_STACK_FRAME(method, rawIp) do { \\\n\tIl2CppStackFrameInfo stackFrameInfo = { method, rawIp }; \\\n\til2cpp::vm::StackTrace::PushFrame(stackFrameInfo); \\\n} while(0)\n\n#define POP_STACK_FRAME() do { il2cpp::vm::StackTrace::PopFrame(); } while(0)\n\n#else \n#define PUSH_STACK_FRAME(method, rawIp)\n#define POP_STACK_FRAME() \n#endif\n\n\tInterpFrame* InterpFrameGroup::EnterFrameFromInterpreter(const MethodInfo* method, StackObject* argBase)\n\t{\n#if HYBRIDCLR_ENABLE_PROFILER\n\t\til2cpp_codegen_profiler_method_enter(method);\n#endif\n\t\tconst InterpMethodInfo* imi = (const InterpMethodInfo*)method->interpData;\n\t\tint32_t oldStackTop = _machineState.GetStackTop();\n\t\tStackObject* stackBasePtr = _machineState.AllocStackSlot(imi->maxStackSize - imi->argStackObjectSize);\n\t\tInterpFrame* newFrame = _machineState.PushFrame();\n\t\t*newFrame = { method, argBase, oldStackTop, nullptr, nullptr, nullptr, 0, 0, _machineState.GetLocalPoolBottomIdx() };\n\t\tPUSH_STACK_FRAME(method, (uintptr_t)newFrame);\n\t\treturn newFrame;\n\t}\n\n\n\tInterpFrame* InterpFrameGroup::EnterFrameFromNative(const MethodInfo* method, StackObject* argBase)\n\t{\n#if HYBRIDCLR_ENABLE_PROFILER\n\t\til2cpp_codegen_profiler_method_enter(method);\n#endif\n\t\tconst InterpMethodInfo* imi = (const InterpMethodInfo*)method->interpData;\n\t\tint32_t oldStackTop = _machineState.GetStackTop();\n\t\tStackObject* stackBasePtr = _machineState.AllocStackSlot(imi->maxStackSize);\n\t\tInterpFrame* newFrame = _machineState.PushFrame();\n\t\t*newFrame = { method, stackBasePtr, oldStackTop, nullptr, nullptr, nullptr, 0, 0, _machineState.GetLocalPoolBottomIdx() };\n\n\t\t// if not prepare arg stack. copy from args\n\t\tif (imi->args)\n\t\t{\n\t\t\tIL2CPP_ASSERT(imi->argCount == metadata::GetActualArgumentNum(method));\n\t\t\tCopyStackObject(stackBasePtr, argBase, imi->argStackObjectSize);\n\t\t}\n\t\tPUSH_STACK_FRAME(method, (uintptr_t)newFrame);\n\t\treturn newFrame;\n\t}\n\n\tInterpFrame* InterpFrameGroup::LeaveFrame()\n\t{\n\t\tIL2CPP_ASSERT(_machineState.GetFrameTopIdx() > _frameBaseIdx);\n\t\tPOP_STACK_FRAME();\n\t\tInterpFrame* frame = _machineState.GetTopFrame();\n#if HYBRIDCLR_ENABLE_PROFILER\n\t\til2cpp_codegen_profiler_method_exit(frame->method);\n#endif\n\t\tif (frame->exFlowBase)\n\t\t{\n\t\t\t_machineState.SetExceptionFlowTop(frame->exFlowBase);\n\t\t}\n\t\t_machineState.PopFrame();\n\t\t_machineState.SetStackTop(frame->oldStackTop);\n\t\t_machineState.SetLocalPoolBottomIdx(frame->oldLocalPoolBottomIdx);\n\t\treturn _machineState.GetFrameTopIdx() > _frameBaseIdx ? _machineState.GetTopFrame() : nullptr;\n\t}\n\n\tstatic bool FrameNeedsSkipped(const Il2CppStackFrameInfo& frame)\n\t{\n\t\tconst MethodInfo* method = frame.method;\n\t\tconst Il2CppClass* klass = method->klass;\n\t\treturn (strcmp(klass->namespaze, \"System.Diagnostics\") == 0 &&\n\t\t\t(strcmp(klass->name, \"StackFrame\") == 0 || strcmp(klass->name, \"StackTrace\") == 0))\n\t\t\t|| (strcmp(klass->namespaze, \"UnityEngine\") == 0\n\t\t\t\t&& (strcmp(klass->name, \"StackTraceUtility\") == 0\n\t\t\t\t\t|| strcmp(klass->name, \"Debug\") == 0\n\t\t\t\t\t|| strcmp(klass->name, \"Logger\") == 0\n\t\t\t\t\t|| strcmp(klass->name, \"DebugLogHandler\") == 0));\n\t}\n\n\tstatic void SetupStackFrameInfo(const InterpFrame* frame, Il2CppStackFrameInfo& stackFrame)\n\t{\n\t\tconst MethodInfo* method = frame->method;\n\t\tconst InterpMethodInfo* imi = (const InterpMethodInfo*)method->interpData;\n\t\tconst byte* actualIp = (const byte*)frame->ip;\n\n\t\tstackFrame.method = method;\n\t\tstackFrame.raw_ip = (uintptr_t)frame;\n\n\t\tif (!hybridclr::metadata::IsInterpreterMethod(method))\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t\n\t\thybridclr::metadata::InterpreterImage* interpImage = hybridclr::metadata::MetadataModule::GetImage(method);\n\t\tif (!interpImage)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\thybridclr::metadata::PDBImage* pdbImage = interpImage->GetPDBImage();\n\t\tif (!pdbImage)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tpdbImage->SetupStackFrameInfo(method, actualIp, stackFrame);\n\t}\n\n\tvoid MachineState::CollectFrames(il2cpp::vm::StackFrames* stackFrames)\n\t{\n\t\tif (_frameTopIdx <= 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tsize_t insertIndex = 0;\n\t\tfor (; insertIndex < stackFrames->size(); insertIndex++)\n\t\t{\n\t\t\tif (FrameNeedsSkipped((*stackFrames)[insertIndex]))\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tstackFrames->insert(stackFrames->begin() + insertIndex, _frameTopIdx, Il2CppStackFrameInfo());\n\t\tfor (int32_t i = 0; i < _frameTopIdx; i++)\n\t\t{\n\t\t\tSetupStackFrameInfo(_frameBase + i, (*stackFrames)[insertIndex + i]);\n\t\t}\n\t}\n\n\tvoid MachineState::SetupFramesDebugInfo(il2cpp::vm::StackFrames* stackFrames)\n\t{\n\t\tfor (Il2CppStackFrameInfo& frame : *stackFrames)\n\t\t{\n\t\t\tif (frame.method && hybridclr::metadata::IsInterpreterImplement(frame.method))\n\t\t\t{\n\t\t\t\thybridclr::metadata::InterpreterImage* interpImage = hybridclr::metadata::MetadataModule::GetImage(frame.method);\n\t\t\t\tif (interpImage)\n\t\t\t\t{\n\t\t\t\t\thybridclr::metadata::PDBImage* pdbImage = interpImage->GetPDBImage();\n\t\t\t\t\tif (pdbImage)\n\t\t\t\t\t{\n\t\t\t\t\t\tpdbImage->SetupStackFrameInfo(frame.method, (const byte*)(((InterpFrame*)frame.raw_ip)->ip), frame);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n}\n\n"
  },
  {
    "path": "hybridclr/interpreter/Engine.h",
    "content": "#pragma once\n\n#include <stack>\n\n#include \"../CommonDef.h\"\n\n#include \"gc/GarbageCollector.h\"\n#include \"vm/Exception.h\"\n#include \"vm/StackTrace.h\"\n\n#include \"../metadata/MetadataUtil.h\"\n#include \"../RuntimeConfig.h\"\n\n#include \"InterpreterDefs.h\"\n#include \"MemoryUtil.h\"\n#include \"MethodBridge.h\"\n#include <algorithm>\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tclass MachineState\n\t{\n\tpublic:\n\t\tMachineState()\n\t\t{\n\t\t\t_stackSize = -1;\n\t\t\t_stackBase = nullptr;\n\t\t\t_stackTopIdx = 0;\n\t\t\t_localPoolBottomIdx = -1;\n\n\t\t\t_frameBase = nullptr;\n\t\t\t_frameCount = -1;\n\t\t\t_frameTopIdx = 0;\n\n\t\t\t_exceptionFlowBase = nullptr;\n\t\t\t_exceptionFlowCount = -1;\n\t\t\t_exceptionFlowTopIdx = 0;\n\t\t}\n\n\t\t~MachineState()\n\t\t{\n\t\t\tif (_stackBase)\n\t\t\t{\n\t\t\t\t//il2cpp::gc::GarbageCollector::FreeFixed(_stackBase);\n\t\t\t\til2cpp::gc::GarbageCollector::UnregisterDynamicRoot(this);\n\t\t\t\tHYBRIDCLR_FREE(_stackBase);\n\t\t\t}\n\t\t\tif (_frameBase)\n\t\t\t{\n\t\t\t\tHYBRIDCLR_FREE(_frameBase);\n\t\t\t}\n\t\t\tif (_exceptionFlowBase)\n\t\t\t{\n\t\t\t\tHYBRIDCLR_FREE(_exceptionFlowBase);\n\t\t\t}\n\t\t}\n\n\t\tstatic std::pair<char*, size_t> GetGCRootData(void* root)\n\t\t{\n\t\t\tMachineState* machineState = (MachineState*)root;\n\t\t\tif (machineState->_stackBase && machineState->_stackTopIdx > 0)\n\t\t\t{\n\t\t\t\treturn std::make_pair((char*)machineState->_stackBase, machineState->_stackTopIdx * sizeof(StackObject));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn std::make_pair(nullptr, 0);\n\t\t\t}\n\t\t}\n\n\t\tStackObject* AllocArgments(int32_t argCount)\n\t\t{\n\t\t\treturn AllocStackSlot(argCount);\n\t\t}\n\n\t\tStackObject* GetStackBasePtr() const\n\t\t{\n\t\t\treturn _stackBase;\n\t\t}\n\n\t\tint32_t GetStackTop() const\n\t\t{\n\t\t\treturn _stackTopIdx;\n\t\t}\n\n\t\tStackObject* AllocStackSlot(int32_t slotNum)\n\t\t{\n\t\t\tif (_stackTopIdx + slotNum > _localPoolBottomIdx)\n\t\t\t{\n\t\t\t\tif (!_stackBase)\n\t\t\t\t{\n\t\t\t\t\tInitEvalStack();\n\t\t\t\t}\n\t\t\t\tif (_stackTopIdx + slotNum > _localPoolBottomIdx)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetStackOverflowException(\"AllocStackSlot\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\tStackObject* dataPtr = _stackBase + _stackTopIdx;\n\t\t\t_stackTopIdx += slotNum;\n#if DEBUG\n\t\t\tstd::memset(dataPtr, 0xEA, slotNum * sizeof(StackObject));\n#endif\n\t\t\treturn dataPtr;\n\t\t}\n\n\t\tvoid* AllocLocalloc(size_t size)\n\t\t{\n\t\t\tIL2CPP_ASSERT(size % 8 == 0);\n\t\t\tint32_t slotNum = (int32_t)(size / 8);\n\t\t\tIL2CPP_ASSERT(slotNum > 0);\n\t\t\tif (_stackTopIdx + slotNum > _localPoolBottomIdx)\n\t\t\t{\n\t\t\t\tif (!_stackBase)\n\t\t\t\t{\n\t\t\t\t\tInitEvalStack();\n\t\t\t\t}\n\t\t\t\tif (_stackTopIdx + slotNum > _localPoolBottomIdx)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetStackOverflowException(\"AllocLocalloc\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\t_localPoolBottomIdx -= slotNum;\n\t\t\treturn _stackBase + _localPoolBottomIdx;\n\t\t}\n\n\t\tvoid SetStackTop(int32_t oldTop)\n\t\t{\n\t\t\t_stackTopIdx = oldTop;\n\t\t}\n\n\t\tuint32_t GetFrameTopIdx() const\n\t\t{\n\t\t\treturn _frameTopIdx;\n\t\t}\n\n\t\tint32_t GetLocalPoolBottomIdx() const\n\t\t{\n\t\t\treturn _localPoolBottomIdx;\n\t\t}\n\n\t\tvoid SetLocalPoolBottomIdx(int32_t idx)\n\t\t{\n\t\t\t_localPoolBottomIdx = idx;\n\t\t}\n\n\t\tInterpFrame* PushFrame()\n\t\t{\n\t\t\tif (_frameTopIdx >= _frameCount)\n\t\t\t{\n\t\t\t\tif (!_frameBase)\n\t\t\t\t{\n\t\t\t\t\tInitFrames();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetStackOverflowException(\"AllocFrame\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _frameBase + _frameTopIdx++;\n\t\t}\n\n\t\tvoid PopFrame()\n\t\t{\n\t\t\tIL2CPP_ASSERT(_frameTopIdx > 0);\n\t\t\t--_frameTopIdx;\n\t\t}\n\n\t\tvoid PopFrameN(int32_t count)\n\t\t{\n\t\t\tIL2CPP_ASSERT(count > 0 && _frameTopIdx >= count);\n\t\t\t_frameTopIdx -= count;\n\t\t}\n\n\t\tInterpFrame* GetTopFrame() const\n\t\t{\n\t\t\tif (_frameTopIdx > 0)\n\t\t\t{\n\t\t\t\treturn _frameBase + _frameTopIdx - 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn nullptr;\n\t\t\t}\n\t\t}\n\n\t\tExceptionFlowInfo* AllocExceptionFlow(int32_t count)\n\t\t{\n\t\t\tif (_exceptionFlowTopIdx + count >= _exceptionFlowCount)\n\t\t\t{\n\t\t\t\tif (!_exceptionFlowBase)\n\t\t\t\t{\n\t\t\t\t\tInitExceptionFlows();\n\t\t\t\t}\n\t\t\t\tif (_exceptionFlowTopIdx + count >= _exceptionFlowCount)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(\"AllocExceptionFlowZero\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\tExceptionFlowInfo* efi = _exceptionFlowBase + _exceptionFlowTopIdx;\n\t\t\t_exceptionFlowTopIdx += count;\n\t\t\treturn efi;\n\t\t}\n\n\t\tuint32_t GetExceptionFlowTopIdx() const\n\t\t{\n\t\t\treturn _exceptionFlowTopIdx;\n\t\t}\n\n\t\tvoid SetExceptionFlowTopIdx(uint32_t exTopIdx)\n\t\t{\n\t\t\t_exceptionFlowTopIdx = exTopIdx;\n\t\t}\n\n\t\tvoid SetExceptionFlowTop(ExceptionFlowInfo* top)\n\t\t{\n\t\t\t_exceptionFlowTopIdx = (int32_t)(top - _exceptionFlowBase);\n\t\t\tIL2CPP_ASSERT(_exceptionFlowTopIdx >= 0 && _exceptionFlowTopIdx <= _exceptionFlowCount);\n\t\t}\n\n\t\tvoid PushExecutingImage(const Il2CppImage* image)\n\t\t{\n\t\t\t_executingImageStack.push(image);\n\t\t}\n\n\t\tvoid PopExecutingImage()\n\t\t{\n\t\t\t_executingImageStack.pop();\n\t\t}\n\n\t\tconst Il2CppImage* GetTopExecutingImage() const\n\t\t{\n\t\t\tif (_executingImageStack.empty())\n\t\t\t{\n\t\t\t\treturn nullptr;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn _executingImageStack.top();\n\t\t\t}\n\t\t}\n\n\t\tvoid CollectFrames(il2cpp::vm::StackFrames* stackFrames);\n\t\tvoid SetupFramesDebugInfo(il2cpp::vm::StackFrames* stackFrames);\n\n\tprivate:\n\n\n\t\tvoid InitEvalStack()\n\t\t{\n\t\t\t_stackSize = (int32_t)RuntimeConfig::GetInterpreterThreadObjectStackSize();\n\t\t\t_stackBase = (StackObject*)HYBRIDCLR_MALLOC_ZERO(RuntimeConfig::GetInterpreterThreadObjectStackSize() * sizeof(StackObject));\n\t\t\t_stackTopIdx = 0;\n\t\t\t_localPoolBottomIdx = _stackSize;\n\t\t\til2cpp::gc::GarbageCollector::RegisterDynamicRoot(this, GetGCRootData);\n\t\t}\n\n\t\tvoid InitFrames()\n\t\t{\n\t\t\t_frameBase = (InterpFrame*)HYBRIDCLR_CALLOC(RuntimeConfig::GetInterpreterThreadFrameStackSize(), sizeof(InterpFrame));\n\t\t\t_frameCount = (int32_t)RuntimeConfig::GetInterpreterThreadFrameStackSize();\n\t\t\t_frameTopIdx = 0;\n\t\t}\n\n\t\tvoid InitExceptionFlows()\n\t\t{\n\t\t\t_exceptionFlowBase = (ExceptionFlowInfo*)HYBRIDCLR_CALLOC(RuntimeConfig::GetInterpreterThreadExceptionFlowSize(), sizeof(ExceptionFlowInfo));\n\t\t\t_exceptionFlowCount = (int32_t)RuntimeConfig::GetInterpreterThreadExceptionFlowSize();\n\t\t\t_exceptionFlowTopIdx = 0;\n\t\t}\n\n\t\tStackObject* _stackBase;\n\t\tint32_t _stackSize;\n\t\tint32_t _stackTopIdx;\n\t\tint32_t _localPoolBottomIdx;\n\n\t\tInterpFrame* _frameBase;\n\t\tint32_t _frameTopIdx;\n\t\tint32_t _frameCount;\n\n\t\tExceptionFlowInfo* _exceptionFlowBase;\n\t\tint32_t _exceptionFlowTopIdx;\n\t\tint32_t _exceptionFlowCount;\n\n\n\t\tstd::stack<const Il2CppImage*> _executingImageStack;\n\t};\n\n\tclass ExecutingInterpImageScope\n\t{\n\tpublic:\n\t\tExecutingInterpImageScope(MachineState& state, const Il2CppImage* image) : _state(state)\n\t\t{\n\t\t\t_state.PushExecutingImage(image);\n\t\t}\n\n\t\t~ExecutingInterpImageScope()\n\t\t{\n\t\t\t_state.PopExecutingImage();\n\t\t}\n\t\t\n\tprivate:\n\t\tMachineState& _state;\n\t};\n\n\tclass InterpFrameGroup\n\t{\n\tpublic:\n\t\tInterpFrameGroup(MachineState& ms) : _machineState(ms), _stackBaseIdx(ms.GetStackTop()), _frameBaseIdx(ms.GetFrameTopIdx())\n\t\t{\n\n\t\t}\n\n\t\tvoid CleanUpFrames()\n\t\t{\n\t\t\tIL2CPP_ASSERT(_machineState.GetFrameTopIdx() >= _frameBaseIdx);\n\t\t\tuint32_t n = _machineState.GetFrameTopIdx() - _frameBaseIdx;\n\t\t\tif (n > 0)\n\t\t\t{\n\t\t\t\tfor (uint32_t i = 0; i < n; i++)\n\t\t\t\t{\n\t\t\t\t\tLeaveFrame();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tInterpFrame* EnterFrameFromInterpreter(const MethodInfo* method, StackObject* argBase);\n\n\t\tInterpFrame* EnterFrameFromNative(const MethodInfo* method, StackObject* argBase);\n\n\t\tInterpFrame* LeaveFrame();\n\n\t\tvoid* AllocLoc(size_t originSize, bool fillZero)\n\t\t{\n\t\t\tif (originSize == 0)\n\t\t\t{\n\t\t\t\treturn nullptr;\n\t\t\t}\n\t\t\tsize_t size = (originSize + 7) & ~(size_t)7;\n\t\t\tvoid* data = _machineState.AllocLocalloc(size);\n\t\t\tif (fillZero)\n\t\t\t{\n\t\t\t\tstd::memset(data, 0, size);\n\t\t\t}\n\t\t\treturn data;\n \t\t}\n\n\t\tsize_t GetFrameCount() const { return _machineState.GetFrameTopIdx() - _frameBaseIdx; }\n\tprivate:\n\t\tMachineState& _machineState;\n\t\tint32_t _stackBaseIdx;\n\t\tuint32_t _frameBaseIdx;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/InstrinctDef.h",
    "content": "#pragma once\n#include \"../CommonDef.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tstruct HtVector2f\n\t{\n\t\tfloat x;\n\t\tfloat y;\n\t};\n\tstatic_assert(sizeof(HtVector2f) == 8, \"Vector2f\");\n\n\tstruct HtVector3f\n\t{\n\t\tfloat x;\n\t\tfloat y;\n\t\tfloat z;\n\t};\n\tstatic_assert(sizeof(HtVector3f) == 12, \"Vector3f\");\n\n\tstruct HtVector4f\n\t{\n\t\tfloat x;\n\t\tfloat y;\n\t\tfloat z;\n\t\tfloat w;\n\t};\n\tstatic_assert(sizeof(HtVector4f) == 16, \"Vector4f\");\n\n\tstruct HtVector2d\n\t{\n\t\tdouble x;\n\t\tdouble y;\n\t};\n\tstatic_assert(sizeof(HtVector2d) == 16, \"Vector2d\");\n\n\tstruct HtVector3d\n\t{\n\t\tdouble x;\n\t\tdouble y;\n\t\tdouble z;\n\t};\n\tstatic_assert(sizeof(HtVector3d) == 24, \"Vector3d\");\n\n\tstruct HtVector4d\n\t{\n\t\tdouble x;\n\t\tdouble y;\n\t\tdouble z;\n\t\tdouble w;\n\t};\n\tstatic_assert(sizeof(HtVector4d) == 32, \"Vector4d\");\n\n\tstruct HtVector2i\n\t{\n\t\tint32_t x;\n\t\tint32_t y;\n\t};\n\tstatic_assert(sizeof(HtVector2i) == 8, \"IntVector2i\");\n\n\tstruct HtVector3i\n\t{\n\t\tint32_t x;\n\t\tint32_t y;\n\t\tint32_t z;\n\t};\n\tstatic_assert(sizeof(HtVector3i) == 12, \"IntVector3i\");\n\n\tstruct HtVector4i\n\t{\n\t\tint32_t x;\n\t\tint32_t y;\n\t\tint32_t z;\n\t\tint32_t w;\n\t};\n\tstatic_assert(sizeof(HtVector4i) == 16, \"IntVector4i\");\n\n#pragma endregion\n\n}\n}\n"
  },
  {
    "path": "hybridclr/interpreter/Instruction.cpp",
    "content": "#include \"Instruction.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n    uint16_t g_instructionSizes[] =\n    {\n\t\t0,\n        //!!!{{INST_SIZE\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t8,\n\t\t16,\n\t\t24,\n\t\t24,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t24,\n\t\t24,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t24,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t16,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t16,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\t\t8,\n\n        //!!!}}INST_SIZE\n    };\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/Instruction.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tenum class PrefixFlags\n\t{\n\t\tNone = 0,\n\t\tConstrained = 0x1,\n\t\tNo = 0x2,\n\t\tReadOnly = 0x4,\n\t\tTail = 0x8,\n\t\tUnaligned = 0x10,\n\t\tVolatile = 0x20,\n\t};\n\n\textern uint16_t g_instructionSizes[];\n\n\tenum class HiOpcodeEnum : uint16_t\n\t{\n\t\tNone,\n\t\t//!!!{{OPCODE\n\t\tInitLocals_n_2,\n\t\tInitLocals_n_4,\n\t\tInitLocals_size_8,\n\t\tInitLocals_size_16,\n\t\tInitLocals_size_24,\n\t\tInitLocals_size_32,\n\t\tInitInlineLocals_n_2,\n\t\tInitInlineLocals_n_4,\n\t\tInitInlineLocals_size_8,\n\t\tInitInlineLocals_size_16,\n\t\tInitInlineLocals_size_24,\n\t\tInitInlineLocals_size_32,\n\t\tLdlocVarVar,\n\t\tLdlocExpandVarVar_i1,\n\t\tLdlocExpandVarVar_u1,\n\t\tLdlocExpandVarVar_i2,\n\t\tLdlocExpandVarVar_u2,\n\t\tLdlocVarVarSize,\n\t\tLdlocVarAddress,\n\t\tLdcVarConst_1,\n\t\tLdcVarConst_2,\n\t\tLdcVarConst_4,\n\t\tLdcVarConst_8,\n\t\tLdnullVar,\n\t\tLdindVarVar_i1,\n\t\tLdindVarVar_u1,\n\t\tLdindVarVar_i2,\n\t\tLdindVarVar_u2,\n\t\tLdindVarVar_i4,\n\t\tLdindVarVar_u4,\n\t\tLdindVarVar_i8,\n\t\tLdindVarVar_f4,\n\t\tLdindVarVar_f8,\n\t\tStindVarVar_i1,\n\t\tStindVarVar_i2,\n\t\tStindVarVar_i4,\n\t\tStindVarVar_i8,\n\t\tStindVarVar_f4,\n\t\tStindVarVar_f8,\n\t\tStindVarVar_ref,\n\t\tLocalAllocVarVar_n_2,\n\t\tLocalAllocVarVar_n_4,\n\t\tInitblkVarVarVar,\n\t\tCpblkVarVar,\n\t\tMemoryBarrier,\n\t\tConvertVarVar_i4_i1,\n\t\tConvertVarVar_i4_u1,\n\t\tConvertVarVar_i4_i2,\n\t\tConvertVarVar_i4_u2,\n\t\tConvertVarVar_i4_i4,\n\t\tConvertVarVar_i4_u4,\n\t\tConvertVarVar_i4_i8,\n\t\tConvertVarVar_i4_u8,\n\t\tConvertVarVar_i4_f4,\n\t\tConvertVarVar_i4_f8,\n\t\tConvertVarVar_u4_i1,\n\t\tConvertVarVar_u4_u1,\n\t\tConvertVarVar_u4_i2,\n\t\tConvertVarVar_u4_u2,\n\t\tConvertVarVar_u4_i4,\n\t\tConvertVarVar_u4_u4,\n\t\tConvertVarVar_u4_i8,\n\t\tConvertVarVar_u4_u8,\n\t\tConvertVarVar_u4_f4,\n\t\tConvertVarVar_u4_f8,\n\t\tConvertVarVar_i8_i1,\n\t\tConvertVarVar_i8_u1,\n\t\tConvertVarVar_i8_i2,\n\t\tConvertVarVar_i8_u2,\n\t\tConvertVarVar_i8_i4,\n\t\tConvertVarVar_i8_u4,\n\t\tConvertVarVar_i8_i8,\n\t\tConvertVarVar_i8_u8,\n\t\tConvertVarVar_i8_f4,\n\t\tConvertVarVar_i8_f8,\n\t\tConvertVarVar_u8_i1,\n\t\tConvertVarVar_u8_u1,\n\t\tConvertVarVar_u8_i2,\n\t\tConvertVarVar_u8_u2,\n\t\tConvertVarVar_u8_i4,\n\t\tConvertVarVar_u8_u4,\n\t\tConvertVarVar_u8_i8,\n\t\tConvertVarVar_u8_u8,\n\t\tConvertVarVar_u8_f4,\n\t\tConvertVarVar_u8_f8,\n\t\tConvertVarVar_f4_i1,\n\t\tConvertVarVar_f4_u1,\n\t\tConvertVarVar_f4_i2,\n\t\tConvertVarVar_f4_u2,\n\t\tConvertVarVar_f4_i4,\n\t\tConvertVarVar_f4_u4,\n\t\tConvertVarVar_f4_i8,\n\t\tConvertVarVar_f4_u8,\n\t\tConvertVarVar_f4_f4,\n\t\tConvertVarVar_f4_f8,\n\t\tConvertVarVar_f8_i1,\n\t\tConvertVarVar_f8_u1,\n\t\tConvertVarVar_f8_i2,\n\t\tConvertVarVar_f8_u2,\n\t\tConvertVarVar_f8_i4,\n\t\tConvertVarVar_f8_u4,\n\t\tConvertVarVar_f8_i8,\n\t\tConvertVarVar_f8_u8,\n\t\tConvertVarVar_f8_f4,\n\t\tConvertVarVar_f8_f8,\n\t\tConvertOverflowVarVar_i4_i1,\n\t\tConvertOverflowVarVar_i4_u1,\n\t\tConvertOverflowVarVar_i4_i2,\n\t\tConvertOverflowVarVar_i4_u2,\n\t\tConvertOverflowVarVar_i4_i4,\n\t\tConvertOverflowVarVar_i4_u4,\n\t\tConvertOverflowVarVar_i4_i8,\n\t\tConvertOverflowVarVar_i4_u8,\n\t\tConvertOverflowVarVar_u4_i1,\n\t\tConvertOverflowVarVar_u4_u1,\n\t\tConvertOverflowVarVar_u4_i2,\n\t\tConvertOverflowVarVar_u4_u2,\n\t\tConvertOverflowVarVar_u4_i4,\n\t\tConvertOverflowVarVar_u4_u4,\n\t\tConvertOverflowVarVar_u4_i8,\n\t\tConvertOverflowVarVar_u4_u8,\n\t\tConvertOverflowVarVar_i8_i1,\n\t\tConvertOverflowVarVar_i8_u1,\n\t\tConvertOverflowVarVar_i8_i2,\n\t\tConvertOverflowVarVar_i8_u2,\n\t\tConvertOverflowVarVar_i8_i4,\n\t\tConvertOverflowVarVar_i8_u4,\n\t\tConvertOverflowVarVar_i8_i8,\n\t\tConvertOverflowVarVar_i8_u8,\n\t\tConvertOverflowVarVar_u8_i1,\n\t\tConvertOverflowVarVar_u8_u1,\n\t\tConvertOverflowVarVar_u8_i2,\n\t\tConvertOverflowVarVar_u8_u2,\n\t\tConvertOverflowVarVar_u8_i4,\n\t\tConvertOverflowVarVar_u8_u4,\n\t\tConvertOverflowVarVar_u8_i8,\n\t\tConvertOverflowVarVar_u8_u8,\n\t\tConvertOverflowVarVar_f4_i1,\n\t\tConvertOverflowVarVar_f4_u1,\n\t\tConvertOverflowVarVar_f4_i2,\n\t\tConvertOverflowVarVar_f4_u2,\n\t\tConvertOverflowVarVar_f4_i4,\n\t\tConvertOverflowVarVar_f4_u4,\n\t\tConvertOverflowVarVar_f4_i8,\n\t\tConvertOverflowVarVar_f4_u8,\n\t\tConvertOverflowVarVar_f8_i1,\n\t\tConvertOverflowVarVar_f8_u1,\n\t\tConvertOverflowVarVar_f8_i2,\n\t\tConvertOverflowVarVar_f8_u2,\n\t\tConvertOverflowVarVar_f8_i4,\n\t\tConvertOverflowVarVar_f8_u4,\n\t\tConvertOverflowVarVar_f8_i8,\n\t\tConvertOverflowVarVar_f8_u8,\n\t\tBinOpVarVarVar_Add_i4,\n\t\tBinOpVarVarVar_Sub_i4,\n\t\tBinOpVarVarVar_Mul_i4,\n\t\tBinOpVarVarVar_MulUn_i4,\n\t\tBinOpVarVarVar_Div_i4,\n\t\tBinOpVarVarVar_DivUn_i4,\n\t\tBinOpVarVarVar_Rem_i4,\n\t\tBinOpVarVarVar_RemUn_i4,\n\t\tBinOpVarVarVar_And_i4,\n\t\tBinOpVarVarVar_Or_i4,\n\t\tBinOpVarVarVar_Xor_i4,\n\t\tBinOpVarVarVar_Add_i8,\n\t\tBinOpVarVarVar_Sub_i8,\n\t\tBinOpVarVarVar_Mul_i8,\n\t\tBinOpVarVarVar_MulUn_i8,\n\t\tBinOpVarVarVar_Div_i8,\n\t\tBinOpVarVarVar_DivUn_i8,\n\t\tBinOpVarVarVar_Rem_i8,\n\t\tBinOpVarVarVar_RemUn_i8,\n\t\tBinOpVarVarVar_And_i8,\n\t\tBinOpVarVarVar_Or_i8,\n\t\tBinOpVarVarVar_Xor_i8,\n\t\tBinOpVarVarVar_Add_f4,\n\t\tBinOpVarVarVar_Sub_f4,\n\t\tBinOpVarVarVar_Mul_f4,\n\t\tBinOpVarVarVar_Div_f4,\n\t\tBinOpVarVarVar_Rem_f4,\n\t\tBinOpVarVarVar_Add_f8,\n\t\tBinOpVarVarVar_Sub_f8,\n\t\tBinOpVarVarVar_Mul_f8,\n\t\tBinOpVarVarVar_Div_f8,\n\t\tBinOpVarVarVar_Rem_f8,\n\t\tBinOpOverflowVarVarVar_Add_i4,\n\t\tBinOpOverflowVarVarVar_Sub_i4,\n\t\tBinOpOverflowVarVarVar_Mul_i4,\n\t\tBinOpOverflowVarVarVar_Add_i8,\n\t\tBinOpOverflowVarVarVar_Sub_i8,\n\t\tBinOpOverflowVarVarVar_Mul_i8,\n\t\tBinOpOverflowVarVarVar_Add_u4,\n\t\tBinOpOverflowVarVarVar_Sub_u4,\n\t\tBinOpOverflowVarVarVar_Mul_u4,\n\t\tBinOpOverflowVarVarVar_Add_u8,\n\t\tBinOpOverflowVarVarVar_Sub_u8,\n\t\tBinOpOverflowVarVarVar_Mul_u8,\n\t\tBitShiftBinOpVarVarVar_Shl_i4_i4,\n\t\tBitShiftBinOpVarVarVar_Shr_i4_i4,\n\t\tBitShiftBinOpVarVarVar_ShrUn_i4_i4,\n\t\tBitShiftBinOpVarVarVar_Shl_i4_i8,\n\t\tBitShiftBinOpVarVarVar_Shr_i4_i8,\n\t\tBitShiftBinOpVarVarVar_ShrUn_i4_i8,\n\t\tBitShiftBinOpVarVarVar_Shl_i8_i4,\n\t\tBitShiftBinOpVarVarVar_Shr_i8_i4,\n\t\tBitShiftBinOpVarVarVar_ShrUn_i8_i4,\n\t\tBitShiftBinOpVarVarVar_Shl_i8_i8,\n\t\tBitShiftBinOpVarVarVar_Shr_i8_i8,\n\t\tBitShiftBinOpVarVarVar_ShrUn_i8_i8,\n\t\tUnaryOpVarVar_Neg_i4,\n\t\tUnaryOpVarVar_Not_i4,\n\t\tUnaryOpVarVar_Neg_i8,\n\t\tUnaryOpVarVar_Not_i8,\n\t\tUnaryOpVarVar_Neg_f4,\n\t\tUnaryOpVarVar_Neg_f8,\n\t\tCheckFiniteVar_f4,\n\t\tCheckFiniteVar_f8,\n\t\tCompOpVarVarVar_Ceq_i4,\n\t\tCompOpVarVarVar_Ceq_i8,\n\t\tCompOpVarVarVar_Ceq_f4,\n\t\tCompOpVarVarVar_Ceq_f8,\n\t\tCompOpVarVarVar_Cgt_i4,\n\t\tCompOpVarVarVar_Cgt_i8,\n\t\tCompOpVarVarVar_Cgt_f4,\n\t\tCompOpVarVarVar_Cgt_f8,\n\t\tCompOpVarVarVar_CgtUn_i4,\n\t\tCompOpVarVarVar_CgtUn_i8,\n\t\tCompOpVarVarVar_CgtUn_f4,\n\t\tCompOpVarVarVar_CgtUn_f8,\n\t\tCompOpVarVarVar_Clt_i4,\n\t\tCompOpVarVarVar_Clt_i8,\n\t\tCompOpVarVarVar_Clt_f4,\n\t\tCompOpVarVarVar_Clt_f8,\n\t\tCompOpVarVarVar_CltUn_i4,\n\t\tCompOpVarVarVar_CltUn_i8,\n\t\tCompOpVarVarVar_CltUn_f4,\n\t\tCompOpVarVarVar_CltUn_f8,\n\t\tBranchUncondition_4,\n\t\tBranchTrueVar_i4,\n\t\tBranchTrueVar_i8,\n\t\tBranchFalseVar_i4,\n\t\tBranchFalseVar_i8,\n\t\tBranchVarVar_Ceq_i4,\n\t\tBranchVarVar_Ceq_i8,\n\t\tBranchVarVar_Ceq_f4,\n\t\tBranchVarVar_Ceq_f8,\n\t\tBranchVarVar_CneUn_i4,\n\t\tBranchVarVar_CneUn_i8,\n\t\tBranchVarVar_CneUn_f4,\n\t\tBranchVarVar_CneUn_f8,\n\t\tBranchVarVar_Cgt_i4,\n\t\tBranchVarVar_Cgt_i8,\n\t\tBranchVarVar_Cgt_f4,\n\t\tBranchVarVar_Cgt_f8,\n\t\tBranchVarVar_CgtUn_i4,\n\t\tBranchVarVar_CgtUn_i8,\n\t\tBranchVarVar_CgtUn_f4,\n\t\tBranchVarVar_CgtUn_f8,\n\t\tBranchVarVar_Cge_i4,\n\t\tBranchVarVar_Cge_i8,\n\t\tBranchVarVar_Cge_f4,\n\t\tBranchVarVar_Cge_f8,\n\t\tBranchVarVar_CgeUn_i4,\n\t\tBranchVarVar_CgeUn_i8,\n\t\tBranchVarVar_CgeUn_f4,\n\t\tBranchVarVar_CgeUn_f8,\n\t\tBranchVarVar_Clt_i4,\n\t\tBranchVarVar_Clt_i8,\n\t\tBranchVarVar_Clt_f4,\n\t\tBranchVarVar_Clt_f8,\n\t\tBranchVarVar_CltUn_i4,\n\t\tBranchVarVar_CltUn_i8,\n\t\tBranchVarVar_CltUn_f4,\n\t\tBranchVarVar_CltUn_f8,\n\t\tBranchVarVar_Cle_i4,\n\t\tBranchVarVar_Cle_i8,\n\t\tBranchVarVar_Cle_f4,\n\t\tBranchVarVar_Cle_f8,\n\t\tBranchVarVar_CleUn_i4,\n\t\tBranchVarVar_CleUn_i8,\n\t\tBranchVarVar_CleUn_f4,\n\t\tBranchVarVar_CleUn_f8,\n\t\tBranchJump,\n\t\tBranchSwitch,\n\t\tNewClassVar,\n\t\tNewClassVar_Ctor_0,\n\t\tNewClassVar_NotCtor,\n\t\tNewValueTypeVar,\n\t\tNewValueTypeVar_Ctor_0,\n\t\tNewClassInterpVar,\n\t\tNewClassInterpVar_Ctor_0,\n\t\tNewValueTypeInterpVar,\n\t\tAdjustValueTypeRefVar,\n\t\tBoxRefVarVar,\n\t\tLdvirftnVarVar,\n\t\tRetVar_ret_1,\n\t\tRetVar_ret_2,\n\t\tRetVar_ret_4,\n\t\tRetVar_ret_8,\n\t\tRetVar_ret_12,\n\t\tRetVar_ret_16,\n\t\tRetVar_ret_20,\n\t\tRetVar_ret_24,\n\t\tRetVar_ret_28,\n\t\tRetVar_ret_32,\n\t\tRetVar_ret_n,\n\t\tRetVar_void,\n\t\tCallNativeInstance_void,\n\t\tCallNativeInstance_ret,\n\t\tCallNativeInstance_ret_expand,\n\t\tCallNativeStatic_void,\n\t\tCallNativeStatic_ret,\n\t\tCallNativeStatic_ret_expand,\n\t\tCallInterp_void,\n\t\tCallInterp_ret,\n\t\tCallVirtual_void,\n\t\tCallVirtual_ret,\n\t\tCallVirtual_ret_expand,\n\t\tCallInterpVirtual_void,\n\t\tCallInterpVirtual_ret,\n\t\tCallInd_void,\n\t\tCallInd_ret,\n\t\tCallInd_ret_expand,\n\t\tCallPInvoke_void,\n\t\tCallPInvoke_ret,\n\t\tCallPInvoke_ret_expand,\n\t\tCallDelegateInvoke_void,\n\t\tCallDelegateInvoke_ret,\n\t\tCallDelegateInvoke_ret_expand,\n\t\tCallDelegateBeginInvoke,\n\t\tCallDelegateEndInvoke_void,\n\t\tCallDelegateEndInvoke_ret,\n\t\tNewDelegate,\n\t\tCtorDelegate,\n\t\tCallCommonNativeInstance_v_0,\n\t\tCallCommonNativeInstance_i1_0,\n\t\tCallCommonNativeInstance_u1_0,\n\t\tCallCommonNativeInstance_i2_0,\n\t\tCallCommonNativeInstance_u2_0,\n\t\tCallCommonNativeInstance_i4_0,\n\t\tCallCommonNativeInstance_i8_0,\n\t\tCallCommonNativeInstance_f4_0,\n\t\tCallCommonNativeInstance_f8_0,\n\t\tCallCommonNativeInstance_v_i4_1,\n\t\tCallCommonNativeInstance_v_i4_2,\n\t\tCallCommonNativeInstance_v_i4_3,\n\t\tCallCommonNativeInstance_v_i4_4,\n\t\tCallCommonNativeInstance_v_i8_1,\n\t\tCallCommonNativeInstance_v_i8_2,\n\t\tCallCommonNativeInstance_v_i8_3,\n\t\tCallCommonNativeInstance_v_i8_4,\n\t\tCallCommonNativeInstance_v_f4_1,\n\t\tCallCommonNativeInstance_v_f4_2,\n\t\tCallCommonNativeInstance_v_f4_3,\n\t\tCallCommonNativeInstance_v_f4_4,\n\t\tCallCommonNativeInstance_v_f8_1,\n\t\tCallCommonNativeInstance_v_f8_2,\n\t\tCallCommonNativeInstance_v_f8_3,\n\t\tCallCommonNativeInstance_v_f8_4,\n\t\tCallCommonNativeInstance_u1_i4_1,\n\t\tCallCommonNativeInstance_u1_i4_2,\n\t\tCallCommonNativeInstance_u1_i4_3,\n\t\tCallCommonNativeInstance_u1_i4_4,\n\t\tCallCommonNativeInstance_u1_i8_1,\n\t\tCallCommonNativeInstance_u1_i8_2,\n\t\tCallCommonNativeInstance_u1_i8_3,\n\t\tCallCommonNativeInstance_u1_i8_4,\n\t\tCallCommonNativeInstance_u1_f4_1,\n\t\tCallCommonNativeInstance_u1_f4_2,\n\t\tCallCommonNativeInstance_u1_f4_3,\n\t\tCallCommonNativeInstance_u1_f4_4,\n\t\tCallCommonNativeInstance_u1_f8_1,\n\t\tCallCommonNativeInstance_u1_f8_2,\n\t\tCallCommonNativeInstance_u1_f8_3,\n\t\tCallCommonNativeInstance_u1_f8_4,\n\t\tCallCommonNativeInstance_i4_i4_1,\n\t\tCallCommonNativeInstance_i4_i4_2,\n\t\tCallCommonNativeInstance_i4_i4_3,\n\t\tCallCommonNativeInstance_i4_i4_4,\n\t\tCallCommonNativeInstance_i4_i8_1,\n\t\tCallCommonNativeInstance_i4_i8_2,\n\t\tCallCommonNativeInstance_i4_i8_3,\n\t\tCallCommonNativeInstance_i4_i8_4,\n\t\tCallCommonNativeInstance_i4_f4_1,\n\t\tCallCommonNativeInstance_i4_f4_2,\n\t\tCallCommonNativeInstance_i4_f4_3,\n\t\tCallCommonNativeInstance_i4_f4_4,\n\t\tCallCommonNativeInstance_i4_f8_1,\n\t\tCallCommonNativeInstance_i4_f8_2,\n\t\tCallCommonNativeInstance_i4_f8_3,\n\t\tCallCommonNativeInstance_i4_f8_4,\n\t\tCallCommonNativeInstance_i8_i4_1,\n\t\tCallCommonNativeInstance_i8_i4_2,\n\t\tCallCommonNativeInstance_i8_i4_3,\n\t\tCallCommonNativeInstance_i8_i4_4,\n\t\tCallCommonNativeInstance_i8_i8_1,\n\t\tCallCommonNativeInstance_i8_i8_2,\n\t\tCallCommonNativeInstance_i8_i8_3,\n\t\tCallCommonNativeInstance_i8_i8_4,\n\t\tCallCommonNativeInstance_i8_f4_1,\n\t\tCallCommonNativeInstance_i8_f4_2,\n\t\tCallCommonNativeInstance_i8_f4_3,\n\t\tCallCommonNativeInstance_i8_f4_4,\n\t\tCallCommonNativeInstance_i8_f8_1,\n\t\tCallCommonNativeInstance_i8_f8_2,\n\t\tCallCommonNativeInstance_i8_f8_3,\n\t\tCallCommonNativeInstance_i8_f8_4,\n\t\tCallCommonNativeInstance_f4_i4_1,\n\t\tCallCommonNativeInstance_f4_i4_2,\n\t\tCallCommonNativeInstance_f4_i4_3,\n\t\tCallCommonNativeInstance_f4_i4_4,\n\t\tCallCommonNativeInstance_f4_i8_1,\n\t\tCallCommonNativeInstance_f4_i8_2,\n\t\tCallCommonNativeInstance_f4_i8_3,\n\t\tCallCommonNativeInstance_f4_i8_4,\n\t\tCallCommonNativeInstance_f4_f4_1,\n\t\tCallCommonNativeInstance_f4_f4_2,\n\t\tCallCommonNativeInstance_f4_f4_3,\n\t\tCallCommonNativeInstance_f4_f4_4,\n\t\tCallCommonNativeInstance_f4_f8_1,\n\t\tCallCommonNativeInstance_f4_f8_2,\n\t\tCallCommonNativeInstance_f4_f8_3,\n\t\tCallCommonNativeInstance_f4_f8_4,\n\t\tCallCommonNativeInstance_f8_i4_1,\n\t\tCallCommonNativeInstance_f8_i4_2,\n\t\tCallCommonNativeInstance_f8_i4_3,\n\t\tCallCommonNativeInstance_f8_i4_4,\n\t\tCallCommonNativeInstance_f8_i8_1,\n\t\tCallCommonNativeInstance_f8_i8_2,\n\t\tCallCommonNativeInstance_f8_i8_3,\n\t\tCallCommonNativeInstance_f8_i8_4,\n\t\tCallCommonNativeInstance_f8_f4_1,\n\t\tCallCommonNativeInstance_f8_f4_2,\n\t\tCallCommonNativeInstance_f8_f4_3,\n\t\tCallCommonNativeInstance_f8_f4_4,\n\t\tCallCommonNativeInstance_f8_f8_1,\n\t\tCallCommonNativeInstance_f8_f8_2,\n\t\tCallCommonNativeInstance_f8_f8_3,\n\t\tCallCommonNativeInstance_f8_f8_4,\n\t\tCallCommonNativeStatic_v_0,\n\t\tCallCommonNativeStatic_i1_0,\n\t\tCallCommonNativeStatic_u1_0,\n\t\tCallCommonNativeStatic_i2_0,\n\t\tCallCommonNativeStatic_u2_0,\n\t\tCallCommonNativeStatic_i4_0,\n\t\tCallCommonNativeStatic_i8_0,\n\t\tCallCommonNativeStatic_f4_0,\n\t\tCallCommonNativeStatic_f8_0,\n\t\tCallCommonNativeStatic_v_i4_1,\n\t\tCallCommonNativeStatic_v_i4_2,\n\t\tCallCommonNativeStatic_v_i4_3,\n\t\tCallCommonNativeStatic_v_i4_4,\n\t\tCallCommonNativeStatic_v_i8_1,\n\t\tCallCommonNativeStatic_v_i8_2,\n\t\tCallCommonNativeStatic_v_i8_3,\n\t\tCallCommonNativeStatic_v_i8_4,\n\t\tCallCommonNativeStatic_v_f4_1,\n\t\tCallCommonNativeStatic_v_f4_2,\n\t\tCallCommonNativeStatic_v_f4_3,\n\t\tCallCommonNativeStatic_v_f4_4,\n\t\tCallCommonNativeStatic_v_f8_1,\n\t\tCallCommonNativeStatic_v_f8_2,\n\t\tCallCommonNativeStatic_v_f8_3,\n\t\tCallCommonNativeStatic_v_f8_4,\n\t\tCallCommonNativeStatic_u1_i4_1,\n\t\tCallCommonNativeStatic_u1_i4_2,\n\t\tCallCommonNativeStatic_u1_i4_3,\n\t\tCallCommonNativeStatic_u1_i4_4,\n\t\tCallCommonNativeStatic_u1_i8_1,\n\t\tCallCommonNativeStatic_u1_i8_2,\n\t\tCallCommonNativeStatic_u1_i8_3,\n\t\tCallCommonNativeStatic_u1_i8_4,\n\t\tCallCommonNativeStatic_u1_f4_1,\n\t\tCallCommonNativeStatic_u1_f4_2,\n\t\tCallCommonNativeStatic_u1_f4_3,\n\t\tCallCommonNativeStatic_u1_f4_4,\n\t\tCallCommonNativeStatic_u1_f8_1,\n\t\tCallCommonNativeStatic_u1_f8_2,\n\t\tCallCommonNativeStatic_u1_f8_3,\n\t\tCallCommonNativeStatic_u1_f8_4,\n\t\tCallCommonNativeStatic_i4_i4_1,\n\t\tCallCommonNativeStatic_i4_i4_2,\n\t\tCallCommonNativeStatic_i4_i4_3,\n\t\tCallCommonNativeStatic_i4_i4_4,\n\t\tCallCommonNativeStatic_i4_i8_1,\n\t\tCallCommonNativeStatic_i4_i8_2,\n\t\tCallCommonNativeStatic_i4_i8_3,\n\t\tCallCommonNativeStatic_i4_i8_4,\n\t\tCallCommonNativeStatic_i4_f4_1,\n\t\tCallCommonNativeStatic_i4_f4_2,\n\t\tCallCommonNativeStatic_i4_f4_3,\n\t\tCallCommonNativeStatic_i4_f4_4,\n\t\tCallCommonNativeStatic_i4_f8_1,\n\t\tCallCommonNativeStatic_i4_f8_2,\n\t\tCallCommonNativeStatic_i4_f8_3,\n\t\tCallCommonNativeStatic_i4_f8_4,\n\t\tCallCommonNativeStatic_i8_i4_1,\n\t\tCallCommonNativeStatic_i8_i4_2,\n\t\tCallCommonNativeStatic_i8_i4_3,\n\t\tCallCommonNativeStatic_i8_i4_4,\n\t\tCallCommonNativeStatic_i8_i8_1,\n\t\tCallCommonNativeStatic_i8_i8_2,\n\t\tCallCommonNativeStatic_i8_i8_3,\n\t\tCallCommonNativeStatic_i8_i8_4,\n\t\tCallCommonNativeStatic_i8_f4_1,\n\t\tCallCommonNativeStatic_i8_f4_2,\n\t\tCallCommonNativeStatic_i8_f4_3,\n\t\tCallCommonNativeStatic_i8_f4_4,\n\t\tCallCommonNativeStatic_i8_f8_1,\n\t\tCallCommonNativeStatic_i8_f8_2,\n\t\tCallCommonNativeStatic_i8_f8_3,\n\t\tCallCommonNativeStatic_i8_f8_4,\n\t\tCallCommonNativeStatic_f4_i4_1,\n\t\tCallCommonNativeStatic_f4_i4_2,\n\t\tCallCommonNativeStatic_f4_i4_3,\n\t\tCallCommonNativeStatic_f4_i4_4,\n\t\tCallCommonNativeStatic_f4_i8_1,\n\t\tCallCommonNativeStatic_f4_i8_2,\n\t\tCallCommonNativeStatic_f4_i8_3,\n\t\tCallCommonNativeStatic_f4_i8_4,\n\t\tCallCommonNativeStatic_f4_f4_1,\n\t\tCallCommonNativeStatic_f4_f4_2,\n\t\tCallCommonNativeStatic_f4_f4_3,\n\t\tCallCommonNativeStatic_f4_f4_4,\n\t\tCallCommonNativeStatic_f4_f8_1,\n\t\tCallCommonNativeStatic_f4_f8_2,\n\t\tCallCommonNativeStatic_f4_f8_3,\n\t\tCallCommonNativeStatic_f4_f8_4,\n\t\tCallCommonNativeStatic_f8_i4_1,\n\t\tCallCommonNativeStatic_f8_i4_2,\n\t\tCallCommonNativeStatic_f8_i4_3,\n\t\tCallCommonNativeStatic_f8_i4_4,\n\t\tCallCommonNativeStatic_f8_i8_1,\n\t\tCallCommonNativeStatic_f8_i8_2,\n\t\tCallCommonNativeStatic_f8_i8_3,\n\t\tCallCommonNativeStatic_f8_i8_4,\n\t\tCallCommonNativeStatic_f8_f4_1,\n\t\tCallCommonNativeStatic_f8_f4_2,\n\t\tCallCommonNativeStatic_f8_f4_3,\n\t\tCallCommonNativeStatic_f8_f4_4,\n\t\tCallCommonNativeStatic_f8_f8_1,\n\t\tCallCommonNativeStatic_f8_f8_2,\n\t\tCallCommonNativeStatic_f8_f8_3,\n\t\tCallCommonNativeStatic_f8_f8_4,\n\t\tBoxVarVar,\n\t\tUnBoxVarVar,\n\t\tUnBoxAnyVarVar,\n\t\tCastclassVar,\n\t\tIsInstVar,\n\t\tLdtokenVar,\n\t\tMakeRefVarVar,\n\t\tRefAnyTypeVarVar,\n\t\tRefAnyValueVarVar,\n\t\tCpobjVarVar_ref,\n\t\tCpobjVarVar_1,\n\t\tCpobjVarVar_2,\n\t\tCpobjVarVar_4,\n\t\tCpobjVarVar_8,\n\t\tCpobjVarVar_12,\n\t\tCpobjVarVar_16,\n\t\tCpobjVarVar_20,\n\t\tCpobjVarVar_24,\n\t\tCpobjVarVar_28,\n\t\tCpobjVarVar_32,\n\t\tCpobjVarVar_n_2,\n\t\tCpobjVarVar_n_4,\n\t\tCpobjVarVar_WriteBarrier_n_2,\n\t\tCpobjVarVar_WriteBarrier_n_4,\n\t\tLdobjVarVar_ref,\n\t\tLdobjVarVar_1,\n\t\tLdobjVarVar_2,\n\t\tLdobjVarVar_4,\n\t\tLdobjVarVar_8,\n\t\tLdobjVarVar_12,\n\t\tLdobjVarVar_16,\n\t\tLdobjVarVar_20,\n\t\tLdobjVarVar_24,\n\t\tLdobjVarVar_28,\n\t\tLdobjVarVar_32,\n\t\tLdobjVarVar_n_4,\n\t\tStobjVarVar_ref,\n\t\tStobjVarVar_1,\n\t\tStobjVarVar_2,\n\t\tStobjVarVar_4,\n\t\tStobjVarVar_8,\n\t\tStobjVarVar_12,\n\t\tStobjVarVar_16,\n\t\tStobjVarVar_20,\n\t\tStobjVarVar_24,\n\t\tStobjVarVar_28,\n\t\tStobjVarVar_32,\n\t\tStobjVarVar_n_4,\n\t\tStobjVarVar_WriteBarrier_n_4,\n\t\tInitobjVar_ref,\n\t\tInitobjVar_1,\n\t\tInitobjVar_2,\n\t\tInitobjVar_4,\n\t\tInitobjVar_8,\n\t\tInitobjVar_12,\n\t\tInitobjVar_16,\n\t\tInitobjVar_20,\n\t\tInitobjVar_24,\n\t\tInitobjVar_28,\n\t\tInitobjVar_32,\n\t\tInitobjVar_n_2,\n\t\tInitobjVar_n_4,\n\t\tInitobjVar_WriteBarrier_n_2,\n\t\tInitobjVar_WriteBarrier_n_4,\n\t\tLdstrVar,\n\t\tLdfldVarVar_i1,\n\t\tLdfldVarVar_u1,\n\t\tLdfldVarVar_i2,\n\t\tLdfldVarVar_u2,\n\t\tLdfldVarVar_i4,\n\t\tLdfldVarVar_u4,\n\t\tLdfldVarVar_i8,\n\t\tLdfldVarVar_u8,\n\t\tLdfldVarVar_size_8,\n\t\tLdfldVarVar_size_12,\n\t\tLdfldVarVar_size_16,\n\t\tLdfldVarVar_size_20,\n\t\tLdfldVarVar_size_24,\n\t\tLdfldVarVar_size_28,\n\t\tLdfldVarVar_size_32,\n\t\tLdfldVarVar_n_2,\n\t\tLdfldVarVar_n_4,\n\t\tLdfldValueTypeVarVar_i1,\n\t\tLdfldValueTypeVarVar_u1,\n\t\tLdfldValueTypeVarVar_i2,\n\t\tLdfldValueTypeVarVar_u2,\n\t\tLdfldValueTypeVarVar_i4,\n\t\tLdfldValueTypeVarVar_u4,\n\t\tLdfldValueTypeVarVar_i8,\n\t\tLdfldValueTypeVarVar_u8,\n\t\tLdfldValueTypeVarVar_size_8,\n\t\tLdfldValueTypeVarVar_size_12,\n\t\tLdfldValueTypeVarVar_size_16,\n\t\tLdfldValueTypeVarVar_size_20,\n\t\tLdfldValueTypeVarVar_size_24,\n\t\tLdfldValueTypeVarVar_size_28,\n\t\tLdfldValueTypeVarVar_size_32,\n\t\tLdfldValueTypeVarVar_n_2,\n\t\tLdfldValueTypeVarVar_n_4,\n\t\tLdfldaVarVar,\n\t\tStfldVarVar_i1,\n\t\tStfldVarVar_u1,\n\t\tStfldVarVar_i2,\n\t\tStfldVarVar_u2,\n\t\tStfldVarVar_i4,\n\t\tStfldVarVar_u4,\n\t\tStfldVarVar_i8,\n\t\tStfldVarVar_u8,\n\t\tStfldVarVar_ref,\n\t\tStfldVarVar_size_8,\n\t\tStfldVarVar_size_12,\n\t\tStfldVarVar_size_16,\n\t\tStfldVarVar_size_20,\n\t\tStfldVarVar_size_24,\n\t\tStfldVarVar_size_28,\n\t\tStfldVarVar_size_32,\n\t\tStfldVarVar_n_2,\n\t\tStfldVarVar_n_4,\n\t\tStfldVarVar_WriteBarrier_n_2,\n\t\tStfldVarVar_WriteBarrier_n_4,\n\t\tLdsfldVarVar_i1,\n\t\tLdsfldVarVar_u1,\n\t\tLdsfldVarVar_i2,\n\t\tLdsfldVarVar_u2,\n\t\tLdsfldVarVar_i4,\n\t\tLdsfldVarVar_u4,\n\t\tLdsfldVarVar_i8,\n\t\tLdsfldVarVar_u8,\n\t\tLdsfldVarVar_size_8,\n\t\tLdsfldVarVar_size_12,\n\t\tLdsfldVarVar_size_16,\n\t\tLdsfldVarVar_size_20,\n\t\tLdsfldVarVar_size_24,\n\t\tLdsfldVarVar_size_28,\n\t\tLdsfldVarVar_size_32,\n\t\tLdsfldVarVar_n_2,\n\t\tLdsfldVarVar_n_4,\n\t\tStsfldVarVar_i1,\n\t\tStsfldVarVar_u1,\n\t\tStsfldVarVar_i2,\n\t\tStsfldVarVar_u2,\n\t\tStsfldVarVar_i4,\n\t\tStsfldVarVar_u4,\n\t\tStsfldVarVar_i8,\n\t\tStsfldVarVar_u8,\n\t\tStsfldVarVar_ref,\n\t\tStsfldVarVar_size_8,\n\t\tStsfldVarVar_size_12,\n\t\tStsfldVarVar_size_16,\n\t\tStsfldVarVar_size_20,\n\t\tStsfldVarVar_size_24,\n\t\tStsfldVarVar_size_28,\n\t\tStsfldVarVar_size_32,\n\t\tStsfldVarVar_n_2,\n\t\tStsfldVarVar_n_4,\n\t\tStsfldVarVar_WriteBarrier_n_2,\n\t\tStsfldVarVar_WriteBarrier_n_4,\n\t\tLdsfldaVarVar,\n\t\tLdsfldaFromFieldDataVarVar,\n\t\tLdthreadlocalaVarVar,\n\t\tLdthreadlocalVarVar_i1,\n\t\tLdthreadlocalVarVar_u1,\n\t\tLdthreadlocalVarVar_i2,\n\t\tLdthreadlocalVarVar_u2,\n\t\tLdthreadlocalVarVar_i4,\n\t\tLdthreadlocalVarVar_u4,\n\t\tLdthreadlocalVarVar_i8,\n\t\tLdthreadlocalVarVar_u8,\n\t\tLdthreadlocalVarVar_size_8,\n\t\tLdthreadlocalVarVar_size_12,\n\t\tLdthreadlocalVarVar_size_16,\n\t\tLdthreadlocalVarVar_size_20,\n\t\tLdthreadlocalVarVar_size_24,\n\t\tLdthreadlocalVarVar_size_28,\n\t\tLdthreadlocalVarVar_size_32,\n\t\tLdthreadlocalVarVar_n_2,\n\t\tLdthreadlocalVarVar_n_4,\n\t\tStthreadlocalVarVar_i1,\n\t\tStthreadlocalVarVar_u1,\n\t\tStthreadlocalVarVar_i2,\n\t\tStthreadlocalVarVar_u2,\n\t\tStthreadlocalVarVar_i4,\n\t\tStthreadlocalVarVar_u4,\n\t\tStthreadlocalVarVar_i8,\n\t\tStthreadlocalVarVar_u8,\n\t\tStthreadlocalVarVar_ref,\n\t\tStthreadlocalVarVar_size_8,\n\t\tStthreadlocalVarVar_size_12,\n\t\tStthreadlocalVarVar_size_16,\n\t\tStthreadlocalVarVar_size_20,\n\t\tStthreadlocalVarVar_size_24,\n\t\tStthreadlocalVarVar_size_28,\n\t\tStthreadlocalVarVar_size_32,\n\t\tStthreadlocalVarVar_n_2,\n\t\tStthreadlocalVarVar_n_4,\n\t\tStthreadlocalVarVar_WriteBarrier_n_2,\n\t\tStthreadlocalVarVar_WriteBarrier_n_4,\n\t\tCheckThrowIfNullVar,\n\t\tInitClassStaticCtor,\n\t\tLdfldaLargeVarVar,\n\t\tLdfldLargeVarVar_i1,\n\t\tLdfldLargeVarVar_u1,\n\t\tLdfldLargeVarVar_i2,\n\t\tLdfldLargeVarVar_u2,\n\t\tLdfldLargeVarVar_i4,\n\t\tLdfldLargeVarVar_u4,\n\t\tLdfldLargeVarVar_i8,\n\t\tLdfldLargeVarVar_u8,\n\t\tLdfldLargeVarVar_size_8,\n\t\tLdfldLargeVarVar_size_12,\n\t\tLdfldLargeVarVar_size_16,\n\t\tLdfldLargeVarVar_size_20,\n\t\tLdfldLargeVarVar_size_24,\n\t\tLdfldLargeVarVar_size_28,\n\t\tLdfldLargeVarVar_size_32,\n\t\tLdfldLargeVarVar_n_2,\n\t\tLdfldLargeVarVar_n_4,\n\t\tLdfldValueTypeLargeVarVar_i1,\n\t\tLdfldValueTypeLargeVarVar_u1,\n\t\tLdfldValueTypeLargeVarVar_i2,\n\t\tLdfldValueTypeLargeVarVar_u2,\n\t\tLdfldValueTypeLargeVarVar_i4,\n\t\tLdfldValueTypeLargeVarVar_u4,\n\t\tLdfldValueTypeLargeVarVar_i8,\n\t\tLdfldValueTypeLargeVarVar_u8,\n\t\tLdfldValueTypeLargeVarVar_size_8,\n\t\tLdfldValueTypeLargeVarVar_size_12,\n\t\tLdfldValueTypeLargeVarVar_size_16,\n\t\tLdfldValueTypeLargeVarVar_size_20,\n\t\tLdfldValueTypeLargeVarVar_size_24,\n\t\tLdfldValueTypeLargeVarVar_size_28,\n\t\tLdfldValueTypeLargeVarVar_size_32,\n\t\tLdfldValueTypeLargeVarVar_n_2,\n\t\tLdfldValueTypeLargeVarVar_n_4,\n\t\tStfldLargeVarVar_i1,\n\t\tStfldLargeVarVar_u1,\n\t\tStfldLargeVarVar_i2,\n\t\tStfldLargeVarVar_u2,\n\t\tStfldLargeVarVar_i4,\n\t\tStfldLargeVarVar_u4,\n\t\tStfldLargeVarVar_i8,\n\t\tStfldLargeVarVar_u8,\n\t\tStfldLargeVarVar_ref,\n\t\tStfldLargeVarVar_size_8,\n\t\tStfldLargeVarVar_size_12,\n\t\tStfldLargeVarVar_size_16,\n\t\tStfldLargeVarVar_size_20,\n\t\tStfldLargeVarVar_size_24,\n\t\tStfldLargeVarVar_size_28,\n\t\tStfldLargeVarVar_size_32,\n\t\tStfldLargeVarVar_n_2,\n\t\tStfldLargeVarVar_n_4,\n\t\tStfldLargeVarVar_WriteBarrier_n_2,\n\t\tStfldLargeVarVar_WriteBarrier_n_4,\n\t\tNewArrVarVar,\n\t\tGetArrayLengthVarVar,\n\t\tGetArrayElementAddressAddrVarVar,\n\t\tGetArrayElementAddressCheckAddrVarVar,\n\t\tGetArrayElementVarVar_i1,\n\t\tGetArrayElementVarVar_u1,\n\t\tGetArrayElementVarVar_i2,\n\t\tGetArrayElementVarVar_u2,\n\t\tGetArrayElementVarVar_i4,\n\t\tGetArrayElementVarVar_u4,\n\t\tGetArrayElementVarVar_i8,\n\t\tGetArrayElementVarVar_u8,\n\t\tGetArrayElementVarVar_size_1,\n\t\tGetArrayElementVarVar_size_2,\n\t\tGetArrayElementVarVar_size_4,\n\t\tGetArrayElementVarVar_size_8,\n\t\tGetArrayElementVarVar_size_12,\n\t\tGetArrayElementVarVar_size_16,\n\t\tGetArrayElementVarVar_size_20,\n\t\tGetArrayElementVarVar_size_24,\n\t\tGetArrayElementVarVar_size_28,\n\t\tGetArrayElementVarVar_size_32,\n\t\tGetArrayElementVarVar_n,\n\t\tSetArrayElementVarVar_i1,\n\t\tSetArrayElementVarVar_u1,\n\t\tSetArrayElementVarVar_i2,\n\t\tSetArrayElementVarVar_u2,\n\t\tSetArrayElementVarVar_i4,\n\t\tSetArrayElementVarVar_u4,\n\t\tSetArrayElementVarVar_i8,\n\t\tSetArrayElementVarVar_u8,\n\t\tSetArrayElementVarVar_ref,\n\t\tSetArrayElementVarVar_size_12,\n\t\tSetArrayElementVarVar_size_16,\n\t\tSetArrayElementVarVar_n,\n\t\tSetArrayElementVarVar_WriteBarrier_n,\n\t\tNewMdArrVarVar_length,\n\t\tNewMdArrVarVar_length_bound,\n\t\tGetMdArrElementVarVar_i1,\n\t\tGetMdArrElementVarVar_u1,\n\t\tGetMdArrElementVarVar_i2,\n\t\tGetMdArrElementVarVar_u2,\n\t\tGetMdArrElementVarVar_i4,\n\t\tGetMdArrElementVarVar_u4,\n\t\tGetMdArrElementVarVar_i8,\n\t\tGetMdArrElementVarVar_u8,\n\t\tGetMdArrElementVarVar_n,\n\t\tGetMdArrElementAddressVarVar,\n\t\tSetMdArrElementVarVar_i1,\n\t\tSetMdArrElementVarVar_u1,\n\t\tSetMdArrElementVarVar_i2,\n\t\tSetMdArrElementVarVar_u2,\n\t\tSetMdArrElementVarVar_i4,\n\t\tSetMdArrElementVarVar_u4,\n\t\tSetMdArrElementVarVar_i8,\n\t\tSetMdArrElementVarVar_u8,\n\t\tSetMdArrElementVarVar_ref,\n\t\tSetMdArrElementVarVar_n,\n\t\tSetMdArrElementVarVar_WriteBarrier_n,\n\t\tThrowEx,\n\t\tRethrowEx,\n\t\tLeaveEx,\n\t\tLeaveEx_Directly,\n\t\tEndFilterEx,\n\t\tEndFinallyEx,\n\t\tNullableNewVarVar,\n\t\tNullableCtorVarVar,\n\t\tNullableHasValueVar,\n\t\tNullableGetValueOrDefaultVarVar,\n\t\tNullableGetValueOrDefaultVarVar_1,\n\t\tNullableGetValueVarVar,\n\t\tInterlockedCompareExchangeVarVarVarVar_i4,\n\t\tInterlockedCompareExchangeVarVarVarVar_i8,\n\t\tInterlockedCompareExchangeVarVarVarVar_pointer,\n\t\tInterlockedExchangeVarVarVar_i4,\n\t\tInterlockedExchangeVarVarVar_i8,\n\t\tInterlockedExchangeVarVarVar_pointer,\n\t\tNewSystemObjectVar,\n\t\tNewVector2,\n\t\tNewVector3_2,\n\t\tNewVector3_3,\n\t\tNewVector4_2,\n\t\tNewVector4_3,\n\t\tNewVector4_4,\n\t\tCtorVector2,\n\t\tCtorVector3_2,\n\t\tCtorVector3_3,\n\t\tCtorVector4_2,\n\t\tCtorVector4_3,\n\t\tCtorVector4_4,\n\t\tArrayGetGenericValueImpl,\n\t\tArraySetGenericValueImpl,\n\t\tNewString,\n\t\tNewString_2,\n\t\tNewString_3,\n\t\tUnsafeEnumCast,\n\t\tGetEnumHashCode,\n\t\tAssemblyGetExecutingAssembly,\n\t\tMethodBaseGetCurrentMethod,\n\n\t\t//!!!}}OPCODE\n\t};\n\n\tstruct IRCommon\n\t{\n\t\tHiOpcodeEnum type;\n\t};\n\n#pragma region instruction\n#pragma pack(push, 1)\n\t//!!!{{INST\n\n\tstruct IRInitLocals_n_2 : IRCommon\n\t{\n\t\tuint16_t size;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitLocals_n_4 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRInitLocals_size_8 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitLocals_size_16 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitLocals_size_24 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitLocals_size_32 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitInlineLocals_n_2 : IRCommon\n\t{\n\t\tuint16_t size;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRInitInlineLocals_n_4 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t size;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInitInlineLocals_size_8 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRInitInlineLocals_size_16 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRInitInlineLocals_size_24 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRInitInlineLocals_size_32 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRLdlocVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdlocExpandVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdlocExpandVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdlocExpandVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdlocExpandVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdlocVarVarSize : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint16_t size;\n\t};\n\n\n\tstruct IRLdlocVarAddress : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdcVarConst_1 : IRCommon\n\t{\n\t\tuint8_t src;\n\t\tuint8_t __pad3;\n\t\tuint16_t dst;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdcVarConst_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdcVarConst_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t src;\n\t};\n\n\n\tstruct IRLdcVarConst_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint64_t src;\n\t};\n\n\n\tstruct IRLdnullVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdindVarVar_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStindVarVar_ref : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLocalAllocVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLocalAllocVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitblkVarVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t value;\n\t\tuint16_t size;\n\t};\n\n\n\tstruct IRCpblkVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint16_t size;\n\t};\n\n\n\tstruct IRMemoryBarrier : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i4_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u4_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_i8_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_u8_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f4_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertVarVar_f8_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_i8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_u8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f4_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRConvertOverflowVarVar_f8_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Add_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Sub_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Mul_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_MulUn_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Div_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_DivUn_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Rem_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_RemUn_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_And_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Or_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Xor_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Add_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Sub_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Mul_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_MulUn_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Div_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_DivUn_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Rem_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_RemUn_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_And_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Or_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Xor_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Add_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Sub_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Mul_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Div_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Rem_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Add_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Sub_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Mul_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Div_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpVarVarVar_Rem_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Add_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Sub_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Mul_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Add_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Sub_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Mul_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Add_u4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Sub_u4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Mul_u4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Add_u8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Sub_u8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBinOpOverflowVarVarVar_Mul_u8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shl_i4_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shr_i4_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_ShrUn_i4_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shl_i4_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shr_i4_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_ShrUn_i4_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shl_i8_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shr_i8_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_ShrUn_i8_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shl_i8_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_Shr_i8_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRBitShiftBinOpVarVarVar_ShrUn_i8_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t value;\n\t\tuint16_t shiftAmount;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Neg_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Not_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Neg_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Not_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Neg_f4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRUnaryOpVarVar_Neg_f8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCheckFiniteVar_f4 : IRCommon\n\t{\n\t\tuint16_t src;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCheckFiniteVar_f8 : IRCommon\n\t{\n\t\tuint16_t src;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Ceq_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Ceq_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Ceq_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Ceq_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Cgt_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Cgt_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Cgt_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Cgt_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CgtUn_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CgtUn_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CgtUn_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CgtUn_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Clt_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Clt_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Clt_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_Clt_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CltUn_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CltUn_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CltUn_f4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRCompOpVarVarVar_CltUn_f8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t c1;\n\t\tuint16_t c2;\n\t};\n\n\n\tstruct IRBranchUncondition_4 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRBranchTrueVar_i4 : IRCommon\n\t{\n\t\tuint16_t op;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRBranchTrueVar_i8 : IRCommon\n\t{\n\t\tuint16_t op;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRBranchFalseVar_i4 : IRCommon\n\t{\n\t\tuint16_t op;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRBranchFalseVar_i8 : IRCommon\n\t{\n\t\tuint16_t op;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRBranchVarVar_Ceq_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Ceq_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Ceq_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Ceq_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CneUn_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CneUn_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CneUn_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CneUn_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cgt_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cgt_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cgt_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cgt_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgtUn_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgtUn_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgtUn_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgtUn_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cge_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cge_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cge_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cge_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgeUn_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgeUn_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgeUn_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CgeUn_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Clt_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Clt_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Clt_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Clt_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CltUn_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CltUn_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CltUn_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CltUn_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cle_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cle_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cle_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_Cle_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CleUn_i4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CleUn_i8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CleUn_f4 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchVarVar_CleUn_f8 : IRCommon\n\t{\n\t\tuint16_t op1;\n\t\tuint16_t op2;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRBranchJump : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t token;\n\t};\n\n\n\tstruct IRBranchSwitch : IRCommon\n\t{\n\t\tuint16_t value;\n\t\tuint32_t caseNum;\n\t\tuint32_t caseOffsets;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewClassVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t method;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRNewClassVar_Ctor_0 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRNewClassVar_NotCtor : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t klass;\n\t};\n\n\n\tstruct IRNewValueTypeVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t method;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRNewValueTypeVar_Ctor_0 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRNewClassInterpVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t argBase;\n\t\tuint16_t argStackObjectNum;\n\t\tuint16_t ctorFrameBase;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRNewClassInterpVar_Ctor_0 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t ctorFrameBase;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewValueTypeInterpVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t argBase;\n\t\tuint16_t argStackObjectNum;\n\t\tuint16_t ctorFrameBase;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRAdjustValueTypeRefVar : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRBoxRefVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdvirftnVarVar : IRCommon\n\t{\n\t\tuint16_t resultMethod;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t virtualMethod;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRRetVar_ret_1 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_2 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_12 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_16 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_20 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_24 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_28 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_32 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRetVar_ret_n : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRRetVar_void : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCallNativeInstance_void : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallNativeInstance_ret : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallNativeInstance_ret_expand : IRCommon\n\t{\n\t\tuint8_t retLocationType;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallNativeStatic_void : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallNativeStatic_ret : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallNativeStatic_ret_expand : IRCommon\n\t{\n\t\tuint8_t retLocationType;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallInterp_void : IRCommon\n\t{\n\t\tuint16_t argBase;\n\t\tuint32_t methodInfo;\n\t};\n\n\n\tstruct IRCallInterp_ret : IRCommon\n\t{\n\t\tuint16_t argBase;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t methodInfo;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallVirtual_void : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallVirtual_ret : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallVirtual_ret_expand : IRCommon\n\t{\n\t\tuint8_t retLocationType;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallInterpVirtual_void : IRCommon\n\t{\n\t\tuint16_t argBase;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallInterpVirtual_ret : IRCommon\n\t{\n\t\tuint16_t argBase;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallInd_void : IRCommon\n\t{\n\t\tuint8_t isMethodInfoPointer;\n\t\tuint8_t __pad3;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallInd_ret : IRCommon\n\t{\n\t\tuint8_t isMethodInfoPointer;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallInd_ret_expand : IRCommon\n\t{\n\t\tuint8_t isMethodInfoPointer;\n\t\tuint8_t retLocationType;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeMethod;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallPInvoke_void : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t pinvokeMethodPointer;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallPInvoke_ret : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t pinvokeMethodPointer;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallPInvoke_ret_expand : IRCommon\n\t{\n\t\tuint8_t retLocationType;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t managed2NativeFunctionPointerMethod;\n\t\tuint32_t pinvokeMethodPointer;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallDelegateInvoke_void : IRCommon\n\t{\n\t\tuint16_t invokeParamCount;\n\t\tuint32_t managed2NativeStaticMethod;\n\t\tuint32_t managed2NativeInstanceMethod;\n\t\tuint32_t argIdxs;\n\t};\n\n\n\tstruct IRCallDelegateInvoke_ret : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t invokeParamCount;\n\t\tuint16_t retTypeStackObjectSize;\n\t\tuint32_t managed2NativeStaticMethod;\n\t\tuint32_t managed2NativeInstanceMethod;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallDelegateInvoke_ret_expand : IRCommon\n\t{\n\t\tuint8_t retLocationType;\n\t\tuint8_t __pad3;\n\t\tuint16_t ret;\n\t\tuint16_t invokeParamCount;\n\t\tuint32_t managed2NativeStaticMethod;\n\t\tuint32_t managed2NativeInstanceMethod;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallDelegateBeginInvoke : IRCommon\n\t{\n\t\tuint16_t result;\n\t\tuint32_t methodInfo;\n\t\tuint32_t argIdxs;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallDelegateEndInvoke_void : IRCommon\n\t{\n\t\tuint16_t asyncResult;\n\t\tuint32_t methodInfo;\n\t};\n\n\n\tstruct IRCallDelegateEndInvoke_ret : IRCommon\n\t{\n\t\tuint16_t asyncResult;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t methodInfo;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewDelegate : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t method;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCtorDelegate : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t method;\n\t\tuint32_t ctor;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i1_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i2_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u2_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_0 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_v_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_u1_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i4_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_i8_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f4_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_i8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f4_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f4_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f4_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f4_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f8_1 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f8_2 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f8_3 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeInstance_f8_f8_4 : IRCommon\n\t{\n\t\tuint16_t self;\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t\tuint32_t method;\n\t\tuint8_t __pad20;\n\t\tuint8_t __pad21;\n\t\tuint8_t __pad22;\n\t\tuint8_t __pad23;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_0 : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i1_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i2_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u2_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_0 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_v_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_u1_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i4_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_i8_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f4_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_i8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f4_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f4_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f4_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f4_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f8_1 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t ret;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f8_2 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f8_3 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t ret;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRCallCommonNativeStatic_f8_f8_4 : IRCommon\n\t{\n\t\tuint16_t param0;\n\t\tuint16_t param1;\n\t\tuint16_t param2;\n\t\tuint16_t param3;\n\t\tuint16_t ret;\n\t\tuint32_t method;\n\t};\n\n\n\tstruct IRBoxVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRUnBoxVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRUnBoxAnyVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCastclassVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t klass;\n\t};\n\n\n\tstruct IRIsInstVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t klass;\n\t};\n\n\n\tstruct IRLdtokenVar : IRCommon\n\t{\n\t\tuint16_t runtimeHandle;\n\t\tuint32_t token;\n\t};\n\n\n\tstruct IRMakeRefVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRRefAnyTypeVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t typedRef;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRefAnyValueVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t typedRef;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCpobjVarVar_ref : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRCpobjVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint16_t size;\n\t};\n\n\n\tstruct IRCpobjVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCpobjVarVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint16_t size;\n\t};\n\n\n\tstruct IRCpobjVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdobjVarVar_ref : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLdobjVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStobjVarVar_ref : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRStobjVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStobjVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInitobjVar_ref : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_1 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_12 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_16 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_20 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_24 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_28 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_32 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRInitobjVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitobjVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRLdstrVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t str;\n\t};\n\n\n\tstruct IRLdfldVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t size;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t size;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldaVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t};\n\n\n\tstruct IRStfldVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_ref : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t};\n\n\n\tstruct IRStfldVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldVarVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t offset;\n\t\tuint16_t data;\n\t\tuint32_t size;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRLdsfldVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStsfldVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_ref : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStsfldVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRStsfldVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStsfldVarVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRStsfldVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRLdsfldaVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdsfldaFromFieldDataVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t src;\n\t};\n\n\n\tstruct IRLdthreadlocalaVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t};\n\n\n\tstruct IRLdthreadlocalVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint32_t klass;\n\t\tint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_ref : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t offset;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct IRStthreadlocalVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t data;\n\t\tuint32_t klass;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRCheckThrowIfNullVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRInitClassStaticCtor : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint64_t klass;\n\t};\n\n\n\tstruct IRLdfldaLargeVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t size;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldLargeVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t size;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRLdfldValueTypeLargeVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_ref : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_WriteBarrier_n_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint16_t size;\n\t\tuint32_t offset;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRStfldLargeVarVar_WriteBarrier_n_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t offset;\n\t\tuint32_t size;\n\t};\n\n\n\tstruct IRNewArrVarVar : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t size;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRGetArrayLengthVarVar : IRCommon\n\t{\n\t\tuint16_t len;\n\t\tuint16_t arr;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRGetArrayElementAddressAddrVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementAddressCheckAddrVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint32_t eleKlass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_2 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_4 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_8 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_20 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_24 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_28 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_size_32 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRGetArrayElementVarVar_n : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_ref : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_size_12 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_size_16 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_n : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetArrayElementVarVar_WriteBarrier_n : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRNewMdArrVarVar_length : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewMdArrVarVar_length_bound : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t lowerBoundIdxs;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementVarVar_n : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRGetMdArrElementAddressVarVar : IRCommon\n\t{\n\t\tuint16_t addr;\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_i1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_u1 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_i2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_u2 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_u4 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_u8 : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_ref : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_n : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRSetMdArrElementVarVar_WriteBarrier_n : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t lengthIdxs;\n\t\tuint16_t ele;\n\t};\n\n\n\tstruct IRThrowEx : IRCommon\n\t{\n\t\tuint16_t exceptionObj;\n\t\tuint16_t firstHandlerIndex;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRRethrowEx : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRLeaveEx : IRCommon\n\t{\n\t\tuint16_t firstHandlerIndex;\n\t\tint32_t target;\n\t};\n\n\n\tstruct IRLeaveEx_Directly : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tint32_t target;\n\t};\n\n\n\tstruct IREndFilterEx : IRCommon\n\t{\n\t\tuint16_t value;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IREndFinallyEx : IRCommon\n\t{\n\t\tuint8_t __pad2;\n\t\tuint8_t __pad3;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRNullableNewVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNullableCtorVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t data;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNullableHasValueVar : IRCommon\n\t{\n\t\tuint16_t result;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNullableGetValueOrDefaultVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNullableGetValueOrDefaultVarVar_1 : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint16_t defaultValue;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNullableGetValueVarVar : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t obj;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t\tuint32_t klass;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInterlockedCompareExchangeVarVarVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t\tuint16_t comparand;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInterlockedCompareExchangeVarVarVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t\tuint16_t comparand;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInterlockedCompareExchangeVarVarVarVar_pointer : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t\tuint16_t comparand;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRInterlockedExchangeVarVarVar_i4 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRInterlockedExchangeVarVarVar_i8 : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRInterlockedExchangeVarVarVar_pointer : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint16_t location;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRNewSystemObjectVar : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRNewVector2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRNewVector3_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRNewVector3_3 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewVector4_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRNewVector4_3 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewVector4_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint16_t w;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCtorVector2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRCtorVector3_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRCtorVector3_3 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCtorVector4_2 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t};\n\n\n\tstruct IRCtorVector4_3 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRCtorVector4_4 : IRCommon\n\t{\n\t\tuint16_t obj;\n\t\tuint16_t x;\n\t\tuint16_t y;\n\t\tuint16_t z;\n\t\tuint16_t w;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRArrayGetGenericValueImpl : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRArraySetGenericValueImpl : IRCommon\n\t{\n\t\tuint16_t arr;\n\t\tuint16_t index;\n\t\tuint16_t value;\n\t};\n\n\n\tstruct IRNewString : IRCommon\n\t{\n\t\tuint16_t str;\n\t\tuint16_t chars;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRNewString_2 : IRCommon\n\t{\n\t\tuint16_t str;\n\t\tuint16_t chars;\n\t\tuint16_t startIndex;\n\t\tuint16_t length;\n\t\tuint8_t __pad10;\n\t\tuint8_t __pad11;\n\t\tuint8_t __pad12;\n\t\tuint8_t __pad13;\n\t\tuint8_t __pad14;\n\t\tuint8_t __pad15;\n\t};\n\n\n\tstruct IRNewString_3 : IRCommon\n\t{\n\t\tuint16_t str;\n\t\tuint16_t c;\n\t\tuint16_t count;\n\t};\n\n\n\tstruct IRUnsafeEnumCast : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint16_t srcType;\n\t};\n\n\n\tstruct IRGetEnumHashCode : IRCommon\n\t{\n\t\tuint16_t dst;\n\t\tuint16_t src;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRAssemblyGetExecutingAssembly : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\tstruct IRMethodBaseGetCurrentMethod : IRCommon\n\t{\n\t\tuint16_t ret;\n\t\tuint8_t __pad4;\n\t\tuint8_t __pad5;\n\t\tuint8_t __pad6;\n\t\tuint8_t __pad7;\n\t};\n\n\n\t//!!!}}INST\n#pragma pack(pop)\n\n#pragma endregion\n\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/Interpreter.cpp",
    "content": "\n#include \"Interpreter.h\"\n\n#include <unordered_map>\n\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/Class.h\"\n\n#include \"MethodBridge.h\"\n#include \"../metadata/MetadataModule.h\"\n#include \"../metadata/MetadataUtil.h\"\n#include \"../transform/Transform.h\"\n\n\n\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/Interpreter.h",
    "content": "#pragma once\n\n#include \"InterpreterDefs.h\"\n\nnamespace hybridclr\n{\n\nnamespace interpreter\n{\n\n\tclass Interpreter\n\t{\n\tpublic:\n\n\t\tstatic void Execute(const MethodInfo* methodInfo, StackObject* args, void* ret);\n\n\t};\n\n}\n}\n\n"
  },
  {
    "path": "hybridclr/interpreter/InterpreterDefs.cpp",
    "content": "\n#include \"../metadata/MetadataUtil.h\"\n\n#include \"MemoryUtil.h\"\n\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/InterpreterDefs.h",
    "content": "#pragma once\n#include \"../CommonDef.h\"\n#include \"../metadata/MetadataDef.h\"\n\nnamespace hybridclr\n{\n\tnamespace interpreter\n\t{\n\n\t\t// from obj or arg\n\t\tenum class LocationDataType : uint8_t\n\t\t{\n\t\t\tI1,\n\t\t\tU1,\n\t\t\tI2,\n\t\t\tU2,\n\t\t\tU8,\n\t\t\tS_N,  // struct size = 3，5，6，7， > 8, size is described by stackObjectSize\n\t\t};\n\n\t\tunion StackObject\n\t\t{\n\t\t\tuint64_t __u64;\n\t\t\tvoid* ptr; // can't adjust position. will raise native_invoke init args bugs.\n\t\t\tbool b;\n\t\t\tint8_t i8;\n\t\t\tuint8_t u8;\n\t\t\tint16_t i16;\n\t\t\tuint16_t u16;\n\t\t\tint32_t i32;\n\t\t\tuint32_t u32;\n\t\t\tint64_t i64;\n\t\t\tuint64_t u64;\n\t\t\tfloat f4;\n\t\t\tdouble f8;\n\t\t\tIl2CppObject* obj;\n\t\t\tIl2CppString* str;\n\t\t\tIl2CppObject** ptrObj;\n\t\t};\n\n\t\tstatic_assert(sizeof(StackObject) == 8, \"require 8 bytes\");\n\n\n\t\tenum class ExceptionFlowType\n\t\t{\n\t\t\tException,\n\t\t\tCatch,\n\t\t\tLeave,\n\t\t};\n\n\t\tstruct InterpMethodInfo;\n\n\t\tstruct ExceptionFlowInfo\n\t\t{\n\t\t\tExceptionFlowType exFlowType;\n\t\t\tint32_t throwOffset;\n\t\t\tIl2CppException* ex;\n\t\t\tint32_t nextExClauseIndex;\n\t\t\tint32_t leaveTarget;\n\t\t};\n\n\t\tstruct InterpFrame\n\t\t{\n\t\t\tconst MethodInfo* method;\n\t\t\tStackObject* stackBasePtr;\n\t\t\tint32_t oldStackTop;\n\t\t\tvoid* ret;\n\t\t\tbyte* ip;\n\n\t\t\tExceptionFlowInfo* exFlowBase;\n\t\t\tint32_t exFlowCount;\n\t\t\tint32_t exFlowCapaticy;\n\n\t\t\tint32_t oldLocalPoolBottomIdx;\n\n\t\t\tExceptionFlowInfo* GetCurExFlow() const\n\t\t\t{\n\t\t\t\treturn exFlowCount > 0 ? exFlowBase + exFlowCount - 1 : nullptr;\n\t\t\t}\n\n\t\t\tExceptionFlowInfo* GetPrevExFlow() const\n\t\t\t{\n\t\t\t\treturn exFlowCount > 1 ? exFlowBase + exFlowCount - 2 : nullptr;\n\t\t\t}\n\t\t};\n\n\t\tstruct InterpExceptionClause\n\t\t{\n\t\t\tmetadata::CorILExceptionClauseType flags;\n\t\t\tint32_t tryBeginOffset;\n\t\t\tint32_t tryEndOffset;\n\t\t\tint32_t handlerBeginOffset;\n\t\t\tint32_t handlerEndOffset;\n\t\t\tint32_t filterBeginOffset;\n\t\t\tIl2CppClass* exKlass;\n\t\t};\n\n\t\tstruct MethodArgDesc\n\t\t{\n\t\t\tbool passbyValWhenInvoke;\n\t\t\tLocationDataType type;\n\t\t\tuint16_t stackObjectSize;\n\t\t};\n\n\t\tstruct InterpMethodInfo\n\t\t{\n\t\t\tbyte* codes;\n\t\t\tMethodArgDesc* args;\n\t\t\tuint64_t* resolveDatas;\n\t\t\tconst InterpExceptionClause* exClauses;\n\t\t\tuint32_t argStackObjectSize;\n\t\t\tuint32_t retStackObjectSize : 24;\n\t\t\tuint32_t initLocals : 8;\n\t\t\tuint32_t localStackSize; // args + locals StackObject size\n\t\t\tuint32_t maxStackSize; // args + locals + evalstack size\n\t\t\tuint32_t argCount : 8;\n\t\t\tuint32_t codeLength : 24;\n\t\t\tuint32_t localVarBaseOffset;\n\t\t\tuint32_t evalStackBaseOffset;\n\t\t\tuint32_t exClauseCount;\n\t\t};\n\t}\n}"
  },
  {
    "path": "hybridclr/interpreter/InterpreterModule.cpp",
    "content": "#include \"InterpreterModule.h\"\n\n#include \"Interpreter.h\"\n\n#include <unordered_map>\n#include <unordered_set>\n\n#include \"Baselib.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/MetadataCache.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/Class.h\"\n#include \"vm/Object.h\"\n#include \"vm/Method.h\"\n\n#include \"../metadata/MetadataModule.h\"\n#include \"../metadata/MetadataUtil.h\"\n#include \"../metadata/InterpreterImage.h\"\n#include \"../transform/Transform.h\"\n\n#include \"MethodBridge.h\"\n#include \"InterpreterUtil.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\til2cpp::os::ThreadLocalValue InterpreterModule::s_machineState;\n\n\tstatic Il2CppHashMap<const char*, Managed2NativeCallMethod, CStringHash, CStringEqualTo> s_managed2natives;\n\tstatic Il2CppHashMap<const char*, Il2CppMethodPointer, CStringHash, CStringEqualTo> s_native2manageds;\n\tstatic Il2CppHashMap<const char*, Il2CppMethodPointer, CStringHash, CStringEqualTo> s_adjustThunks;\n\tstatic Il2CppHashMap<const char*, const char*, CStringHash, CStringEqualTo> s_fullName2signature;\n\n\tstatic Il2CppHashMap<const MethodInfo*, const ReversePInvokeInfo*, il2cpp::utils::PointerHash<MethodInfo>> s_methodInfo2ReverseInfos;\n\tstatic Il2CppHashMap<Il2CppMethodPointer, const ReversePInvokeInfo*, il2cpp::utils::PassThroughHash<Il2CppMethodPointer>> s_methodPointer2ReverseInfos;\n\tstatic Il2CppHashMap<const char*, int32_t, CStringHash, CStringEqualTo> s_methodSig2Indexs;\n\tstatic std::vector<ReversePInvokeInfo> s_reverseInfos;\n\n\tstatic Il2CppHashMap<const char*, Managed2NativeFunctionPointerCallMethod, CStringHash, CStringEqualTo> s_managed2nativeFunctionPointers;\n\n\tstatic std::unordered_map<void*, bool> s_functionPointerMap;\n\n\tstatic baselib::ReentrantLock s_reversePInvokeMethodLock;\n\n\tconst MethodInfo* InterpreterModule::GetMethodInfoByReversePInvokeWrapperIndex(int32_t index)\n\t{\n\t\treturn s_reverseInfos[index].methodInfo;\n\t}\n\n\tconst MethodInfo* InterpreterModule::GetMethodInfoByReversePInvokeWrapperMethodPointer(Il2CppMethodPointer methodPointer)\n\t{\n\t\tauto it = s_methodPointer2ReverseInfos.find(methodPointer);\n\t\treturn it != s_methodPointer2ReverseInfos.end() ? it->second->methodInfo : nullptr;\n\t}\n\n\tint32_t InterpreterModule::GetWrapperIndexByReversePInvokeWrapperMethodPointer(Il2CppMethodPointer methodPointer)\n\t{\n\t\tauto it = s_methodPointer2ReverseInfos.find(methodPointer);\n\t\treturn it != s_methodPointer2ReverseInfos.end() ? it->second->index : -1;\n\t}\n\n\tstatic void InitReversePInvokeInfo()\n\t{\n\t\tfor (int32_t i = 0; ; i++)\n\t\t{\n\t\t\tconst ReversePInvokeMethodData& data = g_reversePInvokeMethodStub[i];\n\t\t\tif (data.methodPointer == nullptr)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_reverseInfos.push_back({ i, data.methodPointer, nullptr });\n\t\t\tauto it = s_methodSig2Indexs.find(data.methodSig);\n\t\t\tif (it == s_methodSig2Indexs.end())\n\t\t\t{\n\t\t\t\ts_methodSig2Indexs.insert({ data.methodSig, i });\n\t\t\t}\n\t\t}\n\t\ts_methodInfo2ReverseInfos.resize(s_reverseInfos.size() * 2);\n\t\ts_methodPointer2ReverseInfos.resize(s_reverseInfos.size() * 2);\n\t\tfor (ReversePInvokeInfo& rpi : s_reverseInfos)\n\t\t{\n\t\t\ts_methodPointer2ReverseInfos.insert({ rpi.methodPointer, &rpi });\n\t\t}\n\t}\n\n    constexpr int32_t kMaxSignatureNameLength = 1024 * 4;\n\n\tIl2CppMethodPointer InterpreterModule::GetReversePInvokeWrapper(const Il2CppImage* image, const MethodInfo* method, Il2CppCallConvention callConvention)\n\t{\n\t\tif (!hybridclr::metadata::IsStaticMethod(method))\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\n\t\t{\n\t\t\til2cpp::os::FastAutoLock lock(&s_reversePInvokeMethodLock);\n\t\t\tauto it = s_methodInfo2ReverseInfos.find(method);\n\t\t\tif (it != s_methodInfo2ReverseInfos.end())\n\t\t\t{\n\t\t\t\treturn it->second->methodPointer;\n\t\t\t}\n\t\t}\n\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tsigName[0] = 'A' + callConvention;\n\t\tComputeSignature(method, false, sigName + 1, sizeof(sigName) - 2);\n\n\t\til2cpp::os::FastAutoLock lock(&s_reversePInvokeMethodLock);\n\n\n\t\tauto it = s_methodInfo2ReverseInfos.find(method);\n\t\tif (it != s_methodInfo2ReverseInfos.end())\n\t\t{\n\t\t\treturn it->second->methodPointer;\n\t\t}\n\n\t\tauto it2 = s_methodSig2Indexs.find(sigName);\n\t\tif (it2 == s_methodSig2Indexs.end())\n\t\t{\n\t\t\tTEMP_FORMAT(methodSigBuf, \"GetReversePInvokeWrapper fail. not find wrapper of method:%s\", GetMethodNameWithSignature(method).c_str());\n\t\t\tRaiseExecutionEngineException(methodSigBuf);\n\t\t}\n\t\tint32_t wrapperIndex = it2->second;\n\t\tconst ReversePInvokeMethodData& data = g_reversePInvokeMethodStub[wrapperIndex];\n\t\tif (data.methodPointer == nullptr || std::strcmp(data.methodSig, sigName))\n\t\t{\n\t\t\tTEMP_FORMAT(methodSigBuf, \"GetReversePInvokeWrapper fail. exceed max wrapper num of method:%s\", GetMethodNameWithSignature(method).c_str());\n\t\t\tRaiseExecutionEngineException(methodSigBuf);\n\t\t}\n\n\t\ts_methodSig2Indexs[sigName] = wrapperIndex + 1;\n\n\t\tReversePInvokeInfo& rpi = s_reverseInfos[wrapperIndex];\n\t\trpi.methodInfo = method;\n\t\ts_methodInfo2ReverseInfos.insert({ method, &rpi });\n\t\treturn rpi.methodPointer;\n\t}\n\n\tstatic void InitMethodBridge()\n\t{\n\t\tfor (size_t i = 0; ; i++)\n\t\t{\n\t\t\tconst Managed2NativeMethodInfo& method = g_managed2nativeStub[i];\n\t\t\tif (!method.signature)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_managed2natives.insert({ method.signature, method.method });\n\t\t}\n\t\tfor (size_t i = 0; ; i++)\n\t\t{\n\t\t\tconst Native2ManagedMethodInfo& method = g_native2managedStub[i];\n\t\t\tif (!method.signature)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_native2manageds.insert({ method.signature, method.method });\n\t\t}\n\n\t\tfor (size_t i = 0; ; i++)\n\t\t{\n\t\t\tconst NativeAdjustThunkMethodInfo& method = g_adjustThunkStub[i];\n\t\t\tif (!method.signature)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_adjustThunks.insert({ method.signature, method.method });\n\t\t}\n\t\tfor (size_t i = 0; ; i++)\n\t\t{\n\t\t\tconst FullName2Signature& nameSig = g_fullName2SignatureStub[i];\n\t\t\tif (!nameSig.fullName)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_fullName2signature.insert({ nameSig.fullName, nameSig.signature });\n\t\t}\n\t\tfor (size_t i = 0; ; i++)\n\t\t{\n\t\t\tconst Managed2NativeFunctionPointerCallData& method = g_managed2NativeFunctionPointerCallStub[i];\n\t\t\tif (!method.methodSig)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\ts_managed2nativeFunctionPointers.insert({ method.methodSig, method.methodPointer });\n\t\t}\n\t}\n\n\tvoid InterpreterModule::Initialize()\n\t{\n\t\tInitMethodBridge();\n\t\tInitReversePInvokeInfo();\n\t}\n\n\tvoid InterpreterModule::NotSupportNative2Managed()\n\t{\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(\"NotSupportNative2Managed\"));\n\t}\n\n\tvoid InterpreterModule::NotSupportAdjustorThunk()\n\t{\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(\"NotSupportAdjustorThunk\"));\n\t}\n\n\tconst char* InterpreterModule::GetValueTypeSignature(const char* fullName)\n\t{\n\t\tauto it = s_fullName2signature.find(fullName);\n\t\treturn it != s_fullName2signature.end() ? it->second : \"$\";\n\t}\n\n\tbool InterpreterModule::IsMethodInfoPointer(void* pointer)\n\t{\n\t\til2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\t\treturn il2cpp::vm::MetadataContains(pointer);\n\t}\n\n\tstatic void* NotSupportInvoke(Il2CppMethodPointer, const MethodInfo* method, void*, void**)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method, true, sigName, sizeof(sigName) - 1);\n\t\tTEMP_FORMAT(errMsg, \"Invoke method missing. sinature:%s %s.%s::%s\", sigName, method->klass->namespaze, method->klass->name, method->name);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t\treturn nullptr;\n\t}\n\n\tstatic void NotSupportManaged2NativeFunctionMethod(Il2CppMethodPointer methodPointer, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret)\n\t{\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(\"NotSupportManaged2NativeFunctionMethod\"));\n\t}\n\n\ttemplate<typename T>\n\tconst Managed2NativeCallMethod GetManaged2NativeMethod(const T* method, bool forceStatic)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method, !forceStatic, sigName, sizeof(sigName) - 1);\n\t\tauto it = s_managed2natives.find(sigName);\n\t\treturn it != s_managed2natives.end() ? it->second : nullptr;\n\t}\n\n\ttemplate<typename T>\n\tconst Il2CppMethodPointer GetNative2ManagedMethod(const T* method, bool forceStatic)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method, !forceStatic, sigName, sizeof(sigName) - 1);\n\t\tauto it = s_native2manageds.find(sigName);\n\t\treturn it != s_native2manageds.end() ? it->second : InterpreterModule::NotSupportNative2Managed;\n\t}\n\n\ttemplate<typename T>\n\tconst Il2CppMethodPointer GetNativeAdjustMethodMethod(const T* method, bool forceStatic)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method, !forceStatic, sigName, sizeof(sigName) - 1);\n\t\tauto it = s_adjustThunks.find(sigName);\n\t\treturn it != s_adjustThunks.end() ? it->second : InterpreterModule::NotSupportAdjustorThunk;\n\t}\n\n\tstatic void RaiseMethodNotSupportException(const MethodInfo* method, const char* desc)\n\t{\n\t\tTEMP_FORMAT(errMsg, \"%s. %s.%s::%s\", desc, method->klass->namespaze, method->klass->name, method->name);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t}\n\n\tstatic void RaiseMethodNotSupportException(const Il2CppMethodDefinition* method, const char* desc)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromTypeDefinitionIndex(method->declaringType);\n\t\tTEMP_FORMAT(errMsg, \"%s. %s.%s::%s\", desc, klass->namespaze, klass->name, il2cpp::vm::GlobalMetadata::GetStringFromIndex(method->nameIndex));\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t}\n\n\tIl2CppMethodPointer InterpreterModule::GetMethodPointer(const Il2CppMethodDefinition* method)\n\t{\n\t\tIl2CppMethodPointer ncm = GetNative2ManagedMethod(method, false);\n\t\treturn ncm ? ncm : (Il2CppMethodPointer)NotSupportNative2Managed;\n\t}\n\n\tIl2CppMethodPointer InterpreterModule::GetMethodPointer(const MethodInfo* method)\n\t{\n\t\tIl2CppMethodPointer ncm = GetNative2ManagedMethod(method, false);\n\t\treturn ncm ? ncm : (Il2CppMethodPointer)NotSupportNative2Managed;\n\t}\n\n\tIl2CppMethodPointer InterpreterModule::GetAdjustThunkMethodPointer(const Il2CppMethodDefinition* method)\n\t{\n\t\treturn GetNativeAdjustMethodMethod(method, false);\n\t}\n\n\tIl2CppMethodPointer InterpreterModule::GetAdjustThunkMethodPointer(const MethodInfo* method)\n\t{\n\t\treturn GetNativeAdjustMethodMethod(method, false);\n\t}\n\n\tvoid InterpreterModule::Managed2NativeCallByReflectionInvoke(const MethodInfo* method, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret)\n\t{\n\t\tif (hybridclr::metadata::IsInterpreterImplement(method))\n\t\t{\n\t\t\tInterpreter::Execute(method,  localVarBase + argVarIndexs[0], ret);\n\t\t\treturn;\n\t\t}\n\t\tif (method->invoker_method == nullptr)\n\t\t{\n\t\t\tchar sigName[kMaxSignatureNameLength];\n\t\t\tComputeSignature(method, true, sigName, sizeof(sigName) - 1);\n\n\t\t\tTEMP_FORMAT(errMsg, \"GetManaged2NativeMethodPointer. sinature:%s not support.\", sigName);\n\t\t\tRaiseMethodNotSupportException(method, errMsg);\n\t\t}\n\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(method))\n\t\t{\n\t\t\tRaiseAOTGenericMethodNotInstantiatedException(method);\n\t\t}\n\t\tvoid* thisPtr;\n\t\tuint16_t* argVarIndexBase;\n\t\tif (hybridclr::metadata::IsInstanceMethod(method))\n\t\t{\n\t\t\tthisPtr = localVarBase[argVarIndexs[0]].obj;\n\t\t\targVarIndexBase = argVarIndexs + 1;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthisPtr = nullptr;\n\t\t\targVarIndexBase = argVarIndexs;\n\t\t}\n\t\tvoid* invokeParams[256];\n\t\tfor (uint8_t i = 0; i < method->parameters_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* argType = GET_METHOD_PARAMETER_TYPE(method->parameters[i]);\n\t\t\tStackObject* argValue = localVarBase + argVarIndexBase[i];\n\t\t\tif (!argType->byref && hybridclr::metadata::IsValueType(argType))\n\t\t\t{\n\t\t\t\tinvokeParams[i] = argValue;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tinvokeParams[i] = argValue->ptr;\n\t\t\t}\n\t\t}\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tmethod->invoker_method(method->methodPointerCallByInterp, method, thisPtr, invokeParams, ret);\n#else\n\t\tvoid* retObj = method->invoker_method(method->methodPointerCallByInterp, method, thisPtr, invokeParams);\n\t\tif (ret)\n\t\t{\n\t\t\tconst Il2CppType* returnType = method->return_type;\n\t\t\tif (hybridclr::metadata::IsValueType(returnType))\n\t\t\t{\n\t\t\t\tIl2CppClass* returnKlass = il2cpp::vm::Class::FromIl2CppType(returnType);\n\t\t\t\tif (il2cpp::vm::Class::IsNullable(returnKlass))\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Object::UnboxNullable((Il2CppObject*)retObj, returnKlass->element_class, ret);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tstd::memcpy(ret, il2cpp::vm::Object::Unbox((Il2CppObject*)retObj), il2cpp::vm::Class::GetValueSize(returnKlass, nullptr));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*(void**)ret = retObj;\n\t\t\t}\n\t\t}\n#endif\n\t}\n\n\tManaged2NativeCallMethod InterpreterModule::GetManaged2NativeMethodPointer(const MethodInfo* method, bool forceStatic)\n\t{\n\t\tif (method->methodPointerCallByInterp == NotSupportNative2Managed \n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t|| method->has_full_generic_sharing_signature\n#endif\n\t\t\t)\n\t\t{\n\t\t\treturn Managed2NativeCallByReflectionInvoke;\n\t\t}\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method, !forceStatic, sigName, sizeof(sigName) - 1);\n\t\tauto it = s_managed2natives.find(sigName);\n\t\treturn it != s_managed2natives.end() ? it->second : Managed2NativeCallByReflectionInvoke;\n\t}\n\n\tManaged2NativeCallMethod InterpreterModule::GetManaged2NativeMethodPointer(const metadata::ResolveStandAloneMethodSig& method)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tComputeSignature(method.returnType, method.params, metadata::IsPrologHasThis(method.flags), sigName, sizeof(sigName) - 1);\n\t\tauto it = s_managed2natives.find(sigName);\n\t\treturn it != s_managed2natives.end() ? it->second : Managed2NativeCallByReflectionInvoke;\n\t}\n\n\tManaged2NativeFunctionPointerCallMethod InterpreterModule::GetManaged2NativeFunctionPointerMethodPointer(const MethodInfo* method, Il2CppCallConvention callConvention)\n\t{\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tsigName[0] = 'A' + callConvention;\n\t\tComputeSignature(method, false, sigName + 1, sizeof(sigName) - 1);\n\t\tauto it = s_managed2nativeFunctionPointers.find(sigName);\n\t\treturn it != s_managed2nativeFunctionPointers.end() ? it->second : NotSupportManaged2NativeFunctionMethod;\n\t}\n\n\tManaged2NativeFunctionPointerCallMethod InterpreterModule::GetManaged2NativeFunctionPointerMethodPointer(const metadata::ResolveStandAloneMethodSig& method)\n\t{\n\t\tint32_t callConvention = method.flags & 0x7;\n\t\tchar sigName[kMaxSignatureNameLength];\n\t\tsigName[0] = 'A' + callConvention;\n\t\tComputeSignature(method.returnType, method.params, metadata::IsPrologHasThis(method.flags), sigName + 1, sizeof(sigName) - 1);\n\t\tauto it = s_managed2nativeFunctionPointers.find(sigName);\n\t\treturn it != s_managed2nativeFunctionPointers.end() ? it->second : NotSupportManaged2NativeFunctionMethod;\n\t}\n\n\tstatic void RaiseExecutionEngineExceptionMethodIsNotFound(const MethodInfo* method)\n\t{\n\t\tif (il2cpp::vm::Method::GetClass(method))\n\t\t\tRaiseExecutionEngineException(il2cpp::vm::Method::GetFullName(method).c_str());\n\t\telse\n\t\t\tRaiseExecutionEngineException(il2cpp::vm::Method::GetNameWithGenericTypes(method).c_str());\n\t}\n\n\t#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n\t\n\tstatic void InterpreterInvoke(Il2CppMethodPointer methodPointer, const MethodInfo* method, void* __this, void** __args, void* __ret)\n\t{\n\t\tInterpMethodInfo* imi = method->interpData ? (InterpMethodInfo*)method->interpData : InterpreterModule::GetInterpMethodInfo(method);\n\t\tbool isInstanceMethod = metadata::IsInstanceMethod(method);\n\t\tStackObject* args = (StackObject*)alloca(sizeof(StackObject) * imi->argStackObjectSize);\n\t\tif (isInstanceMethod)\n\t\t{\n\t\t\tif (IS_CLASS_VALUE_TYPE(method->klass))\n\t\t\t{\n\t\t\t\t__this = (Il2CppObject*)__this + (methodPointer != method->methodPointerCallByInterp);\n\t\t\t}\n\t\t\targs[0].ptr = __this;\n\t\t}\n\t\t\n\t\tMethodArgDesc* argDescs = imi->args + isInstanceMethod;\n\t\tConvertInvokeArgs(args + isInstanceMethod, method, argDescs, __args);\n\t\tInterpreter::Execute(method, args, __ret);\n\t}\n\n\tstatic void InterpreterDelegateInvoke(Il2CppMethodPointer, const MethodInfo* method, void* __this, void** __args, void* __ret)\n\t{\n\t\tIl2CppMulticastDelegate* del = (Il2CppMulticastDelegate*)__this;\n\t\tIl2CppDelegate** firstSubDel;\n\t\tint32_t subDelCount;\n\t\tif (del->delegates)\n\t\t{\n\t\t\tfirstSubDel = (Il2CppDelegate**)il2cpp::vm::Array::GetFirstElementAddress(del->delegates);\n\t\t\tsubDelCount = il2cpp::vm::Array::GetLength(del->delegates);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfirstSubDel = (Il2CppDelegate**)&del;\n\t\t\tfirstSubDel[0] = &del->delegate;\n\t\t\tsubDelCount = 1;\n\t\t}\n\n\t\tfor (int32_t i = 0; i < subDelCount; i++)\n\t\t{\n\t\t\tIl2CppDelegate* cur = firstSubDel[i];\n\t\t\tconst MethodInfo* curMethod = cur->method;\n\t\t\tIl2CppObject* curTarget = cur->target;\n\t\t\tif (curMethod->invoker_method == nullptr)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineExceptionMethodIsNotFound(curMethod);\n\t\t\t}\n\t\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(curMethod))\n\t\t\t{\n\t\t\t\tRaiseAOTGenericMethodNotInstantiatedException(curMethod);\n\t\t\t}\n\t\t\tswitch ((int)(method->parameters_count - curMethod->parameters_count))\n\t\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tif (metadata::IsInstanceMethod(curMethod) && !curTarget)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t\t\t}\n\t\t\t\tcurTarget += (IS_CLASS_VALUE_TYPE(curMethod->klass));\n\t\t\t\tcurMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, curTarget, __args, __ret);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase -1:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!hybridclr::metadata::IsInstanceMethod(curMethod));\n\t\t\t\tvoid** newArgs = (void**)alloca(sizeof(void*) * (size_t)(curMethod->parameters_count + 1));\n\t\t\t\tnewArgs[0] = curTarget;\n\t\t\t\tfor (int k = 0, endK = curMethod->parameters_count; k < endK; k++)\n\t\t\t\t{\n\t\t\t\t\tnewArgs[k + 1] = __args[k];\n\t\t\t\t}\n\t\t\t\tcurMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, nullptr, newArgs, __ret);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInstanceMethod(curMethod));\n\t\t\t\tcurTarget = (Il2CppObject*)__args[0];\n\t\t\t\tif (!curTarget)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t\t\t}\n\t\t\t\tcurMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, curTarget, __args + 1, __ret);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"bad delegate method\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t#else\n\tstatic void* InterpreterInvoke(Il2CppMethodPointer methodPointer, const MethodInfo* method, void* __this, void** __args)\n\t{\n\t\tInterpMethodInfo* imi = method->interpData ? (InterpMethodInfo*)method->interpData : InterpreterModule::GetInterpMethodInfo(method);\n\t\tStackObject* args = (StackObject*)alloca(sizeof(StackObject) * imi->argStackObjectSize);\n\t\tbool isInstanceMethod = metadata::IsInstanceMethod(method);\n\t\tif (isInstanceMethod)\n\t\t{\n\t\t\tif (IS_CLASS_VALUE_TYPE(method->klass))\n\t\t\t{\n\t\t\t\t__this = (Il2CppObject*)__this + (methodPointer != method->methodPointerCallByInterp);\n\t\t\t}\n\t\t\targs[0].ptr = __this;\n\t\t}\n\t\tMethodArgDesc* argDescs = imi->args + isInstanceMethod;\n\t\tConvertInvokeArgs(args + isInstanceMethod, method, argDescs, __args);\n\t\tif (method->return_type->type == IL2CPP_TYPE_VOID)\n\t\t{\n\t\t\tInterpreter::Execute(method, args, nullptr);\n\t\t\treturn nullptr;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tStackObject* ret = (StackObject*)alloca(sizeof(StackObject) * imi->retStackObjectSize);\n\t\t\tInterpreter::Execute(method, args, ret);\n\t\t\treturn TranslateNativeValueToBoxValue(method->return_type, ret);\n\t\t}\n\t}\n\n\tstatic void* InterpreterDelegateInvoke(Il2CppMethodPointer, const MethodInfo* method, void* __this, void** __args)\n\t{\n\t\tIl2CppMulticastDelegate* del = (Il2CppMulticastDelegate*)__this;\n\t\tIl2CppDelegate** firstSubDel;\n\t\tint32_t subDelCount;\n\t\tif (del->delegates)\n\t\t{\n\t\t\tfirstSubDel = (Il2CppDelegate**)il2cpp::vm::Array::GetFirstElementAddress(del->delegates);\n\t\t\tsubDelCount = il2cpp::vm::Array::GetLength(del->delegates);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfirstSubDel = (Il2CppDelegate**)&del;\n\t\t\tfirstSubDel[0] = &del->delegate;\n\t\t\tsubDelCount = 1;\n\t\t}\n\t\tvoid* ret = nullptr;\n\t\tfor (int32_t i = 0; i < subDelCount; i++)\n\t\t{\n\t\t\tIl2CppDelegate* cur = firstSubDel[i];\n\t\t\tconst MethodInfo* curMethod = cur->method;\n\t\t\tIl2CppObject* curTarget = cur->target;\n\t\t\tif (curMethod->invoker_method == nullptr)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineExceptionMethodIsNotFound(curMethod);\n\t\t\t}\n\t\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(curMethod))\n\t\t\t{\n\t\t\t\tRaiseAOTGenericMethodNotInstantiatedException(curMethod);\n\t\t\t}\n\t\t\tswitch ((int)(method->parameters_count - curMethod->parameters_count))\n\t\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tif (metadata::IsInstanceMethod(curMethod) && !curTarget)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t\t\t}\n\t\t\t\tcurTarget += (IS_CLASS_VALUE_TYPE(curMethod->klass));\n\t\t\t\tret = curMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, curTarget, __args);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase -1:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!hybridclr::metadata::IsInstanceMethod(curMethod));\n\t\t\t\tvoid** newArgs = (void**)alloca(sizeof(void*) * (size_t)(curMethod->parameters_count + 1));\n\t\t\t\tnewArgs[0] = curTarget;\n\t\t\t\tfor (int k = 0, endK = curMethod->parameters_count; k < endK; k++)\n\t\t\t\t{\n\t\t\t\t\tnewArgs[k + 1] = __args[k];\n\t\t\t\t}\n\t\t\t\tret = curMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, nullptr, newArgs);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInstanceMethod(curMethod));\n\t\t\t\tcurTarget = (Il2CppObject*)__args[0];\n\t\t\t\tif (!curTarget)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t\t\t}\n\t\t\t\tret = curMethod->invoker_method(curMethod->methodPointerCallByInterp, curMethod, curTarget, __args + 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"bad delegate method\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\t#endif\n\n\tInvokerMethod InterpreterModule::GetMethodInvoker(const Il2CppMethodDefinition* method)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromTypeDefinitionIndex(method->declaringType);\n\t\tconst char* methodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(method->nameIndex);\n\t\t// special for Delegate::DynamicInvoke\n\t\treturn !klass || !metadata::IsChildTypeOfMulticastDelegate(klass) || strcmp(methodName, \"Invoke\") ? InterpreterInvoke : InterpreterDelegateInvoke;\n\t}\n\n\tInvokerMethod InterpreterModule::GetMethodInvoker(const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\treturn !klass || !metadata::IsChildTypeOfMulticastDelegate(klass) || strcmp(method->name, \"Invoke\") ? InterpreterInvoke : InterpreterDelegateInvoke;\n\t}\n\n\tbool InterpreterModule::IsImplementsByInterpreter(const MethodInfo* method)\n\t{\n\t\treturn method->invoker_method == InterpreterDelegateInvoke || method->invoker_method == InterpreterInvoke;\n\t}\n\n\tInterpMethodInfo* InterpreterModule::GetInterpMethodInfo(const MethodInfo* methodInfo)\n\t{\n\t\til2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\n\t\tif (methodInfo->interpData)\n\t\t{\n\t\t\treturn (InterpMethodInfo*)methodInfo->interpData;\n\t\t}\n\t\tIL2CPP_ASSERT(methodInfo->isInterpterImpl);\n\n\t\til2cpp::vm::Class::Init(methodInfo->klass);\n\t\tInterpMethodInfo* imi = transform::HiTransform::Transform(methodInfo);\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\tconst_cast<MethodInfo*>(methodInfo)->interpData = imi;\n\t\treturn imi;\n\t}\n}\n}\n\n"
  },
  {
    "path": "hybridclr/interpreter/InterpreterModule.h",
    "content": "#pragma once\n\n#include \"os/ThreadLocalValue.h\"\n\n#include \"../CommonDef.h\"\n#include \"MethodBridge.h\"\n#include \"Engine.h\"\n#include \"../metadata/Image.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tclass InterpreterModule\n\t{\n\tpublic:\n\t\tstatic void Initialize();\n\n\t\tstatic MachineState& GetCurrentThreadMachineState()\n\t\t{\n\t\t\tMachineState* state = nullptr;\n\t\t\ts_machineState.GetValue((void**)&state);\n\t\t\tif (!state)\n\t\t\t{\n\t\t\t\tstate = new MachineState();\n\t\t\t\ts_machineState.SetValue(state);\n\t\t\t}\n\t\t\treturn *state;\n\t\t}\n\n\t\tstatic void FreeThreadLocalMachineState()\n\t\t{\n\t\t\tMachineState* state = nullptr;\n\t\t\ts_machineState.GetValue((void**)&state);\n\t\t\tif (state)\n\t\t\t{\n\t\t\t\tdelete state;\n\t\t\t\ts_machineState.SetValue(nullptr);\n\t\t\t}\n\t\t}\n\n\t\tstatic InterpMethodInfo* GetInterpMethodInfo(const MethodInfo* methodInfo);\n\n\t\tstatic Il2CppMethodPointer GetMethodPointer(const Il2CppMethodDefinition* method);\n\t\tstatic Il2CppMethodPointer GetMethodPointer(const MethodInfo* method);\n\t\tstatic Il2CppMethodPointer GetAdjustThunkMethodPointer(const Il2CppMethodDefinition* method);\n\t\tstatic Il2CppMethodPointer GetAdjustThunkMethodPointer(const MethodInfo* method);\n\t\tstatic Managed2NativeCallMethod GetManaged2NativeMethodPointer(const MethodInfo* method, bool forceStatic);\n\t\tstatic Managed2NativeCallMethod GetManaged2NativeMethodPointer(const metadata::ResolveStandAloneMethodSig& methodSig);\n\t\tstatic Managed2NativeFunctionPointerCallMethod GetManaged2NativeFunctionPointerMethodPointer(const MethodInfo* method, Il2CppCallConvention callConvention);\n\t\tstatic Managed2NativeFunctionPointerCallMethod GetManaged2NativeFunctionPointerMethodPointer(const metadata::ResolveStandAloneMethodSig& methodSig);\n\n\t\tstatic InvokerMethod GetMethodInvoker(const Il2CppMethodDefinition* method);\n\t\tstatic InvokerMethod GetMethodInvoker(const MethodInfo* method);\n\n\t\tstatic bool IsImplementsByInterpreter(const MethodInfo* method);\n\n\t\tstatic bool HasImplementCallNative2Managed(const MethodInfo* method)\n\t\t{\n\t\t\tIL2CPP_ASSERT(method->methodPointerCallByInterp != NotSupportAdjustorThunk);\n\t\t\treturn method->methodPointerCallByInterp != (Il2CppMethodPointer)NotSupportNative2Managed;\n\t\t}\n\n\t\tstatic bool HasImplementCallVirtualNative2Managed(const MethodInfo* method)\n\t\t{\n\t\t\tIL2CPP_ASSERT(method->virtualMethodPointerCallByInterp != NotSupportNative2Managed);\n\t\t\treturn method->virtualMethodPointerCallByInterp != (Il2CppMethodPointer)NotSupportAdjustorThunk;\n\t\t}\n\n\t\tstatic void Managed2NativeCallByReflectionInvoke(const MethodInfo* method, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret);\n\n\t\tstatic void NotSupportNative2Managed();\n\t\tstatic void NotSupportAdjustorThunk();\n\n\t\tstatic Il2CppMethodPointer GetReversePInvokeWrapper(const Il2CppImage* image, const MethodInfo* method, Il2CppCallConvention callConvention);\n\t\tstatic const MethodInfo* GetMethodInfoByReversePInvokeWrapperIndex(int32_t index);\n\t\tstatic const MethodInfo* GetMethodInfoByReversePInvokeWrapperMethodPointer(Il2CppMethodPointer methodPointer);\n\t\tstatic int32_t GetWrapperIndexByReversePInvokeWrapperMethodPointer(Il2CppMethodPointer methodPointer);\n\n\t\tstatic const char* GetValueTypeSignature(const char* fullName);\n\t\t\n\t\tstatic bool IsMethodInfoPointer(void* pointer);\n\tprivate:\n\t\tstatic il2cpp::os::ThreadLocalValue s_machineState;\n\t};\n}\n}\n"
  },
  {
    "path": "hybridclr/interpreter/InterpreterUtil.cpp",
    "content": "#include \"InterpreterUtil.h\"\n\n#include \"vm/Object.h\"\n\n#include \"../metadata/MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\tTypeDesc GetValueTypeArgDescBySize(uint32_t size)\n\t{\n\t\tif (size <= 8)\n\t\t{\n\t\t\treturn { LocationDataType::U8, 1 };\n\t\t}\n\t\treturn { LocationDataType::S_N, (uint32_t)metadata::GetStackSizeByByteSize(size) };\n\t}\n\n\tTypeDesc GetTypeArgDesc(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn { LocationDataType::U8, 1 };\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t\treturn{ LocationDataType::U1, 1 };\n\t\tcase IL2CPP_TYPE_I1:\n\t\t\treturn{ LocationDataType::I1, 1 };\n\t\tcase IL2CPP_TYPE_I2:\n\t\t\treturn{ LocationDataType::I2, 1 };\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t\treturn{ LocationDataType::U2, 1 };\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_R4:\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_BYREF:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn{ LocationDataType::U8, 1 };\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t\treturn GetValueTypeArgDescBySize(sizeof(Il2CppTypedRef));\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\tif (klass->enumtype)\n\t\t\t{\n\t\t\t\treturn GetTypeArgDesc(&klass->castClass->byval_arg);\n\t\t\t}\n\t\t\treturn GetValueTypeArgDescBySize(il2cpp::vm::Class::GetValueSize(klass, nullptr));\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\tif (genericClass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\t\treturn{ LocationDataType::U8, 1 };\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\t\tif (klass->enumtype)\n\t\t\t\t{\n\t\t\t\t\treturn GetTypeArgDesc(&klass->castClass->byval_arg);\n\t\t\t\t}\n\t\t\t\treturn GetValueTypeArgDescBySize(il2cpp::vm::Class::GetValueSize(klass, nullptr));\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support arg type\");\n\t\t\treturn{ LocationDataType::U8, 1 };\n\t\t}\n\t\t}\n\t}\n\n\tIl2CppObject* TranslateNativeValueToBoxValue(const Il2CppType* type, void* value)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"TranslateNativeValueToBoxValue can't box ref\");\n\t\t\treturn nullptr;\n\t\t}\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\treturn il2cpp::vm::Object::Box(klass, value);\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/interpreter/InterpreterUtil.h",
    "content": "#pragma once\n\n#if HYBRIDCLR_UNITY_2023_OR_NEW\n#include \"codegen/il2cpp-codegen.h\"\n#else\n#include \"codegen/il2cpp-codegen-il2cpp.h\"\n#endif\n\n#include \"InterpreterDefs.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\t\n\tstruct TypeDesc\n\t{\n\t\tLocationDataType type;\n\t\tuint32_t stackObjectSize; //\n\t};\n\n\tIL2CPP_FORCE_INLINE void RuntimeInitClassCCtor(Il2CppClass* klass)\n\t{\n\t\til2cpp::vm::ClassInlines::InitFromCodegen(klass);\n\t\tif (!IS_CCTOR_FINISH_OR_NO_CCTOR(klass))\n\t\t{\n\t\t\til2cpp_codegen_runtime_class_init(klass);\n\t\t}\n\t}\n\n\tIL2CPP_FORCE_INLINE void RuntimeInitClassCCtor(const MethodInfo* method)\n\t{\n\t\tRuntimeInitClassCCtor(method->klass);\n\t}\n\n\tIL2CPP_FORCE_INLINE void RuntimeInitClassCCtorWithoutInitClass(Il2CppClass* klass)\n\t{\n\t\tif (!IS_CCTOR_FINISH_OR_NO_CCTOR(klass))\n\t\t{\n\t\t\til2cpp_codegen_runtime_class_init(klass);\n\t\t}\n\t}\n\n\tIL2CPP_FORCE_INLINE void RuntimeInitClassCCtorWithoutInitClass(const MethodInfo* method)\n\t{\n\t\tRuntimeInitClassCCtorWithoutInitClass(method->klass);\n\t}\n\n\tinline bool IsNeedExpandLocationType(LocationDataType type)\n\t{\n\t\treturn type < LocationDataType::U8;\n\t}\n\n\tTypeDesc GetTypeArgDesc(const Il2CppType* type);\n\n\tinline LocationDataType GetLocationDataTypeByType(const Il2CppType* type)\n\t{\n\t\treturn GetTypeArgDesc(type).type;\n\t}\n\n\tinline void ExpandLocationData2StackDataByType(void* retValue, LocationDataType type)\n\t{\n\t\tswitch (type)\n\t\t{\n\t\tcase LocationDataType::I1:\n\t\t\t*(int32_t*)retValue = *(int8_t*)retValue;\n\t\t\tbreak;\n\t\tcase LocationDataType::U1:\n\t\t\t*(int32_t*)retValue = *(uint8_t*)retValue;\n\t\t\tbreak;\n\t\tcase LocationDataType::I2:\n\t\t\t*(int32_t*)retValue = *(int16_t*)retValue;\n\t\t\tbreak;\n\t\tcase LocationDataType::U2:\n\t\t\t*(int32_t*)retValue = *(uint16_t*)retValue;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tinline void CopyLocationData2StackDataByType(StackObject* dst, StackObject* src, LocationDataType type)\n\t{\n\t\tswitch (type)\n\t\t{\n\t\tcase LocationDataType::I1:\n\t\t\t*(int32_t*)dst = *(int8_t*)src;\n\t\t\tbreak;\n\t\tcase LocationDataType::U1:\n\t\t\t*(int32_t*)dst = *(uint8_t*)src;\n\t\t\tbreak;\n\t\tcase LocationDataType::I2:\n\t\t\t*(int32_t*)dst = *(int16_t*)src;\n\t\t\tbreak;\n\t\tcase LocationDataType::U2:\n\t\t\t*(int32_t*)dst = *(uint16_t*)src;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t*dst = *src;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tTypeDesc GetValueTypeArgDescBySize(uint32_t size);\n\t\n\tIl2CppObject* TranslateNativeValueToBoxValue(const Il2CppType* type, void* value);\n\n\n}\n}\n"
  },
  {
    "path": "hybridclr/interpreter/Interpreter_Execute.cpp",
    "content": "\n#include \"Interpreter.h\"\n\n#include <cmath>\n#include <algorithm>\n\n#include \"vm/Object.h\"\n#include \"vm/Class.h\"\n#include \"vm/ClassInlines.h\"\n#include \"vm/Array.h\"\n#include \"vm/Image.h\"\n#include \"vm/Exception.h\"\n#include \"vm/Thread.h\"\n#include \"vm/Runtime.h\"\n#include \"vm/Reflection.h\"\n#include \"metadata/GenericMetadata.h\"\n#if HYBRIDCLR_UNITY_2020_OR_NEW\n#include \"vm-utils/icalls/mscorlib/System.Threading/Interlocked.h\"\n#else\n#include \"icalls/mscorlib/System.Threading/Interlocked.h\"\n#endif\n\n#include \"../metadata/MetadataModule.h\"\n\n#include \"Instruction.h\"\n#include \"MethodBridge.h\"\n#include \"InstrinctDef.h\"\n#include \"MemoryUtil.h\"\n#include \"InterpreterModule.h\"\n#include \"InterpreterUtil.h\"\n#include \"gc/WriteBarrier.h\"\n\nusing namespace hybridclr::metadata;\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\n#pragma region memory\n\n#define LOCAL_ALLOC(size) interpFrameGroup.AllocLoc(size, imi->initLocals)\n\n#pragma endregion\n\n#pragma region arith\n\n\tinline bool CheckAddOverflow(int32_t a, int32_t b)\n\t{\n\t\treturn b >= 0 ? (INT32_MAX - b < a) : (INT32_MIN - b > a);\n\t}\n\n\tinline bool CheckSubOverflow(int32_t a, int32_t b)\n\t{\n\t\treturn b >= 0 ? (INT32_MAX - b < a) : (INT32_MIN - b > a);\n\t}\n\n\tinline bool CheckAddOverflowUn(uint32_t a, uint32_t b)\n\t{\n\t\treturn UINT32_MAX - b < a;\n\t}\n\n\tinline bool CheckSubOverflowUn(uint32_t a, uint32_t b)\n\t{\n\t\treturn a < b;\n\t}\n\n\tinline bool CheckAddOverflow64(int64_t a, int64_t b)\n\t{\n\t\treturn b >= 0 ? (INT64_MAX - b < a) : (INT64_MIN - b > a);\n\t}\n\n\tinline bool CheckSubOverflow64(int64_t a, int64_t b)\n\t{\n\t\treturn b < 0 ? (INT64_MAX + b < a) : (INT64_MIN + b > a);\n\t}\n\n\tinline bool CheckAddOverflow64Un(uint64_t a, uint64_t b)\n\t{\n\t\treturn UINT64_MAX - b < a;\n\t}\n\n\tinline bool CheckSubOverflow64Un(uint64_t a, uint64_t b)\n\t{\n\t\treturn a < b;\n\t}\n\n\tinline bool CheckMulOverflow(int32_t a, int32_t b)\n\t{\n\t\tint64_t c = (int64_t)a * (int64_t)b;\n\t\treturn c < INT32_MIN || c > INT32_MAX;\n\t}\n\n\tinline bool CheckMulOverflowUn(uint32_t a, uint32_t b)\n\t{\n\t\treturn (uint64_t)a * (uint64_t)b > UINT32_MAX;\n\t}\n\n\tinline bool CheckMulOverflow64(int64_t a, int64_t b)\n\t{\n\t\tif (a == 0 || b == 0)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (a > 0 && b == -1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (a < 0 && b == -1)\n\t\t{\n\t\t\treturn a == INT64_MIN;\n\t\t}\n\t\tif (a > 0 && b > 0)\n\t\t{\n\t\t\treturn a > INT64_MAX / b;\n\t\t}\n\t\tif (a > 0 && b < 0)\n\t\t{\n\t\t\treturn a > INT64_MIN / b;\n\t\t}\n\t\tif (a < 0 && b > 0)\n\t\t{\n\t\t\treturn a < INT64_MIN / b;\n\t\t}\n\t\treturn a < INT64_MAX / b;\n\t}\n\n\tinline bool CheckMulOverflow64Un(uint64_t a, uint64_t b)\n\t{\n\t\treturn  a != 0 && b > UINT64_MAX / a;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_i1(int32_t x)\n\t{\n\t\treturn ((x < INT8_MIN) || (x > INT8_MAX));\n\t}\n\n\tinline bool CheckConvertOverflow_i4_u1(int32_t x)\n\t{\n\t\treturn (uint32_t)x > UINT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_i2(int32_t x)\n\t{\n\t\treturn ((x < INT16_MIN) || (x > INT16_MAX));\n\t}\n\n\tinline bool CheckConvertOverflow_i4_u2(int32_t x)\n\t{\n\t\treturn (uint32_t)x > UINT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_i4(int32_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_u4(int32_t x)\n\t{\n\t\treturn x < 0;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_i8(int32_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_i4_u8(int32_t x)\n\t{\n\t\treturn  x < 0;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_i1(uint32_t x)\n\t{\n\t\treturn  x > INT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_u1(uint32_t x)\n\t{\n\t\treturn  x > UINT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_i2(uint32_t x)\n\t{\n\t\treturn x > INT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_u2(uint32_t x)\n\t{\n\t\treturn  x > UINT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_i4(uint32_t x)\n\t{\n\t\treturn x > INT32_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_u4(uint32_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_i8(uint32_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_u4_u8(uint32_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_i8_i1(int64_t x)\n\t{\n\t\treturn ((x < INT8_MIN) || (x > INT8_MAX));\n\t}\n\n\tinline bool CheckConvertOverflow_i8_u1(int64_t x)\n\t{\n\t\treturn (uint64_t)x > UINT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_i8_i2(int64_t x)\n\t{\n\t\treturn ((x < INT16_MIN) || (x > INT16_MAX));\n\t}\n\n\tinline bool CheckConvertOverflow_i8_u2(int64_t x)\n\t{\n\t\treturn (uint64_t)x > UINT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_i8_i4(int64_t x)\n\t{\n\t\treturn ((x < INT32_MIN) || (x > INT32_MAX));\n\t}\n\n\tinline bool CheckConvertOverflow_i8_u4(int64_t x)\n\t{\n\t\treturn (uint64_t)x > UINT32_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_i8_i8(int64_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_i8_u8(int64_t x)\n\t{\n\t\treturn x < 0;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_i1(uint64_t x)\n\t{\n\t\treturn x > INT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_u1(uint64_t x)\n\t{\n\t\treturn  x > UINT8_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_i2(uint64_t x)\n\t{\n\t\treturn x > INT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_u2(uint64_t x)\n\t{\n\t\treturn  x > UINT16_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_i4(uint64_t x)\n\t{\n\t\treturn x > INT32_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_u4(uint64_t x)\n\t{\n\t\treturn x > UINT32_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_i8(uint64_t x)\n\t{\n\t\treturn x > INT64_MAX;\n\t}\n\n\tinline bool CheckConvertOverflow_u8_u8(uint64_t x)\n\t{\n\t\treturn false;\n\t}\n\n\tinline bool CheckConvertOverflow_f4_i1(float x)\n\t{\n\t\treturn x < INT8_MIN || x > INT8_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f4_u1(float x)\n\t{\n\t\treturn x < 0 || x > UINT8_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f4_i2(float x)\n\t{\n\t\treturn x < INT16_MIN || x > INT16_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f4_u2(float x)\n\t{\n\t\treturn x < 0 || x > UINT16_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f4_i4(float x)\n\t{\n\t\tif (isnan(x))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tfloat y = truncf(x);\n\t\treturn y != (int32_t)x;\n\t}\n\n\tinline bool CheckConvertOverflow_f4_u4(float x)\n\t{\n\t\tif (isnan(x) || x < 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tfloat y = truncf(x);\n\t\treturn y != (uint32_t)x;\n\t}\n\n\tinline bool CheckConvertOverflow_f4_i8(float x)\n\t{\n\t\tif (isnan(x))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tfloat y = truncf(x);\n\t\treturn y != (int64_t)x;\n\t}\n\n\tinline bool CheckConvertOverflow_f4_u8(float x)\n\t{\n\t\tif (isnan(x) || x < 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tfloat y = truncf(x);\n\t\treturn y != (uint64_t)x;\n\t}\n\n\tinline bool CheckConvertOverflow_f8_i1(double x)\n\t{\n\t\treturn x < INT8_MIN || x > INT8_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_u1(double x)\n\t{\n\t\treturn x < 0 || x > UINT8_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_i2(double x)\n\t{\n\t\treturn x < INT16_MIN || x > INT16_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_u2(double x)\n\t{\n\t\treturn x < 0 || x > UINT16_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_i4(double x)\n\t{\n\t\treturn x < INT32_MIN || x > INT32_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_u4(double x)\n\t{\n\t\treturn x < 0 || x > UINT32_MAX || isnan(x);\n\t}\n\n\tinline bool CheckConvertOverflow_f8_i8(double x)\n\t{\n\t\tif (isnan(x))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tdouble y = trunc(x);\n\t\treturn y != (int64_t)x;\n\t}\n\n\tinline bool CheckConvertOverflow_f8_u8(double x)\n\t{\n\t\tif (isnan(x) || x < 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tdouble y = trunc(x);\n\t\treturn y != (uint64_t)x;\n\t}\n\n\tinline int32_t HiDiv(int32_t a, int32_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\telse if (a == kIl2CppInt32Min && b == -1)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t\treturn a / b;\n\t}\n\n\tinline int64_t HiDiv(int64_t a, int64_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\telse if (a == kIl2CppInt64Min && b == -1)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t\treturn a / b;\n\t}\n\n\tinline float HiDiv(float a, float b)\n\t{\n\t\treturn a / b;\n\t}\n\n\tinline double HiDiv(double a, double b)\n\t{\n\t\treturn a / b;\n\t}\n\n\tinline int32_t HiMulUn(int32_t a, int32_t b)\n\t{\n\t\treturn (uint32_t)a * (uint32_t)b;\n\t}\n\n\tinline int64_t HiMulUn(int64_t a, int64_t b)\n\t{\n\t\treturn (uint64_t)a * (uint64_t)b;\n\t}\n\n\tinline int32_t HiDivUn(int32_t a, int32_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\treturn (uint32_t)a / (uint32_t)b;\n\t}\n\n\tinline int64_t HiDivUn(int64_t a, int64_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\treturn (uint64_t)a / (uint64_t)b;\n\t}\n\n\tinline float HiRem(float a, float b)\n\t{\n\t\treturn std::fmod(a, b);\n\t}\n\n\tinline double HiRem(double a, double b)\n\t{\n\t\treturn std::fmod(a, b);\n\t}\n\n\tinline int32_t HiRem(int32_t a, int32_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\telse if (a == kIl2CppInt32Min && b == -1)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t\treturn a % b;\n\t}\n\n\tinline int64_t HiRem(int64_t a, int64_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\telse if (a == kIl2CppInt64Min && b == -1)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t\treturn a % b;\n\t}\n\n\tinline uint32_t HiRemUn(int32_t a, int32_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\treturn (uint32_t)a % (uint32_t)b;\n\t}\n\n\tinline uint64_t HiRemUn(int64_t a, int64_t b)\n\t{\n\t\tif (b == 0)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseDivideByZeroException();\n\t\t}\n\t\treturn (uint64_t)a % (uint64_t)b;\n\t}\n\n\tinline uint32_t HiShrUn(int32_t a, int64_t b)\n\t{\n\t\treturn (uint32_t)a >> b;\n\t}\n\n\tinline uint32_t HiShrUn(int32_t a, int32_t b)\n\t{\n\t\treturn (uint32_t)a >> b;\n\t}\n\n\tinline uint64_t HiShrUn(int64_t a, int32_t b)\n\t{\n\t\treturn (uint64_t)a >> b;\n\t}\n\n\tinline uint64_t HiShrUn(int64_t a, int64_t b)\n\t{\n\t\treturn (uint64_t)a >> b;\n\t}\n\n\n\tinline void HiCheckFinite(float x)\n\t{\n\t\tif (std::isinf(x) || std::isnan(x))\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t}\n\n\tinline void HiCheckFinite(double x)\n\t{\n\t\tif (std::isinf(x) || std::isnan(x))\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseOverflowException();\n\t\t}\n\t}\n\n\ttemplate<typename T> bool CompareCeq(T a, T b) { return a == b; }\n\ttemplate<typename T> bool CompareCne(T a, T b) { return a != b; }\n\ttemplate<typename T> bool CompareCgt(T a, T b) { return a > b; }\n\ttemplate<typename T> bool CompareCge(T a, T b) { return a >= b; }\n\ttemplate<typename T> bool CompareClt(T a, T b) { return a < b; }\n\ttemplate<typename T> bool CompareCle(T a, T b) { return a <= b; }\n\n\tinline bool CompareCneUn(int32_t a, int32_t b) { return (uint32_t)a != (uint32_t)b; }\n\tinline bool CompareCgtUn(int32_t a, int32_t b) { return (uint32_t)a > (uint32_t)b; }\n\tinline bool CompareCgeUn(int32_t a, int32_t b) { return (uint32_t)a >= (uint32_t)b; }\n\tinline bool CompareCltUn(int32_t a, int32_t b) { return (uint32_t)a < (uint32_t)b; }\n\tinline bool CompareCleUn(int32_t a, int32_t b) { return (uint32_t)a <= (uint32_t)b; }\n\n\tinline bool CompareCneUn(int64_t a, int64_t b) { return (uint64_t)a != (uint64_t)b; }\n\tinline bool CompareCgtUn(int64_t a, int64_t b) { return (uint64_t)a > (uint64_t)b; }\n\tinline bool CompareCgeUn(int64_t a, int64_t b) { return (uint64_t)a >= (uint64_t)b; }\n\tinline bool CompareCltUn(int64_t a, int64_t b) { return (uint64_t)a < (uint64_t)b; }\n\tinline bool CompareCleUn(int64_t a, int64_t b) { return (uint64_t)a <= (uint64_t)b; }\n\n\tinline bool CompareCneUn(float a, float b) { return a != b; }\n\tinline bool CompareCgtUn(float a, float b) { return a > b; }\n\tinline bool CompareCgeUn(float a, float b) { return a >= b; }\n\tinline bool CompareCltUn(float a, float b) { return a < b; }\n\tinline bool CompareCleUn(float a, float b) { return a <= b; }\n\n\tinline bool CompareCneUn(double a, double b) { return a != b; }\n\tinline bool CompareCgtUn(double a, double b) { return a > b; }\n\tinline bool CompareCgeUn(double a, double b) { return a >= b; }\n\tinline bool CompareCltUn(double a, double b) { return a < b; }\n\tinline bool CompareCleUn(double a, double b) { return a <= b; }\n\n#pragma endregion\n\n#pragma region object\n\n\tinline void INIT_CLASS(Il2CppClass* klass)\n\t{\n\t\til2cpp::vm::ClassInlines::InitFromCodegen(klass);\n\t}\n\n\tinline void CHECK_NOT_NULL_THROW(const void* ptr)\n\t{\n\t\tif (!ptr)\n\t\t{\n\t\t\til2cpp::vm::Exception::RaiseNullReferenceException();\n\t\t}\n\t}\n\n\tinline void CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(Il2CppArray* arr, int64_t index)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\tif (arr->max_length <= (il2cpp_array_size_t)index)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t}\n\t}\n\n\tinline void CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(Il2CppArray* arr, int32_t startIndex, int32_t length)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\tif (arr->max_length <= (il2cpp_array_size_t)startIndex || arr->max_length - (il2cpp_array_size_t)startIndex < (il2cpp_array_size_t)length)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t}\n\t}\n\n\tinline void CHECK_NOT_NULL_AND_ARRAY_BOUNDARY2(Il2CppArray* arr, int32_t startIndex, int32_t length)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\tif (arr->max_length <= (il2cpp_array_size_t)startIndex || arr->max_length - (il2cpp_array_size_t)startIndex < (il2cpp_array_size_t)length)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentOutOfRangeException(\"\"));\n\t\t}\n\t}\n\n\tinline void CHECK_TYPE_MATCH_ELSE_THROW(Il2CppClass* klass1, Il2CppClass* klass2)\n\t{\n\t\tif (klass1 != klass2)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArrayTypeMismatchException());\n\t\t}\n\t}\n\n\tinline void CheckArrayElementTypeMatch(Il2CppClass* arrKlass, Il2CppClass* eleKlass)\n\t{\n\t\tif (il2cpp::vm::Class::GetElementClass(arrKlass) != eleKlass)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArrayTypeMismatchException());\n\t\t}\n\t}\n\n\tinline void CheckArrayElementTypeCompatible(Il2CppArray* arr, Il2CppObject* ele)\n\t{\n\t\tif (ele && !il2cpp::vm::Class::IsAssignableFrom(arr->klass->element_class, ele->klass))\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArrayTypeMismatchException());\n\t\t}\n\t}\n\n\tinline MethodInfo* GET_OBJECT_VIRTUAL_METHOD(Il2CppObject* obj, const MethodInfo* method)\n\t{\n\t\tCHECK_NOT_NULL_THROW(obj);\n\t\tconst MethodInfo* result;\n\t\tif (hybridclr::metadata::IsVirtualMethod(method->flags))\n\t\t{\n\t\t\tif (hybridclr::metadata::IsInterface(method->klass->flags))\n\t\t\t{\n\t\t\t\tresult = il2cpp_codegen_get_interface_invoke_data(method->slot, obj, method->klass).method;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult = il2cpp_codegen_get_virtual_invoke_data(method->slot, obj).method;\n\t\t\t}\n\t\t\tIL2CPP_ASSERT(!method->genericMethod || method->is_inflated);\n\t\t\tif (method->genericMethod && method->genericMethod->context.method_inst/* && method->genericMethod*/) // means it's genericInstance method 或generic method\n\t\t\t{\n\t\t\t\tresult = GetGenericVirtualMethod(result, method);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tresult = method;\n\t\t}\n\t\treturn const_cast<MethodInfo*>(result);\n\t}\n\n#define GET_OBJECT_INTERFACE_METHOD(obj, intfKlass, slot) (MethodInfo*)nullptr\n\n\tinline void* HiUnbox(Il2CppObject* obj, Il2CppClass* klass)\n\t{\n\t\tif (il2cpp::vm::Class::IsNullable(klass))\n\t\t{\n\t\t\tif (!obj)\n\t\t\t{\n\t\t\t\treturn nullptr;\n\t\t\t}\n\t\t\tklass = il2cpp::vm::Class::GetNullableArgument(klass);\n\t\t}\n\t\treturn UnBox(obj, klass);\n\t}\n\n\tinline void CopyObjectData2StackDataByType(void* dst, void* src, Il2CppClass* klass)\n\t{\n\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\tIl2CppTypeEnum type = klass->enumtype ? klass->castClass->byval_arg.type : klass->byval_arg.type;\n\t\tswitch (type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\t\t*(int32_t*)dst = *(int8_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_U1:\n\t\t\t*(int32_t*)dst = *(uint8_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_I2:\n\t\t\t*(int32_t*)dst = *(int16_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\t\t*(int32_t*)dst = *(uint16_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\t*(int32_t*)dst = *(int32_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\t*(int64_t*)dst = *(int64_t*)src;\n\t\t\tbreak;\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n#if HYBRIDCLR_ARCH_64\n\t\t\t* (int64_t*)dst = *(int64_t*)src;\n#else\n\t\t\t* (int32_t*)dst = *(int32_t*)src;\n#endif\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tint32_t dataSize = klass->instance_size - sizeof(Il2CppObject);\n\t\t\tif (dataSize <= sizeof(StackObject))\n\t\t\t{\n\t\t\t\t*(StackObject*)dst = *(StackObject*)src;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::memmove(dst, src, dataSize);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tinline void HiUnboxAny2StackObject(Il2CppObject* obj, Il2CppClass* klass, void* data)\n\t{\n\t\tif (il2cpp::vm::Class::IsNullable(klass))\n\t\t{\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t// il2cpp modify argument meaning in 2021\n\t\t\tUnBoxNullable(obj, klass, data);\n#else\n\t\t\tUnBoxNullable(obj, klass->element_class, data);\n#endif\n\t\t}\n\t\telse\n\t\t{\n\t\t\tCopyObjectData2StackDataByType(data, UnBox(obj, klass), klass);\n\t\t}\n\t}\n\n\tinline void HiCastClass(Il2CppObject* obj, Il2CppClass* klass)\n\t{\n\t\tif (obj != nullptr && !il2cpp::vm::Class::IsAssignableFrom(klass, obj->klass))\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetInvalidCastException(\"cast fail\"), nullptr);\n\t\t}\n\t}\n\n\tinline Il2CppTypedRef MAKE_TYPEDREFERENCE(Il2CppClass* klazz, void* ptr)\n\t{\n\t\treturn Il2CppTypedRef{ &klazz->byval_arg, ptr, klazz };\n\t}\n\n\tinline void* RefAnyType(Il2CppTypedRef ref)\n\t{\n\t\treturn (void*)ref.type;\n\t}\n\n\tinline void* RefAnyValue(Il2CppTypedRef ref, Il2CppClass* klass)\n\t{\n\t\tif (klass != ref.klass)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetInvalidCastException(klass->name));\n\t\t}\n\t\treturn ref.value;\n\t}\n\n#define MAX_DIMENSION  10\n\n\tinline void SetArrayElementWithSize(Il2CppArray* array, uint32_t elementSize, int32_t index, void* value)\n\t{\n\t\tvoid* __p = (void*) il2cpp_array_addr_with_size (array, elementSize, index);\n\t\tmemcpy(__p, value, elementSize);\n\t}\n\t\n\tinline Il2CppArray* NewMdArray(Il2CppClass* fullArrKlass, StackObject* lengths, StackObject* lowerBounds)\n\t{\n\t\til2cpp_array_size_t arrLengths[MAX_DIMENSION];\n\t\til2cpp_array_size_t arrLowerBounds[MAX_DIMENSION];\n\n\t\tswitch (fullArrKlass->rank)\n\t\t{\n\t\tcase 1:\n\t\t{\n\t\t\tarrLengths[0] = lengths[0].i32;\n\t\t\tif (lowerBounds)\n\t\t\t{\n\t\t\t\tarrLowerBounds[0] = lowerBounds[0].i32;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 2:\n\t\t{\n\t\t\tarrLengths[0] = lengths[0].i32;\n\t\t\tarrLengths[1] = lengths[1].i32;\n\t\t\tif (lowerBounds)\n\t\t\t{\n\t\t\t\tarrLowerBounds[0] = lowerBounds[0].i32;\n\t\t\t\tarrLowerBounds[1] = lowerBounds[1].i32;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tfor (uint8_t i = 0; i < fullArrKlass->rank; i++)\n\t\t\t{\n\t\t\t\tarrLengths[i] = lengths[i].i32;\n\t\t\t\tif (lowerBounds)\n\t\t\t\t{\n\t\t\t\t\tarrLowerBounds[i] = lowerBounds[i].i32;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t\treturn il2cpp::vm::Array::NewFull(fullArrKlass, arrLengths, lowerBounds ? arrLowerBounds : nullptr);\n\t}\n\n\tinline void* GetMdArrayElementAddress(Il2CppArray* arr, StackObject* indexs)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\tIl2CppClass* klass = arr->klass;\n\t\tuint32_t eleSize = klass->element_size;\n\t\tIl2CppArrayBounds* bounds = arr->bounds;\n\t\tchar* arrayStart = il2cpp::vm::Array::GetFirstElementAddress(arr);\n\t\tswitch (klass->rank)\n\t\t{\n\t\tcase 1:\n\t\t{\n\t\t\tIl2CppArrayBounds& bound = bounds[0];\n\t\t\til2cpp_array_size_t idx = (il2cpp_array_size_t)(indexs[0].i32 - bound.lower_bound);\n\t\t\tif (idx < bound.length)\n\t\t\t{\n\t\t\t\treturn arrayStart + (idx * eleSize);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 2:\n\t\t{\n\t\t\tIl2CppArrayBounds& bound0 = bounds[0];\n\t\t\til2cpp_array_size_t idx0 = (il2cpp_array_size_t)(indexs[0].i32 - bound0.lower_bound);\n\t\t\tIl2CppArrayBounds& bound1 = bounds[1];\n\t\t\til2cpp_array_size_t idx1 = (il2cpp_array_size_t)(indexs[1].i32 - bound1.lower_bound);\n\t\t\tif (idx0 < bound0.length && idx1 < bound1.length)\n\t\t\t{\n\t\t\t\treturn arrayStart + ((idx0 * bound1.length) + idx1) * eleSize;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\tIl2CppArrayBounds& bound0 = bounds[0];\n\t\t\til2cpp_array_size_t idx0 = (il2cpp_array_size_t)(indexs[0].i32 - bound0.lower_bound);\n\t\t\tIl2CppArrayBounds& bound1 = bounds[1];\n\t\t\til2cpp_array_size_t idx1 = (il2cpp_array_size_t)(indexs[1].i32 - bound1.lower_bound);\n\t\t\tIl2CppArrayBounds& bound2 = bounds[2];\n\t\t\til2cpp_array_size_t idx2 = (il2cpp_array_size_t)(indexs[2].i32 - bound2.lower_bound);\n\t\t\tif (idx0 < bound0.length && idx1 < bound1.length && idx2 < bound2.length)\n\t\t\t{\n\t\t\t\treturn arrayStart + ((idx0 * bound1.length + idx1) * bound2.length + idx2) * eleSize;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tIL2CPP_ASSERT(klass->rank > 0);\n\t\t\til2cpp_array_size_t totalIdx = 0;\n\t\t\tfor (uint8_t i = 0; i < klass->rank; i++)\n\t\t\t{\n\t\t\t\tIl2CppArrayBounds& bound = bounds[i];\n\t\t\t\til2cpp_array_size_t idx = (il2cpp_array_size_t)(indexs[i].i32 - bound.lower_bound);\n\t\t\t\tif (idx < bound.length)\n\t\t\t\t{\n\t\t\t\t\ttotalIdx = totalIdx * bound.length + idx;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetIndexOutOfRangeException());\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn arrayStart + totalIdx * eleSize;\n\t\t}\n\t\t}\n\t}\n\n\ttemplate<typename T> void GetMdArrayElementExpandToStack(Il2CppArray* arr, StackObject* indexs, void* value)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\t*(int32_t*)value = *(T*)GetMdArrayElementAddress(arr, indexs);\n\t}\n\n\ttemplate<typename T> void GetMdArrayElementCopyToStack(Il2CppArray* arr, StackObject* indexs, void* value)\n\t{\n\t\tCHECK_NOT_NULL_THROW(arr);\n\t\t*(T*)value = *(T*)GetMdArrayElementAddress(arr, indexs);\n\t}\n\n\tinline void GetMdArrayElementBySize(Il2CppArray* arr, StackObject* indexs, void* value)\n\t{\n\t\tCopyBySize(value, GetMdArrayElementAddress(arr, indexs), arr->klass->element_size);\n\t}\n\n\tinline void SetMdArrayElement(Il2CppArray* arr, StackObject* indexs, void* value)\n\t{\n\t\tCopyBySize(GetMdArrayElementAddress(arr, indexs), value, arr->klass->element_size);\n\t}\n\n\tinline void SetMdArrayElementWriteBarrier(Il2CppArray* arr, StackObject* indexs, void* value)\n\t{\n\t\tvoid* dst = GetMdArrayElementAddress(arr, indexs);\n\t\tuint32_t eleSize = arr->klass->element_size;\n\t\tCopyBySize(dst, value, eleSize);\n\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)dst, eleSize);\n\t}\n\n#pragma endregion\n\n#pragma region nullable\n\n\n\tinline void InitNullableValueType(void* nullableValueTypeObj, void* data, Il2CppClass* klass)\n\t{\n\t\tIL2CPP_ASSERT(klass->castClass->size_inited);\n\t\tuint32_t size = klass->castClass->instance_size - sizeof(Il2CppObject);\n\t\tvoid* dataPtr = GetNulllableDataOffset(nullableValueTypeObj, klass);\n\t\tstd::memmove(dataPtr, data, size);\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\tif (klass->castClass->has_references)\n\t\t{\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)dataPtr, size);\n\t\t}\n#endif\n\t\t*GetNulllableHasValueOffset(nullableValueTypeObj, klass) = 1;\n\t}\n\n\tinline void NewNullableValueType(void* nullableValueTypeObj, void* data, Il2CppClass* klass)\n\t{\n\t\tIL2CPP_ASSERT(klass->castClass->size_inited);\n\t\tuint32_t size = klass->castClass->instance_size - sizeof(Il2CppObject);\n\t\tstd::memmove(GetNulllableDataOffset(nullableValueTypeObj, klass), data, size);\n\t\t*GetNulllableHasValueOffset(nullableValueTypeObj, klass) = 1;\n\t}\n\n\tinline bool IsNullableHasValue(void* nullableValueObj, Il2CppClass* klass)\n\t{\n\t\tIL2CPP_ASSERT(klass->castClass->size_inited);\n\t\treturn *(GetNulllableHasValueOffset(nullableValueObj, klass));\n\t}\n\t\n\tinline void GetNullableValueOrDefault2StackDataByType(void* dst, void* nullableValueObj, Il2CppClass* klass)\n\t{\n\t\tIl2CppClass* eleClass = klass->castClass;\n\t\tIL2CPP_ASSERT(eleClass->size_inited);\n\t\tuint32_t size = eleClass->instance_size - sizeof(Il2CppObject);\n\t\tbool notNull = *GetNulllableHasValueOffset(nullableValueObj, klass);\n\t\tvoid* srcData = GetNulllableDataOffset(nullableValueObj, klass);\n\n\tLabelGet:\n\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(eleClass));\n\t\tswitch (eleClass->byval_arg.type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(uint8_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I1:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(int8_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U1:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(uint8_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I2:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(int16_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(uint16_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t{\n\t\t\t*(int32_t*)dst = notNull ? *(int32_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t{\n\t\t\t*(int64_t*)dst = notNull ? *(int64_t*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R4:\n\t\t{\n\t\t\t*(float*)dst = notNull ? *(float*)srcData : 0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R8:\n\t\t{\n\t\t\t*(double*)dst = notNull ? *(double*)srcData : 0.0;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t* (int64_t*)dst = notNull ? *(int64_t*)srcData : 0;\n#else \n\t\t\t* (int32_t*)dst = notNull ? *(int32_t*)srcData : 0;\n#endif\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tif (eleClass->enumtype)\n\t\t\t{\n\t\t\t\teleClass = eleClass->castClass;\n\t\t\t\tgoto LabelGet;\n\t\t\t}\n\t\t\tif (notNull)\n\t\t\t{\n\t\t\t\tstd::memmove(dst, srcData, size);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tstd::memset(dst, 0, size);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetNullableValueOrDefault2StackDataByType\");\n\t\t}\n\t\t}\n\t}\n\n\tinline void GetNullableValueOrDefault2StackDataByType(void* dst, void* nullableValueObj, void* defaultData, Il2CppClass* klass)\n\t{\n\t\tIl2CppClass* eleClass = klass->castClass;\n\t\tIL2CPP_ASSERT(eleClass->size_inited);\n\t\tuint32_t size = eleClass->instance_size - sizeof(Il2CppObject);\n\t\tvoid* srcData;\n\t\tbool notNull = *GetNulllableHasValueOffset(nullableValueObj, klass);\n\t\tif (notNull)\n\t\t{\n\t\t\tsrcData = GetNulllableDataOffset(nullableValueObj, klass);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (defaultData == nullptr)\n\t\t\t{\n\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetInvalidOperationException(\"Nullable object must have a value.\"));\n\t\t\t}\n\t\t\tsrcData = defaultData;\n\t\t}\n\tLabelGet:\n\t\tswitch (eleClass->byval_arg.type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\t{\n\t\t\t*(int32_t*)dst = *(uint8_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\t{\n\t\t\t*(int32_t*)dst = *(uint16_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I1:\n\t\t{\n\t\t\t*(int32_t*)dst = *(int8_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U1:\n\t\t{\n\t\t\t*(int32_t*)dst = *(uint8_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I2:\n\t\t{\n\t\t\t*(int32_t*)dst = *(int16_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U2:\n\t\t{\n\t\t\t*(int32_t*)dst = *(uint16_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t{\n\t\t\t*(int32_t*)dst = *(int32_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t{\n\t\t\t*(int64_t*)dst = *(int64_t*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R4:\n\t\t{\n\t\t\t*(float*)dst = *(float*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R8:\n\t\t{\n\t\t\t*(double*)dst = *(double*)srcData;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t* (int64_t*)dst = *(int64_t*)srcData;\n#else \n\t\t\t* (int32_t*)dst = *(int32_t*)srcData;\n#endif\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tif (eleClass->enumtype)\n\t\t\t{\n\t\t\t\teleClass = eleClass->castClass;\n\t\t\t\tgoto LabelGet;\n\t\t\t}\n\t\t\tstd::memmove(dst, srcData, size);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetNullableValue2StackDataByType\");\n\t\t}\n\t\t}\n\t}\n\n#pragma endregion\n\n#pragma region misc\n\n\t// not boxed data\n\n\tinline int32_t HiInterlockedCompareExchange(int32_t* location, int32_t newValue, int32_t oldValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::CompareExchange(location, newValue, oldValue);\n\t}\n\n\tinline int64_t HiInterlockedCompareExchange(int64_t* location, int64_t newValue, int64_t oldValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::CompareExchange64(location, newValue, oldValue);\n\t}\n\n\tinline void* HiInterlockedCompareExchange(void** location, void* newValue, void* oldValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::CompareExchange_T(location, newValue, oldValue);\n\t}\n\n\tinline int32_t HiInterlockedExchange(int32_t* location, int32_t newValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::Exchange(location, newValue);\n\t}\n\n\tinline int64_t HiInterlockedExchange(int64_t* location, int64_t newValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::Exchange64(location, newValue);\n\t}\n\n\tinline void* HiInterlockedExchange(void** location, void* newValue)\n\t{\n\t\treturn il2cpp::icalls::mscorlib::System::Threading::Interlocked::ExchangePointer(location, newValue);\n\t}\n\n#define MEMORY_BARRIER() il2cpp::os::Atomic::FullMemoryBarrier()\n\n\n\tinline int32_t UnsafeEnumCast(void* src, uint16_t type)\n\t{\n\t\tswitch ((Il2CppTypeEnum)type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN: return *(int8_t*)src;\n\t\tcase IL2CPP_TYPE_CHAR: return *(uint16_t*)src;\n\t\tcase IL2CPP_TYPE_I1: return *(int8_t*)src;\n\t\tcase IL2CPP_TYPE_U1: return *(uint8_t*)src;\n\t\tcase IL2CPP_TYPE_I2: return *(int16_t*)src;\n\t\tcase IL2CPP_TYPE_U2: return *(uint16_t*)src;\n\t\tcase IL2CPP_TYPE_I4: return *(int32_t*)src;\n\t\tcase IL2CPP_TYPE_U4: return *(uint32_t*)src;\n\t\tdefault: RaiseExecutionEngineException(\"UnsafeEnumCast not support type\"); return -1;\n\t\t}\n\t}\n\n\t// align with the implementation of Enum::get_hashcode\n\tinline int32_t GetEnumLongHashCode(void* data)\n\t{\n\t\tint64_t value = *((int64_t*)data);\n\t\treturn (int32_t)(value & 0xffffffff) ^ (int32_t)(value >> 32);\n\t}\n\n\tinline void ConstructorDelegate2(MethodInfo* ctor, Il2CppDelegate* del, Il2CppObject* target, MethodInfo* method)\n\t{\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tvoid* ctorArgs[2] = { target, (void*)&method };\n\t\tctor->invoker_method(ctor->methodPointer, ctor, del, ctorArgs, NULL);\n#else\n\t\tRaiseNotSupportedException(\"ConstructorDelegate2\");\n#endif\n\t}\n\n#pragma endregion\n\n#pragma region function\n\n#define SAVE_CUR_FRAME(nextIp) { \\\n\tframe->ip = nextIp; \\\n}\n\n#define LOAD_PREV_FRAME() { \\\n\timi = (const InterpMethodInfo*)frame->method->interpData; \\\n\tip = frame->ip; \\\n\tipBase = imi->codes; \\\n\tlocalVarBase = frame->stackBasePtr; \\\n}\n\n#define PREPARE_NEW_FRAME_FROM_NATIVE(newMethodInfo, argBasePtr, retPtr) { \\\n\timi = newMethodInfo->interpData ? (InterpMethodInfo*)newMethodInfo->interpData : InterpreterModule::GetInterpMethodInfo(newMethodInfo); \\\n\tRuntimeInitClassCCtorWithoutInitClass(newMethodInfo); \\\n\tframe = interpFrameGroup.EnterFrameFromNative(newMethodInfo, argBasePtr); \\\n\tframe->ret = retPtr; \\\n\tip = ipBase = imi->codes; \\\n\tframe->ip = (byte*)ip; \\\n\tlocalVarBase = frame->stackBasePtr; \\\n}\n\n#define PREPARE_NEW_FRAME_FROM_INTERPRETER(newMethodInfo, argBasePtr, retPtr) { \\\n\timi = newMethodInfo->interpData ? (InterpMethodInfo*)newMethodInfo->interpData : InterpreterModule::GetInterpMethodInfo(newMethodInfo); \\\n\tRuntimeInitClassCCtorWithoutInitClass(newMethodInfo); \\\n\tframe = interpFrameGroup.EnterFrameFromInterpreter(newMethodInfo, argBasePtr); \\\n\tframe->ret = retPtr; \\\n\tip = ipBase = imi->codes; \\\n\tframe->ip = (byte*)ip; \\\n\tlocalVarBase = frame->stackBasePtr; \\\n}\n\n#define LEAVE_FRAME() { \\\n\tframe = interpFrameGroup.LeaveFrame(); \\\n\tif (frame) \\\n\t{ \\\n\t\tLOAD_PREV_FRAME(); \\\n\t}\\\n\telse \\\n\t{ \\\n\t\tgoto ExitEvalLoop; \\\n\t} \\\n}\n\n#define SET_RET_AND_LEAVE_FRAME(nativeSize, interpSize) { \\\n\tvoid* _curRet = frame->ret; \\\n\tframe = interpFrameGroup.LeaveFrame(); \\\n\tif (frame) \\\n\t{ \\\n        Copy##interpSize(_curRet, (void*)(localVarBase + __ret)); \\\n\t\tLOAD_PREV_FRAME(); \\\n\t}\\\n\telse \\\n\t{ \\\n        Copy##nativeSize(_curRet, (void*)(localVarBase + __ret)); \\\n\t\tgoto ExitEvalLoop; \\\n\t} \\\n}\n\n#define CALL_INTERP_VOID(nextIp, methodInfo, argBasePtr) { \\\n\tSAVE_CUR_FRAME(nextIp) \\\n\tPREPARE_NEW_FRAME_FROM_INTERPRETER(methodInfo, argBasePtr, nullptr); \\\n}\n\n#define CALL_INTERP_RET(nextIp, methodInfo, argBasePtr, retPtr) { \\\n\tSAVE_CUR_FRAME(nextIp) \\\n\tPREPARE_NEW_FRAME_FROM_INTERPRETER(methodInfo, argBasePtr, retPtr); \\\n}\n\n#pragma endregion\n\n#pragma region delegate\n\ninline void InvokeSingleDelegate(uint16_t invokeParamCount, const MethodInfo * method, Il2CppObject * obj, Managed2NativeCallMethod staticM2NMethod, Managed2NativeCallMethod instanceM2NMethod, uint16_t * argIdxs, StackObject * localVarBase, void* ret)\n{\n\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(method))\n\t{\n\t\tRaiseAOTGenericMethodNotInstantiatedException(method);\n\t}\n\tif (!InterpreterModule::HasImplementCallNative2Managed(method))\n\t{\n\t\tinstanceM2NMethod = staticM2NMethod = InterpreterModule::Managed2NativeCallByReflectionInvoke;\n\t}\n\tStackObject* target;\n\tswitch ((int32_t)invokeParamCount - (int32_t)method->parameters_count)\n\t{\n\tcase 0:\n\t{\n\t\tif (hybridclr::metadata::IsInstanceMethod(method))\n\t\t{\n\t\t\tCHECK_NOT_NULL_THROW(obj);\n\t\t\ttarget = localVarBase + argIdxs[0];\n\t\t\ttarget->obj = obj + IS_CLASS_VALUE_TYPE(method->klass);\n\t\t\tinstanceM2NMethod(method, argIdxs, localVarBase, ret);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tRuntimeInitClassCCtor(method);\n\t\t\tstaticM2NMethod(method, argIdxs + 1, localVarBase, ret);\n\t\t}\n\t\tbreak;\n\t}\n\tcase -1:\n\t{\n\t\tIL2CPP_ASSERT(!hybridclr::metadata::IsInstanceMethod(method));\n\t\ttarget = localVarBase + argIdxs[0];\n\t\ttarget->obj = obj;\n\t\tinstanceM2NMethod(method, argIdxs, localVarBase, ret);\n\t\tbreak;\n\t}\n\tcase 1:\n\t{\n\t\tIL2CPP_ASSERT(invokeParamCount == method->parameters_count + 1);\n\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInstanceMethod(method));\n\t\ttarget = localVarBase + argIdxs[1];\n\t\tCHECK_NOT_NULL_THROW(target->obj);\n\t\tstaticM2NMethod(method, argIdxs + 1, localVarBase, ret);\n\t\tbreak;\n\t}\n\tdefault:\n\t{\n\t\tRaiseExecutionEngineException(\"bad delegate\");\n\t}\n\t}\n}\n\ninline Il2CppObject* InvokeDelegateBeginInvoke(const MethodInfo* method, uint16_t* argIdxs, StackObject* localVarBase)\n{\n\tint32_t paramCount = method->parameters_count;\n\tRuntimeDelegate* del = (RuntimeDelegate*)localVarBase[argIdxs[0]].obj;\n\tCHECK_NOT_NULL_THROW(del);\n\tRuntimeDelegate* callBack = (RuntimeDelegate*)localVarBase[argIdxs[paramCount - 1]].obj;\n\tRuntimeObject* ctx = (RuntimeObject*)localVarBase[argIdxs[paramCount]].obj;\n\tIL2CPP_ASSERT(paramCount > 0);\n\tvoid** newArgs = (void**)alloca(sizeof(void*) * paramCount);\n\tnewArgs[paramCount - 1] = {};\n\tfor (int i = 0; i < paramCount - 2; i++)\n\t{\n\t\tconst Il2CppType* argType = GET_METHOD_PARAMETER_TYPE(method->parameters[i]);\n\t\tStackObject* argSrc = localVarBase + argIdxs[i+1];\n\t\tvoid** argDst = newArgs + i;\n\t\tif (argType->byref)\n\t\t{\n\t\t\targSrc = (StackObject*)argSrc->ptr;\n\t\t}\n\t\tif (hybridclr::metadata::IsValueType(argType))\n\t\t{\n\t\t\t*argDst = il2cpp::vm::Object::Box(il2cpp::vm::Class::FromIl2CppType(argType), argSrc);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*argDst = argSrc->ptr;\n\t\t}\n\t}\n\treturn (RuntimeObject*)il2cpp_codegen_delegate_begin_invoke((RuntimeDelegate*)del, (void**)newArgs, callBack, ctx);\n}\n\ninline void InvokeDelegateEndInvokeVoid(MethodInfo* method, Il2CppAsyncResult* asyncResult)\n{\n\til2cpp_codegen_delegate_end_invoke(asyncResult, 0);\n}\n\ninline void InvokeDelegateEndInvokeRet(MethodInfo* method, Il2CppAsyncResult* asyncResult, void* ret)\n{\n\tIl2CppObject* result = il2cpp_codegen_delegate_end_invoke(asyncResult, 0);\n\tIl2CppClass* retKlass = il2cpp::vm::Class::FromIl2CppType(method->return_type);\n\tHiUnboxAny2StackObject(result, retKlass, ret);\n}\n\n#pragma endregion\n\n#pragma region exception\n\nconstexpr int EXCEPTION_FLOW_INFO_ALLOC_BATCH_NUM = 3;\n\ninline void PushExceptionFlowInfo(InterpFrame* frame, MachineState& machine, const ExceptionFlowInfo& newExFlowInfo)\n{\n\tif (frame->exFlowCount >= frame->exFlowCapaticy)\n\t{\n\t\tExceptionFlowInfo* newEfi = machine.AllocExceptionFlow(EXCEPTION_FLOW_INFO_ALLOC_BATCH_NUM);\n\t\tif (frame->exFlowBase == nullptr)\n\t\t{\n\t\t\tframe->exFlowBase = newEfi;\n\t\t}\n\t\tframe->exFlowCapaticy += EXCEPTION_FLOW_INFO_ALLOC_BATCH_NUM;\n\t}\n\tframe->exFlowBase[frame->exFlowCount++] = newExFlowInfo;\n}\n\ninline void PopPrevExceptionFlowInfo(InterpFrame* frame, ExceptionFlowInfo** curEx)\n{\n\tif (frame->exFlowCount >= 2)\n\t{\n\t\tframe->exFlowBase[frame->exFlowCount - 2] = frame->exFlowBase[frame->exFlowCount - 1];\n\t\t--frame->exFlowCount;\n\t\tif (curEx)\n\t\t{\n\t\t\t*curEx = frame->exFlowBase + frame->exFlowCount - 1;\n\t\t}\n\t}\n}\n\ninline void PopCurExceptionFlowInfo(InterpFrame* frame)\n{\n\tif (frame->exFlowCount >= 1)\n\t{\n\t\t--frame->exFlowCount;\n\t}\n}\n\n#define PREPARE_EXCEPTION(_ex_, _firstHanlderIndex_)  PushExceptionFlowInfo(frame, machine, {ExceptionFlowType::Exception, (int32_t)(ip - ipBase), _ex_, _firstHanlderIndex_, 0});\n\n\n#define FIND_NEXT_EX_HANDLER_OR_UNWIND() \\\nwhile (true) \\\n{ \\\n\tExceptionFlowInfo* efi = frame->GetCurExFlow(); \\\n\tIL2CPP_ASSERT(efi && efi->exFlowType == ExceptionFlowType::Exception); \\\n\tIL2CPP_ASSERT(efi->ex); \\\n\tint32_t exClauseNum = (int32_t)imi->exClauseCount; \\\n\tfor (; efi->nextExClauseIndex < exClauseNum; ) \\\n\t{ \\\n\t\tfor (ExceptionFlowInfo* prevExFlow; (prevExFlow = frame->GetPrevExFlow()) && efi->nextExClauseIndex >= prevExFlow->nextExClauseIndex ;) {\\\n\t\t\tconst InterpExceptionClause* prevIec = &imi->exClauses[prevExFlow->nextExClauseIndex - 1]; \\\n\t\t\tif (!(prevIec->handlerBeginOffset <= efi->throwOffset && efi->throwOffset < prevIec->handlerEndOffset)) { \\\n\t\t\t\tPopPrevExceptionFlowInfo(frame, &efi);\\\n\t\t\t} \\\n\t\t\telse \\\n\t\t\t{ \\\n\t\t\t\tbreak; \\\n\t\t\t} \\\n\t\t}\\\n\t\tconst InterpExceptionClause* iec = &imi->exClauses[efi->nextExClauseIndex++]; \\\n\t\tif (iec->tryBeginOffset <= efi->throwOffset && efi->throwOffset < iec->tryEndOffset) \\\n\t\t{ \\\n\t\t\tswitch (iec->flags) \\\n\t\t\t{ \\\n\t\t\tcase CorILExceptionClauseType::Exception: \\\n\t\t\t{ \\\n\t\t\tif (il2cpp::vm::Class::IsAssignableFrom(iec->exKlass, efi->ex->klass)) \\\n\t\t\t{ \\\n\t\t\tip = ipBase + iec->handlerBeginOffset; \\\n\t\t\tStackObject* exObj = localVarBase + imi->evalStackBaseOffset; \\\n\t\t\texObj->obj = efi->ex; \\\n\t\t\tefi->exFlowType = ExceptionFlowType::Catch;\\\n\t\t\tgoto LoopStart; \\\n\t\t\t} \\\n\t\t\tbreak; \\\n\t\t\t} \\\n\t\t\tcase CorILExceptionClauseType::Filter: \\\n\t\t\t{ \\\n\t\t\tip = ipBase + iec->filterBeginOffset; \\\n\t\t\tStackObject* exObj = localVarBase + imi->evalStackBaseOffset; \\\n\t\t\texObj->obj = efi->ex; \\\n\t\t\tgoto LoopStart; \\\n\t\t\t} \\\n\t\t\tcase CorILExceptionClauseType::Finally: \\\n\t\t\t{ \\\n\t\t\tip = ipBase + iec->handlerBeginOffset; \\\n\t\t\tgoto LoopStart; \\\n\t\t\t} \\\n\t\t\tcase CorILExceptionClauseType::Fault: \\\n\t\t\t{ \\\n\t\t\tip = ipBase + iec->handlerBeginOffset; \\\n\t\t\tgoto LoopStart; \\\n\t\t\t} \\\n\t\t\tdefault: \\\n\t\t\t{ \\\n\t\t\t\tRaiseExecutionEngineException(\"\"); \\\n\t\t\t} \\\n\t\t\t} \\\n\t\t} \\\n\t} \\\n\tframe = interpFrameGroup.LeaveFrame(); \\\n\tif (frame) \\\n\t{ \\\n\t\tLOAD_PREV_FRAME(); \\\n\t\tPREPARE_EXCEPTION(efi->ex, 0); \\\n\t}\\\n\telse \\\n\t{ \\\n\t\tlastUnwindException = efi->ex; \\\n\t\tgoto UnWindFail; \\\n\t} \\\n}\n\n\n#define THROW_EX(_ex_, _firstHandlerIndex_) { \\\n\tIl2CppException* ex = _ex_; \\\n\til2cpp::vm::Exception::PrepareExceptionForThrow(ex, const_cast<MethodInfo*>(frame->method));\\\n\tCHECK_NOT_NULL_THROW(ex); \\\n\tPREPARE_EXCEPTION(ex, _firstHandlerIndex_); \\\n\tFIND_NEXT_EX_HANDLER_OR_UNWIND(); \\\n}\n#define RETHROW_EX() { \\\n\tExceptionFlowInfo* curExFlow = frame->GetCurExFlow(); \\\n\tIL2CPP_ASSERT(curExFlow->exFlowType == ExceptionFlowType::Catch); \\\n\til2cpp::vm::Exception::Raise(curExFlow->ex, const_cast<MethodInfo*>(frame->method)); \\\n}\n\n#define CONTINUE_NEXT_FINALLY() { \\\nExceptionFlowInfo* efi = frame->GetCurExFlow(); \\\nIL2CPP_ASSERT(efi && efi->exFlowType == ExceptionFlowType::Leave); \\\nint32_t exClauseNum = (int32_t)imi->exClauseCount; \\\nfor (; efi->nextExClauseIndex < exClauseNum; ) \\\n{ \\\n\tconst InterpExceptionClause* iec = &imi->exClauses[efi->nextExClauseIndex++]; \\\n\tif (iec->tryBeginOffset <= efi->throwOffset && efi->throwOffset < iec->tryEndOffset) \\\n\t{ \\\n\t\tif (iec->tryBeginOffset <= efi->leaveTarget && efi->leaveTarget < iec->tryEndOffset) \\\n\t\t{ \\\n\t\t\tbreak; \\\n\t\t} \\\n\t\tswitch (iec->flags) \\\n\t\t{ \\\n\t\tcase CorILExceptionClauseType::Finally: \\\n\t\t{ \\\n\t\t\tip = ipBase + iec->handlerBeginOffset; \\\n\t\t\tgoto LoopStart; \\\n\t\t} \\\n\t\tcase CorILExceptionClauseType::Exception: \\\n\t\tcase CorILExceptionClauseType::Filter: \\\n\t\tcase CorILExceptionClauseType::Fault: \\\n\t\t{ \\\n\t\t\tbreak; \\\n\t\t} \\\n\t\tdefault: \\\n\t\t{ \\\n\t\t\tRaiseExecutionEngineException(\"\"); \\\n\t\t} \\\n\t\t} \\\n\t} \\\n} \\\nip = ipBase + efi->leaveTarget; \\\nPopCurExceptionFlowInfo(frame); \\\n}\n\n#define POP_PREV_CATCH_HANDLERS(leaveTarget)\\\n{ \\\n\tfor (ExceptionFlowInfo* prevExFlow; (prevExFlow = frame->GetPrevExFlow()) && prevExFlow->exFlowType == ExceptionFlowType::Catch ;) { \\\n\t\t\tconst InterpExceptionClause* prevIec = &imi->exClauses[prevExFlow->nextExClauseIndex - 1]; \\\n\t\t\tif (!(prevIec->handlerBeginOffset <= leaveTarget && leaveTarget < prevIec->handlerEndOffset)) {\t\\\n\t\t\t\t\tPopPrevExceptionFlowInfo(frame, nullptr); \\\n\t\t\t} \\\n\t\t\telse \\\n\t\t\t{ \\\n\t\t\t\tbreak; \\\n\t\t\t} \\\n\t}\\\n}\n\n#define LEAVE_EX(target, firstHandlerIndex)  { \\\n\tPushExceptionFlowInfo(frame, machine, {ExceptionFlowType::Leave, (int32_t)(ip - ipBase), nullptr, firstHandlerIndex + 1, target}); \\\n\tconst InterpExceptionClause* iec = &imi->exClauses[firstHandlerIndex]; \\\n\tPOP_PREV_CATCH_HANDLERS(target); \\\n\tip = ipBase + iec->handlerBeginOffset; \\\n}\n\n#define POP_CUR_CATCH_HANDLERS(leaveTarget)\\\n{ \\\n\tfor (ExceptionFlowInfo* prevExFlow; (prevExFlow = frame->GetCurExFlow()) && prevExFlow->exFlowType == ExceptionFlowType::Catch ;) { \\\n\t\t\tconst InterpExceptionClause* prevIec = &imi->exClauses[prevExFlow->nextExClauseIndex - 1]; \\\n\t\t\tif (!(prevIec->handlerBeginOffset <= leaveTarget && leaveTarget < prevIec->handlerEndOffset)) {\t\\\n\t\t\t\t\tPopCurExceptionFlowInfo(frame); \\\n\t\t\t} \\\n\t\t\telse \\\n\t\t\t{ \\\n\t\t\t\tbreak; \\\n\t\t\t} \\\n\t}\\\n}\n\n#define LEAVE_EX_DIRECTLY(target)  { \\\n\tPOP_CUR_CATCH_HANDLERS(target); \\\n\tip = ipBase + target; \\\n}\n\n#define ENDFILTER_EX(value) {\\\nExceptionFlowInfo* curExFlow = frame->GetCurExFlow(); \\\nIL2CPP_ASSERT(curExFlow->exFlowType == ExceptionFlowType::Exception); \\\nif(!(value)) \\\n{\\\n    FIND_NEXT_EX_HANDLER_OR_UNWIND();\\\n} \\\nelse \\\n{ \\\n\tcurExFlow->exFlowType = ExceptionFlowType::Catch;\\\n}\\\n}\n\n#define ENDFINALLY_EX() {\\\nExceptionFlowInfo* curExFlow = frame->GetCurExFlow(); \\\nif (curExFlow->exFlowType == ExceptionFlowType::Exception) \\\n{ \\\n    FIND_NEXT_EX_HANDLER_OR_UNWIND(); \\\n} \\\nelse \\\n{ \\\n    CONTINUE_NEXT_FINALLY();\\\n}\\\n}\n\n#pragma endregion \n\nconst int32_t kMaxRetValueTypeStackObjectSize = 1024;\n\n\tvoid Interpreter::Execute(const MethodInfo* methodInfo, StackObject* args, void* ret)\n\t{\n\t\tMachineState& machine = InterpreterModule::GetCurrentThreadMachineState();\n\t\tInterpFrameGroup interpFrameGroup(machine);\n\n\t\tconst InterpMethodInfo* imi;\n\t\tInterpFrame* frame;\n\t\tStackObject* localVarBase;\n\t\tbyte* ipBase;\n\t\tbyte* ip;\n\n\t\tIl2CppException* lastUnwindException;\n\t\tStackObject* tempRet = nullptr;\n\n\t\tPREPARE_NEW_FRAME_FROM_NATIVE(methodInfo, args, ret);\n\n\tLoopStart:\n\t\ttry\n\t\t{\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\tswitch (*(HiOpcodeEnum*)ip)\n\t\t\t\t{\n\t\t\t\t\t// avoid decrement *ip when compute jump table,  boosts about 5% performance\n\t\t\t\tcase HiOpcodeEnum::None:\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n#pragma region memory\n\t\t\t\t\t//!!!{{MEMORY\n\t\t\t\tcase HiOpcodeEnum::InitLocals_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefaultN(localVarBase, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitLocals_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefaultN(localVarBase, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitLocals_size_8:\n\t\t\t\t{\n\t\t\t\t\tInitDefault8(localVarBase);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitLocals_size_16:\n\t\t\t\t{\n\t\t\t\t\tInitDefault16(localVarBase);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitLocals_size_24:\n\t\t\t\t{\n\t\t\t\t\tInitDefault24(localVarBase);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitLocals_size_32:\n\t\t\t\t{\n\t\t\t\t\tInitDefault32(localVarBase);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefaultN(localVarBase + __offset, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tInitDefaultN(localVarBase + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefault8(localVarBase + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefault16(localVarBase + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefault24(localVarBase + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitInlineLocals_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefault32(localVarBase + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(uint64_t*)(localVarBase + __dst)) = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocExpandVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(int8_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocExpandVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(uint8_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocExpandVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(int16_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocExpandVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(uint16_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocVarVarSize:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (void*)(localVarBase + __src), __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdlocVarAddress:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(void**)(localVarBase + __dst)) = (void*)(localVarBase + __src);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdcVarConst_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __src = *(uint8_t*)(ip + 2);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = __src;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdcVarConst_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = __src;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdcVarConst_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __src = *(uint32_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = __src;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdcVarConst_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint64_t __src = *(uint64_t*)(ip + 8);\n\t\t\t\t\t(*(uint64_t*)(localVarBase + __dst)) = __src;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdnullVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\t(*(void**)(localVarBase + __dst)) = nullptr;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(int8_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(uint8_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(int16_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(uint16_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(int32_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (*(uint32_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (*(int64_t*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (*(float*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdindVarVar_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (*(double*)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int8_t*)*(void**)(localVarBase + __dst)) = (*(int8_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int16_t*)*(void**)(localVarBase + __dst)) = (*(int16_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)*(void**)(localVarBase + __dst)) = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)*(void**)(localVarBase + __dst)) = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)*(void**)(localVarBase + __dst)) = (*(float*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)*(void**)(localVarBase + __dst)) = (*(double*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StindVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(Il2CppObject**)*(void**)(localVarBase + __dst)) = (*(Il2CppObject**)(localVarBase + __src));\tHYBRIDCLR_SET_WRITE_BARRIER((void**)(*(void**)(localVarBase + __dst)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LocalAllocVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(void**)(localVarBase + __dst)) = LOCAL_ALLOC((*(uint16_t*)(localVarBase + __size)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LocalAllocVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(void**)(localVarBase + __dst)) = LOCAL_ALLOC((*(uint32_t*)(localVarBase + __size)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitblkVarVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t\tstd::memset((*(void**)(localVarBase + __addr)), (*(uint8_t*)(localVarBase + __value)), (*(uint32_t*)(localVarBase + __size)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpblkVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t\tstd::memmove((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)), (*(uint32_t*)(localVarBase + __size)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::MemoryBarrier:\n\t\t\t\t{\n\t\t\t\t\tMEMORY_BARRIER();\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}MEMORY\n\n\n#pragma endregion\n\n#pragma region CONVERT\n\t\t//!!!{{CONVERT\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint8_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint16_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint32_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (uint64_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i4_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint8_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint16_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint32_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (uint64_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u4_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint8_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint16_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint32_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (uint64_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_i8_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint8_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint16_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = (uint32_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = (uint64_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_u8_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int8_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint8_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int16_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint16_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint32_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int64_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint64_t, int64_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f4_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int8_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint8_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int16_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint16_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint32_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int64_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint64_t, int64_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = (float)((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertVarVar_f8_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = (double)((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_i1(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_u1(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint8_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_i2(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_u2(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint16_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_i4(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_u4(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint32_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_i8(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int32_t val = (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i4_u8(*(int32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (uint64_t)(uint32_t)((*(int32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_i1(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_u1(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint8_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_i2(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_u2(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint16_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_i4(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_u4(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint32_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_i8(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint32_t val = (*(uint32_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u4_u8(*(uint32_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (uint64_t)((*(uint32_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_i1(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_u1(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint8_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_i2(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_u2(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint16_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_i4(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_u4(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint32_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_i8(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_i8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    int64_t val = (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_i8_u8(*(int64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (uint64_t)(uint64_t)((*(int64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_i1(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int8_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_u1(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint8_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_i2(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int16_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_u2(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint16_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_i4(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (int32_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_u4(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = (uint32_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_i8(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (int64_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_u8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    uint64_t val = (*(uint64_t*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_u8_u8(*(uint64_t*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = (uint64_t)((*(uint64_t*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_i1(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int8_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_u1(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint8_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_i2(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int16_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_u2(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint16_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_i4(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_u4(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint32_t, int32_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_i8(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int64_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f4_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    float val = (*(float*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f4_u8(*(float*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint64_t, int64_t>((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_i1(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int8_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_u1(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint8_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_i2(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int16_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_u2(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint16_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_i4(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_u4(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint32_t, int32_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_i8(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_double_to_int<int64_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ConvertOverflowVarVar_f8_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    double val = (*(double*)(localVarBase + __src));\n\t\t\t\t    if (CheckConvertOverflow_f8_u8(*(double*)(localVarBase + __src)))\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_codegen_cast_floating_point<uint64_t, int64_t>((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}CONVERT\n#pragma endregion\n\n#pragma region ARITH\n\t\t//!!!{{ARITH\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Add_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) + (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Sub_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) - (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Mul_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) * (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_MulUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiMulUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Div_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiDiv((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_DivUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiDivUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Rem_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiRem((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_RemUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiRemUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_And_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) & (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Or_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) | (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Xor_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __op1)) ^ (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Add_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) + (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Sub_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) - (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Mul_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) * (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_MulUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiMulUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Div_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiDiv((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_DivUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiDivUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Rem_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiRem((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_RemUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiRemUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_And_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) & (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Or_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) | (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Xor_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __op1)) ^ (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Add_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(float*)(localVarBase + __ret)) = (*(float*)(localVarBase + __op1)) + (*(float*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Sub_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(float*)(localVarBase + __ret)) = (*(float*)(localVarBase + __op1)) - (*(float*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Mul_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(float*)(localVarBase + __ret)) = (*(float*)(localVarBase + __op1)) * (*(float*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Div_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(float*)(localVarBase + __ret)) = HiDiv((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Rem_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(float*)(localVarBase + __ret)) = HiRem((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Add_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(double*)(localVarBase + __ret)) = (*(double*)(localVarBase + __op1)) + (*(double*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Sub_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(double*)(localVarBase + __ret)) = (*(double*)(localVarBase + __op1)) - (*(double*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Mul_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(double*)(localVarBase + __ret)) = (*(double*)(localVarBase + __op1)) * (*(double*)(localVarBase + __op2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Div_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(double*)(localVarBase + __ret)) = HiDiv((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpVarVarVar_Rem_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(double*)(localVarBase + __ret)) = HiRem((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Add_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int32_t op1 = (*(int32_t*)(localVarBase + __op1));\n\t\t\t\t    int32_t op2 = (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckAddOverflow(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int32_t*)(localVarBase + __ret)) = op1 + op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Sub_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int32_t op1 = (*(int32_t*)(localVarBase + __op1));\n\t\t\t\t    int32_t op2 = (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckSubOverflow(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int32_t*)(localVarBase + __ret)) = op1 - op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Mul_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int32_t op1 = (*(int32_t*)(localVarBase + __op1));\n\t\t\t\t    int32_t op2 = (*(int32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckMulOverflow(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int32_t*)(localVarBase + __ret)) = op1 * op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Add_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int64_t op1 = (*(int64_t*)(localVarBase + __op1));\n\t\t\t\t    int64_t op2 = (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckAddOverflow64(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int64_t*)(localVarBase + __ret)) = op1 + op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Sub_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int64_t op1 = (*(int64_t*)(localVarBase + __op1));\n\t\t\t\t    int64_t op2 = (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckSubOverflow64(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int64_t*)(localVarBase + __ret)) = op1 - op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Mul_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    int64_t op1 = (*(int64_t*)(localVarBase + __op1));\n\t\t\t\t    int64_t op2 = (*(int64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckMulOverflow64(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(int64_t*)(localVarBase + __ret)) = op1 * op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Add_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint32_t op1 = (*(uint32_t*)(localVarBase + __op1));\n\t\t\t\t    uint32_t op2 = (*(uint32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckAddOverflowUn(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint32_t*)(localVarBase + __ret)) = op1 + op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Sub_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint32_t op1 = (*(uint32_t*)(localVarBase + __op1));\n\t\t\t\t    uint32_t op2 = (*(uint32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckSubOverflowUn(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint32_t*)(localVarBase + __ret)) = op1 - op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Mul_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint32_t op1 = (*(uint32_t*)(localVarBase + __op1));\n\t\t\t\t    uint32_t op2 = (*(uint32_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckMulOverflowUn(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint32_t*)(localVarBase + __ret)) = op1 * op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Add_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint64_t op1 = (*(uint64_t*)(localVarBase + __op1));\n\t\t\t\t    uint64_t op2 = (*(uint64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckAddOverflow64Un(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint64_t*)(localVarBase + __ret)) = op1 + op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Sub_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint64_t op1 = (*(uint64_t*)(localVarBase + __op1));\n\t\t\t\t    uint64_t op2 = (*(uint64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckSubOverflow64Un(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint64_t*)(localVarBase + __ret)) = op1 - op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BinOpOverflowVarVarVar_Mul_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    uint64_t op1 = (*(uint64_t*)(localVarBase + __op1));\n\t\t\t\t    uint64_t op2 = (*(uint64_t*)(localVarBase + __op2));\n\t\t\t\t    if ((CheckMulOverflow64Un(op1, op2)) == 0)\n\t\t\t\t    {\n\t\t\t\t        (*(uint64_t*)(localVarBase + __ret)) = op1 * op2;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseOverflowException();\n\t\t\t\t    }\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shl_i4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __value)) << (*(int32_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shr_i4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __value)) >> (*(int32_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_ShrUn_i4_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiShrUn((*(int32_t*)(localVarBase + __value)), (*(int32_t*)(localVarBase + __shiftAmount)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shl_i4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __value)) << (*(int64_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shr_i4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = (*(int32_t*)(localVarBase + __value)) >> (*(int64_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_ShrUn_i4_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = HiShrUn((*(int32_t*)(localVarBase + __value)), (*(int64_t*)(localVarBase + __shiftAmount)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shl_i8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __value)) << (*(int32_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shr_i8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __value)) >> (*(int32_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_ShrUn_i8_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiShrUn((*(int64_t*)(localVarBase + __value)), (*(int32_t*)(localVarBase + __shiftAmount)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shl_i8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __value)) << (*(int64_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_Shr_i8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = (*(int64_t*)(localVarBase + __value)) >> (*(int64_t*)(localVarBase + __shiftAmount));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BitShiftBinOpVarVarVar_ShrUn_i8_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __shiftAmount = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __ret)) = HiShrUn((*(int64_t*)(localVarBase + __value)), (*(int64_t*)(localVarBase + __shiftAmount)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Neg_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = - (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Not_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = ~ (*(int32_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Neg_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = - (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Not_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = ~ (*(int64_t*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Neg_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(float*)(localVarBase + __dst)) = - (*(float*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnaryOpVarVar_Neg_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t(*(double*)(localVarBase + __dst)) = - (*(double*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CheckFiniteVar_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 2);\n\t\t\t\t\tHiCheckFinite((*(float*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CheckFiniteVar_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 2);\n\t\t\t\t\tHiCheckFinite((*(double*)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}ARITH\n#pragma endregion\n\n#pragma region COMPARE\n\t\t//!!!{{COMPARE\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Ceq_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCeq((*(int32_t*)(localVarBase + __c1)), (*(int32_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Ceq_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCeq((*(int64_t*)(localVarBase + __c1)), (*(int64_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Ceq_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCeq((*(float*)(localVarBase + __c1)), (*(float*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Ceq_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCeq((*(double*)(localVarBase + __c1)), (*(double*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Cgt_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgt((*(int32_t*)(localVarBase + __c1)), (*(int32_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Cgt_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgt((*(int64_t*)(localVarBase + __c1)), (*(int64_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Cgt_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgt((*(float*)(localVarBase + __c1)), (*(float*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Cgt_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgt((*(double*)(localVarBase + __c1)), (*(double*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CgtUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgtUn((*(int32_t*)(localVarBase + __c1)), (*(int32_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CgtUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgtUn((*(int64_t*)(localVarBase + __c1)), (*(int64_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CgtUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgtUn((*(float*)(localVarBase + __c1)), (*(float*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CgtUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCgtUn((*(double*)(localVarBase + __c1)), (*(double*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Clt_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareClt((*(int32_t*)(localVarBase + __c1)), (*(int32_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Clt_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareClt((*(int64_t*)(localVarBase + __c1)), (*(int64_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Clt_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareClt((*(float*)(localVarBase + __c1)), (*(float*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_Clt_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareClt((*(double*)(localVarBase + __c1)), (*(double*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CltUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCltUn((*(int32_t*)(localVarBase + __c1)), (*(int32_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CltUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCltUn((*(int64_t*)(localVarBase + __c1)), (*(int64_t*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CltUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCltUn((*(float*)(localVarBase + __c1)), (*(float*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CompOpVarVarVar_CltUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __c2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __ret)) = CompareCltUn((*(double*)(localVarBase + __c1)), (*(double*)(localVarBase + __c2)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}COMPARE\n#pragma endregion\n\n#pragma region BRANCH\n\t\t//!!!{{BRANCH\n\t\t\t\tcase HiOpcodeEnum::BranchUncondition_4:\n\t\t\t\t{\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 4);\n\t\t\t\t\tip = ipBase + __offset;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchTrueVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op = *(uint16_t*)(ip + 2);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 4);\n\t\t\t\t    if ((*(int32_t*)(localVarBase + __op)))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 8;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchTrueVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op = *(uint16_t*)(ip + 2);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 4);\n\t\t\t\t    if ((*(int64_t*)(localVarBase + __op)))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 8;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchFalseVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op = *(uint16_t*)(ip + 2);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 4);\n\t\t\t\t    if (!(*(int32_t*)(localVarBase + __op)))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 8;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchFalseVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op = *(uint16_t*)(ip + 2);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 4);\n\t\t\t\t    if (!(*(int64_t*)(localVarBase + __op)))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 8;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Ceq_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCeq((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Ceq_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCeq((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Ceq_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCeq((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Ceq_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCeq((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CneUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCneUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CneUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCneUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CneUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCneUn((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CneUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCneUn((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cgt_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCle((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cgt_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCle((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cgt_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCle((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cgt_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCle((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgtUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCleUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgtUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCleUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgtUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCleUn((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgtUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCleUn((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cge_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareClt((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cge_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareClt((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cge_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareClt((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cge_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareClt((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgeUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCltUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgeUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCltUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgeUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCltUn((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CgeUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCltUn((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Clt_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCge((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Clt_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCge((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Clt_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCge((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Clt_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCge((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CltUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgeUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CltUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgeUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CltUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgeUn((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CltUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgeUn((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cle_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgt((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cle_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgt((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cle_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgt((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_Cle_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgt((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CleUn_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgtUn((*(int32_t*)(localVarBase + __op1)), (*(int32_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CleUn_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgtUn((*(int64_t*)(localVarBase + __op1)), (*(int64_t*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CleUn_f4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgtUn((*(float*)(localVarBase + __op1)), (*(float*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchVarVar_CleUn_f8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __op1 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __op2 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    if (CompareCgtUn((*(double*)(localVarBase + __op1)), (*(double*)(localVarBase + __op2))))\n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + __offset;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchJump:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __token = *(uint32_t*)(ip + 4);\n\t\t\t\t\tIL2CPP_ASSERT(false);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BranchSwitch:\n\t\t\t\t{\n\t\t\t\t    uint16_t __value = *(uint16_t*)(ip + 2);\n\t\t\t\t    uint32_t __caseNum = *(uint32_t*)(ip + 4);\n\t\t\t\t    uint32_t __caseOffsets = *(uint32_t*)(ip + 8);\n\t\t\t\t    uint32_t __idx = (*(uint32_t*)(localVarBase + __value));\n\t\t\t\t    if (__idx < __caseNum)\n\t\t\t\t    {\n\t\t\t\t        ip = ipBase + ((uint32_t*)&imi->resolveDatas[__caseOffsets])[__idx];\n\t\t\t\t    }\n\t\t\t\t    else \n\t\t\t\t    {\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}BRANCH\n#pragma endregion\n\n#pragma region FUNCTION\n\t\t//!!!{{FUNCTION\n\t\t\t\tcase HiOpcodeEnum::NewClassVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tvoid* __managed2NativeMethod = ((void*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    uint16_t* _argIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t    Il2CppObject* _obj = il2cpp::vm::Object::New(__method->klass);\n\t\t\t\t    *(Il2CppObject**)(localVarBase + _argIdxs[0]) = _obj;\n\t\t\t\t    ((Managed2NativeCallMethod)__managed2NativeMethod)(__method, _argIdxs, localVarBase, nullptr);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = _obj;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewClassVar_Ctor_0:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    Il2CppObject* _obj = il2cpp::vm::Object::New(__method->klass);\n\t\t\t\t    ((NativeClassCtor0)(__method->methodPointerCallByInterp))(_obj, __method);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = _obj;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewClassVar_NotCtor:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = il2cpp::vm::Object::New(__klass);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewValueTypeVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tvoid* __managed2NativeMethod = ((void*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    uint16_t* _argIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t    int32_t _typeSize = GetTypeValueSize(__method->klass);\n\t\t\t\t    // arg1, arg2, ..., argN, value type, __this\n\t\t\t\t    StackObject* _frameBasePtr = localVarBase + _argIdxs[0];\n\t\t\t\t    Il2CppObject* _this = (Il2CppObject*)(_frameBasePtr - GetStackSizeByByteSize(_typeSize));\n\t\t\t\t    _frameBasePtr->ptr = _this;\n\t\t\t\t    ((Managed2NativeCallMethod)__managed2NativeMethod)(__method, _argIdxs, localVarBase, nullptr);\n\t\t\t\t    std::memmove((void*)(localVarBase + __obj), _this, _typeSize);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewValueTypeVar_Ctor_0:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    InitDefaultN((void*)(localVarBase + __obj), __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewClassInterpVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 12)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __argStackObjectNum = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ctorFrameBase = *(uint16_t*)(ip + 8);\n\t\t\t\t    IL2CPP_ASSERT(__obj < __ctorFrameBase);\n\t\t\t\t    Il2CppObject* _newObj = il2cpp::vm::Object::New(__method->klass);\n\t\t\t\t    StackObject* _frameBasePtr = (StackObject*)(void*)(localVarBase + __ctorFrameBase);\n\t\t\t\t    std::memmove(_frameBasePtr + 1, (void*)(localVarBase + __argBase), __argStackObjectNum * sizeof(StackObject)); // move arg\n\t\t\t\t    _frameBasePtr->obj = _newObj; // prepare this \n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = _newObj; // set must after move\n\t\t\t\t    CALL_INTERP_VOID((ip + 16), __method, _frameBasePtr);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewClassInterpVar_Ctor_0:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint16_t __ctorFrameBase = *(uint16_t*)(ip + 4);\n\t\t\t\t    IL2CPP_ASSERT(__obj < __ctorFrameBase);\n\t\t\t\t    Il2CppObject* _newObj = il2cpp::vm::Object::New(__method->klass);\n\t\t\t\t    StackObject* _frameBasePtr = (StackObject*)(void*)(localVarBase + __ctorFrameBase);\n\t\t\t\t    _frameBasePtr->obj = _newObj; // prepare this \n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = _newObj;\n\t\t\t\t    CALL_INTERP_VOID((ip + 16), __method, _frameBasePtr);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewValueTypeInterpVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 12)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __argStackObjectNum = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ctorFrameBase = *(uint16_t*)(ip + 8);\n\t\t\t\t    IL2CPP_ASSERT(__obj < __ctorFrameBase);\n\t\t\t\t    StackObject* _frameBasePtr = (StackObject*)(void*)(localVarBase + __ctorFrameBase);\n\t\t\t\t    std::memmove(_frameBasePtr + 1, (void*)(localVarBase + __argBase), __argStackObjectNum * sizeof(StackObject)); // move arg\n\t\t\t\t    _frameBasePtr->ptr = (StackObject*)(void*)(localVarBase + __obj);\n\t\t\t\t    CALL_INTERP_VOID((ip + 16), __method, _frameBasePtr);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::AdjustValueTypeRefVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    // ref => fake value type boxed object value. // fake obj = ref(value_type) - sizeof(Il2CppObject)\n\t\t\t\t    StackObject* _thisSo = ((StackObject*)((void*)(localVarBase + __data)));\n\t\t\t\t    _thisSo->obj -= 1;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::BoxRefVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __dst)) = il2cpp::vm::Object::Box(__klass, (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdvirftnVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __resultMethod = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tMethodInfo* __virtualMethod = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(MethodInfo**)(localVarBase + __resultMethod)) = GET_OBJECT_VIRTUAL_METHOD((*(Il2CppObject**)(localVarBase + __obj)), __virtualMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(1, 8);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(2, 8);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(4, 8);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(8, 8);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(12, 12);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(16, 16);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(20, 20);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(24, 24);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(28, 28);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    SET_RET_AND_LEAVE_FRAME(32, 32);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_ret_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 4);\n\t\t\t\t    std::memmove(frame->ret, (void*)(localVarBase + __ret), __size);\n\t\t\t\t\tLEAVE_FRAME();\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RetVar_void:\n\t\t\t\t{\n\t\t\t\t\tLEAVE_FRAME();\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeInstance_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    uint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t    CHECK_NOT_NULL_THROW((localVarBase + _resolvedArgIdxs[0])->obj);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(((MethodInfo*)imi->resolveDatas[__methodInfo]), _resolvedArgIdxs, localVarBase, nullptr);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeInstance_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    uint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t    CHECK_NOT_NULL_THROW((localVarBase + _resolvedArgIdxs[0])->obj);\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(((MethodInfo*)imi->resolveDatas[__methodInfo]), _resolvedArgIdxs, localVarBase, _ret);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeInstance_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    uint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t    CHECK_NOT_NULL_THROW((localVarBase + _resolvedArgIdxs[0])->obj);\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(((MethodInfo*)imi->resolveDatas[__methodInfo]), _resolvedArgIdxs, localVarBase, _ret);\n\t\t\t\t    ExpandLocationData2StackDataByType(_ret, (LocationDataType)__retLocationType);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeStatic_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__methodInfo]);\n\t\t\t\t\tRuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_resolvedMethod, ((uint16_t*)&imi->resolveDatas[__argIdxs]), localVarBase, nullptr);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeStatic_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__methodInfo]);\n\t\t\t\t\tRuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_resolvedMethod, ((uint16_t*)&imi->resolveDatas[__argIdxs]), localVarBase, _ret);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallNativeStatic_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__methodInfo]);\n\t\t\t\t\tRuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_resolvedMethod, ((uint16_t*)&imi->resolveDatas[__argIdxs]), localVarBase, _ret);\n\t\t\t\t    ExpandLocationData2StackDataByType(_ret, (LocationDataType)__retLocationType);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInterp_void:\n\t\t\t\t{\n\t\t\t\t\tMethodInfo* __methodInfo = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 2);\n\t\t\t\t\tif (metadata::IsInstanceMethod(__methodInfo))\n\t\t\t\t\t{\n\t\t\t\t\t\tCHECK_NOT_NULL_THROW((localVarBase + __argBase)->obj);\n\t\t\t\t\t}\n\t\t\t\t\tCALL_INTERP_VOID((ip + 8), __methodInfo, (StackObject*)(void*)(localVarBase + __argBase));\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInterp_ret:\n\t\t\t\t{\n\t\t\t\t\tMethodInfo* __methodInfo = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tif (metadata::IsInstanceMethod(__methodInfo))\n\t\t\t\t\t{\n\t\t\t\t\t\tCHECK_NOT_NULL_THROW((localVarBase + __argBase)->obj);\n\t\t\t\t\t}\n\t\t\t\t\tCALL_INTERP_RET((ip + 16), __methodInfo, (StackObject*)(void*)(localVarBase + __argBase), (void*)(localVarBase + __ret));\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallVirtual_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    uint16_t* _argIdxData = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _objPtr = localVarBase + _argIdxData[0];\n\t\t\t\t    MethodInfo* _actualMethod = GET_OBJECT_VIRTUAL_METHOD( _objPtr->obj, ((MethodInfo*)imi->resolveDatas[__methodInfo]));\n\t\t\t\t    if (IS_CLASS_VALUE_TYPE(_actualMethod->klass))\n\t\t\t\t    {\n\t\t\t\t        _objPtr->obj += 1;\n\t\t\t\t    }\n\t\t\t\t    if (hybridclr::metadata::IsInterpreterImplement(_actualMethod))\n\t\t\t\t    {\n\t\t\t\t        CALL_INTERP_VOID((ip + 16), _actualMethod, _objPtr);\n\t\t\t\t    }\n\t\t\t\t    else \n\t\t\t\t    {\n\t\t\t\t        frame->ip = ip + 2;\n\t\t\t\t        if (!InitAndGetInterpreterDirectlyCallMethodPointer(_actualMethod))\n\t\t\t\t        {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_actualMethod);\n\t\t\t\t        }\n\t\t\t\t        ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_actualMethod, _argIdxData, localVarBase, nullptr);\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallVirtual_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    uint16_t* _argIdxData = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _objPtr = localVarBase + _argIdxData[0];\n\t\t\t\t    MethodInfo* _actualMethod = GET_OBJECT_VIRTUAL_METHOD(_objPtr->obj, ((MethodInfo*)imi->resolveDatas[__methodInfo]));\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    if (IS_CLASS_VALUE_TYPE(_actualMethod->klass))\n\t\t\t\t    {\n\t\t\t\t        _objPtr->obj += 1;\n\t\t\t\t    }\n\t\t\t\t    if (hybridclr::metadata::IsInterpreterImplement(_actualMethod))\n\t\t\t\t    {\n\t\t\t\t        CALL_INTERP_RET((ip + 16), _actualMethod, _objPtr, _ret);\n\t\t\t\t    }\n\t\t\t\t    else \n\t\t\t\t    {\n\t\t\t\t        frame->ip = ip + 2;\n\t\t\t\t        if (!InitAndGetInterpreterDirectlyCallMethodPointer(_actualMethod))\n\t\t\t\t        {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_actualMethod);\n\t\t\t\t        }\n\t\t\t\t        ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_actualMethod, _argIdxData, localVarBase, _ret);\n\t\t\t\t        ip += 16;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallVirtual_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 2);\n\t\t\t\t    uint16_t* _argIdxData = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _objPtr = localVarBase + _argIdxData[0];\n\t\t\t\t    MethodInfo* _actualMethod = GET_OBJECT_VIRTUAL_METHOD(_objPtr->obj, ((MethodInfo*)imi->resolveDatas[__methodInfo]));\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    if (IS_CLASS_VALUE_TYPE(_actualMethod->klass))\n\t\t\t\t    {\n\t\t\t\t        _objPtr->obj += 1;\n\t\t\t\t    }\n\t\t\t\t    if (hybridclr::metadata::IsInterpreterImplement(_actualMethod))\n\t\t\t\t    {\n\t\t\t\t        CALL_INTERP_RET((ip + 24), _actualMethod, _objPtr, _ret);\n\t\t\t\t    }\n\t\t\t\t    else \n\t\t\t\t    {\n\t\t\t\t        frame->ip = ip + 2;\n\t\t\t\t        if (!InitAndGetInterpreterDirectlyCallMethodPointer(_actualMethod))\n\t\t\t\t        {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_actualMethod);\n\t\t\t\t        }\n\t\t\t\t        ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod])(_actualMethod, _argIdxData, localVarBase, _ret);\n\t\t\t\t        ExpandLocationData2StackDataByType(_ret, (LocationDataType)__retLocationType);\n\t\t\t\t        ip += 24;\n\t\t\t\t    }\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInterpVirtual_void:\n\t\t\t\t{\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 2);\n\t\t\t\t    StackObject* _argBasePtr = (StackObject*)(void*)(localVarBase + __argBase);\n\t\t\t\t    MethodInfo* _actualMethod = GET_OBJECT_VIRTUAL_METHOD(_argBasePtr->obj, __method);\n\t\t\t\t    if (IS_CLASS_VALUE_TYPE(_actualMethod->klass))\n\t\t\t\t    {\n\t\t\t\t        _argBasePtr->obj += 1;\n\t\t\t\t    }\n\t\t\t\t    CALL_INTERP_VOID((ip + 8), _actualMethod, _argBasePtr);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInterpVirtual_ret:\n\t\t\t\t{\n\t\t\t\t\tMethodInfo* __method = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint16_t __argBase = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    StackObject* _argBasePtr = (StackObject*)(void*)(localVarBase + __argBase);\n\t\t\t\t    MethodInfo* _actualMethod = GET_OBJECT_VIRTUAL_METHOD(_argBasePtr->obj, __method);\n\t\t\t\t    if (IS_CLASS_VALUE_TYPE(_actualMethod->klass))\n\t\t\t\t    {\n\t\t\t\t        _argBasePtr->obj += 1;\n\t\t\t\t    }\n\t\t\t\t    CALL_INTERP_RET((ip + 16), _actualMethod, _argBasePtr, (void*)(localVarBase + __ret));\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInd_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint8_t& __isMethodInfoPointer = *(uint8_t*)(ip + 2);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    Managed2NativeCallMethod _nativeMethodPointer = ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod]);\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _nativeMethodPointer2 = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t\tIl2CppMethodPointer _methodPointer = (Il2CppMethodPointer)(localVarBase + __methodInfo)->ptr;\n\t\t\t\t\tif (__isMethodInfoPointer == 0)\n\t\t\t\t\t{\n\t\t\t\t        __isMethodInfoPointer = hybridclr::interpreter::InterpreterModule::IsMethodInfoPointer((void*)_methodPointer) ? 1 : 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (__isMethodInfoPointer == 1)\n\t\t\t\t\t{\n\t\t\t\t\t    MethodInfo* _method = (MethodInfo*)_methodPointer;\n\t\t\t\t\t    if (metadata::IsInstanceMethod(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t    }\n\t\t\t\t\t    if (IsInterpreterImplement(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CALL_INTERP_VOID((ip + 24), _method, _argBasePtr);\n\t\t\t\t            continue;\n\t\t\t\t\t    }\n\t\t\t\t\t    if (!InitAndGetInterpreterDirectlyCallMethodPointer(_method))\n\t\t\t\t\t    {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_method);\n\t\t\t\t\t    }\n\t\t\t\t        _nativeMethodPointer(_method, _argIdxsPtr, localVarBase, nullptr);\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        _nativeMethodPointer2(_methodPointer, _argIdxsPtr, localVarBase, nullptr);\n\t\t\t\t    }\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInd_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint8_t& __isMethodInfoPointer = *(uint8_t*)(ip + 2);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 20);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    Managed2NativeCallMethod _nativeMethodPointer = ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod]);\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _nativeMethodPointer2 = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t\tIl2CppMethodPointer _methodPointer = (Il2CppMethodPointer)(localVarBase + __methodInfo)->ptr;\n\t\t\t\t\tif (__isMethodInfoPointer == 0)\n\t\t\t\t\t{\n\t\t\t\t        __isMethodInfoPointer = hybridclr::interpreter::InterpreterModule::IsMethodInfoPointer((void*)_methodPointer) ? 1 : 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (__isMethodInfoPointer == 1)\n\t\t\t\t\t{\n\t\t\t\t\t    MethodInfo* _method = (MethodInfo*)_methodPointer;\n\t\t\t\t\t    if (metadata::IsInstanceMethod(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t    }\n\t\t\t\t\t    if (IsInterpreterImplement(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CALL_INTERP_RET((ip + 24), _method, _argBasePtr, _ret);\n\t\t\t\t            continue;\n\t\t\t\t\t    }\n\t\t\t\t\t    if (!InitAndGetInterpreterDirectlyCallMethodPointer(_method))\n\t\t\t\t\t    {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_method);\n\t\t\t\t\t    }\n\t\t\t\t        _nativeMethodPointer(_method, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        _nativeMethodPointer2(_methodPointer, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    }\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallInd_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint8_t& __isMethodInfoPointer = *(uint8_t*)(ip + 2);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 20);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 3);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    Managed2NativeCallMethod _nativeMethodPointer = ((Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeMethod]);\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _nativeMethodPointer2 = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t\tIl2CppMethodPointer _methodPointer = (Il2CppMethodPointer)(localVarBase + __methodInfo)->ptr;\n\t\t\t\t\tif (__isMethodInfoPointer == 0)\n\t\t\t\t\t{\n\t\t\t\t        __isMethodInfoPointer = hybridclr::interpreter::InterpreterModule::IsMethodInfoPointer((void*)_methodPointer) ? 1 : 2;\n\t\t\t\t\t}\n\t\t\t\t\tif (__isMethodInfoPointer == 1)\n\t\t\t\t\t{\n\t\t\t\t\t    MethodInfo* _method = (MethodInfo*)_methodPointer;\n\t\t\t\t\t    if (metadata::IsInstanceMethod(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t    }\n\t\t\t\t\t    if (IsInterpreterImplement(_method))\n\t\t\t\t\t    {\n\t\t\t\t            CALL_INTERP_RET((ip + 24), _method, _argBasePtr, _ret);\n\t\t\t\t            continue;\n\t\t\t\t\t    }\n\t\t\t\t\t    if (!InitAndGetInterpreterDirectlyCallMethodPointer(_method))\n\t\t\t\t\t    {\n\t\t\t\t            RaiseAOTGenericMethodNotInstantiatedException(_method);\n\t\t\t\t\t    }\n\t\t\t\t        _nativeMethodPointer(_method, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    }\n\t\t\t\t    else\n\t\t\t\t    {\n\t\t\t\t        _nativeMethodPointer2(_methodPointer, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    }\n\t\t\t\t    ExpandLocationData2StackDataByType(_ret, (LocationDataType)__retLocationType);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallPInvoke_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __pinvokeMethodPointer = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _managed2NativeFuncMethodPointer = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t    Il2CppMethodPointer _pinvokeMethodPointer = ((Il2CppMethodPointer)imi->resolveDatas[__pinvokeMethodPointer]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t    _managed2NativeFuncMethodPointer(_pinvokeMethodPointer, _argIdxsPtr, localVarBase, nullptr);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallPInvoke_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __pinvokeMethodPointer = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _managed2NativeFuncMethodPointer = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t    Il2CppMethodPointer _pinvokeMethodPointer = ((Il2CppMethodPointer)imi->resolveDatas[__pinvokeMethodPointer]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t    _managed2NativeFuncMethodPointer(_pinvokeMethodPointer, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallPInvoke_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeFunctionPointerMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __pinvokeMethodPointer = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t    Managed2NativeFunctionPointerCallMethod _managed2NativeFuncMethodPointer = ((Managed2NativeFunctionPointerCallMethod)imi->resolveDatas[__managed2NativeFunctionPointerMethod]);\n\t\t\t\t    Il2CppMethodPointer _pinvokeMethodPointer = ((Il2CppMethodPointer)imi->resolveDatas[__pinvokeMethodPointer]);\n\t\t\t\t\tuint16_t* _argIdxsPtr = (uint16_t*)&imi->resolveDatas[__argIdxs];\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _argIdxsPtr[0];\n\t\t\t\t    _managed2NativeFuncMethodPointer(_pinvokeMethodPointer, _argIdxsPtr, localVarBase, _ret);\n\t\t\t\t    ExpandLocationData2StackDataByType(_ret, (LocationDataType)__retLocationType);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateInvoke_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeStaticMethod = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __managed2NativeInstanceMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __invokeParamCount = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t\tvoid* _ret = nullptr;\n\t\t\t\t\tuint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _resolvedArgIdxs[0];\n\t\t\t\t\tIl2CppMulticastDelegate* _del = (Il2CppMulticastDelegate*)_argBasePtr->obj;\n\t\t\t\t\tCHECK_NOT_NULL_THROW(_del);\n\t\t\t\t\tif (_del->delegates == nullptr)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst MethodInfo* method = _del->delegate.method;\n\t\t\t\t\t\tIl2CppObject* target = _del->delegate.target;\n\t\t\t\t\t\tif (hybridclr::metadata::IsInterpreterImplement(method))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tswitch ((int32_t)__invokeParamCount - (int32_t)method->parameters_count)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (hybridclr::metadata::IsInstanceMethod(method))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(target);\n\t\t\t\t\t\t\t\t\ttarget += IS_CLASS_VALUE_TYPE(method->klass);\n\t\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_argBasePtr = __invokeParamCount == 0 ? _argBasePtr + 1 : localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr = localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tRaiseExecutionEngineException(\"CallInterpDelegate\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tCALL_INTERP_RET((ip + 16), method, _argBasePtr, _ret);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _ret);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tIl2CppArray* dels = _del->delegates;\n\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\tfor (il2cpp_array_size_t i = 0; i < dels->max_length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tIl2CppMulticastDelegate* subDel = il2cpp_array_get(dels, Il2CppMulticastDelegate *, i);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel->delegates == nullptr);\n\t\t\t\t\t\t\tconst MethodInfo* method = subDel->delegate.method;\n\t\t\t\t\t\t\tIl2CppObject* target = subDel->delegate.target;\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _ret);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateInvoke_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeStaticMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __managed2NativeInstanceMethod = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __invokeParamCount = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __retTypeStackObjectSize = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t\tIL2CPP_ASSERT(__retTypeStackObjectSize <= kMaxRetValueTypeStackObjectSize);\n\t\t\t\t\tStackObject* _tempRet = tempRet ? tempRet : (tempRet = (StackObject*)alloca(sizeof(StackObject) * kMaxRetValueTypeStackObjectSize));\n\t\t\t\t\tuint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _resolvedArgIdxs[0];\n\t\t\t\t\tIl2CppMulticastDelegate* _del = (Il2CppMulticastDelegate*)_argBasePtr->obj;\n\t\t\t\t\tCHECK_NOT_NULL_THROW(_del);\n\t\t\t\t\tif (_del->delegates == nullptr)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst MethodInfo* method = _del->delegate.method;\n\t\t\t\t\t\tIl2CppObject* target = _del->delegate.target;\n\t\t\t\t\t\tif (hybridclr::metadata::IsInterpreterImplement(method))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tswitch ((int32_t)__invokeParamCount - (int32_t)method->parameters_count)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (hybridclr::metadata::IsInstanceMethod(method))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(target);\n\t\t\t\t\t\t\t\t\ttarget += IS_CLASS_VALUE_TYPE(method->klass);\n\t\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_argBasePtr = __invokeParamCount == 0 ? _argBasePtr + 1 : localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr = localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tRaiseExecutionEngineException(\"CallInterpDelegate\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tCALL_INTERP_RET((ip + 24), method, _argBasePtr, _ret);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _tempRet);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tIl2CppArray* dels = _del->delegates;\n\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\tfor (il2cpp_array_size_t i = 0; i < dels->max_length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tIl2CppMulticastDelegate* subDel = il2cpp_array_get(dels, Il2CppMulticastDelegate *, i);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel->delegates == nullptr);\n\t\t\t\t\t\t\tconst MethodInfo* method = subDel->delegate.method;\n\t\t\t\t\t\t\tIl2CppObject* target = subDel->delegate.target;\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _tempRet);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tCopyStackObject((StackObject*)_ret, _tempRet, __retTypeStackObjectSize);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateInvoke_ret_expand:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __managed2NativeStaticMethod = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __managed2NativeInstanceMethod = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __invokeParamCount = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint8_t __retLocationType = *(uint8_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _ret = (void*)(localVarBase + __ret);\n\t\t\t\t\tStackObject _tempRet[1];\n\t\t\t\t\tuint16_t* _resolvedArgIdxs = ((uint16_t*)&imi->resolveDatas[__argIdxs]);\n\t\t\t\t\tStackObject* _argBasePtr = localVarBase + _resolvedArgIdxs[0];\n\t\t\t\t\tIl2CppMulticastDelegate* _del = (Il2CppMulticastDelegate*)_argBasePtr->obj;\n\t\t\t\t\tCHECK_NOT_NULL_THROW(_del);\n\t\t\t\t\tif (_del->delegates == nullptr)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst MethodInfo* method = _del->delegate.method;\n\t\t\t\t\t\tIl2CppObject* target = _del->delegate.target;\n\t\t\t\t\t\tif (hybridclr::metadata::IsInterpreterImplement(method))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tswitch ((int32_t)__invokeParamCount - (int32_t)method->parameters_count)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (hybridclr::metadata::IsInstanceMethod(method))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(target);\n\t\t\t\t\t\t\t\t\ttarget += IS_CLASS_VALUE_TYPE(method->klass);\n\t\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t_argBasePtr = __invokeParamCount == 0 ? _argBasePtr + 1 : localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase -1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr->obj = target;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t_argBasePtr = localVarBase + _resolvedArgIdxs[1];\n\t\t\t\t\t\t\t\tCHECK_NOT_NULL_THROW(_argBasePtr->obj);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tRaiseExecutionEngineException(\"CallInterpDelegate\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tCALL_INTERP_RET((ip + 24), method, _argBasePtr, _ret);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _tempRet);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tIl2CppArray* dels = _del->delegates;\n\t\t\t\t\t\tManaged2NativeCallMethod _staticM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeStaticMethod];\n\t\t\t\t\t\tManaged2NativeCallMethod _instanceM2NMethod = (Managed2NativeCallMethod)imi->resolveDatas[__managed2NativeInstanceMethod];\n\t\t\t\t\t\tfor (il2cpp_array_size_t i = 0; i < dels->max_length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tIl2CppMulticastDelegate* subDel = il2cpp_array_get(dels, Il2CppMulticastDelegate *, i);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel);\n\t\t\t\t\t\t\tIL2CPP_ASSERT(subDel->delegates == nullptr);\n\t\t\t\t\t\t\tconst MethodInfo* method = subDel->delegate.method;\n\t\t\t\t\t\t\tIl2CppObject* target = subDel->delegate.target;\n\t\t\t\t\t\t\tInvokeSingleDelegate(__invokeParamCount, method, target, _staticM2NMethod, _instanceM2NMethod, _resolvedArgIdxs, localVarBase, _tempRet);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t    CopyLocationData2StackDataByType((StackObject*)_ret, _tempRet, (LocationDataType)__retLocationType);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateBeginInvoke:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __result = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint32_t __argIdxs = *(uint32_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t\t(*(Il2CppObject**)(localVarBase + __result)) = InvokeDelegateBeginInvoke(((MethodInfo*)imi->resolveDatas[__methodInfo]), ((uint16_t*)&imi->resolveDatas[__argIdxs]), localVarBase);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateEndInvoke_void:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __asyncResult = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    InvokeDelegateEndInvokeVoid(((MethodInfo*)imi->resolveDatas[__methodInfo]), (Il2CppAsyncResult*)(*(Il2CppObject**)(localVarBase + __asyncResult)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallDelegateEndInvoke_ret:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __methodInfo = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __asyncResult = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    InvokeDelegateEndInvokeRet(((MethodInfo*)imi->resolveDatas[__methodInfo]), (Il2CppAsyncResult*)(*(Il2CppObject**)(localVarBase + __asyncResult)), (void*)(localVarBase + __ret));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewDelegate:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __method = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppDelegate* del = (Il2CppDelegate*)il2cpp::vm::Object::New(__klass);\n\t\t\t\t    ConstructDelegate(del, (*(Il2CppObject**)(localVarBase + __obj)), (*(MethodInfo**)(localVarBase + __method)));\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __dst)) = (Il2CppObject*)del;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorDelegate:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tMethodInfo* __ctor = ((MethodInfo*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __method = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppDelegate* _del = (Il2CppDelegate*)il2cpp::vm::Object::New(__ctor->klass);\n\t\t\t\t    ConstructorDelegate2(__ctor, _del, (*(Il2CppObject**)(localVarBase + __obj)), (*(MethodInfo**)(localVarBase + __method)));\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __dst)) = (Il2CppObject*)_del;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i1_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int8_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i2_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int16_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u2_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint16_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_v_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef void(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_u1_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i4_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_i8_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f4_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef float(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, float, float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, float, float, float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, double, double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeInstance_f8_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 16);\n\t\t\t\t\tuint16_t __self = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 10);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 12);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    void* _self = (*(void**)(localVarBase + __self));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_self);\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    typedef double(*_NativeMethod_)(void*, double, double, double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_self, (*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 24;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i1_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int8_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i2_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int16_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u2_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint16_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_0:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)(_resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_v_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef void(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_u1_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef uint8_t(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i4_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int32_t(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int32_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_i8_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef int64_t(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    *(int64_t*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f4_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef float(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    *(float*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int32_t, int32_t, int32_t, int32_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int32_t*)(localVarBase + __param0)), (*(int32_t*)(localVarBase + __param1)), (*(int32_t*)(localVarBase + __param2)), (*(int32_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_i8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(int64_t, int64_t, int64_t, int64_t, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(int64_t*)(localVarBase + __param0)), (*(int64_t*)(localVarBase + __param1)), (*(int64_t*)(localVarBase + __param2)), (*(int64_t*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f4_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f4_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f4_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(float, float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f4_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(float, float, float, float, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(float*)(localVarBase + __param0)), (*(float*)(localVarBase + __param1)), (*(float*)(localVarBase + __param2)), (*(float*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f8_1:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 4);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f8_2:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 6);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f8_3:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 8);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(double, double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CallCommonNativeStatic_f8_f8_4:\n\t\t\t\t{\n\t\t\t\t\tuint32_t __method = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __param0 = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __param1 = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __param2 = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __param3 = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 10);\n\t\t\t\t    frame->ip = ip + 2;\n\t\t\t\t    MethodInfo* _resolvedMethod = ((MethodInfo*)imi->resolveDatas[__method]);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(_resolvedMethod);\n\t\t\t\t    typedef double(*_NativeMethod_)(double, double, double, double, MethodInfo*);\n\t\t\t\t    *(double*)(void*)(localVarBase + __ret) = ((_NativeMethod_)_resolvedMethod->methodPointerCallByInterp)((*(double*)(localVarBase + __param0)), (*(double*)(localVarBase + __param1)), (*(double*)(localVarBase + __param2)), (*(double*)(localVarBase + __param3)), _resolvedMethod);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}FUNCTION\n#pragma endregion\n\n#pragma region OBJECT\n\t\t//!!!{{OBJECT\n\t\t\t\tcase HiOpcodeEnum::BoxVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __dst)) = il2cpp::vm::Object::Box(__klass, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnBoxVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(void**)(localVarBase + __addr)) = HiUnbox((*(Il2CppObject**)(localVarBase + __obj)), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnBoxAnyVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    HiUnboxAny2StackObject((*(Il2CppObject**)(localVarBase + __obj)), __klass, (void*)(localVarBase + __dst));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CastclassVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __klass = *(uint32_t*)(ip + 4);\n\t\t\t\t    HiCastClass((*(Il2CppObject**)(localVarBase + __obj)), ((Il2CppClass*)imi->resolveDatas[__klass]));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::IsInstVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __klass = *(uint32_t*)(ip + 4);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __obj)) = il2cpp::vm::Object::IsInst((*(Il2CppObject**)(localVarBase + __obj)), ((Il2CppClass*)imi->resolveDatas[__klass]));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdtokenVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __runtimeHandle = *(uint16_t*)(ip + 2);\n\t\t\t\t\tvoid* __token = ((void*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t    (*(void**)(localVarBase + __runtimeHandle)) = __token;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::MakeRefVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppTypedRef*)(localVarBase + __dst)) = MAKE_TYPEDREFERENCE(__klass, (*(void**)(localVarBase + __data)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RefAnyTypeVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __typedRef = *(uint16_t*)(ip + 4);\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = RefAnyType((*(Il2CppTypedRef*)(localVarBase + __typedRef)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RefAnyValueVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __typedRef = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(void**)(localVarBase + __addr)) = RefAnyValue((*(Il2CppTypedRef*)(localVarBase + __typedRef)), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    void** _dstAddr_ = (void**)((*(void**)(localVarBase + __dst)));\n\t\t\t\t    *_dstAddr_ = *(void**)(*(void**)(localVarBase + __src));\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER(_dstAddr_);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy1((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy2((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy4((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy8((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy12((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy16((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy20((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy24((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy28((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy32((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t\tstd::memmove((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)), __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t\tstd::memmove((*(void**)(localVarBase + __dst)), (*(void**)(localVarBase + __src)), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t    void* _dstAddr_ = (void*)((*(void**)(localVarBase + __dst)));\n\t\t\t\t    std::memmove(_dstAddr_, (*(void**)(localVarBase + __src)), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_dstAddr_, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CpobjVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t    void* _dstAddr_ = (void*)((*(void**)(localVarBase + __dst)));\n\t\t\t\t    std::memmove(_dstAddr_, (*(void**)(localVarBase + __src)), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_dstAddr_, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\t*(void**)(void*)(localVarBase + __dst) = (*(void**)*(void**)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy1((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy2((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy4((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy8((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy12((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy16((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy20((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy24((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy28((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy32((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdobjVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (*(void**)(localVarBase + __src)), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    void** _dstAddr_ = (void**)((*(void**)(localVarBase + __dst)));\n\t\t\t\t    *_dstAddr_ = (*(Il2CppObject**)(localVarBase + __src));\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER(_dstAddr_);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy1((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy2((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy4((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy8((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy12((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy16((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy20((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy24((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy28((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tCopy32((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t\tstd::memmove((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __src), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StobjVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t    void* _dstAddr_ = (*(void**)(localVarBase + __dst));\n\t\t\t\t    std::memmove(_dstAddr_, (void*)(localVarBase + __src), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_dstAddr_, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t    void* _objAddr_ = (*(void**)(localVarBase + __obj));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_objAddr_);\n\t\t\t\t    *(void**)_objAddr_ = nullptr;\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_objAddr_);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault1((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault2((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault4((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault8((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault12((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault16((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault20((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault24((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault28((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tInitDefault32((*(void**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t\tInitDefaultN((*(void**)(localVarBase + __obj)), __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 4);\n\t\t\t\t\tInitDefaultN((*(void**)(localVarBase + __obj)), __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    void* _objAddr_ = (*(void**)(localVarBase + __obj));\n\t\t\t\t    InitDefaultN(_objAddr_, __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_objAddr_, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitobjVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 4);\n\t\t\t\t    void* _objAddr_ = (*(void**)(localVarBase + __obj));\n\t\t\t\t    InitDefaultN(_objAddr_, __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_objAddr_, __size);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdstrVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __str = *(uint32_t*)(ip + 4);\n\t\t\t\t    (*(Il2CppString**)(localVarBase + __dst)) = ((Il2CppString*)imi->resolveDatas[__str]);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int8_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int16_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int32_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(int64_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy8((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy12((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy16((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy20((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy24((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy28((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy32((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int8_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int16_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int32_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = *(int64_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy8((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy12((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy16((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy20((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy24((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy28((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tCopy32((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 8);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldaVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int8_t*)(_fieldAddr_) = (*(int8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint8_t*)(_fieldAddr_) = (*(uint8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int16_t*)(_fieldAddr_) = (*(int16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint16_t*)(_fieldAddr_) = (*(uint16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int32_t*)(_fieldAddr_) = (*(int32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint32_t*)(_fieldAddr_) = (*(uint32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int64_t*)(_fieldAddr_) = (*(int64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint64_t*)(_fieldAddr_) = (*(uint64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(Il2CppObject**)(_fieldAddr_) = (*(Il2CppObject**)(localVarBase + __data));HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy8((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy12((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy16((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy20((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy24((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy28((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy32((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __offset = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int8_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int16_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int32_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(int64_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)(((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy8((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy12((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy16((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy20((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy24((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy28((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy32((void*)(localVarBase + __dst), ((byte*)__klass->static_fields) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (((byte*)__klass->static_fields) + __offset), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (((byte*)__klass->static_fields) + __offset), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(int8_t*)(_fieldAddr_) = (*(int8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(uint8_t*)(_fieldAddr_) = (*(uint8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(int16_t*)(_fieldAddr_) = (*(int16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(uint16_t*)(_fieldAddr_) = (*(uint16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(int32_t*)(_fieldAddr_) = (*(int32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(uint32_t*)(_fieldAddr_) = (*(uint32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(int64_t*)(_fieldAddr_) = (*(int64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(uint64_t*)(_fieldAddr_) = (*(uint64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    *(Il2CppObject**)(_fieldAddr_) = (*(Il2CppObject**)(localVarBase + __data));HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy8(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy12(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy16(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy20(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy24(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy28(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy32(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove(((byte*)__klass->static_fields) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StsfldVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldaVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = ((byte*)__klass->static_fields) + __offset;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdsfldaFromFieldDataVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tvoid* __src = ((void*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = __src;\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalaVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int8_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int16_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int32_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(int64_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy8((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy12((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy16((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy20((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy24((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy28((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy32((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdthreadlocalVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tint32_t __offset = *(int32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(int8_t*)_fieldAddr_ = (*(int8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(uint8_t*)_fieldAddr_ = (*(uint8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(int16_t*)_fieldAddr_ = (*(int16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(uint16_t*)_fieldAddr_ = (*(uint16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(int32_t*)_fieldAddr_ = (*(int32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(uint32_t*)_fieldAddr_ = (*(uint32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(int64_t*)_fieldAddr_ = (*(int64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(uint64_t*)_fieldAddr_ = (*(uint64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    *(Il2CppObject**)_fieldAddr_ = (*(Il2CppObject**)(localVarBase + __data));HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy8((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy12((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy16((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy20((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy24((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy28((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    Copy32((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    std::memmove((byte*)il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 12);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StthreadlocalVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 4)]);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass(__klass);\n\t\t\t\t    void* _fieldAddr_ = ((byte*)(il2cpp::vm::Thread::GetThreadStaticData(__klass->thread_static_fields_offset))) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CheckThrowIfNullVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InitClassStaticCtor:\n\t\t\t\t{\n\t\t\t\t\tuint64_t __klass = *(uint64_t*)(ip + 8);\n\t\t\t\t    RuntimeInitClassCCtorWithoutInitClass((Il2CppClass*)(__klass));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldaLargeVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(void**)(localVarBase + __dst)) = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int8_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int16_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(int32_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(int64_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy8((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy12((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy16((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy20((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy24((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy28((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy32((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldLargeVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int8_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint8_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int16_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint16_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(int32_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int32_t*)(localVarBase + __dst)) = *(uint32_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = *(int64_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\t(*(int64_t*)(localVarBase + __dst)) = *(uint64_t*)((byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy8((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy12((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy16((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy20((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy24((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy28((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tCopy32((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LdfldValueTypeLargeVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t\tstd::memmove((void*)(localVarBase + __dst), (byte*)(void*)(localVarBase + __obj) + __offset, __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int8_t*)(_fieldAddr_) = (*(int8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint8_t*)(_fieldAddr_) = (*(uint8_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int16_t*)(_fieldAddr_) = (*(int16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint16_t*)(_fieldAddr_) = (*(uint16_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int32_t*)(_fieldAddr_) = (*(int32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint32_t*)(_fieldAddr_) = (*(uint32_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(int64_t*)(_fieldAddr_) = (*(int64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(uint64_t*)(_fieldAddr_) = (*(uint64_t*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    *(Il2CppObject**)(_fieldAddr_) = (*(Il2CppObject**)(localVarBase + __data));HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy8((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy12((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy16((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy20((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy24((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy28((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    Copy32((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    std::memmove((uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset, (void*)(localVarBase + __data), __size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_WriteBarrier_n_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 6);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::StfldLargeVarVar_WriteBarrier_n_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint32_t __offset = *(uint32_t*)(ip + 8);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint32_t __size = *(uint32_t*)(ip + 12);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppObject**)(localVarBase + __obj)));\n\t\t\t\t    void* _fieldAddr_ = (uint8_t*)(*(Il2CppObject**)(localVarBase + __obj)) + __offset;\n\t\t\t\t    std::memmove(_fieldAddr_, (void*)(localVarBase + __data), __size);\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_fieldAddr_, (size_t)__size);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}OBJECT\n#pragma endregion\n\n#pragma region ARRAY\n\t\t//!!!{{ARRAY\n\t\t\t\tcase HiOpcodeEnum::NewArrVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __size = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppArray**)(localVarBase + __arr)) =  il2cpp::vm::Array::NewSpecific(__klass, (*(int32_t*)(localVarBase + __size)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayLengthVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __len = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t    CHECK_NOT_NULL_THROW((*(Il2CppArray**)(localVarBase + __arr)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __len)) = (int64_t)il2cpp::vm::Array::GetLength((*(Il2CppArray**)(localVarBase + __arr)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementAddressAddrVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(void**)(localVarBase + __addr)) = GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), il2cpp::vm::Array::GetElementSize(arr->klass));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementAddressCheckAddrVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t\tIl2CppClass* __eleKlass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    CheckArrayElementTypeMatch(arr->klass, __eleKlass);\n\t\t\t\t    (*(void**)(localVarBase + __addr)) = GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), il2cpp::vm::Array::GetElementSize(arr->klass));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, int8_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, uint8_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, int16_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, uint16_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, int32_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, uint32_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, int64_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    (*(int64_t*)(localVarBase + __dst)) = il2cpp_array_get(arr, uint64_t, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy1((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 1));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy2((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 2));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy4((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 4));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy8((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 8));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy12((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 12));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy16((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 16));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_20:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy20((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 20));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_24:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy24((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 24));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_28:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy28((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 28));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_size_32:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy32((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), 32));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetArrayElementVarVar_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    int32_t eleSize = il2cpp::vm::Array::GetElementSize(arr->klass);\n\t\t\t\t    std::memmove((void*)(localVarBase + __dst), GET_ARRAY_ELEMENT_ADDRESS(arr, (*(int32_t*)(localVarBase + __index)), eleSize), eleSize);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), int8_t, (*(int32_t*)(localVarBase + __index)), (*(int8_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), uint8_t, (*(int32_t*)(localVarBase + __index)), (*(uint8_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), int16_t, (*(int32_t*)(localVarBase + __index)), (*(int16_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), uint16_t, (*(int32_t*)(localVarBase + __index)), (*(uint16_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), int32_t, (*(int32_t*)(localVarBase + __index)), (*(int32_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), uint32_t, (*(int32_t*)(localVarBase + __index)), (*(uint32_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), int64_t, (*(int32_t*)(localVarBase + __index)), (*(int64_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    il2cpp_array_set((*(Il2CppArray**)(localVarBase + __arr)), uint64_t, (*(int32_t*)(localVarBase + __index)), (*(uint64_t*)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    CheckArrayElementTypeCompatible((*(Il2CppArray**)(localVarBase + __arr)), (*(Il2CppObject**)(localVarBase + __ele)));\n\t\t\t\t    il2cpp_array_setref((*(Il2CppArray**)(localVarBase + __arr)), (*(int32_t*)(localVarBase + __index)), (*(Il2CppObject**)(localVarBase + __ele)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_size_12:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy12(GET_ARRAY_ELEMENT_ADDRESS(_arr, (*(int32_t*)(localVarBase + __index)), 12), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_size_16:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    Copy16(GET_ARRAY_ELEMENT_ADDRESS(_arr, (*(int32_t*)(localVarBase + __index)), 16), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    int32_t _eleSize = il2cpp::vm::Array::GetElementSize(_arr->klass);\n\t\t\t\t    SetArrayElementWithSize(_arr, _eleSize, (*(int32_t*)(localVarBase + __index)), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetArrayElementVarVar_WriteBarrier_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, (*(int32_t*)(localVarBase + __index)));\n\t\t\t\t    int32_t _eleSize = il2cpp::vm::Array::GetElementSize(_arr->klass);\n\t\t\t\t    il2cpp_array_setrefwithsize(_arr, _eleSize, (*(int32_t*)(localVarBase + __index)), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewMdArrVarVar_length:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppArray**)(localVarBase + __arr)) =  NewMdArray(__klass, (StackObject*)(void*)(localVarBase + __lengthIdxs), nullptr);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewMdArrVarVar_length_bound:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __lowerBoundIdxs = *(uint16_t*)(ip + 6);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(Il2CppArray**)(localVarBase + __arr)) =  NewMdArray(__klass, (StackObject*)(void*)(localVarBase + __lengthIdxs), (StackObject*)(void*)(localVarBase + __lowerBoundIdxs));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementExpandToStack<int8_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementExpandToStack<uint8_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementExpandToStack<int16_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementExpandToStack<uint16_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementCopyToStack<int32_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementCopyToStack<uint32_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementCopyToStack<int64_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementCopyToStack<uint64_t>((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementVarVar_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    GetMdArrayElementBySize((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __value));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetMdArrElementAddressVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __addr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 6);\n\t\t\t\t    (*(void**)(localVarBase + __addr)) = GetMdArrayElementAddress((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_i1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(int8_t*)_addr = (*(int8_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_u1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(uint8_t*)_addr = (*(uint8_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_i2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(int16_t*)_addr = (*(int16_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_u2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(uint16_t*)_addr = (*(uint16_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(int32_t*)_addr = (*(int32_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_u4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(uint32_t*)_addr = (*(uint32_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(int64_t*)_addr = (*(int64_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_u8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    *(uint64_t*)_addr = (*(uint64_t*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_ref:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    void* _addr = GetMdArrayElementAddress(_arr, (StackObject*)(void*)(localVarBase + __lengthIdxs));\n\t\t\t\t    CheckArrayElementTypeCompatible(_arr, (*(Il2CppObject**)(localVarBase + __ele)));\n\t\t\t\t    *(Il2CppObject**)_addr = (*(Il2CppObject**)(localVarBase + __ele));\n\t\t\t\t    HYBRIDCLR_SET_WRITE_BARRIER((void**)_addr);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    SetMdArrayElement((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::SetMdArrElementVarVar_WriteBarrier_n:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __lengthIdxs = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __ele = *(uint16_t*)(ip + 6);\n\t\t\t\t    SetMdArrayElementWriteBarrier((*(Il2CppArray**)(localVarBase + __arr)), (StackObject*)(void*)(localVarBase + __lengthIdxs), (void*)(localVarBase + __ele));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}ARRAY\n#pragma endregion\n\n#pragma region EXCEPTION\n\t\t//!!!{{EXCEPTION\n\t\t\t\tcase HiOpcodeEnum::ThrowEx:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __exceptionObj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __firstHandlerIndex = *(uint16_t*)(ip + 4);\n\t\t\t\t\tTHROW_EX((Il2CppException*)(*(Il2CppObject**)(localVarBase + __exceptionObj)), __firstHandlerIndex);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::RethrowEx:\n\t\t\t\t{\n\t\t\t\t\tRETHROW_EX();\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LeaveEx:\n\t\t\t\t{\n\t\t\t\t\tint32_t __target = *(int32_t*)(ip + 4);\n\t\t\t\t\tuint16_t __firstHandlerIndex = *(uint16_t*)(ip + 2);\n\t\t\t\t\tLEAVE_EX(__target, __firstHandlerIndex);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::LeaveEx_Directly:\n\t\t\t\t{\n\t\t\t\t\tint32_t __target = *(int32_t*)(ip + 4);\n\t\t\t\t\tLEAVE_EX_DIRECTLY(__target);\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::EndFilterEx:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 2);\n\t\t\t\t\tENDFILTER_EX((*(bool*)(localVarBase + __value)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::EndFinallyEx:\n\t\t\t\t{\n\t\t\t\t\tENDFINALLY_EX();\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}EXCEPTION\n#pragma endregion\n\n#pragma region instrinct\n\t\t//!!!{{INSTRINCT\n\t\t\t\tcase HiOpcodeEnum::NullableNewVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    NewNullableValueType((void*)(localVarBase + __dst), (void*)(localVarBase + __data), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NullableCtorVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __data = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    InitNullableValueType((*(void**)(localVarBase + __dst)), (void*)(localVarBase + __data), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NullableHasValueVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __result = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    (*(uint32_t*)(localVarBase + __result)) = IsNullableHasValue((*(void**)(localVarBase + __obj)), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NullableGetValueOrDefaultVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    GetNullableValueOrDefault2StackDataByType((void*)(localVarBase + __dst), (*(void**)(localVarBase + __obj)), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NullableGetValueOrDefaultVarVar_1:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __defaultValue = *(uint16_t*)(ip + 6);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    GetNullableValueOrDefault2StackDataByType((void*)(localVarBase + __dst), (*(void**)(localVarBase + __obj)), (void*)(localVarBase + __defaultValue), __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NullableGetValueVarVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 4);\n\t\t\t\t\tIl2CppClass* __klass = ((Il2CppClass*)imi->resolveDatas[*(uint32_t*)(ip + 8)]);\n\t\t\t\t    GetNullableValueOrDefault2StackDataByType((void*)(localVarBase + __dst), (*(void**)(localVarBase + __obj)), nullptr, __klass);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedCompareExchangeVarVarVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __comparand = *(uint16_t*)(ip + 8);\n\t\t\t\t    (*(int32_t*)(localVarBase + __ret)) = HiInterlockedCompareExchange((int32_t*)(*(void**)(localVarBase + __location)), (*(int32_t*)(localVarBase + __value)), (*(int32_t*)(localVarBase + __comparand)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedCompareExchangeVarVarVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __comparand = *(uint16_t*)(ip + 8);\n\t\t\t\t    (*(int64_t*)(localVarBase + __ret)) = HiInterlockedCompareExchange((int64_t*)(*(void**)(localVarBase + __location)), (*(int64_t*)(localVarBase + __value)), (*(int64_t*)(localVarBase + __comparand)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedCompareExchangeVarVarVarVar_pointer:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __comparand = *(uint16_t*)(ip + 8);\n\t\t\t\t    (*(void**)(localVarBase + __ret)) = HiInterlockedCompareExchange((void**)(*(void**)(localVarBase + __location)), (*(void**)(localVarBase + __value)), (*(void**)(localVarBase + __comparand)));\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedExchangeVarVarVar_i4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    (*(int32_t*)(localVarBase + __ret)) = HiInterlockedExchange((int32_t*)(*(void**)(localVarBase + __location)), (*(int32_t*)(localVarBase + __value)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedExchangeVarVarVar_i8:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    (*(int64_t*)(localVarBase + __ret)) = HiInterlockedExchange((int64_t*)(*(void**)(localVarBase + __location)), (*(int64_t*)(localVarBase + __value)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::InterlockedExchangeVarVarVar_pointer:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __location = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    (*(void**)(localVarBase + __ret)) = HiInterlockedExchange((void**)(*(void**)(localVarBase + __location)), (*(void**)(localVarBase + __value)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewSystemObjectVar:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t(*(Il2CppObject**)(localVarBase + __obj)) = il2cpp::vm::Object::New(il2cpp_defaults.object_class);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector2f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y))};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector3_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector3f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), 0};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector3_3:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t    *(HtVector3f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z))};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector4_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector4f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), 0, 0};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector4_3:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t    *(HtVector4f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z)), 0};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewVector4_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __w = *(uint16_t*)(ip + 10);\n\t\t\t\t    *(HtVector4f*)(void*)(localVarBase + __obj) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z)), (*(float*)(localVarBase + __w))};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector2f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y))};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector3_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector3f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), 0};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector3_3:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t    *(HtVector3f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z))};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector4_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t    *(HtVector4f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), 0, 0};\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector4_3:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t    *(HtVector4f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z)), 0};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::CtorVector4_4:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __obj = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __x = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __y = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __z = *(uint16_t*)(ip + 8);\n\t\t\t\t\tuint16_t __w = *(uint16_t*)(ip + 10);\n\t\t\t\t    *(HtVector4f*)(*(void**)(localVarBase + __obj)) = {(*(float*)(localVarBase + __x)), (*(float*)(localVarBase + __y)), (*(float*)(localVarBase + __z)), (*(float*)(localVarBase + __w))};\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ArrayGetGenericValueImpl:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    int32_t _index = (*(int32_t*)(localVarBase + __index));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, _index);\n\t\t\t\t    int32_t _eleSize = il2cpp::vm::Array::GetElementSize(_arr->klass);\n\t\t\t\t    std::memmove((*(void**)(localVarBase + __value)), GET_ARRAY_ELEMENT_ADDRESS(_arr, _index, _eleSize), _eleSize);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::ArraySetGenericValueImpl:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __arr = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __index = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __value = *(uint16_t*)(ip + 6);\n\t\t\t\t    Il2CppArray* _arr = (*(Il2CppArray**)(localVarBase + __arr));\n\t\t\t\t    int32_t _index = (*(int32_t*)(localVarBase + __index));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY(_arr, _index);\n\t\t\t\t    int32_t _eleSize = il2cpp::vm::Array::GetElementSize(_arr->klass);\n\t\t\t\t    il2cpp_array_setrefwithsize(_arr, _eleSize, _index, (*(void**)(localVarBase + __value)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewString:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __str = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __chars = *(uint16_t*)(ip + 4);\n\t\t\t\t    Il2CppArray* _chars = (*(Il2CppArray**)(localVarBase + __chars));\n\t\t\t\t    CHECK_NOT_NULL_THROW(_chars);\n\t\t\t\t    (*(Il2CppString**)(localVarBase + __str)) = il2cpp::vm::String::NewUtf16((const Il2CppChar*)il2cpp::vm::Array::GetFirstElementAddress(_chars), il2cpp::vm::Array::GetLength(_chars));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewString_2:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __str = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __chars = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __startIndex = *(uint16_t*)(ip + 6);\n\t\t\t\t\tuint16_t __length = *(uint16_t*)(ip + 8);\n\t\t\t\t    Il2CppArray* _chars = (*(Il2CppArray**)(localVarBase + __chars));\n\t\t\t\t    int32_t _startIndex = (*(uint32_t*)(localVarBase + __startIndex));\n\t\t\t\t    int32_t _length = (*(uint32_t*)(localVarBase + __length));\n\t\t\t\t    CHECK_NOT_NULL_AND_ARRAY_BOUNDARY2(_chars, _startIndex, _length);\n\t\t\t\t    (*(Il2CppString**)(localVarBase + __str)) = il2cpp::vm::String::NewUtf16(((const Il2CppChar*)il2cpp::vm::Array::GetFirstElementAddress(_chars)) + _startIndex, _length);\n\t\t\t\t    ip += 16;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::NewString_3:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __str = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __c = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __count = *(uint16_t*)(ip + 6);\n\t\t\t\t    int32_t _count = (*(int32_t*)(localVarBase + __count));\n\t\t\t\t    if (_count < 0)\n\t\t\t\t    {\n\t\t\t\t        il2cpp::vm::Exception::RaiseArgumentOutOfRangeException(\"new string(char c, int count)\");\n\t\t\t\t    }\n\t\t\t\t    Il2CppChar _c = (Il2CppChar)(*(uint16_t*)(localVarBase + __c));\n\t\t\t\t    Il2CppString* _str = (*(Il2CppString**)(localVarBase + __str)) = il2cpp::vm::String::NewSize(_count);\n\t\t\t\t    std::fill_n(_str->chars, _count, _c);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::UnsafeEnumCast:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t\tuint16_t __srcType = *(uint16_t*)(ip + 6);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) =  UnsafeEnumCast((void*)(localVarBase + __src), __srcType);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::GetEnumHashCode:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __dst = *(uint16_t*)(ip + 2);\n\t\t\t\t\tuint16_t __src = *(uint16_t*)(ip + 4);\n\t\t\t\t    (*(int32_t*)(localVarBase + __dst)) = GetEnumLongHashCode((*(void**)(localVarBase + __src)));\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::AssemblyGetExecutingAssembly:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __ret)) = (Il2CppObject*)il2cpp::vm::Reflection::GetAssemblyObject(frame->method->klass->image->assembly);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\t\t\t\tcase HiOpcodeEnum::MethodBaseGetCurrentMethod:\n\t\t\t\t{\n\t\t\t\t\tuint16_t __ret = *(uint16_t*)(ip + 2);\n\t\t\t\t    (*(Il2CppObject**)(localVarBase + __ret)) = (Il2CppObject*)il2cpp::vm::Reflection::GetMethodObject(frame->method, nullptr);\n\t\t\t\t    ip += 8;\n\t\t\t\t    continue;\n\t\t\t\t}\n\n\t\t\t\t//!!!}}INSTRINCT\n#pragma endregion\n\t\t\t\tdefault:\n\t\t\t\t\tRaiseExecutionEngineException(\"\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\tExitEvalLoop:;\n\t\t}\n\t\tcatch (Il2CppExceptionWrapper ex)\n\t\t{\n\t\t\tPREPARE_EXCEPTION(ex.ex, 0);\n\t\t\tFIND_NEXT_EX_HANDLER_OR_UNWIND();\n\t\t}\n\t\treturn;\n\tUnWindFail:\n\t\tIL2CPP_ASSERT(lastUnwindException);\n\t\tIL2CPP_ASSERT(interpFrameGroup.GetFrameCount() == 0);\n\t\til2cpp::vm::Exception::Raise(lastUnwindException);\n\t}\n\n\n}\n}\n\n"
  },
  {
    "path": "hybridclr/interpreter/MemoryUtil.h",
    "content": "#pragma once\n#include \"InterpreterDefs.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tinline void Copy1(void* dst, void* src)\n\t{\n\t\t*(uint8_t*)dst = *(uint8_t*)src;\n\t}\n\n\tinline void Copy2(void* dst, void* src)\n\t{\n\t\t*(uint16_t*)dst = *(uint16_t*)src;\n\t}\n\n\tinline void Copy4(void* dst, void* src)\n\t{\n\t\t*(uint32_t*)dst = *(uint32_t*)src;\n\t}\n\n\tinline void Copy8(void* dst, void* src)\n\t{\n\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t}\n\n\tinline void Copy12(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint32_t*)((byte*)dst + 8) = *(uint32_t*)((byte*)src + 8);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint32_t*)((byte*)dst + 8) = *(uint32_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void Copy16(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void Copy20(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint32_t*)((byte*)dst + 16) = *(uint32_t*)((byte*)src + 16);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint32_t*)((byte*)dst + 16) = *(uint32_t*)((byte*)src + 16);\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void Copy24(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void Copy28(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t\t*(uint32_t*)((byte*)dst + 24) = *(uint32_t*)((byte*)src + 24);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint32_t*)((byte*)dst + 24) = *(uint32_t*)((byte*)src + 24);\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void Copy32(void* dst, void* src)\n\t{\n\t\tif (dst <= src)\n\t\t{\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t\t*(uint64_t*)((byte*)dst + 24) = *(uint64_t*)((byte*)src + 24);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(uint64_t*)((byte*)dst + 24) = *(uint64_t*)((byte*)src + 24);\n\t\t\t*(uint64_t*)((byte*)dst + 16) = *(uint64_t*)((byte*)src + 16);\n\t\t\t*(uint64_t*)((byte*)dst + 8) = *(uint64_t*)((byte*)src + 8);\n\t\t\t*(uint64_t*)dst = *(uint64_t*)src;\n\t\t}\n\t}\n\n\tinline void CopyStackObject(StackObject* dst, void* vsrc, uint32_t count)\n\t{\n\t\tStackObject* src = (StackObject*)vsrc;\n\t\tIL2CPP_ASSERT(dst + count <= src || src + count <= dst);\n\t\tswitch (count)\n\t\t{\n\t\tcase 8: dst[7] = src[7];\n\t\tcase 7: dst[6] = src[6];\n\t\tcase 6: dst[5] = src[5];\n\t\tcase 5: dst[4] = src[4];\n\t\tcase 4: dst[3] = src[3];\n\t\tcase 3: dst[2] = src[2];\n\t\tcase 2: dst[1] = src[1];\n\t\tcase 1: *dst = *src; break;\n\t\tcase 0: break;\n\t\tdefault: std::memcpy(dst, src, count * sizeof(StackObject));\n\t\t}\n\t}\n\n\tinline void CopyBySize(void* dst, void* src, uint32_t size)\n\t{\n\t\tswitch (size)\n\t\t{\n\t\tcase 1: Copy1(dst, src); break;\n\t\tdefault: std::memmove(dst, src, size); break;\n\t\t}\n\t}\n\n\tinline void InitDefault1(void* dst)\n\t{\n\t\t*(uint8_t*)dst = 0;\n\t}\n\n\tinline void InitDefault2(void* dst)\n\t{\n\t\t*(uint16_t*)dst = 0;\n\t}\n\n\tinline void InitDefault4(void* dst)\n\t{\n\t\t*(uint32_t*)dst = 0;\n\t}\n\n\tinline void InitDefault8(void* dst)\n\t{\n\t\t*(uint64_t*)dst = 0;\n\t}\n\n\tinline void InitDefault12(void* dst)\n\t{\n\t\tint32_t* p = (int32_t*)dst;\n\t\tp[0] = 0;\n\t\tp[1] = 0;\n\t\tp[2] = 0;\n\t}\n\n\tinline void InitDefault16(void* dst)\n\t{\n\t\t*(uint64_t*)dst = 0;\n\t\t*(uint64_t*)((byte*)dst + 8) = 0;\n\t}\n\n\tinline void InitDefault20(void* dst)\n\t{\n\t\tint32_t* p = (int32_t*)dst;\n\t\tp[0] = 0;\n\t\tp[1] = 0;\n\t\tp[2] = 0;\n\t\tp[3] = 0;\n\t\tp[4] = 0;\n\t}\n\n\tinline void InitDefault24(void* dst)\n\t{\n\t\t*(uint64_t*)dst = 0;\n\t\t*(uint64_t*)((byte*)dst + 8) = 0;\n\t\t*(uint64_t*)((byte*)dst + 16) = 0;\n\t}\n\n\tinline void InitDefault28(void* dst)\n\t{\n\t\tint32_t* p = (int32_t*)dst;\n\t\tp[0] = 0;\n\t\tp[1] = 0;\n\t\tp[2] = 0;\n\t\tp[3] = 0;\n\t\tp[4] = 0;\n\t\tp[5] = 0;\n\t\tp[6] = 0;\n\t}\n\n\tinline void InitDefault32(void* dst)\n\t{\n\t\t*(uint64_t*)dst = 0;\n\t\t*(uint64_t*)((byte*)dst + 8) = 0;\n\t\t*(uint64_t*)((byte*)dst + 16) = 0;\n\t\t*(uint64_t*)((byte*)dst + 24) = 0;\n\t}\n\n\tinline void InitDefaultN(void* dst, size_t size)\n\t{\n\t\tstd::memset(dst, 0, size);\n\t}\n}\n}\n"
  },
  {
    "path": "hybridclr/interpreter/MethodBridge.cpp",
    "content": "﻿#include \"MethodBridge.h\"\n\n#include \"vm/Object.h\"\n#include \"vm/Class.h\"\n#include \"metadata/GenericMetadata.h\"\n\n#include \"../metadata/MetadataModule.h\"\n#include \"../metadata/MetadataUtil.h\"\n\n#include \"Interpreter.h\"\n#include \"InterpreterModule.h\"\n#include \"MemoryUtil.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\n\tvoid ConvertInvokeArgs(StackObject* resultArgs, const MethodInfo* method, MethodArgDesc* argDescs, void** args)\n\t{\n\t\tint32_t dstIdx = 0;\n\t\tfor (uint8_t i = 0; i < method->parameters_count; i++)\n\t\t{\n\t\t\tStackObject* dst = resultArgs + dstIdx;\n\t\t\tMethodArgDesc& argDesc = argDescs[i];\n\t\t\tif (argDesc.passbyValWhenInvoke)\n\t\t\t{\n\t\t\t\tdst->ptr = args[i];\n\t\t\t\t++dstIdx;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n#if SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS\n\t\t\t\tCopyStackObject(dst, args[i], argDesc.stackObjectSize);\n#else\n\t\t\t\tstd::memcpy(dst, args[i], argDesc.stackObjectSize * sizeof(StackObject));\n#endif\n\t\t\t\tdstIdx += argDesc.stackObjectSize;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tstatic void AppendString(char* sigBuf, size_t bufSize, size_t& pos, const char* str)\n\t{\n\t\tsize_t len = std::strlen(str);\n\t\tif (pos + len < bufSize)\n\t\t{\n\t\t\tstd::strcpy(sigBuf + pos, str);\n\t\t\tpos += len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"\");\n\t\t}\n\t}\n\n\tinline void AppendSignatureObjOrRefOrPointer(char* sigBuf, size_t bufSize, size_t& pos)\n\t{\n\t\tAppendString(sigBuf, bufSize, pos, \"u\");\n\t}\n\n\tinline void AppendSignatureInterpreterValueType(char* sigBuf, size_t bufSize, size_t& pos)\n\t{\n\t\tAppendString(sigBuf, bufSize, pos, \"$\");\n\t}\n\n\tstatic void AppendSignature(const Il2CppType* type, char* sigBuf, size_t bufferSize, size_t& pos, bool convertTypeName2SigName = true);\n\n\tstatic bool IsSystemOrUnityAssembly(const Il2CppImage* image)\n\t{\n\t\tconst char* assName = image->nameNoExt;\n\t\tif (std::strcmp(assName, \"mscorlib\") == 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (std::strncmp(assName, \"System.\", 7) == 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (std::strncmp(assName, \"UnityEngine.\", 12) == 0)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tstatic void BuildValueTypeFullName(const Il2CppClass* klass, char* sigBuf, size_t bufferSize, size_t& pos)\n\t{\n\t\tif (klass->declaringType)\n\t\t{\n\t\t\tBuildValueTypeFullName(klass->declaringType, sigBuf, bufferSize, pos);\n\t\t\tAppendString(sigBuf, bufferSize, pos, \"/\");\n\t\t\tAppendString(sigBuf, bufferSize, pos, klass->name);\n\t\t\treturn;\n\t\t}\n\t\tif (!IsSystemOrUnityAssembly(klass->image))\n\t\t{\n\t\t\tAppendString(sigBuf, bufferSize, pos, klass->image->nameNoExt);\n\t\t\tAppendString(sigBuf, bufferSize, pos, \":\");\n\t\t}\n\t\tif (klass->namespaze[0])\n\t\t{\n\t\t\tAppendString(sigBuf, bufferSize, pos, klass->namespaze);\n\t\t\tAppendString(sigBuf, bufferSize, pos, \".\");\n\t\t}\n\t\tAppendString(sigBuf, bufferSize, pos, klass->name);\n\t}\n\n\tstatic void BuildGenericValueTypeFullName(const Il2CppType* type, char* sigBuf, size_t bufferSize, size_t& pos)\n\t{\n\t\tconst Il2CppType* underlyingGenericType = type->data.generic_class->type;\n\t\tconst Il2CppClass* underlyingGenericClass = il2cpp::vm::Class::FromIl2CppType(underlyingGenericType);\n\t\tBuildValueTypeFullName(underlyingGenericClass, sigBuf, bufferSize, pos);\n\t\tAppendString(sigBuf, bufferSize, pos, \"<\");\n\t\tconst Il2CppGenericInst* classInst = type->data.generic_class->context.class_inst;\n\t\tfor (uint32_t i = 0 ; i < classInst->type_argc; ++i)\n\t\t{\n\t\t\tif (i != 0)\n\t\t\t{\n\t\t\t\tAppendString(sigBuf, bufferSize, pos, \",\");\n\t\t\t}\n\t\t\tAppendSignature(classInst->type_argv[i], sigBuf, bufferSize, pos, false);\n\t\t}\n\t\tAppendString(sigBuf, bufferSize, pos, \">\");\n\t}\n\n\tstatic void AppendSignature(const Il2CppType* type, char* sigBuf, size_t bufferSize, size_t& pos, bool convertTypeName2SigName)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\tAppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos);\n\t\t\treturn;\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VOID: AppendString(sigBuf, bufferSize, pos, \"v\"); break;\n\t\tcase IL2CPP_TYPE_BOOLEAN: AppendString(sigBuf, bufferSize, pos, \"u1\"); break;\n\t\tcase IL2CPP_TYPE_I1: AppendString(sigBuf, bufferSize, pos, \"i1\"); break;\n\t\tcase IL2CPP_TYPE_U1: AppendString(sigBuf, bufferSize, pos, \"u1\"); break;\n\t\tcase IL2CPP_TYPE_I2: AppendString(sigBuf, bufferSize, pos, \"i2\"); break;\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_CHAR: AppendString(sigBuf, bufferSize, pos, \"u2\"); break;\n\t\tcase IL2CPP_TYPE_I4: AppendString(sigBuf, bufferSize, pos, \"i4\"); break;\n\t\tcase IL2CPP_TYPE_U4: AppendString(sigBuf, bufferSize, pos, \"u4\"); break;\n\t\tcase IL2CPP_TYPE_R4: AppendString(sigBuf, bufferSize, pos, \"r4\"); break;\n\t\tcase IL2CPP_TYPE_R8: AppendString(sigBuf, bufferSize, pos, \"r8\"); break;\n\t\tcase IL2CPP_TYPE_I8: AppendString(sigBuf, bufferSize, pos, \"i8\"); break;\n\t\tcase IL2CPP_TYPE_U8: AppendString(sigBuf, bufferSize, pos, \"u8\"); break;\n\t\tcase IL2CPP_TYPE_I: AppendString(sigBuf, bufferSize, pos, \"i\"); break;\n\t\tcase IL2CPP_TYPE_U: AppendString(sigBuf, bufferSize, pos, \"u\"); break;\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t{\n\t\t\tIL2CPP_ASSERT(sizeof(Il2CppTypedRef) == sizeof(void*) * 3);\n\t\t\tAppendString(sigBuf, bufferSize, pos, \"typedbyref\");\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* typeDef = (const Il2CppTypeDefinition*)type->data.typeHandle;\n\t\t\tif (hybridclr::metadata::IsEnumType(typeDef))\n\t\t\t{\n\t\t\t\tAppendSignature(il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->elementTypeIndex), sigBuf, bufferSize, pos);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (hybridclr::metadata::IsInterpreterType(typeDef))\n\t\t\t{\n\t\t\t\tAppendSignatureInterpreterValueType(sigBuf, bufferSize, pos);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchar tempFullName[1024];\n\t\t\tsize_t fullNamePos = 0;\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tBuildValueTypeFullName(klass, tempFullName, sizeof(tempFullName) - 1, fullNamePos);\n\t\t\ttempFullName[fullNamePos] = 0;\n\t\t\tAppendString(sigBuf, bufferSize, pos, convertTypeName2SigName ? InterpreterModule::GetValueTypeSignature(tempFullName) : tempFullName);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tconst Il2CppType* underlyingGenericType = type->data.generic_class->type;\n\t\t\tif (underlyingGenericType->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tAppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst Il2CppTypeDefinition* underlyingTypeDef = (const Il2CppTypeDefinition*)underlyingGenericType->data.typeHandle;\n\t\t\tif (hybridclr::metadata::IsEnumType(underlyingTypeDef))\n\t\t\t{\n\t\t\t\tAppendSignature(il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(underlyingTypeDef->elementTypeIndex), sigBuf, bufferSize, pos);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tIL2CPP_ASSERT(underlyingGenericType->type == IL2CPP_TYPE_VALUETYPE);\n\t\t\tif (hybridclr::metadata::IsInterpreterType(underlyingTypeDef))\n\t\t\t{\n\t\t\t\tAppendSignatureInterpreterValueType(sigBuf, bufferSize, pos);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tchar tempFullName[1024];\n\t\t\tsize_t fullNamePos = 0;\n\t\t\tBuildGenericValueTypeFullName(type, tempFullName, sizeof(tempFullName) - 1, fullNamePos);\n\t\t\ttempFullName[fullNamePos] = 0;\n\t\t\tAppendString(sigBuf, bufferSize, pos, convertTypeName2SigName ? InterpreterModule::GetValueTypeSignature(tempFullName) : tempFullName);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VAR:\n\t\tcase IL2CPP_TYPE_MVAR:\n\t\t{\n\t\t\tAppendString(sigBuf, bufferSize, pos, \"!\");\n\t\t\tbreak;\n\t\t}\n\t\tdefault: AppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos); break;\n\t\t}\n\t}\n\n\tbool ComputeSignature(const Il2CppType* ret, const il2cpp::utils::dynamic_array<const Il2CppType*>& params, bool instanceCall, char* sigBuf, size_t bufferSize)\n\t{\n\t\tsize_t pos = 0;\n\t\tAppendSignature(ret, sigBuf, bufferSize, pos);\n\n\t\tif (instanceCall)\n\t\t{\n\t\t\tAppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos);\n\t\t}\n\n\t\tfor (uint32_t i = 0, paramCount = (uint32_t)params.size(); i < paramCount; i++)\n\t\t{\n\t\t\tAppendSignature(params[i], sigBuf, bufferSize, pos);\n\t\t}\n\t\tsigBuf[pos] = 0;\n\t\treturn true;\n\t}\n\n\tbool ComputeSignature(const Il2CppMethodDefinition* method, bool call, char* sigBuf, size_t bufferSize)\n\t{\n\t\tsize_t pos = 0;\n\t\tif (method->genericContainerIndex != kGenericContainerIndexInvalid)\n\t\t{\n\t\t\tAppendString(sigBuf, bufferSize, pos, \"!\");\n\t\t\treturn true;\n\t\t}\n\n\t\tconst Il2CppImage* image = hybridclr::metadata::MetadataModule::GetImage(method)->GetIl2CppImage();\n\n\t\tAppendSignature(hybridclr::metadata::MetadataModule::GetIl2CppTypeFromEncodeIndex(method->returnType), sigBuf, bufferSize, pos);\n\n\t\tif (call && metadata::IsInstanceMethod(method))\n\t\t{\n\t\t\tAppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos);\n\t\t}\n\n\t\tfor (uint16_t i = 0; i < method->parameterCount; i++)\n\t\t{\n\t\t\tTypeIndex paramTypeIndex = hybridclr::metadata::MetadataModule::GetParameterDefinitionFromIndex(image, method->parameterStart + i)->typeIndex;\n\t\t\tAppendSignature(hybridclr::metadata::MetadataModule::GetIl2CppTypeFromEncodeIndex(paramTypeIndex), sigBuf, bufferSize, pos);\n\t\t}\n\t\tsigBuf[pos] = 0;\n\t\treturn true;\n\t}\n\n\tinline bool ContainsGenericParameters(const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(method->is_inflated);\n\t\tauto& ctx = method->genericMethod->context;\n\t\tif (ctx.class_inst && il2cpp::metadata::GenericMetadata::ContainsGenericParameters(ctx.class_inst))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\tif (ctx.method_inst && il2cpp::metadata::GenericMetadata::ContainsGenericParameters(ctx.method_inst))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tbool ComputeSignature(const MethodInfo* method, bool call, char* sigBuf, size_t bufferSize)\n\t{\n\t\tsize_t pos = 0;\n\t\tif (method->is_generic || (method->is_inflated && ContainsGenericParameters(method)))\n\t\t{\n\t\t\tAppendString(sigBuf, bufferSize, pos, \"!\");\n\t\t\treturn true;\n\t\t}\n\n\t\tAppendSignature(method->return_type, sigBuf, bufferSize, pos);\n\n\t\tif (call && metadata::IsInstanceMethod(method))\n\t\t{\n\t\t\tAppendSignatureObjOrRefOrPointer(sigBuf, bufferSize, pos);\n\t\t}\n\n\t\tfor (uint8_t i = 0; i < method->parameters_count; i++)\n\t\t{\n\t\t\tAppendSignature(GET_METHOD_PARAMETER_TYPE(method->parameters[i]), sigBuf, bufferSize, pos);\n\t\t}\n\t\tsigBuf[pos] = 0;\n\t\treturn true;\n\t}\n\n}\n}\n"
  },
  {
    "path": "hybridclr/interpreter/MethodBridge.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n#include \"InterpreterDefs.h\"\n\nnamespace hybridclr\n{\nnamespace interpreter\n{\n\tunion StackObject;\n\n\ttypedef void (*Managed2NativeCallMethod)(const MethodInfo* method, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret);\n\ttypedef void (*NativeClassCtor0)(Il2CppObject* obj, const MethodInfo* method);\n\n\tstruct Managed2NativeMethodInfo\n\t{\n\t\tconst char* signature;\n\t\tManaged2NativeCallMethod method;\n\t};\n\n\tstruct Native2ManagedMethodInfo\n\t{\n\t\tconst char* signature;\n\t\tIl2CppMethodPointer method;\n\t};\n\n\tstruct NativeAdjustThunkMethodInfo\n\t{\n\t\tconst char* signature;\n\t\tIl2CppMethodPointer method;\n\t};\n\n\tstruct FullName2Signature\n\t{\n\t\tconst char* fullName;\n\t\tconst char* signature;\n\t};\n\n\textern const Managed2NativeMethodInfo g_managed2nativeStub[];\n\textern const Native2ManagedMethodInfo g_native2managedStub[];\n\textern const NativeAdjustThunkMethodInfo g_adjustThunkStub[];\n\textern const FullName2Signature g_fullName2SignatureStub[];\n\n\n\tstruct ReversePInvokeInfo\n\t{\n\t\tint32_t index;\n\t\tIl2CppMethodPointer methodPointer;\n\t\tconst MethodInfo* methodInfo;\n\t};\n\n\tstruct ReversePInvokeMethodData\n\t{\n\t\tconst char* methodSig;\n\t\tIl2CppMethodPointer methodPointer;\n\t};\n\n\textern const ReversePInvokeMethodData g_reversePInvokeMethodStub[];\n\n\ttypedef void (*PInvokeMethodPointer)(intptr_t method, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret);\n\n\tstruct PInvokeMethodData\n\t{\n\t\tconst char* methodSig;\n\t\tPInvokeMethodPointer methodPointer;\n\t};\n\textern const PInvokeMethodData g_PInvokeMethodStub[];\n\n\n\ttypedef void (*Managed2NativeFunctionPointerCallMethod)(Il2CppMethodPointer methodPointer, uint16_t* argVarIndexs, StackObject* localVarBase, void* ret);\n\tstruct Managed2NativeFunctionPointerCallData\n\t{\n\t\tconst char* methodSig;\n\t\tManaged2NativeFunctionPointerCallMethod methodPointer;\n\t};\n\textern const Managed2NativeFunctionPointerCallData g_managed2NativeFunctionPointerCallStub[];\n\t\n\tvoid ConvertInvokeArgs(StackObject* resultArgs, const MethodInfo* method, MethodArgDesc* argDescs, void** args);\n\n\tbool ComputeSignature(const MethodInfo* method, bool call, char* sigBuf, size_t bufferSize);\n\tbool ComputeSignature(const Il2CppMethodDefinition* method, bool call, char* sigBuf, size_t bufferSize);\n\tbool ComputeSignature(const Il2CppType* ret, const il2cpp::utils::dynamic_array<const Il2CppType*>& params, bool instanceCall, char* sigBuf, size_t bufferSize);\n\t\n\ttemplate<typename T> uint64_t N2MAsUint64ValueOrAddress(T& value)\n\t{\n\t\treturn sizeof(T) <= 8 ? *(uint64_t*)&value : (uint64_t)&value;\n\t}\n\n\ttemplate<typename T> T& M2NFromValueOrAddress(void* value)\n\t{\n\t\t//return sizeof(T) <= 8 ? *(T*)value : **(T**)value;\n\t\treturn *(T*)value;\n\t}\n\t\n}\n}"
  },
  {
    "path": "hybridclr/metadata/AOTHomologousImage.cpp",
    "content": "#include \"AOTHomologousImage.h\"\n\n#include \"vm/MetadataLock.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Class.h\"\n#include \"vm/Image.h\"\n#include \"vm/Exception.h\"\n#include \"vm/MetadataCache.h\"\n#include \"metadata/GenericMetadata.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstd::vector<AOTHomologousImage*> s_images;\n\n\n\tAOTHomologousImage* AOTHomologousImage::FindImageByAssembly(const Il2CppAssembly* ass)\n\t{\n\t\til2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\t\treturn FindImageByAssemblyLocked(ass, lock);\n\t}\n\n\tvoid AOTHomologousImage::RegisterLocked(AOTHomologousImage* image, il2cpp::os::FastAutoLock& lock)\n\t{\n\t\tIL2CPP_ASSERT(FindImageByAssemblyLocked(image->_targetAssembly, lock) == nullptr);\n\t\ts_images.push_back(image);\n\t}\n\n\tAOTHomologousImage* AOTHomologousImage::FindImageByAssemblyLocked(const Il2CppAssembly* ass, il2cpp::os::FastAutoLock& lock)\n\t{\n\t\tfor (AOTHomologousImage* image : s_images)\n\t\t{\n\t\t\tif (image->_targetAssembly == ass)\n\t\t\t{\n\t\t\t\treturn image;\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tLoadImageErrorCode AOTHomologousImage::Load(const byte* imageData, size_t length)\n\t{\n\t\tLoadImageErrorCode err = InitRawImage(imageData, length);\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\t\terr = _rawImage->Load(imageData, length);\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\tdelete _rawImage;\n\t\t\t_rawImage = nullptr;\n\t\t\treturn err;\n\t\t}\n\n\t\tTbAssembly data = _rawImage->ReadAssembly(1);\n\t\tconst char* assName = _rawImage->GetStringFromRawIndex(data.name);\n\t\tconst Il2CppAssembly* aotAss = GetLoadedAssembly(assName);\n\t\t// FIXME. not free memory.\n\t\tif (!aotAss)\n\t\t{\n\t\t\treturn LoadImageErrorCode::AOT_ASSEMBLY_NOT_FIND;\n\t\t}\n\t\tif (hybridclr::metadata::IsInterpreterImage(aotAss->image))\n\t\t{\n\t\t\treturn LoadImageErrorCode::HOMOLOGOUS_ONLY_SUPPORT_AOT_ASSEMBLY;\n\t\t}\n\t\t_targetAssembly = aotAss;\n\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n\tconst Il2CppType* AOTHomologousImage::GetModuleIl2CppType(uint32_t moduleRowIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound)\n\t{\n\t\tIL2CPP_ASSERT(moduleRowIndex == 1);\n\t\tconst char* typeNameStr = _rawImage->GetStringFromRawIndex(typeName);\n\t\tconst char* typeNamespaceStr = _rawImage->GetStringFromRawIndex(typeNamespace);\n\n\t\tconst Il2CppImage* aotImage = il2cpp::vm::Assembly::GetImage(_targetAssembly);\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromName(aotImage, typeNamespaceStr, typeNameStr);\n\t\tif (klass)\n\t\t{\n\t\t\treturn &klass->byval_arg;\n\t\t}\n\t\tif (!raiseExceptionIfNotFound)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\n\t\t\tCStringToStringView(typeNamespaceStr),\n\t\t\tCStringToStringView(typeNameStr),\n\t\t\tCStringToStringView(aotImage->nameNoExt)));\n\t\treturn nullptr;\n\t}\n}\n}\n\n"
  },
  {
    "path": "hybridclr/metadata/AOTHomologousImage.h",
    "content": "#pragma once\n#include \"Image.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstruct AOTFieldData\n\t{\n\t\tuint32_t typeDefIndex; // rowIndex - 1\n\t\tconst Il2CppFieldDefinition* fieldDef;\n\t};\n\n\tenum class HomologousImageMode\n\t{\n\t\tCONSISTENT,\n\t\tSUPERSET,\n\t};\n\n\tclass AOTHomologousImage : public Image\n\t{\n\tpublic:\n\n\t\tstatic AOTHomologousImage* FindImageByAssembly(const Il2CppAssembly* ass);\n\t\tstatic AOTHomologousImage* FindImageByAssemblyLocked(const Il2CppAssembly* ass, il2cpp::os::FastAutoLock& lock);\n\t\tstatic void RegisterLocked(AOTHomologousImage* image, il2cpp::os::FastAutoLock& lock);\n\n\t\tAOTHomologousImage() : _targetAssembly(nullptr) { }\n\n\t\tconst Il2CppAssembly* GetTargetAssembly() const\n\t\t{\n\t\t\treturn _targetAssembly;\n\t\t}\n\n\t\tvoid SetTargetAssembly(const Il2CppAssembly* targetAssembly)\n\t\t{\n\t\t\t_targetAssembly = targetAssembly;\n\t\t}\n\n\t\tLoadImageErrorCode Load(const byte* imageData, size_t length);\n\n\t\tconst Il2CppType* GetModuleIl2CppType(uint32_t moduleRowIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound) override;\n\tprotected:\n\t\tconst Il2CppAssembly* _targetAssembly;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Assembly.cpp",
    "content": "\n#include \"Assembly.h\"\n\n#include <cstring>\n#include <iostream>\n#include <vector>\n\n#include \"os/File.h\"\n#include \"utils/MemoryMappedFile.h\"\n#include \"vm/Assembly.h\"\n#include \"vm/Image.h\"\n#include \"vm/Class.h\"\n#include \"vm/String.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/MetadataCache.h\"\n\n#include \"Image.h\"\n#include \"MetadataModule.h\"\n#include \"MetadataUtil.h\"\n#include \"ConsistentAOTHomologousImage.h\"\n#include \"SuperSetAOTHomologousImage.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n    std::vector<Il2CppAssembly*> s_placeHolderAssembies;\n\n#if ENABLE_PLACEHOLDER_DLL == 1\n\n    static const char* CreateAssemblyNameWithoutExt(const char* assemblyName)\n    {\n        const char* extStr = std::strstr(assemblyName, \".dll\");\n        if (extStr)\n        {\n            size_t nameLen = extStr - assemblyName;\n            char* name = (char*)HYBRIDCLR_MALLOC(nameLen + 1);\n            std::strncpy(name, assemblyName, nameLen);\n            name[nameLen] = '\\0';\n            return name;\n        }\n        else\n        {\n            return CopyString(assemblyName);\n        }\n    }\n\n    static Il2CppAssembly* CreatePlaceHolderAssembly(const char* assemblyName)\n    {\n        auto ass = new (HYBRIDCLR_MALLOC_ZERO(sizeof(Il2CppAssembly))) Il2CppAssembly;\n        auto image2 = new (HYBRIDCLR_MALLOC_ZERO(sizeof(Il2CppImage))) Il2CppImage;\n        ass->image = image2;\n        ass->image->name = CopyString(assemblyName);\n        ass->image->nameNoExt = ass->aname.name = CreateAssemblyNameWithoutExt(assemblyName);\n        image2->assembly = ass;\n        s_placeHolderAssembies.push_back(ass);\n        return ass;\n    }\n\n    static Il2CppAssembly* FindPlaceHolderAssembly(const char* assemblyNameNoExt)\n    {\n        for (Il2CppAssembly* ass : s_placeHolderAssembies)\n        {\n            if (std::strcmp(ass->image->nameNoExt, assemblyNameNoExt) == 0)\n            {\n                return ass;\n            }\n        }\n        return nullptr;\n    }\n#else\n    static Il2CppAssembly* FindPlaceHolderAssembly(const char* assemblyNameNoExt)\n    {\n        return nullptr;\n    }\n#endif\n\n    void Assembly::InitializePlaceHolderAssemblies()\n    {\n        for (const char** ptrPlaceHolderName = g_placeHolderAssemblies; *ptrPlaceHolderName; ++ptrPlaceHolderName)\n        {\n            const char* nameWithExtension = ConcatNewString(*ptrPlaceHolderName, \".dll\");\n            Il2CppAssembly* placeHolderAss = CreatePlaceHolderAssembly(nameWithExtension);\n            HYBRIDCLR_FREE((void*)nameWithExtension);\n            il2cpp::vm::MetadataCache::RegisterInterpreterAssembly(placeHolderAss);\n        }\n    }\n\n    static void RunModuleInitializer(Il2CppImage* image)\n    {\n        Il2CppClass* moduleKlass = il2cpp::vm::Image::ClassFromName(image, \"\", \"<Module>\");\n        if (!moduleKlass)\n        {\n            return;\n        }\n        il2cpp::vm::Runtime::ClassInit(moduleKlass);\n    }\n\n    Il2CppAssembly* Assembly::LoadFromBytes(const void* assemblyData, uint64_t length, const void* rawSymbolStoreBytes, uint64_t rawSymbolStoreLength)\n    {\n        Il2CppAssembly* ass = Create((const byte*)assemblyData, length, (const byte*)rawSymbolStoreBytes, rawSymbolStoreLength);\n        RunModuleInitializer(ass->image);\n        return ass;\n    }\n\n    Il2CppAssembly* Assembly::Create(const byte* assemblyData, uint64_t length, const byte* rawSymbolStoreBytes, uint64_t rawSymbolStoreLength)\n    {\n        il2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\n        if (!assemblyData)\n        {\n            il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetArgumentNullException(\"rawAssembly is null\"));\n        }\n\n        uint32_t imageId = InterpreterImage::AllocImageIndex((uint32_t)length);\n        if (imageId == kInvalidImageIndex)\n        {\n            il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(\"InterpreterImage::AllocImageIndex failed\"));\n        }\n        InterpreterImage* image = new InterpreterImage(imageId);\n        \n        assemblyData = (const byte*)CopyBytes(assemblyData, length);\n        LoadImageErrorCode err = image->Load(assemblyData, (size_t)length);\n\n        if (err != LoadImageErrorCode::OK)\n        {\n            TEMP_FORMAT(errMsg, \"LoadImageErrorCode:%d\", (int)err);\n            il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetBadImageFormatException(errMsg));\n            // when load a bad image, mean a fatal error. we don't clean image on purpose.\n        }\n\n        if (rawSymbolStoreBytes)\n        {\n            rawSymbolStoreBytes = (const byte*)CopyBytes(rawSymbolStoreBytes, rawSymbolStoreLength);\n            err = image->LoadPDB(rawSymbolStoreBytes, (size_t)rawSymbolStoreLength);\n            if (err != LoadImageErrorCode::OK)\n            {\n                TEMP_FORMAT(errMsg, \"LoadPDB Error:%d\", (int)err);\n                il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetBadImageFormatException(errMsg));\n            }\n        }\n\n        TbAssembly data = image->GetRawImage().ReadAssembly(1);\n        const char* nameNoExt = image->GetStringFromRawIndex(data.name);\n\n        Il2CppAssembly* ass;\n        Il2CppImage* image2;\n        if ((ass = FindPlaceHolderAssembly(nameNoExt)) != nullptr)\n        {\n            if (ass->token)\n            {\n                RaiseExecutionEngineException(\"reloading placeholder assembly is not supported!\");\n            }\n            image2 = ass->image;\n            HYBRIDCLR_FREE((void*)ass->image->name);\n            HYBRIDCLR_FREE((void*)ass->image->nameNoExt);\n        }\n        else\n        {\n            ass = new (HYBRIDCLR_MALLOC_ZERO(sizeof(Il2CppAssembly))) Il2CppAssembly;\n            image2 = new (HYBRIDCLR_MALLOC_ZERO(sizeof(Il2CppImage))) Il2CppImage;\n        }\n\n        image->InitBasic(image2);\n        image->BuildIl2CppAssembly(ass);\n        ass->image = image2;\n\n        image->BuildIl2CppImage(image2);\n        image2->name = ConcatNewString(ass->aname.name, \".dll\");\n        image2->nameNoExt = ass->aname.name;\n        image2->assembly = ass;\n\n        image->InitRuntimeMetadatas();\n\n        il2cpp::vm::MetadataCache::RegisterInterpreterAssembly(ass);\n        return ass;\n    }\n\n    LoadImageErrorCode Assembly::LoadMetadataForAOTAssembly(const void* dllBytes, uint32_t dllSize, HomologousImageMode mode)\n    {\n        il2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\n        AOTHomologousImage* image = nullptr;\n        switch (mode)\n        {\n        case HomologousImageMode::CONSISTENT: image = new ConsistentAOTHomologousImage(); break;\n        case HomologousImageMode::SUPERSET: image = new SuperSetAOTHomologousImage(); break;\n        default: return LoadImageErrorCode::INVALID_HOMOLOGOUS_MODE;\n        }\n\n        LoadImageErrorCode err = image->Load((byte*)CopyBytes(dllBytes, dllSize), dllSize);\n        if (err != LoadImageErrorCode::OK)\n        {\n            delete image;\n            return err;\n        }\n\n        RawImageBase* rawImage = &image->GetRawImage();\n        TbAssembly data = rawImage->ReadAssembly(1);\n        const char* assName = rawImage->GetStringFromRawIndex(data.name);\n        const Il2CppAssembly* aotAss = il2cpp::vm::Assembly::GetLoadedAssembly(assName);\n        // FIXME. not free memory.\n        if (!aotAss)\n        {\n            delete image;\n            return LoadImageErrorCode::AOT_ASSEMBLY_NOT_FIND;\n        }\n        if (hybridclr::metadata::IsInterpreterImage(aotAss->image))\n        {\n            delete image;\n            return LoadImageErrorCode::HOMOLOGOUS_ONLY_SUPPORT_AOT_ASSEMBLY;\n        }\n        image->SetTargetAssembly(aotAss);\n        if (AOTHomologousImage::FindImageByAssemblyLocked(image->GetTargetAssembly(), lock))\n        {\n            return LoadImageErrorCode::HOMOLOGOUS_ASSEMBLY_HAS_BEEN_LOADED;\n        }\n        image->InitRuntimeMetadatas();\n        AOTHomologousImage::RegisterLocked(image, lock);\n        return LoadImageErrorCode::OK;\n    }\n\n\n}\n}\n\n"
  },
  {
    "path": "hybridclr/metadata/Assembly.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n\n#include \"InterpreterImage.h\"\n#include \"AOTHomologousImage.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n    class Assembly\n    {\n    public:\n        static void InitializePlaceHolderAssemblies();\n        static Il2CppAssembly* LoadFromBytes(const void* assemblyData, uint64_t length, const void* rawSymbolStoreBytes, uint64_t rawSymbolStoreLength);\n        static LoadImageErrorCode LoadMetadataForAOTAssembly(const void* dllBytes, uint32_t dllSize, HomologousImageMode mode);\n    private:\n        static Il2CppAssembly* Create(const byte* assemblyData, uint64_t length, const byte* rawSymbolStoreBytes, uint64_t rawSymbolStoreLength);\n    };\n}\n}"
  },
  {
    "path": "hybridclr/metadata/BlobReader.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n    class BlobReader\n    {\n    public:\n        BlobReader(const byte* buf, uint32_t length) : _buf(buf), _length(length), _readPos(0)\n        {\n\n        }\n\n        const byte* GetData() const\n        {\n            return _buf;\n        }\n\n        uint32_t GetLength() const\n        {\n            return _length;\n        }\n\n        uint32_t GetReadPosition() const\n        {\n            return _readPos;\n        }\n\n        const byte* GetDataOfReadPosition() const\n        {\n            return _buf + _readPos;\n        }\n\n        bool IsEmpty() const\n        {\n            return _readPos >= _length;\n        }\n\n        bool NonEmpty() const\n        {\n            return _readPos < _length;\n        }\n\n        int32_t ReadCompressedInt32()\n        {\n            uint32_t unsignedValue = ReadCompressedUint32();\n            uint32_t value = unsignedValue >> 1;\n            if (!(unsignedValue & 0x1))\n            {\n                return value;\n            }\n            if (value < 0x40)\n            {\n                return value - 0x40;\n            }\n            if (value < 0x2000)\n            {\n                return value - 0x2000;\n            }\n            if (value < 0x10000000)\n            {\n                return value - 0x10000000;\n            }\n            IL2CPP_ASSERT(value < 0x20000000);\n            return value - 0x20000000;\n        }\n\n        static uint32_t ReadCompressedUint32(const byte* buf, uint32_t& lengthSize)\n        {\n            uint32_t firstByte = buf[0];\n            if (firstByte < 128)\n            {\n                lengthSize = 1;\n                return firstByte;\n            }\n            else if (firstByte < 192)\n            {\n                lengthSize = 2;\n                return ((firstByte & 0x3f) << 8) | buf[1];\n            }\n            else if (firstByte < 224)\n            {\n                lengthSize = 4;\n                return ((firstByte & 0x1f) << 24) | (((uint32_t)buf[1]) << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3];\n            }\n            else\n            {\n                RaiseExecutionEngineException(\"bad metadata data. ReadEncodeLength fail\");\n                return 0;\n            }\n        }\n\n        uint32_t ReadCompressedUint32()\n        {\n            uint32_t lengthSize;\n            uint32_t value = ReadCompressedUint32(_buf + _readPos, lengthSize);\n            _readPos += lengthSize;\n            return value;\n        }\n\n        uint8_t ReadByte()\n        {\n            IL2CPP_ASSERT(_readPos < _length);\n            return _buf[_readPos++];\n        }\n\n        uint16_t Read16()\n        {\n            IL2CPP_ASSERT(_readPos + 2 <= _length);\n            uint16_t value = GetU2LittleEndian(_buf + _readPos);\n            _readPos += 2;\n            return value;\n        }\n\n        uint32_t Read32()\n        {\n            IL2CPP_ASSERT(_readPos + 4 <= _length);\n            uint32_t value = (uint32_t)GetI4LittleEndian(_buf + _readPos);\n            _readPos += 4;\n            return value;\n        }\n\n        bool TryRead32(uint32_t& value)\n        {\n            if (_readPos + 4 <= _length)\n            {\n                value = Read32();\n                return true;\n            }\n            return false;\n        }\n\n        uint64_t Read64()\n        {\n            IL2CPP_ASSERT(_readPos + 8 <= _length);\n            uint64_t value = (uint64_t)GetI8LittleEndian(_buf + _readPos);\n            _readPos += 8;\n            return value;\n        }\n\n        float ReadFloat()\n        {\n            uint32_t x = Read32();\n            return *(float*)&x;\n        }\n\n        double ReadDouble()\n        {\n            uint64_t x = Read64();\n            return *(double*)&x;\n        }\n\n        //template<typename T>\n        //T Read()\n        //{\n        //    IL2CPP_ASSERT(_readPos + sizeof(T) <= _length);\n        //    T value = *(T*)(_buf + _readPos);\n        //    _readPos += sizeof(T);\n        //    return value;\n        //}\n\n        uint8_t PeekByte()\n        {\n            IL2CPP_ASSERT(_readPos < _length);\n            return _buf[_readPos];\n        }\n\n        void SkipByte()\n        {\n            IL2CPP_ASSERT(_readPos < _length);\n            ++_readPos;\n        }\n\n        void SkipBytes(uint32_t len)\n        {\n            IL2CPP_ASSERT(_readPos + len <= _length);\n            const byte* data = _buf + _readPos;\n            _readPos += len;\n        }\n\n        const byte* GetAndSkipCurBytes(uint32_t len)\n        {\n            IL2CPP_ASSERT(_readPos + len <= _length);\n            const byte* data = _buf + _readPos;\n            _readPos += len;\n            return data;\n        }\n\n    private:\n        const byte* const _buf;\n        const uint32_t _length;\n        uint32_t _readPos;\n    };\n\n}\n}"
  },
  {
    "path": "hybridclr/metadata/ClassFieldLayoutCalculator.cpp",
    "content": "#include \"ClassFieldLayoutCalculator.h\"\n\n#include \"metadata/FieldLayout.h\"\n#include \"metadata/GenericMetadata.h\"\n#include \"vm/Field.h\"\n\n#include \"InterpreterImage.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n    typedef void* voidptr_t;\n#define IL2CPP_ALIGN_STRUCT(type) struct type ## AlignStruct {uint8_t pad; type t; };\n\n    IL2CPP_ALIGN_STRUCT(voidptr_t)\n        IL2CPP_ALIGN_STRUCT(int8_t)\n        IL2CPP_ALIGN_STRUCT(int16_t)\n        IL2CPP_ALIGN_STRUCT(int32_t)\n        IL2CPP_ALIGN_STRUCT(int64_t)\n        IL2CPP_ALIGN_STRUCT(intptr_t)\n        IL2CPP_ALIGN_STRUCT(float)\n        IL2CPP_ALIGN_STRUCT(double)\n\n#define IL2CPP_ALIGN_OF(type) ((int32_t)offsetof(type ## AlignStruct, t))\n\n    SizeAndAlignment ClassFieldLayoutCalculator::GetTypeSizeAndAlignment(const Il2CppType* type)\n    {\n        SizeAndAlignment sa = { };\n        if (type->byref)\n        {\n            sa.size = sa.nativeSize = sizeof(voidptr_t);\n            sa.alignment = IL2CPP_ALIGN_OF(voidptr_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        }\n\n        switch (type->type)\n        {\n        case IL2CPP_TYPE_I1:\n        case IL2CPP_TYPE_U1:\n        case IL2CPP_TYPE_BOOLEAN:\n            sa.size = sa.nativeSize = sizeof(int8_t);\n            sa.alignment = IL2CPP_ALIGN_OF(int8_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_I2:\n        case IL2CPP_TYPE_U2:\n        case IL2CPP_TYPE_CHAR:\n            sa.size = sa.nativeSize = sizeof(int16_t);\n            sa.alignment = IL2CPP_ALIGN_OF(int16_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_I4:\n        case IL2CPP_TYPE_U4:\n            sa.size = sa.nativeSize = sizeof(int32_t);\n            sa.alignment = IL2CPP_ALIGN_OF(int32_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_I8:\n        case IL2CPP_TYPE_U8:\n            sa.size = sa.nativeSize = sizeof(int64_t);\n            sa.alignment = IL2CPP_ALIGN_OF(int64_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_I:\n        case IL2CPP_TYPE_U:\n            // TODO should we use pointer or int32_t here?\n            sa.size = sa.nativeSize = sizeof(intptr_t);\n            sa.alignment = IL2CPP_ALIGN_OF(intptr_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_R4:\n            sa.size = sa.nativeSize = sizeof(float);\n            sa.alignment = IL2CPP_ALIGN_OF(float);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_R8:\n            sa.size = sa.nativeSize = sizeof(double);\n            sa.alignment = IL2CPP_ALIGN_OF(double);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_PTR:\n        case IL2CPP_TYPE_FNPTR:\n        case IL2CPP_TYPE_STRING:\n        case IL2CPP_TYPE_SZARRAY:\n        case IL2CPP_TYPE_ARRAY:\n        case IL2CPP_TYPE_CLASS:\n        case IL2CPP_TYPE_OBJECT:\n            sa.size = sa.nativeSize = sizeof(voidptr_t);\n            sa.alignment = IL2CPP_ALIGN_OF(voidptr_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_VAR:\n        case IL2CPP_TYPE_MVAR:\n            sa.size = sa.nativeSize = 1;\n            sa.alignment = 1;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = sa.alignment;\n#endif\n            return sa;\n        case IL2CPP_TYPE_VALUETYPE:\n        {\n            CalcClassNotStaticFields(type);\n            ClassLayoutInfo& classLayout = *_classMap[type];\n            sa.size = classLayout.instanceSize - sizeof(Il2CppObject);\n            sa.nativeSize = classLayout.nativeSize;\n            sa.alignment = classLayout.alignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            sa.naturalAlignment = classLayout.naturalAlignment;\n#endif\n            return sa;\n        }\n        case IL2CPP_TYPE_GENERICINST:\n        {\n            Il2CppGenericClass* gclass = type->data.generic_class;\n            //Il2CppClass* container_class = GenericClass::GetTypeDefinition(gclass);\n            const Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n            if (IsValueType(typeDef))\n            {\n                CalcClassNotStaticFields(type);\n                ClassLayoutInfo& classLayout = *_classMap[type];\n                sa.size = classLayout.instanceSize - sizeof(Il2CppObject);\n                sa.nativeSize = classLayout.nativeSize;\n                sa.alignment = classLayout.alignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n                sa.naturalAlignment = classLayout.naturalAlignment;\n#endif\n            }\n            else\n            {\n                sa.size = sa.nativeSize = sizeof(voidptr_t);\n                sa.alignment = IL2CPP_ALIGN_OF(voidptr_t);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n                sa.naturalAlignment = sa.alignment;\n#endif\n            }\n            return sa;\n        }\n        default:\n            IL2CPP_ASSERT(0);\n            break;\n        }\n        return sa;\n    }\n\n    static int32_t AlignTo(int32_t size, int32_t alignment)\n    {\n        if (size & (alignment - 1))\n        {\n            size += alignment - 1;\n            size &= ~(alignment - 1);\n        }\n\n        return size;\n    }\n\n    void ClassFieldLayoutCalculator::LayoutFields(int32_t actualParentSize, int32_t parentAlignment, uint8_t packing, std::vector<FieldLayout*>& fields, FieldLayoutData& data)\n    {\n        //data.classSize = parentSize;\n        data.actualClassSize = actualParentSize;\n        IL2CPP_ASSERT(parentAlignment <= std::numeric_limits<uint8_t>::max());\n        data.minimumAlignment = static_cast<uint8_t>(parentAlignment);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n        data.naturalAlignment = 0;\n#endif\n        data.nativeSize = 0;\n        for (FieldLayout* field : fields)\n        {\n            SizeAndAlignment sa = GetTypeSizeAndAlignment(field->type);\n            field->size = sa.size;// sa.nativeSize > 0 ? sa.nativeSize : sa.size;\n\n            // For fields, we might not want to take the actual alignment of the type - that might account for\n            // packing. When a type is used as a field, we should not care about its alignment with packing,\n            // instead let's use its natural alignment, without regard for packing. So if it's alignment\n            // is less than the compiler's minimum alignment (4 bytes), lets use the natural alignment if we have it.\n            uint8_t alignment = sa.alignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            if (alignment < 4 && sa.naturalAlignment != 0)\n                alignment = sa.naturalAlignment;\n#endif\n            if (packing != 0)\n                alignment = std::min(sa.alignment, packing);\n            int32_t offset = data.actualClassSize;\n\n            offset += alignment - 1;\n            offset &= ~(alignment - 1);\n            field->offset = offset;\n\n            data.FieldOffsets.push_back(offset);\n            data.actualClassSize = offset + std::max(sa.size, (int32_t)1);\n            data.minimumAlignment = std::max(data.minimumAlignment, alignment);\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            data.naturalAlignment = std::max({ data.naturalAlignment, sa.alignment, sa.naturalAlignment });\n#endif\n            data.nativeSize += sa.size;\n        }\n\n        data.classSize = AlignTo(data.actualClassSize, data.minimumAlignment);\n\n        // C++ ABI difference between MS and Clang\n#if IL2CPP_CXX_ABI_MSVC\n        data.actualClassSize = data.classSize;\n#endif\n    }\n\n    bool ClassFieldLayoutCalculator::IsBlittable(const Il2CppType* type)\n    {\n        if (type->byref)\n        {\n            return true;\n        }\n\n        switch (type->type)\n        {\n        case IL2CPP_TYPE_I1:\n        case IL2CPP_TYPE_U1:\n        case IL2CPP_TYPE_BOOLEAN:\n        case IL2CPP_TYPE_I2:\n        case IL2CPP_TYPE_U2:\n        case IL2CPP_TYPE_CHAR:\n        case IL2CPP_TYPE_I4:\n        case IL2CPP_TYPE_U4:\n        case IL2CPP_TYPE_I8:\n        case IL2CPP_TYPE_U8:\n        case IL2CPP_TYPE_I:\n        case IL2CPP_TYPE_U:\n        case IL2CPP_TYPE_R4:\n        case IL2CPP_TYPE_R8:\n        case IL2CPP_TYPE_PTR:\n        case IL2CPP_TYPE_FNPTR:\n            return true;\n        case IL2CPP_TYPE_STRING:\n        case IL2CPP_TYPE_SZARRAY:\n        case IL2CPP_TYPE_ARRAY:\n        case IL2CPP_TYPE_CLASS:\n        case IL2CPP_TYPE_OBJECT:\n        case IL2CPP_TYPE_VAR:\n        case IL2CPP_TYPE_MVAR:\n            return false;\n        case IL2CPP_TYPE_VALUETYPE:\n        {\n            CalcClassNotStaticFields(type);\n            ClassLayoutInfo& classLayout = *_classMap[type];\n            return classLayout.blittable;\n        }\n        case IL2CPP_TYPE_GENERICINST:\n        {\n            const Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n            if (IsValueType(typeDef))\n            {\n                CalcClassNotStaticFields(type);\n                ClassLayoutInfo& classLayout = *_classMap[type];\n                return classLayout.blittable;\n            }\n            else\n            {\n                return false;\n            }\n        }\n        default:\n            IL2CPP_ASSERT(0);\n            return false;\n        }\n    }\n\n\n    inline bool IsRawNormalStaticField(const Il2CppType* type, int32_t offset)\n    {\n        if ((type->attrs & FIELD_ATTRIBUTE_STATIC) == 0)\n            return false;\n\n        if (offset == THREAD_LOCAL_STATIC_MASK)\n            return false;\n\n        if ((type->attrs & FIELD_ATTRIBUTE_LITERAL) != 0)\n            return false;\n\n        return true;\n    }\n\n    inline bool IsRawThreadStaticField(const Il2CppType* type, int32_t offset)\n    {\n        if ((type->attrs & FIELD_ATTRIBUTE_STATIC) == 0)\n            return false;\n\n        if (offset != THREAD_LOCAL_STATIC_MASK)\n            return false;\n\n        if ((type->attrs & FIELD_ATTRIBUTE_LITERAL) != 0)\n            return false;\n\n        return true;\n    }\n\n\tvoid ClassFieldLayoutCalculator::CalcClassNotStaticFields(const Il2CppType* type)\n\t{\n\t\tauto it = _classMap.find(type);\n\t\tif (it != _classMap.end())\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tClassLayoutInfo& layout = *(_classMap[type] = new (HYBRIDCLR_MALLOC_ZERO(sizeof(ClassLayoutInfo))) ClassLayoutInfo());\n\t\tlayout.type = type;\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n        const char* typeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n\t\tstd::vector<FieldLayout>& fields = layout.fields;\n        fields.resize(typeDef->field_count, {});\n\n        bool isCurAssemblyType = DecodeImageIndex(typeDef->byvalTypeIndex) == _image->GetIndex();\n        if ((type->type == IL2CPP_TYPE_VALUETYPE || type->type == IL2CPP_TYPE_CLASS) && !isCurAssemblyType)\n        {\n            Il2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n            il2cpp::vm::Class::SetupFields(klass);\n            layout.instanceSize = klass->instance_size;\n            layout.actualSize = klass->actualSize;\n            layout.nativeSize = klass->native_size;\n            layout.alignment = klass->minimumAlignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            layout.naturalAlignment = klass->naturalAligment;\n#endif\n            layout.blittable = il2cpp::vm::Class::IsBlittable(klass);\n            return;\n        }\n\n        const Il2CppGenericContext* gc = type->type == IL2CPP_TYPE_GENERICINST ? &type->data.generic_class->context : nullptr;\n\t\tfor (uint16_t i = 0; i < typeDef->field_count; i++)\n\t\t{\n\t\t\tIl2CppFieldDefinition* fieldDef = (Il2CppFieldDefinition*)il2cpp::vm::GlobalMetadata::GetFieldDefinitionFromTypeDefAndFieldIndex(typeDef, i);\n\t\t\tconst Il2CppType* fieldType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(fieldDef->typeIndex);\n            const Il2CppType* inflatedFieldType = gc ? TryInflateIfNeed(fieldType, gc, true) : fieldType;\n            FieldLayout& fieldLayout = fields[i];\n            fieldLayout.type = inflatedFieldType;\n            if (isCurAssemblyType)\n            {\n                int32_t offset = _image->GetFieldOffset(typeDef, i);\n                fieldLayout.offset = offset;\n                fieldLayout.isNormalStatic = IsRawNormalStaticField(inflatedFieldType, offset);\n                fieldLayout.isThreadStatic = IsRawThreadStaticField(inflatedFieldType, offset);\n            }\n            else\n            {\n\n                Il2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)typeDef);\n                il2cpp::vm::Class::SetupFields(klass);\n                FieldInfo* fieldInfo = klass->fields + i;\n                fieldLayout.offset = fieldInfo->offset;\n                fieldLayout.isNormalStatic = il2cpp::vm::Field::IsNormalStatic(fieldInfo);\n                fieldLayout.isThreadStatic = il2cpp::vm::Field::IsThreadStatic(fieldInfo);\n            } \n\t\t}\n\n        if (il2cpp::metadata::GenericMetadata::ContainsGenericParameters(type)\n            || ((type->type == IL2CPP_TYPE_VALUETYPE || type->type == IL2CPP_TYPE_CLASS) && typeDef->genericContainerIndex != kGenericContainerIndexInvalid))\n        {\n            layout.instanceSize = 0;\n            layout.actualSize = 0;\n            layout.nativeSize = -1;\n            layout.alignment = 1;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            layout.naturalAlignment = 1;\n#endif\n            layout.blittable = false;\n            return;\n        }\n\n\n        TbClassLayout classLayoutData = _image->GetClassLayout(typeDef);\n        uint8_t packingSize = (uint8_t)classLayoutData.packingSize;\n        int32_t classSize = (int32_t)(classLayoutData.classSize + sizeof(Il2CppObject));\n\n\n        std::vector<FieldLayout*> instanceFields;\n        bool blittable = true;\n        for (FieldLayout& field : fields)\n        {\n            if (IsInstanceField(field.type))\n            {\n                instanceFields.push_back(&field);\n\t\t\t\tblittable &= IsBlittable(field.type);\n            }\n        }\n\t\tlayout.blittable = blittable;\n\n\t\t// If the type is not blittable, ignore packingSize\n        if (!blittable)\n        {\n            packingSize = 0;\n        }\n\t\t// packingSize is ignored for auto layout types\n        if (!(typeDef->flags & (TYPE_ATTRIBUTE_SEQUENTIAL_LAYOUT | TYPE_ATTRIBUTE_EXPLICIT_LAYOUT)))\n        {\n            packingSize = 0;\n        }\n\n        if (typeDef->flags & TYPE_ATTRIBUTE_EXPLICIT_LAYOUT)\n        {\n            IL2CPP_ASSERT(IsValueType(typeDef));\n            IL2CPP_ASSERT(isCurAssemblyType);\n            int32_t instanceSize = IL2CPP_SIZEOF_STRUCT_WITH_NO_INSTANCE_FIELDS + sizeof(Il2CppObject);\n            if (classLayoutData.classSize > 0)\n\t\t\t{\n                instanceSize = std::max(instanceSize, (int32_t)classLayoutData.classSize + (int32_t)sizeof(Il2CppObject));\n\t\t\t}\n            int32_t maxAlignment = 1;\n            int32_t nativeSize = 1;\n            for (FieldLayout* field : instanceFields)\n            {\n                SizeAndAlignment sa = GetTypeSizeAndAlignment(field->type);\n\t\t\t\tbool fieldBlittable = IsBlittable(field->type);\n                if (!fieldBlittable && field->offset % PTR_SIZE != 0)\n                {\n                    TEMP_FORMAT(errMsg, \"Type %s is not blittable and has an invalid layout\", typeName);\n\t\t\t\t\tRaiseExecutionEngineException(errMsg);\n                }\n                instanceSize = std::max(instanceSize, field->offset + (int32_t)sa.size);\n\n                // compute size of alignment field\n\t\t\t\tuint8_t actualAlignment = packingSize != 0 ? std::min(packingSize, sa.alignment) : sa.alignment;\n\t\t\t\tinstanceSize = std::max(instanceSize, AlignTo(field->offset, actualAlignment) + (int32_t)sa.size);\n\n                maxAlignment = std::max(maxAlignment, (int32_t)sa.alignment);\n                if (packingSize != 0)\n                {\n\t\t\t\t\tmaxAlignment = std::min(maxAlignment, (int32_t)packingSize);\n\t\t\t\t}\n                nativeSize = AlignTo(std::max(nativeSize, field->offset + sa.nativeSize - (int32_t)sizeof(Il2CppObject)), maxAlignment);\n            }\n            layout.alignment = maxAlignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            // in unity 2021- version, il2cpp force alignment to 1 for explicit layout\n            //layout.alignment = 1;\n            //IL2CPP_ASSERT(blittable || layout.alignment == PTR_SIZE);\n            layout.naturalAlignment = !blittable ? PTR_SIZE : layout.alignment;\n#endif\n            layout.actualSize = layout.instanceSize = AlignTo(instanceSize, layout.alignment);\n            layout.nativeSize = nativeSize;\n            if (classLayoutData.classSize > 0)\n            {\n                layout.actualSize = std::max(layout.actualSize, classSize);\n                layout.instanceSize = std::max(layout.instanceSize, classSize);\n                layout.nativeSize = std::max((int32_t)classLayoutData.classSize, layout.nativeSize);\n            }\n        }\n        else\n        {\n            uint8_t parentMinimumAligment;\n            int32_t parentActualSize = 0;\n            bool isValueType = IsValueType(typeDef);\n            if (typeDef->parentIndex != kInvalidIndex)\n            {\n                if (isValueType)\n                {\n                    parentMinimumAligment = 1;\n                    parentActualSize = sizeof(Il2CppObject);\n                }\n                else\n                {\n                    const Il2CppType* parentType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->parentIndex);\n                    parentType = TryInflateIfNeed(parentType, gc, true);\n                    CalcClassNotStaticFields(parentType);\n                    ClassLayoutInfo* parentLayout = GetClassLayoutInfo(parentType);\n                    parentActualSize = parentLayout->actualSize;\n                    parentMinimumAligment = parentLayout->alignment;\n                }\n            }\n            else\n            {\n                parentActualSize = sizeof(Il2CppObject);\n                parentMinimumAligment = PTR_SIZE;\n            }\n\n            FieldLayoutData layoutData;\n            LayoutFields(parentActualSize, parentMinimumAligment, packingSize, instanceFields, layoutData);\n            if (instanceFields.empty() && isValueType)\n            {\n                layoutData.classSize = layoutData.actualClassSize = IL2CPP_SIZEOF_STRUCT_WITH_NO_INSTANCE_FIELDS + sizeof(Il2CppObject);\n                layoutData.nativeSize = IL2CPP_SIZEOF_STRUCT_WITH_NO_INSTANCE_FIELDS;\n            }\n            layout.alignment = layoutData.minimumAlignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n            //layout.naturalAlignment = layoutData.naturalAlignment;\n            layout.naturalAlignment = blittable ? layout.alignment : PTR_SIZE;\n#endif\n            layout.actualSize = layoutData.actualClassSize;\n            layout.instanceSize = layoutData.classSize;\n            layout.nativeSize = AlignTo(layoutData.nativeSize, layout.alignment);\n\n            if (!isValueType)\n            {\n                layout.nativeSize = -1;\n            }\n            if (classLayoutData.classSize > 0)\n            {\n                layout.actualSize = std::max(layout.actualSize, classSize);\n                layout.instanceSize = std::max(layout.instanceSize, classSize);\n                layout.nativeSize = isValueType ? std::max((int32_t)classLayoutData.classSize, layout.nativeSize) : -1;\n            }\n        }\n\t}\n\n\tvoid ClassFieldLayoutCalculator::CalcClassStaticFields(const Il2CppType* type)\n\t{\n        IL2CPP_ASSERT(_classMap.find(type) != _classMap.end());\n        ClassLayoutInfo& layout = *_classMap[type];\n\n        std::vector<FieldLayout*> staticFields;\n        std::vector<FieldLayout*> threadStaticFields;\n\n        for (FieldLayout& field : layout.fields)\n        {\n            if (field.isNormalStatic)\n            {\n                staticFields.push_back(&field);\n            }\n            else if (field.isThreadStatic)\n            {\n                threadStaticFields.push_back(&field);\n            }\n        }\n        if (!staticFields.empty())\n        {\n            FieldLayoutData staticLayoutData;\n            LayoutFields(0, 1, 0, staticFields, staticLayoutData);\n            layout.staticFieldsSize = staticLayoutData.classSize;\n        }\n        if (!threadStaticFields.empty())\n        {\n            FieldLayoutData threadStaticLayoutData;\n            LayoutFields(0, 1, 0, threadStaticFields, threadStaticLayoutData);\n            layout.threadStaticFieldsSize = threadStaticLayoutData.classSize;\n            for (FieldLayout* field : threadStaticFields)\n            {\n                field->offset = field->offset | THREAD_LOCAL_STATIC_MASK;\n            }\n        }\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/ClassFieldLayoutCalculator.h",
    "content": "#pragma once\n\n#include <vector>\n\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tstruct FieldLayout\n\t{\n\t\tconst Il2CppType* type;\n\t\tint32_t offset;\n\t\tint32_t size;\n\t\tbool isNormalStatic;\n\t\tbool isThreadStatic;\n\t};\n\n\tstruct ClassLayoutInfo\n\t{\n\t\tconst Il2CppType* type;\n\t\tstd::vector<FieldLayout> fields;\n\t\tint32_t instanceSize;\n\t\tint32_t actualSize;\n\t\tint32_t nativeSize;\n\t\tuint32_t staticFieldsSize;\n\t\tuint32_t threadStaticFieldsSize;\n\t\tuint8_t alignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\tuint8_t naturalAlignment;\n#endif\n\t\tbool blittable;\n\t};\n\n\tstruct SizeAndAlignment\n\t{\n\t\tint32_t size;\n\t\tint32_t nativeSize;\n\t\tuint8_t alignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\tuint8_t naturalAlignment;\n#endif\n\t};\n\n\tstruct FieldLayoutData\n\t{\n\t\tstd::vector<size_t> FieldOffsets;\n\t\tint32_t classSize;\n\t\tint32_t actualClassSize;\n\t\tint32_t nativeSize;\n\t\t\n\t\tuint8_t minimumAlignment;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\tuint8_t naturalAlignment;\n#endif\n\t};\n\n\tclass InterpreterImage;\n\n\ttypedef Il2CppHashMap<const Il2CppType*, ClassLayoutInfo*, il2cpp::metadata::Il2CppTypeHash, il2cpp::metadata::Il2CppTypeEqualityComparer> Il2CppType2ClassLayoutInfoMap;\n\n\tclass ClassFieldLayoutCalculator\n\t{\n\tprivate:\n\t\tInterpreterImage* _image;\n\t\tIl2CppType2ClassLayoutInfoMap _classMap;\n\n\tpublic:\n\t\tClassFieldLayoutCalculator(InterpreterImage* image) : _image(image)\n\t\t{\n\n\t\t}\n\n\t\t~ClassFieldLayoutCalculator()\n\t\t{\n\t\t\tfor (auto it : _classMap)\n\t\t\t{\n\t\t\t\tClassLayoutInfo* info = it.second;\n\t\t\t\tinfo->~ClassLayoutInfo();\n\t\t\t\tHYBRIDCLR_FREE(info);\n\t\t\t}\n\t\t}\n\n\t\tClassLayoutInfo* GetClassLayoutInfo(const Il2CppType* type)\n\t\t{\n\t\t\tauto it = _classMap.find(type);\n\t\t\treturn it != _classMap.end() ? it->second : nullptr;\n\t\t}\n\n\t\tvoid CalcClassNotStaticFields(const Il2CppType* type);\n\t\tvoid CalcClassStaticFields(const Il2CppType* type);\n\n\t\tvoid LayoutFields(int32_t actualParentSize, int32_t parentAlignment, uint8_t packing, std::vector<FieldLayout*>& fields, FieldLayoutData& data);\n\t\tSizeAndAlignment GetTypeSizeAndAlignment(const Il2CppType* type);\n\t\tbool IsBlittable(const Il2CppType* type);\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Coff.h",
    "content": "#pragma once\n#include \"../CommonDef.h\"\n\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n    struct PEHeader\n    {\n        uint16_t matchine;\n        uint16_t sections;\n        uint32_t timestamp;\n        uint32_t ptrSymbolTable;\n        uint32_t numSymbols;\n        uint16_t optionalHeadersize;\n        uint16_t characteristics;\n    };\n\n    struct PEDirEntry\n    {\n        uint32_t rva;\n        uint32_t size;\n    };\n\n    struct CLIHeader\n    {\n        uint32_t cb;\n        uint16_t majorRuntimeVersion;\n        uint16_t minorRuntimeVersion;\n        PEDirEntry metaData;\n        uint32_t flags;\n        uint32_t entryPointToken;\n        PEDirEntry resources;\n        uint64_t strongNameSignature;\n        uint64_t codeManagerTable;\n        uint64_t vTableFixups;\n        uint64_t exportAddressTableJumps;\n        uint64_t managedNativeHeader;\n    };\n\n\n    struct PESectionHeader\n    {\n        char name[8];\n        uint32_t virtualSize;\n        uint32_t virtualAddress;\n        uint32_t sizeOfRawData;\n        uint32_t ptrRawData;\n        uint32_t ptrRelocations;\n        uint32_t ptrLineNumbers;\n        uint16_t numRelocation;\n        uint16_t numLineNumber;\n        uint32_t characteristics;\n    };\n\n    struct MetadataRootPartial\n    {\n        uint32_t signature;\n        uint16_t majorVersion;\n        uint16_t minorVersion;\n        uint32_t reserved;\n        uint32_t length;\n        byte    versionFirstByte;\n    };\n\n    struct StreamHeader\n    {\n        uint32_t offset;\n        uint32_t size;\n        char name[1];\n    };\n\n    struct TableStreamHeader\n    {\n        uint32_t reserved;\n        uint8_t majorVersion;\n        uint8_t minorVersion;\n        uint8_t heapSizes;\n        uint8_t reserved2;\n        uint64_t valid;\n        uint64_t sorted;\n        uint32_t rows[1];\n        // tables;\n    };\n\n    struct CliStream\n    {\n        const char* name;\n        const byte* data;\n        uint32_t size;\n    };\n\n    struct UserString\n    {\n        const char* data;\n        uint32_t size;\n        uint8_t flags;\n    };\n\n    struct Blob\n    {\n        const byte* data;\n        uint32_t size;\n    };\n\n    struct Table\n    {\n        const byte* data;\n        uint32_t rowMetaDataSize;\n        uint32_t rowNum;\n        bool vaild;\n        bool sorted;\n    };\n}\n}\n"
  },
  {
    "path": "hybridclr/metadata/ConsistentAOTHomologousImage.cpp",
    "content": "#include \"ConsistentAOTHomologousImage.h\"\n\n#include \"vm/MetadataLock.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Class.h\"\n#include \"vm/Image.h\"\n#include \"vm/Exception.h\"\n#include \"vm/MetadataCache.h\"\n#include \"metadata/GenericMetadata.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tvoid ConsistentAOTHomologousImage::InitRuntimeMetadatas()\n\t{\n\t\tInitTypes();\n\t\tInitMethods();\n\t\tInitFields();\n\t}\n\n\tvoid ConsistentAOTHomologousImage::InitTypes()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\tuint32_t typeCount = typeDefTb.rowNum;\n\t\t_il2cppTypeForTypeDefs.resize(typeCount);\n\t\t_typeDefs.resize(typeCount);\n\n\t\tIl2CppImage* image = _targetAssembly->image;\n\t\t//if (image->typeCount != typeCount)\n\t\t//{\n\t\t//\tRaiseExecutionEngineException(\"image metadata not match\");\n\t\t//}\n\t\tfor (uint32_t index = 0; index < image->typeCount; index++)\n\t\t{\n\t\t\tIl2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)il2cpp::vm::MetadataCache::GetAssemblyTypeHandle(image, index);\n\t\t\tuint32_t rowIndex = DecodeTokenRowIndex(typeDef->token);\n\t\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\t\tif (rowIndex > typeCount)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tTbTypeDef data = _rawImage->ReadTypeDef(rowIndex);\n\t\t\tuint32_t typeIndex = rowIndex - 1;\n\t\t\t_typeDefs[typeIndex] = typeDef;\n\t\t\tconst Il2CppType* il2cppType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->byvalTypeIndex);\n\t\t\t_il2cppTypeForTypeDefs[typeIndex] = il2cppType;\n\n\t\t\tconst char* name1 = _rawImage->GetStringFromRawIndex(data.typeName);\n\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n\t\t\tif (std::strcmp(name1, name2))\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"metadata type not match\");\n\t\t\t}\n\t\t\tconst char* namespaze1 = _rawImage->GetStringFromRawIndex(data.typeNamespace);\n\t\t\tconst char* namespaze2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->namespaceIndex);\n\t\t\tif (std::strcmp(namespaze1, namespaze2))\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"metadata type not match\");\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid ConsistentAOTHomologousImage::InitMethods()\n\t{\n\t\tconst Table& methodTb = _rawImage->GetTable(TableType::METHOD);\n\t\t_methodDefs.resize(methodTb.rowNum);\n\n\t\tfor (Il2CppTypeDefinition* type : _typeDefs)\n\t\t{\n\t\t\tfor (uint16_t i = 0; i < type->method_count; i++)\n\t\t\t{\n\t\t\t\tconst Il2CppMethodDefinition* methodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromIndex(type->methodStart + i);\n\t\t\t\tuint32_t rowIndex = DecodeTokenRowIndex(methodDef->token);\n\t\t\t\tIL2CPP_ASSERT(rowIndex > 0 && rowIndex <= methodTb.rowNum);\n\t\t\t\tuint32_t methodIndex = rowIndex - 1;\n\t\t\t\tIL2CPP_ASSERT(_methodDefs[methodIndex] == nullptr);\n\t\t\t\t_methodDefs[methodIndex] = methodDef;\n\n\t\t\t\tTbMethod methodData = _rawImage->ReadMethod(rowIndex);\n\t\t\t\tconst char* name1 = _rawImage->GetStringFromRawIndex(methodData.name);\n\t\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex);\n\t\t\t\tif (std::strcmp(name1, name2))\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"metadata method not match\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid ConsistentAOTHomologousImage::InitFields()\n\t{\n\t\tconst Table& fieldTb = _rawImage->GetTable(TableType::FIELD);\n\t\t_fields.resize(fieldTb.rowNum);\n\n\t\tfor (size_t i = 0; i < _typeDefs.size(); i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition* type = _typeDefs[i];\n\t\t\tfor (uint16_t j = 0; j < type->field_count; j++)\n\t\t\t{\n\t\t\t\tconst Il2CppFieldDefinition* fieldDef = il2cpp::vm::GlobalMetadata::GetFieldDefinitionFromTypeDefAndFieldIndex(type, j);\n\t\t\t\tuint32_t rowIndex = DecodeTokenRowIndex(fieldDef->token);\n\t\t\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\t\t\tuint32_t fieldIndex = rowIndex - 1;\n\t\t\t\tIL2CPP_ASSERT(_fields[fieldIndex].fieldDef == nullptr);\n\t\t\t\tif (rowIndex >= fieldTb.rowNum)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t_fields[fieldIndex] = { (uint32_t)i, fieldDef };\n\n\t\t\t\tTbField fieldData = _rawImage->ReadField(rowIndex);\n\t\t\t\tconst char* name1 = _rawImage->GetStringFromRawIndex(fieldData.name);\n\t\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(fieldDef->nameIndex);\n\t\t\t\tif (std::strcmp(name1, name2))\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"metadata field not match\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tMethodBody* ConsistentAOTHomologousImage::GetMethodBody(uint32_t token)\n\t{\n\t\tuint32_t rowIndex = DecodeTokenRowIndex(token);\n\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\tTbMethod methodData = _rawImage->ReadMethod(rowIndex);\n\t\tMethodBody* body = new (HYBRIDCLR_MALLOC_ZERO(sizeof(MethodBody))) MethodBody();\n\t\tReadMethodBody(*_methodDefs[rowIndex - 1], methodData, *body);\n\t\treturn body;\n\t}\n\n\tconst Il2CppType* ConsistentAOTHomologousImage::GetIl2CppTypeFromRawTypeDefIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT((size_t)index < _il2cppTypeForTypeDefs.size());\n\t\treturn _il2cppTypeForTypeDefs[index];\n\t}\n\n\tIl2CppGenericContainer* ConsistentAOTHomologousImage::GetGenericContainerByRawIndex(uint32_t index)\n\t{\n\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(index);\n\t}\n\n\tIl2CppGenericContainer* ConsistentAOTHomologousImage::GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex)\n\t{\n\t\tIl2CppTypeDefinition* type = (Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromIndex(typeDefIndex);\n\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(type->genericContainerIndex);\n\t}\n\n\tconst Il2CppMethodDefinition* ConsistentAOTHomologousImage::GetMethodDefinitionFromRawIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT((size_t)index < _methodDefs.size());\n\t\treturn _methodDefs[index];\n\t}\n\n\tvoid ConsistentAOTHomologousImage::ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret)\n\t{\n\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\tAOTFieldData& fd = _fields[rowIndex - 1];\n\t\tret.containerType = _il2cppTypeForTypeDefs[fd.typeDefIndex];\n\t\tret.field = fd.fieldDef;\n\t}\n}\n}\n\n"
  },
  {
    "path": "hybridclr/metadata/ConsistentAOTHomologousImage.h",
    "content": "#pragma once\n\n#include \"AOTHomologousImage.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tclass ConsistentAOTHomologousImage : public AOTHomologousImage\n\t{\n\tpublic:\n\t\tConsistentAOTHomologousImage() : AOTHomologousImage() {}\n\n\t\tvoid InitRuntimeMetadatas() override;\n\n\t\tvoid InitTypes();\n\t\tvoid InitMethods();\n\t\tvoid InitFields();\n\n\t\tMethodBody* GetMethodBody(uint32_t token) override;\n\t\tconst Il2CppType* GetIl2CppTypeFromRawTypeDefIndex(uint32_t index) override;\n\t\tIl2CppGenericContainer* GetGenericContainerByRawIndex(uint32_t index) override;\n\t\tIl2CppGenericContainer* GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex) override;\n\t\tconst Il2CppMethodDefinition* GetMethodDefinitionFromRawIndex(uint32_t index) override;\n\t\tvoid ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret) override;\n\tprivate:\n\t\tstd::vector<const Il2CppType*> _il2cppTypeForTypeDefs;\n\t\tstd::vector<Il2CppTypeDefinition*> _typeDefs;\n\n\t\tstd::vector< const Il2CppMethodDefinition*> _methodDefs;\n\n\t\tstd::vector<AOTFieldData> _fields;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/CustomAttributeDataWriter.h",
    "content": "#pragma once\n\n#include \"BlobReader.h\"\n\n#include \"../CommonDef.h\"\n\n#include \"utils/MemoryRead.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tclass CustomAttributeDataWriter\n\t{\n\tprivate:\n\t\tuint8_t* _data;\n\t\tuint32_t _capacity;\n\t\tuint32_t _size;\n\n\tpublic:\n\t\tCustomAttributeDataWriter(uint32_t capacity) : _capacity(Round2Exp(capacity)), _size(0)\n\t\t{\n\t\t\t_data = (uint8_t*)HYBRIDCLR_MALLOC_ZERO(_capacity);\n\t\t}\n\n\t\t~CustomAttributeDataWriter()\n\t\t{\n\t\t\tHYBRIDCLR_FREE(_data);\n\t\t\t_data = nullptr;\n\t\t}\n\n\t\tuint32_t Size() const { return _size; }\n\n\t\tbool Empty() const { return _size == 0; }\n\n\t\tconst uint8_t* Data() const { return _data; }\n\n\t\tconst uint8_t* DataAt(uint32_t offset) { return _data + offset; }\n\n\t\tvoid Reset()\n\t\t{\n\t\t\t_size = 0;\n\t\t}\n\n\t\tvoid WriteAttributeCount(uint32_t count)\n\t\t{\n\t\t\tWriteCompressedUint32(count);\n\t\t}\n\n\t\tvoid Skip(int32_t skipBytes)\n\t\t{\n\t\t\tSureRemainSize(skipBytes);\n\t\t\t_size += skipBytes;\n\t\t}\n\n\t\tvoid WriteMethodIndex(int32_t offset, int32_t methodIndex)\n\t\t{\n\t\t\t*(int32_t*)(_data + offset) = methodIndex;\n\t\t}\n\n\t\tvoid WriteByte(uint8_t n)\n\t\t{\n\t\t\tSureRemainSize(1);\n\t\t\t_data[_size++] = n;\n\t\t}\n\n\t\tvoid WriteCompressedUint32(uint32_t n)\n\t\t{\n\t\t\tSureRemainSize(5);\n\t\t\tuint8_t* buf = _data + _size;\n\t\t\tif (n < 0x80)\n\t\t\t{\n\t\t\t\tbuf[0] = (uint8_t)n;\n\t\t\t\t++_size;\n\t\t\t}\n\t\t\telse if (n < 0x4000)\n\t\t\t{\n\t\t\t\tuint32_t v = n | 0x8000;\n\t\t\t\tbuf[0] = uint8_t(v >> 8);\n\t\t\t\tbuf[1] = uint8_t(v);\n\t\t\t\t_size += 2;\n\t\t\t}\n\t\t\telse if (n < 0x20000000)\n\t\t\t{\n\t\t\t\tuint32_t v = n | 0xC0000000;\n\t\t\t\tbuf[0] = uint8_t(v >> 24);\n\t\t\t\tbuf[1] = uint8_t(v >> 16);\n\t\t\t\tbuf[2] = uint8_t(v >> 8);\n\t\t\t\tbuf[3] = uint8_t(v);\n\t\t\t\t_size += 4;\n\t\t\t}\n\t\t\telse if (n < UINT32_MAX - 1)\n\t\t\t{\n\t\t\t\tbuf[0] = 0xF0;\n\t\t\t\tbuf[1] = uint8_t(n);\n\t\t\t\tbuf[2] = uint8_t(n >> 8);\n\t\t\t\tbuf[3] = uint8_t(n >> 16);\n\t\t\t\tbuf[4] = uint8_t(n >> 24);\n\t\t\t\t_size += 5;\n\t\t\t}\n\t\t\telse if (n == UINT32_MAX - 1)\n\t\t\t{\n\t\t\t\tbuf[0] = 0xFE;\n\t\t\t\t++_size;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tbuf[0] = 0xFF;\n\t\t\t\t++_size;\n\t\t\t}\n\t\t}\n\n\t\tvoid WriteUint32(uint32_t n)\n\t\t{\n\t\t\tWriteData(n);\n\t\t}\n\n\t\tvoid WriteCompressedInt32(int32_t n)\n\t\t{\n\t\t\tuint32_t v = n >= 0 ? (n << 1) : (((-(n + 1)) << 1) | 0x1U);\n\t\t\tWriteCompressedUint32(v);\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tvoid WriteData(T x)\n\t\t{\n\t\t\tint32_t n = sizeof(T);\n\t\t\tSureRemainSize(n);\n\t\t\tstd::memcpy(_data + _size, &x, n);\n\t\t\t_size += n;\n\t\t}\n\n\t\tvoid WriteBytes(const uint8_t* data, uint32_t len)\n\t\t{\n\t\t\tSureRemainSize(len);\n\t\t\tstd::memcpy(_data + _size, data, len);\n\t\t\t_size += len;\n\t\t}\n\n\t\tvoid Write(const CustomAttributeDataWriter& writer)\n\t\t{\n\t\t\tSureRemainSize(writer._size);\n\t\t\tstd::memcpy(_data + _size, writer._data, writer._size);\n\t\t\t_size += writer._size;\n\t\t}\n\n\t\tvoid Write(BlobReader& reader, int32_t count)\n\t\t{\n\t\t\tSureRemainSize(count);\n\t\t\tstd::memcpy(_data + _size, reader.GetDataOfReadPosition(), count);\n\t\t\t_size += count;\n\t\t\treader.SkipBytes(count);\n\t\t}\n\n\t\tvoid PopByte()\n\t\t{\n\t\t\tIL2CPP_ASSERT(_size > 0);\n\t\t\t--_size;\n\t\t}\n\n\t\tvoid ReplaceLastByte(byte x)\n\t\t{\n\t\t\tIL2CPP_ASSERT(_size > 0);\n\t\t\t_data[_size - 1] = x;\n\t\t}\n\n\tprivate:\n\t\tuint32_t Round2Exp(uint32_t n)\n\t\t{\n\t\t\tuint32_t s = 64;\n\t\t\tfor (uint32_t s = 64; ; s *= 2)\n\t\t\t{\n\t\t\t\tif (s >= n)\n\t\t\t\t{\n\t\t\t\t\treturn s;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn n;\n\t\t}\n\n\t\tvoid SureRemainSize(uint32_t remainSize)\n\t\t{\n\t\t\tuint32_t newSize = _size + remainSize;\n\t\t\tif (newSize > _capacity)\n\t\t\t{\n\t\t\t\tResize(newSize);\n\t\t\t}\n\t\t}\n\n\t\tvoid Resize(uint32_t newSize)\n\t\t{\n\t\t\t_capacity = newSize = Round2Exp(newSize);\n\t\t\tuint8_t* oldData = _data;\n\t\t\t_data = (uint8_t*)HYBRIDCLR_MALLOC(newSize);\n\t\t\tstd::memcpy(_data, oldData, _size);\n\t\t\tHYBRIDCLR_FREE(oldData);\n\t\t}\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Image.cpp",
    "content": "#include \"Image.h\"\n\n#include \"vm/ClassInlines.h\"\n#include \"vm/Image.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Type.h\"\n#include \"vm/Field.h\"\n#include \"vm/Object.h\"\n#include \"vm/Runtime.h\"\n#include \"vm/Array.h\"\n#include \"vm/Reflection.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/String.h\"\n#include \"metadata/GenericMetadata.h\"\n#include \"icalls/mscorlib/System.Reflection/FieldInfo.h\"\n#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n#include \"icalls/mscorlib/System/RuntimeTypeHandle.h\"\n#else\n#include \"icalls/mscorlib/System.Reflection/PropertyInfo.h\"\n#endif\n#include \"icalls/mscorlib/System/Type.h\"\n#include \"utils/StringUtils.h\"\n\n#include \"MetadataUtil.h\"\n#include \"BlobReader.h\"\n#include \"MetadataPool.h\"\n\n//!!!{{INCLUDE_RAW_IMAGE_HEADERS\n\n\n//!!!}}INCLUDE_RAW_IMAGE_HEADERS\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n    LoadImageErrorCode Image::InitRawImage(const void* imageData, size_t length)\n    {\n        //!!!{{INIT_RAW_IMAGE\n\t\t_rawImage = new RawImage();\n\t\treturn LoadImageErrorCode::OK;\n\n        //!!!}}INIT_RAW_IMAGE\n    }\n\n    static const char* s_netstandardRefs[]\n    {\n        \"mscorlib\",\n        \"System\",\n        \"System.Core\",\n        \"System.Numerics\",\n        \"System.Collections\",\n        \"System.Collections.Concurrent\",\n        \"System.Numerics.Vectors\",\n        \"System.Data\",\n        \"System.Configuration\",\n        \"System.IO.Compression\",\n        \"System.Net\",\n        \"System.Security\",\n        \"System.Xml\",\n        \"System.Xml.Linq\",\n        \"System.Xml.Serialization\",\n        \"System.Runtime.Serialization\",\n        \"System.Json\",\n        \"System.Diagnostics.Tracing\",\n        \"System.Net.Http\",\n        nullptr,\n    };\n\n    bool Image::IsValueTypeFromToken(TableType tableType, uint32_t rowIndex)\n    {\n        switch (tableType)\n        {\n        case TableType::TYPEREF:\n        {\n            TbTypeRef r = _rawImage->ReadTypeRef(rowIndex);\n            const char* typeNamespace = _rawImage->GetStringFromRawIndex(r.typeNamespace);\n            if (std::strcmp(typeNamespace, \"System\"))\n            {\n                return false;\n            }\n            const char* typeName = _rawImage->GetStringFromRawIndex(r.typeName);\n            return std::strcmp(typeName, \"ValueType\") == 0 || std::strcmp(typeName, \"Enum\") == 0;\n        }\n        default:\n        {\n            return false;\n        }\n        }\n    }\n\n    bool Image::IsThreadStaticCtorToken(TableType tableType, uint32_t rowIndex)\n    {\n        if (tableType != TableType::MEMBERREF)\n        {\n            return false;\n        }\n        TbMemberRef data = _rawImage->ReadMemberRef(rowIndex);\n        TableType parentTableType = DecodeMemberRefParentType(data.classIdx);\n        if (parentTableType != TableType::TYPEREF)\n        {\n            return false;\n        }\n        const Il2CppType* type = ReadTypeFromTypeRef(DecodeMemberRefParentRowIndex(data.classIdx));\n        const Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n        const char* strNamespace = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->namespaceIndex);\n        if (std::strcmp(strNamespace, \"System\"))\n        {\n            return false;\n        }\n        const char* strName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n        return std::strcmp(strName, \"ThreadStaticAttribute\") == 0;\n    }\n\n    void Image::ReadMemberRefParentFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, ResolveMemberRefParent& ret)\n    {\n        ret.parentType = tableType;\n        switch (tableType)\n        {\n        case hybridclr::metadata::TableType::TYPEREF:\n            ret.type = ReadTypeFromTypeRef(rowIndex);\n            break;\n        case hybridclr::metadata::TableType::TYPEDEF:\n            ret.type = ReadTypeFromTypeDef(rowIndex);\n            break;\n        case hybridclr::metadata::TableType::METHOD:\n            RaiseNotSupportedException(\"ReadMemberRefParentFromToken. from METHOD\");\n            break;\n        case hybridclr::metadata::TableType::MODULEREF:\n            RaiseNotSupportedException(\"ReadMemberRefParentFromToken. from MODULEREF\");\n            break;\n        case hybridclr::metadata::TableType::TYPESPEC:\n            ret.type = ReadTypeFromTypeSpec(klassGenericContainer, methodGenericContainer, rowIndex);\n            break;\n        default:\n        {\n            RaiseExecutionEngineException(\"ReadMemberRefParentFromToken. invalid table type\");\n            break;\n        }\n        }\n    }\n\n#pragma region type\n\n    const Il2CppType* Image::ReadArrayType(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer)\n    {\n        Il2CppType* arrType = MetadataMallocT<Il2CppType>();;\n        arrType->type = IL2CPP_TYPE_ARRAY;\n        Il2CppArrayType& type = *MetadataMallocT<Il2CppArrayType>();\n        arrType->data.array = &type;\n\n        const Il2CppType* eleType = ReadType(reader, klassGenericContainer, methodGenericContainer);\n        type.etype = eleType;\n        type.rank = reader.ReadCompressedUint32();\n        type.numsizes = reader.ReadCompressedUint32();\n        if (type.numsizes > 0)\n        {\n            type.sizes = (int*)HYBRIDCLR_CALLOC(type.numsizes, sizeof(int));\n            for (uint8_t i = 0; i < type.numsizes; i++)\n            {\n                type.sizes[i] = reader.ReadCompressedUint32();\n            }\n        }\n        else\n        {\n            type.sizes = nullptr;\n        }\n        type.numlobounds = reader.ReadCompressedUint32();\n        if (type.numlobounds > 0)\n        {\n            type.lobounds = (int*)HYBRIDCLR_CALLOC(type.numlobounds, sizeof(int));\n            for (uint8_t i = 0; i < type.numlobounds; i++)\n            {\n                type.lobounds[i] = reader.ReadCompressedInt32();\n            }\n        }\n        else\n        {\n            type.lobounds = nullptr;\n        }\n        return arrType;\n    }\n\n    const Il2CppGenericClass* Image::ReadGenericClass(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer)\n    {\n        const Il2CppType* genericBase = ReadType(reader, klassGenericContainer, methodGenericContainer);\n        IL2CPP_ASSERT(genericBase->type == IL2CPP_TYPE_CLASS || genericBase->type == IL2CPP_TYPE_VALUETYPE);\n\n        uint32_t argc = reader.ReadCompressedUint32();\n        IL2CPP_ASSERT(argc > 0 && argc <= 32);\n        const Il2CppType* types[32];\n        //const Il2CppType** types = (const Il2CppType**)alloca(argc * sizeof(const Il2CppType*));\n        for (uint32_t i = 0; i < argc; i++)\n        {\n            types[i] = ReadType(reader, klassGenericContainer, methodGenericContainer);\n        }\n        const Il2CppGenericInst* genericInst = il2cpp::vm::MetadataCache::GetGenericInst(types, argc);\n\n        return il2cpp::metadata::GenericMetadata::GetGenericClass(genericBase, genericInst);\n    }\n\n    const Il2CppType* Image::ReadType(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer)\n    {\n        Il2CppType type = {};\n        const Il2CppType* underlyingType = nullptr;\n    readAgain:\n        Il2CppTypeEnum etype = (Il2CppTypeEnum)reader.ReadByte();\n        type.type = etype;\n        switch (etype)\n        {\n        case IL2CPP_TYPE_VOID:\n            break;\n        case IL2CPP_TYPE_BOOLEAN:\n        case IL2CPP_TYPE_CHAR:\n        case IL2CPP_TYPE_I1:\n        case IL2CPP_TYPE_U1:\n        case IL2CPP_TYPE_I2:\n        case IL2CPP_TYPE_U2:\n        case IL2CPP_TYPE_I4:\n        case IL2CPP_TYPE_U4:\n        case IL2CPP_TYPE_I8:\n        case IL2CPP_TYPE_U8:\n        case IL2CPP_TYPE_R4:\n        case IL2CPP_TYPE_R8:\n        case IL2CPP_TYPE_TYPEDBYREF:\n        case IL2CPP_TYPE_I:\n        case IL2CPP_TYPE_U:\n        {\n            SET_IL2CPPTYPE_VALUE_TYPE(type, 1);\n            break;\n        }\n        case IL2CPP_TYPE_STRING:\n        {\n            break;\n        }\n        case IL2CPP_TYPE_PTR:\n        {\n            //SET_IL2CPPTYPE_VALUE_TYPE(type, 1);\n            type.data.type = ReadType(reader, klassGenericContainer, methodGenericContainer);\n            //SET_IL2CPPTYPE_VALUE_TYPE(type, 1);\n            break;\n        }\n        case IL2CPP_TYPE_BYREF:\n        {\n            //const Il2CppType* underlyingType = ReadType(reader, klassGenericContainer, methodGenericContainer);\n            //type = *underlyingType;\n            type.byref = 1;\n            goto readAgain;\n        }\n        case IL2CPP_TYPE_VALUETYPE:\n        case IL2CPP_TYPE_CLASS:\n        {\n            uint32_t codedIndex = reader.ReadCompressedUint32(); // 低2位为type, 高位为index\n            underlyingType = ReadTypeFromToken(klassGenericContainer, methodGenericContainer, DecodeTypeDefOrRefOrSpecCodedIndexTableType(codedIndex), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(codedIndex));\n            break;\n        }\n        case IL2CPP_TYPE_ARRAY:\n        {\n            underlyingType = ReadArrayType(reader, klassGenericContainer, methodGenericContainer);\n            break;\n        }\n        case IL2CPP_TYPE_GENERICINST:\n        {\n            const Il2CppGenericClass* genericClass = ReadGenericClass(reader, klassGenericContainer, methodGenericContainer);\n            type.data.generic_class = const_cast<Il2CppGenericClass*>(genericClass);\n            COPY_IL2CPPTYPE_VALUE_TYPE_FLAG(type, *genericClass->type);\n            break;\n        }\n        case IL2CPP_TYPE_FNPTR:\n        {\n            // il2cpp doesn't support FNPTR. il2cpp treats IL2CPP_TYPE_FNPTR as IL2CPP_TYPE_I.\n            // so we handle it as IL2CPP_TYPE_I.\n            // \n            //MethodRefSig* method = new (HYBRIDCLR_MALLOC(sizeof(MethodRefSig))) MethodRefSig();\n            //ReadMethodRefSig(reader, *method);\n            //type.data.method = method;\n            type.type = IL2CPP_TYPE_I;\n            MethodRefSig method = {};\n            ReadMethodRefSig(reader, method);\n            break;\n        }\n        case IL2CPP_TYPE_OBJECT:\n        {\n            break;\n        }\n        case IL2CPP_TYPE_SZARRAY:\n        {\n            type.data.type = ReadType(reader, klassGenericContainer, methodGenericContainer);\n            break;\n        }\n        case IL2CPP_TYPE_VAR:\n        {\n            IL2CPP_ASSERT(!klassGenericContainer || !klassGenericContainer->is_method);\n            uint32_t number = reader.ReadCompressedUint32();\n            if (klassGenericContainer)\n            {\n                //IL2CPP_ASSERT(hybridclr::metadata::IsInterpreterIndex(klassGenericContainer->ownerIndex));\n                type.data.genericParameterHandle = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex((Il2CppMetadataGenericContainerHandle)klassGenericContainer, number);\n            }\n            else\n            {\n                type.data.__genericParameterIndex = number;\n            }\n            /*Il2CppGenericParameter* gp = (Il2CppGenericParameter*)type.data.genericParameterHandle;\n            IL2CPP_ASSERT(hybridclr::metadata::IsInterpreterIndex(gp->ownerIndex));*/\n            break;\n        }\n        case IL2CPP_TYPE_MVAR:\n        {\n            IL2CPP_ASSERT(!methodGenericContainer || methodGenericContainer->is_method);\n            uint32_t number = reader.ReadCompressedUint32();\n            if (methodGenericContainer)\n            {\n                type.data.genericParameterHandle = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex((Il2CppMetadataGenericContainerHandle)methodGenericContainer, number);\n            }\n            else\n            {\n                // method ref can't resolve at that time\n                type.data.__genericParameterIndex = number;\n            }\n            break;\n        }\n        case IL2CPP_TYPE_CMOD_REQD:\n        {\n            ++type.num_mods;\n            uint32_t encodeToken = reader.ReadCompressedUint32();\n            const Il2CppType* modType = ReadTypeFromToken(nullptr, nullptr, DecodeTypeDefOrRefOrSpecCodedIndexTableType(encodeToken), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(encodeToken));\n            if (modType->type != IL2CPP_TYPE_CLASS && modType->type != IL2CPP_TYPE_VALUETYPE)\n            {\n                goto readAgain;\n            }\n            IL2CPP_ASSERT(modType->data.typeHandle);\n            const Il2CppTypeDefinition* modTypeDef = (const Il2CppTypeDefinition*)modType->data.typeHandle;\n            const char* modTypeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(modTypeDef->nameIndex);\n            const char* modTypeNamespace = il2cpp::vm::GlobalMetadata::GetStringFromIndex(modTypeDef->namespaceIndex);\n            if (std::strcmp(modTypeNamespace, \"System.Runtime.InteropServices\") == 0)\n            {\n                if (std::strcmp(modTypeName, \"InAttribute\") == 0)\n                {\n                    type.attrs |= PARAM_ATTRIBUTE_IN;\n                }\n                else if (std::strcmp(modTypeName, \"OutAttribute\") == 0)\n                {\n                    type.attrs |= PARAM_ATTRIBUTE_OUT;\n                }\n                else if (std::strcmp(modTypeName, \"OptionalAttribute\") == 0)\n                {\n                    type.attrs |= PARAM_ATTRIBUTE_OPTIONAL;\n                }\n            }\n            goto readAgain;\n        }\n        case IL2CPP_TYPE_CMOD_OPT:\n        {\n            ++type.num_mods;\n            uint32_t encodeToken = reader.ReadCompressedUint32();\n            goto readAgain;\n        }\n        case IL2CPP_TYPE_INTERNAL:\n        {\n            RaiseNotSupportedException(\"Image::ReadType IL2CPP_TYPE_INTERNAL\");\n            break;\n        }\n        case IL2CPP_TYPE_MODIFIER:\n        {\n            RaiseNotSupportedException(\"Image::ReadType IL2CPP_TYPE_MODIFIER\");\n            break;\n        }\n        case IL2CPP_TYPE_SENTINEL:\n        {\n            break;\n        }\n        case IL2CPP_TYPE_PINNED:\n        {\n            type.pinned = true;\n            goto readAgain;\n        }\n        default:\n        {\n            RaiseBadImageException(\"Image::ReadType invalid type\");\n            break;\n        }\n        }\n        if (underlyingType)\n        {\n            type.type = underlyingType->type;\n            type.data = underlyingType->data;\n            COPY_IL2CPPTYPE_VALUE_TYPE_FLAG(type, *underlyingType);\n        }\n        if (type.byref)\n        {\n            SET_IL2CPPTYPE_VALUE_TYPE(type, 0);\n        }\n        return MetadataPool::GetPooledIl2CppType(type);\n    }\n\n    const Il2CppType* Image::ReadTypeFromResolutionScope(uint32_t scope, uint32_t typeNamespace, uint32_t typeName)\n    {\n        TableType tokenType;\n        uint32_t rawIndex;\n        DecodeResolutionScopeCodedIndex(scope, tokenType, rawIndex);\n        switch (tokenType)\n        {\n        case TableType::MODULE:\n        {\n            return GetModuleIl2CppType(rawIndex, typeNamespace, typeName, true);\n        }\n        case TableType::MODULEREF:\n        {\n            RaiseNotSupportedException(\"Image::ReadTypeFromResolutionScope not support ResolutionScore.MODULEREF\");\n            break;\n        }\n        case TableType::ASSEMBLYREF:\n        {\n            TbAssemblyRef assRef = _rawImage->ReadAssemblyRef(rawIndex);\n            return GetIl2CppType(rawIndex, typeNamespace, typeName, true);\n        }\n        case TableType::TYPEREF:\n        {\n            const Il2CppType* enClosingType = ReadTypeFromTypeRef(rawIndex);\n            IL2CPP_ASSERT(typeNamespace == 0);\n            const char* name = _rawImage->GetStringFromRawIndex(typeName);\n\n            void* iter = nullptr;\n            Il2CppMetadataTypeHandle enclosingTypeDef = enClosingType->data.typeHandle;\n            if (!enclosingTypeDef)\n            {\n                TEMP_FORMAT(errMsg, \"Image::ReadTypeFromResolutionScope ReadTypeFromResolutionScope.TYPEREF enclosingType:%s\", name);\n                RaiseExecutionEngineException(errMsg);\n            }\n            for (const Il2CppTypeDefinition* nextTypeDef; (nextTypeDef = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetNestedTypes(enclosingTypeDef, &iter));)\n            {\n                const char* nestedTypeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(nextTypeDef->nameIndex);\n                IL2CPP_ASSERT(nestedTypeName);\n                if (!std::strcmp(name, nestedTypeName))\n                {\n                    return GetIl2CppTypeFromTypeDefinition(nextTypeDef);\n                }\n            }\n\n            std::string enclosingTypeName = GetKlassCStringFullName(enClosingType);\n            TEMP_FORMAT(errMsg, \"Image::ReadTypeFromResolutionScope ReadTypeFromResolutionScope.TYPEREF fail. type:%s.%s\", enclosingTypeName.c_str(), name);\n            RaiseExecutionEngineException(errMsg);\n            break;\n        }\n        default:\n        {\n            RaiseBadImageException(\"Image::ReadTypeFromResolutionScope invaild TableType\");\n            break;\n        }\n        }\n        return nullptr;\n    }\n\n    const Il2CppType* Image::ReadTypeFromTypeDef(uint32_t rowIndex)\n    {\n        return GetIl2CppTypeFromRawTypeDefIndex(rowIndex - 1);\n    }\n\n    const Il2CppType* Image::ReadTypeFromTypeRef(uint32_t rowIndex)\n    {\n        TbTypeRef r = _rawImage->ReadTypeRef(rowIndex);\n        return ReadTypeFromResolutionScope(r.resolutionScope, r.typeNamespace, r.typeName);\n    }\n\n    const Il2CppType* Image::ReadTypeFromTypeSpec(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex)\n    {\n        TbTypeSpec r = _rawImage->ReadTypeSpec(rowIndex);\n        BlobReader reader = _rawImage->GetBlobReaderByRawIndex(r.signature);\n        return ReadType(reader, klassGenericContainer, methodGenericContainer);\n    }\n\n    const Il2CppType* Image::ReadTypeFromMemberRefParent(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex)\n    {\n        ResolveMemberRefParent mrp = {};\n        ReadMemberRefParentFromToken(klassGenericContainer, methodGenericContainer, tableType, rowIndex, mrp);\n        IL2CPP_ASSERT(mrp.parentType == TableType::TYPEDEF || mrp.parentType == TableType::TYPEREF || mrp.parentType == TableType::TYPESPEC);\n        return mrp.type;\n    }\n\n    const Il2CppType* Image::ReadTypeFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex)\n    {\n        switch (tableType)\n        {\n        case TableType::TYPEDEF:\n        {\n            return ReadTypeFromTypeDef(rowIndex);\n        }\n        case TableType::TYPEREF:\n        {\n            return ReadTypeFromTypeRef(rowIndex);\n        }\n        case TableType::TYPESPEC:\n        {\n            return ReadTypeFromTypeSpec(klassGenericContainer, methodGenericContainer, rowIndex);\n        }\n        default:\n        {\n            RaiseBadImageException(\"Image::ReadTypeFromToken invalid TableType\");\n            return nullptr;\n        }\n        }\n    }\n\n#pragma endregion\n\n    void Image::ReadFieldRefSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, FieldRefSig& field)\n    {\n        field = {};\n        uint8_t rawSigType = reader.ReadByte();\n        SigType sigType = DecodeSigType(rawSigType);\n        IL2CPP_ASSERT(sigType == SigType::FIELD);\n        field.type = ReadType(reader, klassGenericContainer, nullptr);\n    }\n\n    void Image::ReadMethodRefSig(BlobReader& reader, MethodRefSig& method)\n    {\n        method = {};\n        uint8_t rawSigFlags = reader.ReadByte();\n        method.flags = rawSigFlags;\n        if (rawSigFlags & (uint8_t)SigType::GENERIC)\n        {\n            method.genericParamCount = reader.ReadCompressedUint32();\n        }\n        uint32_t paramCount = reader.ReadCompressedUint32();\n\n        method.returnType = ReadType(reader, nullptr, nullptr);\n\n        bool sentinel = false;\n        for (uint32_t readParamNum = 0; readParamNum < paramCount; ++readParamNum)\n        {\n            const Il2CppType* paramType = ReadType(reader, nullptr, nullptr);\n            if (paramType->type == IL2CPP_TYPE_SENTINEL)\n            {\n                IL2CPP_ASSERT(rawSigFlags & (uint8_t)SigType::VARARG);\n                sentinel = true;\n                continue;\n            }\n            method.params.push_back(paramType);\n        }\n    }\n\n    void Image::ReadMemberRefSig(const Il2CppGenericContainer* klassGenericContainer, TbMemberRef& data, ResolveMemberRefSig& signature)\n    {\n        BlobReader reader = _rawImage->GetBlobReaderByRawIndex(data.signature);\n        uint8_t rawSigFlags = reader.PeekByte();\n        SigType sigType = DecodeSigType(rawSigFlags);\n        if (sigType == SigType::FIELD)\n        {\n            signature.memberType = TableType::FIELDPTR;\n            ReadFieldRefSig(reader, klassGenericContainer, signature.field);\n        }\n        else\n        {\n            signature.memberType = TableType::METHODPTR;\n            ReadMethodRefSig(reader, signature.method);\n        }\n    }\n\n\n    void Image::ReadMethodRefInfoFromToken(const Il2CppGenericContainer* klassGenericContainer,\n        const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, MethodRefInfo& ret)\n    {\n        IL2CPP_ASSERT(rowIndex > 0);\n        switch (tableType)\n        {\n        case TableType::METHOD:\n        {\n            const Il2CppMethodDefinition* methodDef = GetMethodDefinitionFromRawIndex(rowIndex - 1);\n            const Il2CppTypeDefinition* typeDef = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromIndex(methodDef->declaringType);\n            const Il2CppType* type = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->byvalTypeIndex);\n            ret.containerType = type;\n            ret.methodDef = methodDef;\n            IL2CPP_ASSERT(type);\n            IL2CPP_ASSERT(methodDef);\n            break;\n        }\n        case TableType::MEMBERREF:\n        {\n            ReadMethodRefInfoFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, ret);\n            break;\n        }\n        case TableType::METHODSPEC:\n        {\n            TbMethodSpec methodSpec = _rawImage->ReadMethodSpec(rowIndex);\n\n            ret.instantiation = ReadMethodSpecInstantiation(methodSpec.instantiation, klassGenericContainer, methodGenericContainer);\n            TableType methodTableType = DecodeMethodDefOrRefCodedIndexTableType(methodSpec.method);\n            uint32_t methodRowIndex = DecodeMethodDefOrRefCodedIndexRowIndex(methodSpec.method);\n            switch (methodTableType)\n            {\n            case TableType::METHOD:\n            {\n                ReadMethodRefInfoFromToken(klassGenericContainer, methodGenericContainer, methodTableType, methodRowIndex, ret);\n                break;\n            }\n            case TableType::MEMBERREF:\n            {\n                ReadMethodRefInfoFromMemberRef(klassGenericContainer, methodGenericContainer, methodRowIndex, ret);\n                break;\n            }\n            default:\n            {\n                RaiseBadImageException(\"Image::ReadMethodRefInfoFromToken METHODSPEC invalid TableType\");\n                break;\n            }\n            }\n            break;\n        }\n        default:\n        {\n            RaiseBadImageException(\"Image::ReadMethodRefInfoFromToken invalid TableType\");\n        }\n        }\n    }\n\n    void Image::ReadResolveMemberRefFromMemberRef(const Il2CppGenericContainer* klassGenericContainer,\n        const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, ResolveMemberRef& ret)\n    {\n        TbMemberRef data = _rawImage->ReadMemberRef(rowIndex);\n        ret.name = _rawImage->GetStringFromRawIndex(data.name);\n        ReadMemberRefParentFromToken(klassGenericContainer, methodGenericContainer, DecodeMemberRefParentType(data.classIdx), DecodeMemberRefParentRowIndex(data.classIdx), ret.parent);\n        IL2CPP_ASSERT(ret.parent.parentType == TableType::TYPEDEF || ret.parent.parentType == TableType::TYPEREF || ret.parent.parentType == TableType::TYPESPEC);\n        ReadMemberRefSig(nullptr, data, ret.signature);\n    }\n\n    void Image::ReadMethodRefInfoFromMemberRef(const Il2CppGenericContainer* klassGenericContainer,\n        const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, MethodRefInfo& ret)\n    {\n        ResolveMemberRef rmr = {};\n        ReadResolveMemberRefFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, rmr);\n        IL2CPP_ASSERT(rmr.parent.parentType == TableType::TYPEDEF || rmr.parent.parentType == TableType::TYPEREF || rmr.parent.parentType == TableType::TYPESPEC);\n        IL2CPP_ASSERT(rmr.signature.memberType == TableType::METHODPTR);\n        ret.containerType = rmr.parent.type;\n        ret.methodDef = ResolveMethodDefinition(rmr.parent.type, rmr.name, rmr.signature.method);\n    }\n\n    const Il2CppGenericInst* Image::ReadMethodSpecInstantiation(uint32_t signature, const Il2CppGenericContainer* klassGenericContainer,\n        const Il2CppGenericContainer* methodGenericContainer)\n    {\n        BlobReader reader = _rawImage->GetBlobReaderByRawIndex(signature);\n        uint8_t rawSigFlags = reader.ReadByte();\n        IL2CPP_ASSERT(rawSigFlags == 0xA);\n        uint32_t argCount = reader.ReadCompressedUint32();\n        IL2CPP_ASSERT(argCount >= 0 && argCount < 100);\n        if (argCount == 0)\n        {\n            return nullptr;\n        }\n\n        IL2CPP_ASSERT(argCount > 0 && argCount <= 32);\n        const Il2CppType* types[32];\n\n        //genericInstantiation = (Il2CppGenericInst*)il2cpp::vm::MetadataMalloc(sizeof(Il2CppGenericInst));\n        //genericInstantiation->type_argc = argCount;\n        //genericInstantiation->type_argv = (const Il2CppType**)il2cpp::vm::MetadataCalloc(argCount, sizeof(Il2CppType*));\n        for (uint32_t i = 0; i < argCount; i++)\n        {\n            const Il2CppType* type = ReadType(reader, klassGenericContainer, methodGenericContainer);\n            types[i] = type;\n        }\n        return il2cpp::vm::MetadataCache::GetGenericInst(types, argCount);\n    }\n\n    void Image::ReadFieldRefInfoFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, FieldRefInfo& ret)\n    {\n        ResolveMemberRef rmr = {};\n        ReadResolveMemberRefFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, rmr);\n        IL2CPP_ASSERT(rmr.parent.parentType == TableType::TYPEDEF || rmr.parent.parentType == TableType::TYPEREF || rmr.parent.parentType == TableType::TYPESPEC);\n        IL2CPP_ASSERT(rmr.signature.memberType == TableType::FIELDPTR);\n        ret.containerType = rmr.parent.type;\n        ResolveFieldThrow(rmr.parent.type, rmr.name, rmr.signature.field.type, ret.field);\n    }\n\n    void Image::ReadLocalVarSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, il2cpp::utils::dynamic_array<const Il2CppType*>& vars)\n    {\n        uint8_t sig = reader.ReadByte();\n        IL2CPP_ASSERT(sig == 0x7);\n        uint32_t varCount = reader.ReadCompressedUint32();\n        IL2CPP_ASSERT(varCount >= 1 && varCount <= 0xFFFE);\n        vars.resize_uninitialized(varCount);\n        for (uint32_t i = 0; i < varCount; i++)\n        {\n            vars[i] = ReadType(reader, klassGenericContainer, methodGenericContainer);\n        }\n    }\n\n    void Image::ReadStandAloneSig(uint32_t signatureIdx, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, ResolveStandAloneMethodSig& methodSig)\n    {\n        BlobReader reader = _rawImage->GetBlobReaderByRawIndex(signatureIdx);\n        uint8_t sig = reader.ReadByte();\n        methodSig.flags = sig;\n        uint32_t paramCount = reader.ReadCompressedUint32();\n        if (paramCount > 0xFFFE)\n        {\n            RaiseBadImageException(\"ReadStandAloneSig exceed max param count\");\n        }\n        methodSig.returnType = ReadType(reader, klassGenericContainer, methodGenericContainer);\n        if (paramCount > 0)\n        {\n            for (uint32_t i = 0; i < paramCount; i++)\n            {\n                methodSig.params.push_back(ReadType(reader, klassGenericContainer, methodGenericContainer));\n            }\n        }\n        if (reader.NonEmpty())\n        {\n            RaiseNotSupportedException(\"ReadStandAloneSig don't support sentinel params\");\n        }\n    }\n\n    Il2CppClass* Image::FindNetStandardExportedType(const char* namespaceStr, const char* nameStr)\n    {\n        for (const char** ptrAssName = s_netstandardRefs; *ptrAssName; ptrAssName++)\n        {\n            const Il2CppAssembly* refAss = GetLoadedAssembly(*ptrAssName);\n            if (refAss)\n            {\n                const Il2CppImage* image2 = il2cpp::vm::Assembly::GetImage(refAss);\n                Il2CppClass* klass = il2cpp::vm::Class::FromName(image2, namespaceStr, nameStr);\n                if (klass)\n                {\n                    return klass;\n                }\n            }\n        }\n        return nullptr;\n    }\n\n    const Il2CppType* Image::GetIl2CppType(uint32_t assemblyRefIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound)\n    {\n        TbAssemblyRef data = _rawImage->ReadAssemblyRef(assemblyRefIndex);\n        const char* assName = _rawImage->GetStringFromRawIndex(data.name);\n        const char* typeNameStr = _rawImage->GetStringFromRawIndex(typeName);\n        const char* typeNamespaceStr = _rawImage->GetStringFromRawIndex(typeNamespace);\n        const Il2CppAssembly* refAss = GetLoadedAssembly(assName);\n        Il2CppClass* klass = nullptr;\n        if (refAss)\n        {\n            const Il2CppImage* image2 = il2cpp::vm::Assembly::GetImage(refAss);\n            klass = il2cpp::vm::Class::FromName(image2, typeNamespaceStr, typeNameStr);\n        }\n        else if (!refAss && std::strcmp(assName, \"netstandard\") == 0)\n        {\n            klass = FindNetStandardExportedType(typeNamespaceStr, typeNameStr);\n        }\n        if (!klass)\n        {\n            if (!raiseExceptionIfNotFound)\n            {\n                return nullptr;\n            }\n            il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\n                CStringToStringView(typeNamespaceStr),\n                CStringToStringView(typeNameStr),\n                CStringToStringView(assName)));\n        }\n        return &klass->byval_arg;\n    }\n\n    void Image::ReadMethodBody(const Il2CppMethodDefinition& methodDef, const TbMethod& methodData, MethodBody& body)\n    {\n        uint32_t bodyRVA = methodData.rva;\n        if (bodyRVA > 0)\n        {\n            uint32_t methodImageOffset = 0;\n            bool ret = _rawImage->TranslateRVAToImageOffset(bodyRVA, methodImageOffset);\n            IL2CPP_ASSERT(ret);\n            const byte* bodyStart = _rawImage->GetDataPtrByImageOffset(methodImageOffset);\n            byte bodyFlags = *bodyStart;\n            byte smallFatFlags = bodyFlags & 0x3;\n\n            if (smallFatFlags == (uint8_t)CorILMethodFormat::Tiny)\n            {\n                body.flags = (uint32_t)(bodyFlags & 0x3);\n                body.ilcodes = bodyStart + 1;\n                body.codeSize = (uint8_t)bodyFlags >> 2;\n                body.maxStack = 8;\n            }\n            else\n            {\n                IL2CPP_ASSERT(smallFatFlags == (uint8_t)CorILMethodFormat::Fat);\n                const CorILMethodFatHeader* methodHeader = (const CorILMethodFatHeader*)GetAlignBorder<4>(bodyStart);\n                IL2CPP_ASSERT(methodHeader->size == 3);\n                body.flags = methodHeader->flags;\n                body.ilcodes = bodyStart + methodHeader->size * 4;\n                body.codeSize = methodHeader->codeSize;\n                body.maxStack = methodHeader->maxStack;\n\n                if (methodHeader->localVarSigToken)\n                {\n                    TbStandAloneSig sigData = _rawImage->ReadStandAloneSig(DecodeTokenRowIndex(methodHeader->localVarSigToken));\n\n                    BlobReader reader = _rawImage->GetBlobReaderByRawIndex(sigData.signature);\n                    ReadLocalVarSig(reader,\n                        GetGenericContainerByTypeDefRawIndex(DecodeMetadataIndex(methodDef.declaringType)),\n                        GetGenericContainerByRawIndex(DecodeMetadataIndex(methodDef.genericContainerIndex)),\n                        body.localVars);\n                }\n            }\n            if (body.flags & (uint8_t)CorILMethodFormat::MoreSects)\n            {\n                const byte* nextSection = (const byte*)GetAlignBorder<4>(body.ilcodes + body.codeSize);\n                while (true)\n                {\n                    byte kind = *nextSection;\n                    if (!(kind & (byte)CorILSecion::EHTable))\n                    {\n                        IL2CPP_ASSERT(false && \"not support kind\");\n                        break;\n                    }\n                    if (kind & (byte)CorILSecion::FatFormat)\n                    {\n                        CorILEHSectionHeaderFat* ehSec = (CorILEHSectionHeaderFat*)nextSection;\n                        uint32_t dataSize = (uint32_t)ehSec->dataSize0 | ((uint32_t)ehSec->dataSize1 << 8) | ((uint32_t)ehSec->dataSize2 << 16);\n                        IL2CPP_ASSERT(dataSize % 24 == 4);\n                        uint32_t ehCount = (dataSize - 4) / 24;\n                        body.exceptionClauses.reserve(ehCount);\n                        for (uint32_t i = 0; i < ehCount; i++)\n                        {\n                            CorILEHFat& eh = ehSec->clauses[i];\n                            IL2CPP_ASSERT(eh.flags >= (uint32_t)CorILExceptionClauseType::Exception && eh.flags <= (uint32_t)CorILExceptionClauseType::Fault);\n                            body.exceptionClauses.push_back({\n                                (CorILExceptionClauseType)eh.flags,\n                                eh.tryOffset,\n                                eh.tryLength,\n                                eh.handlerOffset,\n                                eh.handlerLength,\n                                eh.classTokenOrFilterOffset });\n                        }\n                        nextSection += dataSize;\n                    }\n                    else\n                    {\n                        CorILEHSectionHeaderSmall* ehSec = (CorILEHSectionHeaderSmall*)nextSection;\n                        IL2CPP_ASSERT(ehSec->dataSize % 12 == 4);\n                        uint32_t ehCount = (ehSec->dataSize - 4) / 12;\n                        body.exceptionClauses.reserve(ehCount);\n                        for (uint32_t i = 0; i < ehCount; i++)\n                        {\n                            CorILEHSmall& eh = ehSec->clauses[i];\n                            IL2CPP_ASSERT(eh.flags >= 0 && eh.flags <= 4);\n                            body.exceptionClauses.push_back({\n                                (CorILExceptionClauseType)eh.flags,\n                                eh.tryOffset,\n                                eh.tryLength,\n                                ((uint32_t)eh.handlerOffset1 << 8) + eh.handlerOffset0,\n                                eh.handlerLength,\n                                eh.classTokenOrFilterOffset });\n                        }\n                        nextSection += ehSec->dataSize;\n                    }\n                    if (!(kind & (byte)CorILSecion::MoreSects))\n                    {\n                        break;\n                    }\n                }\n            }\n        }\n        else\n        {\n            body.ilcodes = nullptr;\n            body.codeSize = 0;\n        }\n    }\n\n    const MethodInfo* Image::FindImplMethod(Il2CppClass* klass, const MethodInfo* method)\n    {\n        il2cpp::vm::Class::Init(klass);\n        return il2cpp::vm::Class::GetVirtualMethod(klass, method);\n    }\n\n\n    Il2CppString* Image::GetIl2CppUserStringFromRawIndex(StringIndex index)\n    {\n        il2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n        Il2CppString* clrStr;\n        if (_il2cppStringCache.TryGetValue(index, &clrStr))\n        {\n            return clrStr;\n        }\n        else\n        {\n            Il2CppString* clrStr = _rawImage->GetUserStringBlogByIndex((uint32_t)index);\n#if HYBRIDCLR_UNITY_2022_OR_NEW\n            _il2cppStringCache.GetOrAdd(index, clrStr);\n#else\n            _il2cppStringCache.Add(index, clrStr);\n#endif\n            return clrStr;\n        }\n    }\n\n    Il2CppClass* Image::GetClassFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext)\n    {\n        TokenGenericContextType key(token, genericContext);\n        auto it = tokenCache.find(key);\n        if (it != tokenCache.end())\n        {\n            return (Il2CppClass*)it->second;\n        }\n\n        const Il2CppType* originType = ReadTypeFromToken(klassGenericContainer, methodGenericContainer, DecodeTokenTableType(token), DecodeTokenRowIndex(token));\n        const Il2CppType* resultType = genericContext != nullptr ? il2cpp::metadata::GenericMetadata::InflateIfNeeded(originType, genericContext, true) : originType;\n        Il2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(resultType);\n        if (!klass)\n        {\n            TEMP_FORMAT(errMsg, \"InterpreterImage::GetClassFromToken token:%u class not exists\", token);\n            il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(errMsg));\n        }\n        tokenCache.insert({ key, (void*)klass });\n        return klass;\n    }\n\n    const FieldInfo* Image::GetFieldInfoFromFieldRef(const Il2CppType& type, const Il2CppFieldDefinition* fieldDef)\n    {\n        Il2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(&type);\n        const char* name = il2cpp::vm::GlobalMetadata::GetStringFromIndex(fieldDef->nameIndex);\n        void* iter = nullptr;\n        for (const FieldInfo* cur = nullptr; (cur = il2cpp::vm::Class::GetFields(klass, &iter)) != nullptr; )\n        {\n            if (cur->token == fieldDef->token)\n            {\n                IL2CPP_ASSERT(std::strcmp(cur->name, name) == 0);\n                return cur;\n            }\n        }\n        RaiseMissingFieldException(&type, name);\n        return nullptr;\n    }\n\n    const MethodInfo* Image::ResolveMethodInfo(const Il2CppType* type, const char* resolveMethodName, const MethodRefSig& resolveSig, const Il2CppGenericInst* genericInstantiation, const Il2CppGenericContext* genericContext)\n    {\n        if (type->type != IL2CPP_TYPE_ARRAY)\n        {\n            const Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n            const Il2CppGenericContainer* klassGenericContainer = GetGenericContainerFromIl2CppType(type);\n            const char* typeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n            for (uint32_t i = 0; i < typeDef->method_count; i++)\n            {\n                const Il2CppMethodDefinition* methodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromIndex(typeDef->methodStart + i);\n                const char* methodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex);\n                IL2CPP_ASSERT((genericInstantiation ? genericInstantiation->type_argc : 0) == resolveSig.genericParamCount);\n                if (std::strcmp(resolveMethodName, methodName) == 0 && IsMatchMethodSig(methodDef, resolveSig, klassGenericContainer))\n                {\n                    return GetMethodInfo(type, methodDef, genericInstantiation, genericContext);\n                }\n            }\n        }\n        else\n        {\n            IL2CPP_ASSERT(genericInstantiation == nullptr);\n            Il2CppClass* arrayKlass = il2cpp::vm::Class::FromIl2CppType(type);\n            il2cpp::vm::Class::SetupMethods(arrayKlass);\n            const Il2CppType** genericClassInstArgv = genericContext && genericContext->class_inst ? genericContext->class_inst->type_argv : nullptr;\n            const Il2CppType** genericMethodInstArgv = genericContext && genericContext->method_inst ? genericContext->method_inst->type_argv : nullptr;\n\n            for (uint16_t i = 0; i < arrayKlass->method_count; i++)\n            {\n                const MethodInfo* method = arrayKlass->methods[i];\n                if (std::strcmp(resolveMethodName, method->name) == 0 && IsMatchMethodSig(method, resolveSig, genericClassInstArgv, genericMethodInstArgv))\n                {\n                    return method;\n                }\n            }\n        }\n        RaiseMethodNotFindException(type, resolveMethodName);\n        return nullptr;\n    }\n\n    const void* Image::ReadRuntimeHandleFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, uint32_t rowIndex)\n    {\n        ResolveMemberRef rmr = {};\n        ReadResolveMemberRefFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, rmr);\n        if (rmr.signature.memberType == TableType::FIELDPTR)\n        {\n            const Il2CppFieldDefinition* fieldDef = nullptr;\n            ResolveFieldThrow(rmr.parent.type, rmr.name, rmr.signature.field.type, fieldDef);\n            if (!fieldDef)\n            {\n                RaiseMissingFieldException(rmr.parent.type, rmr.name);\n            }\n            const Il2CppType* parentType = genericContext != nullptr ? il2cpp::metadata::GenericMetadata::InflateIfNeeded(rmr.parent.type, genericContext, true) : rmr.parent.type;\n            const FieldInfo* fieldInfo = GetFieldInfoFromFieldRef(*parentType, fieldDef);\n            return fieldInfo;\n        }\n        else if (rmr.signature.memberType == TableType::METHODPTR)\n        {\n            const Il2CppType* parentType = genericContext != nullptr ? il2cpp::metadata::GenericMetadata::InflateIfNeeded(rmr.parent.type, genericContext, true) : rmr.parent.type;\n            return ResolveMethodInfo(parentType, rmr.name, rmr.signature.method, nullptr, genericContext);\n        }\n        else\n        {\n            RaiseExecutionEngineException(\"GetRuntimeHandleFromToken invaild ParentType\");\n            return nullptr;\n        }\n    }\n\n    const void* Image::GetRuntimeHandleFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext)\n    {\n        TableType ttype = DecodeTokenTableType(token);\n        uint32_t rowIndex = DecodeTokenRowIndex(token);\n        const void* handle = nullptr;\n        switch (ttype)\n        {\n        case hybridclr::metadata::TableType::TYPEREF:\n        case hybridclr::metadata::TableType::TYPEDEF:\n        case hybridclr::metadata::TableType::TYPESPEC:\n        {\n            const Il2CppType* type = ReadTypeFromToken(klassGenericContainer, methodGenericContainer, ttype, rowIndex);\n            if (genericContext)\n            {\n                type = TryInflateIfNeed(type, genericContext, true);\n            }\n            handle = type;\n            break;\n        }\n        case hybridclr::metadata::TableType::FIELD:\n        {\n            handle = GetFieldInfoFromToken(tokenCache, token, klassGenericContainer, methodGenericContainer, genericContext);\n            break;\n        }\n        case hybridclr::metadata::TableType::METHOD:\n        case hybridclr::metadata::TableType::METHODSPEC:\n        {\n            handle = GetMethodInfoFromToken(tokenCache, token, klassGenericContainer, methodGenericContainer, genericContext);\n            break;\n        }\n        case hybridclr::metadata::TableType::MEMBERREF:\n        {\n            handle = ReadRuntimeHandleFromMemberRef(klassGenericContainer, methodGenericContainer, genericContext, rowIndex);\n            //_token2RuntimeHandleCache.insert({ key, (void*)handle });\n            break;\n        }\n        default:\n        {\n            RaiseExecutionEngineException(\"GetRuntimeHandleFromToken invaild TableType\");\n            return nullptr;\n        }\n        }\n        return handle;\n    }\n\n    const FieldInfo* Image::GetFieldInfoFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext)\n    {\n        TokenGenericContextType key(token, genericContext);\n        auto it = tokenCache.find(key);\n        if (it != tokenCache.end())\n        {\n            return (const FieldInfo*)it->second;\n        }\n\n        FieldRefInfo fri;\n        ReadFieldRefInfoFromToken(klassGenericContainer, methodGenericContainer, DecodeTokenTableType(token), DecodeTokenRowIndex(token), fri);\n        if (!fri.field)\n        {\n            TEMP_FORMAT(errMsg, \"token:%d\", token);\n            RaiseMissingFieldException(fri.containerType, errMsg);\n        }\n        const Il2CppType* resultType = genericContext != nullptr ? il2cpp::metadata::GenericMetadata::InflateIfNeeded(fri.containerType, genericContext, true) : fri.containerType;\n        const FieldInfo* fieldInfo = GetFieldInfoFromFieldRef(*resultType, fri.field);\n        il2cpp::vm::Class::Init(fieldInfo->parent);\n        tokenCache.insert({ key, (void*)fieldInfo });\n        return fieldInfo;\n    }\n\n\n    const MethodInfo* Image::ReadMethodInfoFromToken(const Il2CppGenericContainer* klassGenericContainer,\n        const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, const Il2CppGenericInst* genericInst, TableType tableType, uint32_t rowIndex)\n    {\n        IL2CPP_ASSERT(rowIndex > 0);\n        switch (tableType)\n        {\n        case TableType::METHOD:\n        {\n            const Il2CppMethodDefinition* methodDef = GetMethodDefinitionFromRawIndex(rowIndex - 1);\n            const Il2CppTypeDefinition* declareType = (Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromIndex(methodDef->declaringType);\n            const Il2CppType* type = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(declareType->byvalTypeIndex);\n            return GetMethodInfo(type, methodDef, genericInst, genericContext);\n        }\n        case TableType::MEMBERREF:\n        {\n            ResolveMemberRef rmr = {};\n            ReadResolveMemberRefFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, rmr);\n            IL2CPP_ASSERT(rmr.parent.parentType == TableType::TYPEDEF || rmr.parent.parentType == TableType::TYPEREF || rmr.parent.parentType == TableType::TYPESPEC);\n            IL2CPP_ASSERT(rmr.signature.memberType == TableType::METHODPTR);\n            if (genericContext)\n            {\n                rmr.parent.type = TryInflateIfNeed(rmr.parent.type, genericContext, true);\n            }\n            return ResolveMethodInfo(rmr.parent.type, rmr.name, rmr.signature.method, genericInst, genericContext);\n        }\n        case TableType::METHODSPEC:\n        {\n            TbMethodSpec methodSpec = _rawImage->ReadMethodSpec(rowIndex);\n            const Il2CppGenericInst* genericInstantiation = ReadMethodSpecInstantiation(methodSpec.instantiation, klassGenericContainer, methodGenericContainer);\n            genericInstantiation = TryInflateGenericInst(genericInstantiation, genericContext);\n\n            TableType methodTableType = DecodeMethodDefOrRefCodedIndexTableType(methodSpec.method);\n            uint32_t methodRowIndex = DecodeMethodDefOrRefCodedIndexRowIndex(methodSpec.method);\n            switch (methodTableType)\n            {\n            case TableType::METHOD:\n            {\n                return ReadMethodInfoFromToken(klassGenericContainer, methodGenericContainer, genericContext, genericInstantiation, methodTableType, methodRowIndex);\n            }\n            case TableType::MEMBERREF:\n            {\n                return ReadMethodInfoFromToken(klassGenericContainer, methodGenericContainer, genericContext, genericInstantiation, methodTableType, methodRowIndex);\n            }\n            default:\n            {\n                RaiseBadImageException(\"ReadMethodSpec invaild TableType\");\n                return nullptr;\n            }\n            }\n            break;\n        }\n        default:\n        {\n            RaiseBadImageException(\"ReadMethodInfoFromToken invaild TableType\");\n            return nullptr;\n        }\n        }\n    }\n\n    const MethodInfo* Image::GetMethodInfoFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext)\n    {\n        auto key = std::tuple<uint32_t, const Il2CppGenericContext*>(token, genericContext);\n        auto it = tokenCache.find(key);\n        if (it != tokenCache.end())\n        {\n            return (const MethodInfo*)it->second;\n        }\n\n        const MethodInfo* method = ReadMethodInfoFromToken(klassGenericContainer, methodGenericContainer, genericContext,\n            nullptr, DecodeTokenTableType(token), DecodeTokenRowIndex(token));\n\n        IL2CPP_ASSERT(method);\n        il2cpp::vm::Class::Init(method->klass);\n\n        tokenCache.insert({ key, (void*)method });\n        return method;\n    }\n\n    const MethodInfo* Image::GetMethodInfo(const Il2CppType* containerType, const Il2CppMethodDefinition* methodDef, const Il2CppGenericInst* instantiation, const Il2CppGenericContext* genericContext)\n    {\n        const Il2CppType* finalContainerType = TryInflateIfNeed(containerType, genericContext, true);\n        const MethodInfo* method = GetMethodInfoFromMethodDef(containerType, methodDef);\n        IL2CPP_ASSERT(method);\n        // final genericContext = finalContainerType.class_inst + mri.instantiation\n        if (instantiation)\n        {\n            const Il2CppGenericInst* finalClassIns = finalContainerType->type == IL2CPP_TYPE_GENERICINST ? finalContainerType->data.generic_class->context.class_inst : nullptr;\n            const Il2CppGenericInst* finalMethodIns = instantiation;\n            Il2CppGenericContext finalGenericContext = { finalClassIns, finalMethodIns };\n            method = method->is_inflated ? method->genericMethod->methodDefinition : method;\n            method = il2cpp::metadata::GenericMetadata::Inflate(method, &finalGenericContext);\n            IL2CPP_ASSERT(method);\n        }\n        return method;\n    }\n\n    void Image::GetStandAloneMethodSigFromToken(uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, ResolveStandAloneMethodSig& methodSig)\n    {\n        TbStandAloneSig sas = _rawImage->ReadStandAloneSig(DecodeTokenRowIndex(token));\n        ReadStandAloneSig(sas.signature, klassGenericContainer, methodGenericContainer, methodSig);\n        if (genericContext)\n        {\n            methodSig.returnType = TryInflateIfNeed(methodSig.returnType, genericContext, true);\n            for (uint32_t i = 0, n = (uint32_t)methodSig.params.size(); i < n; i++)\n            {\n                methodSig.params[i] = TryInflateIfNeed(methodSig.params[i], genericContext, true);\n            }\n        }\n    }\n\n    void Image::ReadFieldRefInfoFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, FieldRefInfo& ret)\n    {\n        IL2CPP_ASSERT(rowIndex > 0);\n        if (tableType == TableType::FIELD)\n        {\n            ReadFieldRefInfoFromFieldDefToken(rowIndex, ret);\n        }\n        else\n        {\n            IL2CPP_ASSERT(tableType == TableType::MEMBERREF);\n            ReadFieldRefInfoFromMemberRef(klassGenericContainer, methodGenericContainer, rowIndex, ret);\n        }\n    }\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Image.h",
    "content": "#pragma once\n\n#include <vector>\n#include <unordered_map>\n#include <tuple>\n\n#include \"vm/GlobalMetadataFileInternals.h\"\n#include \"vm/Assembly.h\"\n#include \"gc/GarbageCollector.h\"\n#include \"gc/Allocator.h\"\n#include \"gc/AppendOnlyGCHashMap.h\"\n#include \"utils/Il2CppHashMap.h\"\n\n#include \"RawImage.h\"\n#include \"VTableSetup.h\"\n#include \"MetadataUtil.h\"\n#include \"PDBImage.h\"\n\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\ttypedef std::tuple<uint32_t, const Il2CppGenericContext*> TokenGenericContextType;\n\n\tstruct TokenGenericContextTypeHash {\n\t\tsize_t operator()(const TokenGenericContextType x) const noexcept {\n\t\t\treturn std::get<0>(x) * 0x9e3779b9 + (size_t)std::get<1>(x);\n\t\t}\n\t};\n\n\tstruct TokenGenericContextTypeEqual\n\t{\n\t\tbool operator()(const TokenGenericContextType a, const TokenGenericContextType b) const {\n\t\t\treturn std::get<0>(a) == std::get<0>(b) && std::get<1>(a) == std::get<1>(b);\n\t\t}\n\t};\n\n\ttypedef Il2CppHashMap<std::tuple<uint32_t, const Il2CppGenericContext*>, void*, TokenGenericContextTypeHash, TokenGenericContextTypeEqual> Token2RuntimeHandleMap;\n\n\tclass Image\n\t{\n\tpublic:\n\n\t\tRawImageBase& GetRawImage() const\n\t\t{\n\t\t\treturn *_rawImage;\n\t\t}\n\n\t\tLoadImageErrorCode InitRawImage(const void* imageData, size_t length);\n\n\t\tPDBImage* GetPDBImage() const\n\t\t{\n\t\t\treturn _pdbImage;\n\t\t}\n\n\t\tLoadImageErrorCode LoadPDB(const void* pdbBytes, size_t pdbLength)\n\t\t{\n\t\t\t_pdbImage = new PDBImage();\n\t\t\tLoadImageErrorCode err = _pdbImage->Load(pdbBytes, pdbLength);\n\t\t\tif (err != LoadImageErrorCode::OK)\n\t\t\t{\n\t\t\t\tdelete _pdbImage;\n\t\t\t\t_pdbImage = nullptr;\n\t\t\t\treturn LoadImageErrorCode::PDB_BAD_FILE;\n\t\t\t}\n\t\t\treturn LoadImageErrorCode::OK;\n\t\t}\n\n\t\t// misc\n\t\tbool IsValueTypeFromToken(TableType tableType, uint32_t rowIndex);\n\t\tbool IsThreadStaticCtorToken(TableType tableType, uint32_t rowIndex);\n\t\tvoid ReadMemberRefParentFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, ResolveMemberRefParent& ret);\n\t\tconst Il2CppType* ReadTypeFromMemberRefParent(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex);\n\n\t\tconst Il2CppType* GetIl2CppType(uint32_t assemblyRefIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound);\n\t\t// type\n\t\tconst Il2CppType* ReadType(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer);\n\n\t\tconst Il2CppType* ReadTypeFromTypeDef(uint32_t rowIndex);\n\t\tconst Il2CppType* ReadTypeFromTypeRef(uint32_t rowIndex);\n\t\tconst Il2CppType* ReadTypeFromTypeSpec(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex);\n\t\tconst Il2CppType* ReadTypeFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex);\n\n\t\tvirtual const Il2CppType* ReadTypeFromResolutionScope(uint32_t scope, uint32_t typeNamespace, uint32_t typeName);\n\n\t\tconst Il2CppType* ReadArrayType(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer);\n\t\tconst Il2CppGenericClass* ReadGenericClass(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer);\n\n\t\t// signature\n\t\tvoid ReadMemberRefSig(const Il2CppGenericContainer* klassGenericContainer, TbMemberRef& data, ResolveMemberRefSig& signature);\n\t\tvoid ReadFieldRefSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, FieldRefSig& field);\n\t\tvoid ReadMethodRefSig(BlobReader& reader, MethodRefSig& method);\n\t\tconst Il2CppGenericInst* ReadMethodSpecInstantiation(uint32_t signatureIdx, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer);\n\t\tvoid ReadLocalVarSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, il2cpp::utils::dynamic_array<const Il2CppType*>& vars);\n\t\tvoid ReadStandAloneSig(uint32_t signatureIdx, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, ResolveStandAloneMethodSig& sig);\n\n\t\t// resolve from token\n\t\tvoid ReadResolveMemberRefFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, ResolveMemberRef& ret);\n\t\tvoid ReadMethodRefInfoFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, MethodRefInfo& ret);\n\t\tvoid ReadMethodRefInfoFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, MethodRefInfo& ret);\n\t\tconst MethodInfo* ResolveMethodInfo(const Il2CppType* type, const char* resolveMethodName, const MethodRefSig& resolveSig, const Il2CppGenericInst* genericInstantiation, const Il2CppGenericContext* genericContext);\n\n\t\tconst void* ReadRuntimeHandleFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, uint32_t rowIndex);\n\n\t\tvoid ReadFieldRefInfoFromMemberRef(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, uint32_t rowIndex, FieldRefInfo& ret);\n\t\tvoid ReadMethodBody(const Il2CppMethodDefinition& methodDef, const TbMethod& methodData, MethodBody& body);\n\n\t\tIl2CppString* GetIl2CppUserStringFromRawIndex(StringIndex index);\n\t\tIl2CppClass* GetClassFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext);\n\t\tconst FieldInfo* GetFieldInfoFromFieldRef(const Il2CppType& type, const Il2CppFieldDefinition* fieldDef);\n\t\tconst void* GetRuntimeHandleFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext);\n\t\tconst MethodInfo* FindImplMethod(Il2CppClass* klass, const MethodInfo* matchMethod);\n\t\tconst FieldInfo* GetFieldInfoFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext);\n\t\tconst MethodInfo* ReadMethodInfoFromToken(const Il2CppGenericContainer* klassGenericContainer,\n\t\t\tconst Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, const Il2CppGenericInst* genericInst, TableType tableType, uint32_t rowIndex);\n\t\tconst MethodInfo* GetMethodInfoFromToken(Token2RuntimeHandleMap& tokenCache, uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext);\n\t\tconst MethodInfo* GetMethodInfo(const Il2CppType* containerType, const Il2CppMethodDefinition* methodDef, const Il2CppGenericInst* instantiation, const Il2CppGenericContext* genericContext);\n\t\tvoid GetStandAloneMethodSigFromToken(uint32_t token, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, const Il2CppGenericContext* genericContext, ResolveStandAloneMethodSig& methodSig);\n\t\tvoid ReadFieldRefInfoFromToken(const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, TableType tableType, uint32_t rowIndex, FieldRefInfo& ret);\n\n\t\tvirtual const Il2CppType* GetModuleIl2CppType(uint32_t moduleRowIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound) = 0;\n\t\tvirtual const Il2CppType* GetIl2CppTypeFromRawTypeDefIndex(uint32_t index) = 0;\n\t\tvirtual Il2CppGenericContainer* GetGenericContainerByRawIndex(uint32_t index) = 0;\n\t\tvirtual Il2CppGenericContainer* GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex) = 0;\n\t\tvirtual const Il2CppMethodDefinition* GetMethodDefinitionFromRawIndex(uint32_t index) = 0;\n\n\t\tvirtual MethodBody* GetMethodBody(uint32_t token) = 0;\n\t\tvirtual void ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret) = 0;\n\t\tvirtual void InitRuntimeMetadatas() = 0;\n\tprotected:\n\t\tImage() : _rawImage(nullptr), _pdbImage(nullptr)\n\t\t{\n\t\t\til2cpp::vm::AssemblyVector assemblies;\n\t\t\til2cpp::vm::Assembly::GetAllAssemblies(assemblies);\n\t\t\tfor (auto ass : assemblies)\n\t\t\t{\n\t\t\t\t_nameToAssemblies[ass->image->nameNoExt] = ass;\n\t\t\t}\n\t\t}\n\n\t\tvirtual ~Image()\n\t\t{\n\t\t\tif (_rawImage)\n\t\t\t{\n\t\t\t\tdelete _rawImage;\n\t\t\t\t_rawImage = nullptr;\n\t\t\t}\n\t\t\tif (_pdbImage)\n\t\t\t{\n\t\t\t\tdelete _pdbImage;\n\t\t\t\t_pdbImage = nullptr;\n\t\t\t}\n\t\t}\n\n\t\tconst Il2CppAssembly* GetLoadedAssembly(const char* assemblyName)\n\t\t{\n\t\t\tauto it = _nameToAssemblies.find(assemblyName);\n\t\t\tif (it != _nameToAssemblies.end())\n\t\t\t{\n\t\t\t\treturn it->second;\n\t\t\t}\n\t\t\t// relying assembly is loaded after self\n\t\t\tfor (const Il2CppAssembly* ass : *il2cpp::vm::Assembly::GetAllAssemblies())\n\t\t\t{\n\t\t\t\tif (!std::strcmp(ass->image->nameNoExt, assemblyName))\n\t\t\t\t{\n\t\t\t\t\t_nameToAssemblies[ass->image->nameNoExt] = ass;\n\t\t\t\t\treturn ass;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tIl2CppClass* FindNetStandardExportedType(const char* namespaceStr, const char* nameStr);\n\n\t\tRawImageBase* _rawImage;\n\t\tPDBImage* _pdbImage;\n\t\tIl2CppHashMap<const char*, const Il2CppAssembly*, CStringHash, CStringEqualTo> _nameToAssemblies;\n\t\til2cpp::gc::AppendOnlyGCHashMap<uint32_t, Il2CppString*, il2cpp::utils::PassThroughHash<uint32_t>> _il2cppStringCache;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/InterpreterImage.cpp",
    "content": "#include \"InterpreterImage.h\"\n\n#include <cstring>\n#include <cmath>\n#include <iostream>\n#include <algorithm>\n\n#include \"il2cpp-class-internals.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Type.h\"\n#include \"vm/Field.h\"\n#include \"vm/Object.h\"\n#include \"vm/Runtime.h\"\n#include \"vm/Array.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/MetadataCache.h\"\n#include \"vm/MetadataAlloc.h\"\n#include \"vm/String.h\"\n#include \"vm/Reflection.h\"\n#include \"metadata/FieldLayout.h\"\n#include \"metadata/Il2CppTypeCompare.h\"\n#include \"metadata/GenericMetadata.h\"\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n#include \"metadata/CustomAttributeCreator.h\"\n#endif\n#include \"os/Atomic.h\"\n#include \"icalls/mscorlib/System/MonoCustomAttrs.h\"\n\n#include \"MetadataModule.h\"\n#include \"MetadataUtil.h\"\n#include \"ClassFieldLayoutCalculator.h\"\n#include \"MetadataPool.h\"\n\n#include \"../interpreter/Engine.h\"\n#include \"../interpreter/InterpreterModule.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tstatic uint32_t s_nextImageIndexByKind[4] = { (1u << kMetadataImageIndexExtraShiftBitsA), 0, 0, 0};\n\n\tInterpreterImage* InterpreterImage::s_images[kMaxMetadataImageCount] = {};\n\n\tstatic int32_t GetImageKindByDllLength(uint32_t dllLength)\n\t{\n\t\tuint32_t maxPossibleIndexValue = dllLength * 4;\n\t\tfor (int32_t i = 3; i >= 0; i--)\n\t\t{\n\t\t\tif (maxPossibleIndexValue <= kMetadataIndexMaskArr[i])\n\t\t\t{\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tvoid InterpreterImage::Initialize()\n\t{\n\t\t\n\t}\n\n\tuint32_t InterpreterImage::AllocImageIndex(uint32_t dllLength)\n\t{\n\t\tint32_t kind = GetImageKindByDllLength(dllLength);\n\t\tif (kind < 0)\n\t\t{\n\t\t\treturn kInvalidImageIndex;\n\t\t}\n\t\tfor (int32_t finalKind = kind; finalKind >= 0; finalKind--)\n\t\t{\n\t\t\tuint32_t newImageIndex = s_nextImageIndexByKind[finalKind];\n\t\t\t// 255 is preserved for invalid image index when kind is 3\n\t\t\tif (newImageIndex >= kMaxMetadataImageIndexWithoutKind - (finalKind == 3))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ts_nextImageIndexByKind[finalKind] += (1u << kMetadataImageIndexExtraShiftBitsArr[finalKind]);\n\t\t\treturn newImageIndex | ((uint32_t)finalKind << (kMetadataImageIndexBits - kMetadataKindBits));\n\t\t}\n\t\treturn kInvalidImageIndex;\n\t}\n\n\tvoid InterpreterImage::RegisterImage(InterpreterImage* image)\n\t{\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\tIL2CPP_ASSERT(image->GetIndex() > 0);\n\t\ts_images[image->GetIndex()] = image;\n\t}\n\n\tvoid InterpreterImage::InitBasic(Il2CppImage* image)\n\t{\n\t\tSetIl2CppImage(image);\n\t\tRegisterImage(this);\n\t}\n\n\tvoid InterpreterImage::BuildIl2CppAssembly(Il2CppAssembly* ass)\n\t{\n\t\tass->token = EncodeToken(TableType::ASSEMBLY, 1);\n\t\tass->referencedAssemblyStart = EncodeWithIndex(1);\n\t\tass->referencedAssemblyCount = _rawImage->GetTableRowNum(TableType::ASSEMBLYREF);\n\n\t\tTbAssembly data = _rawImage->ReadAssembly(1);\n\t\tauto& aname = ass->aname;\n\t\taname.hash_alg = data.hashAlgId;\n\t\taname.major = data.majorVersion;\n\t\taname.minor = data.minorVersion;\n\t\taname.build = data.buildNumber;\n\t\taname.revision = data.revisionNumber;\n\t\taname.flags = data.flags;\n\t\taname.public_key = _rawImage->GetBlobFromRawIndex(data.publicKey);\n\t\taname.name = _rawImage->GetStringFromRawIndex(data.name);\n\t\taname.culture = _rawImage->GetStringFromRawIndex(data.locale);\n\t}\n\n\tvoid InterpreterImage::BuildIl2CppImage(Il2CppImage* image2)\n\t{\n\t\timage2->typeCount = _rawImage->GetTableRowNum(TableType::TYPEDEF);\n\t\timage2->exportedTypeCount = _rawImage->GetTableRowNum(TableType::EXPORTEDTYPE);\n\t\timage2->customAttributeCount = _rawImage->GetTableRowNum(TableType::CUSTOMATTRIBUTE);\n\n#if HYBRIDCLR_UNITY_2019\n\t\timage2->typeStart = EncodeWithIndex(0);\n\t\timage2->customAttributeStart = EncodeWithIndex(0);\n\t\timage2->entryPointIndex = EncodeWithIndexExcept0(_rawImage->GetEntryPointToken());\n\t\timage2->exportedTypeStart = EncodeWithIndex(0);\n#else\n\t\tIl2CppImageGlobalMetadata* metadataImage = (Il2CppImageGlobalMetadata*)HYBRIDCLR_METADATA_MALLOC(sizeof(Il2CppImageGlobalMetadata));\n\t\tmetadataImage->typeStart = EncodeWithIndex(0);\n\t\tmetadataImage->customAttributeStart = EncodeWithIndex(0);\n\t\tmetadataImage->entryPointIndex = EncodeWithIndexExcept0(_rawImage->GetEntryPointToken());\n\t\tmetadataImage->exportedTypeStart = EncodeWithIndex(0);\n\t\tmetadataImage->image = image2;\n\t\timage2->metadataHandle = reinterpret_cast<Il2CppMetadataImageHandle>(metadataImage);\n#endif\n\n\t\timage2->nameToClassHashTable = nullptr;\n\t\timage2->codeGenModule = nullptr;\n\n\t\timage2->token = EncodeWithIndex(0); // TODO\n\t\timage2->dynamic = 0;\n\t}\n\n\tvoid InterpreterImage::InitRuntimeMetadatas()\n\t{\n\t\tIL2CPP_ASSERT(_rawImage->GetTable(TableType::EXPORTEDTYPE).rowNum == 0);\n\n\t\tInitGenericParamDefs0();\n\t\tInitTypeDefs_0();\n\t\tInitMethodDefs0();\n\t\tInitGenericParamDefs();\n\t\tInitNestedClass(); // must before typedefs1, because parent may be nested class\n\t\tInitTypeDefs_1();\n\n\t\tInitGenericParamConstraintDefs();\n\n\t\tInitParamDefs();\n\t\tInitMethodDefs();\n\t\tInitFieldDefs();\n\t\tInitFieldLayouts();\n\t\tInitFieldRVAs();\n\t\tInitBlittables();\n\t\tInitMethodImpls0();\n\t\tInitProperties();\n\t\tInitEvents();\n\t\tInitMethodSemantics();\n\t\tInitConsts();\n\t\tInitCustomAttributes();\n\t\tInitModuleRefs();\n\t\tInitImplMaps();\n\t\tInitClassLayouts0();\n\t\tInitTypeDefs_2();\n\t\tInitClassLayouts();\n\t\tInitInterfaces();\n\t\tInitClass();\n\t\tInitVTables();\n\n\t\tIl2CppHashMap<const Il2CppType*, uint32_t, Il2CppTypeHashShallow, Il2CppTypeEqualityComparerShallow> temp;\n\t\t_type2Indexs.swap(temp);\n\n\t\tdelete _paramRawIndex2ActualParamIndex;\n\t\t_paramRawIndex2ActualParamIndex = nullptr;\n\t}\n\n\tvoid InterpreterImage::InitTypeDefs_0()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\t_typesDefines.resize(typeDefTb.rowNum);\n\t\t_typeDetails.resize(typeDefTb.rowNum);\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition& cur = _typesDefines[i];\n\t\t\tTypeDefinitionDetail& typeDetail = _typeDetails[i];\n\t\t\ttypeDetail.typeSizes = {};\n\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbTypeDef data = _rawImage->ReadTypeDef(rowIndex);\n\n\t\t\tcur = {};\n\n\t\t\tcur.genericContainerIndex = kGenericContainerIndexInvalid;\n\t\t\tcur.declaringTypeIndex = kTypeDefinitionIndexInvalid;\n\t\t\tcur.elementTypeIndex = kTypeDefinitionIndexInvalid;\n\n\t\t\tcur.token = EncodeToken(TableType::TYPEDEF, rowIndex);\n\n\t\t\tbool isValueType = data.extends && IsValueTypeFromToken(DecodeTypeDefOrRefOrSpecCodedIndexTableType(data.extends), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.extends));\n\t\t\tIl2CppType* cppType = MetadataMallocT<Il2CppType>();\n\t\t\tcppType->type = isValueType ? IL2CPP_TYPE_VALUETYPE : IL2CPP_TYPE_CLASS;\n\t\t\tSET_IL2CPPTYPE_VALUE_TYPE(*cppType, isValueType);\n\t\t\tcppType->data.typeHandle = (Il2CppMetadataTypeHandle)&cur;\n\t\t\tcur.byvalTypeIndex = AddIl2CppTypeCache(cppType);\n#if HYBRIDCLR_UNITY_2019\n\t\t\tIl2CppType* byRefType = MetadataMallocT<Il2CppType>();\n\t\t\t*byRefType = *cppType;\n\t\t\tbyRefType->byref = 1;\n\t\t\tcur.byrefTypeIndex = AddIl2CppTypeCache(byRefType);\n#endif\n\n\t\t\tif (IsInterface(cur.flags))\n\t\t\t{\n\t\t\t\tcur.interfaceOffsetsStart = EncodeWithIndex(0);\n\t\t\t\tcur.interface_offsets_count = 0;\n\t\t\t\tcur.vtableStart = EncodeWithIndex(0);\n\t\t\t\tcur.vtable_count = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcur.interfaceOffsetsStart = 0;\n\t\t\t\tcur.interface_offsets_count = 0;\n\t\t\t\tcur.vtableStart = 0;\n\t\t\t\tcur.vtable_count = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitTypeDefs_1()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition& last = _typesDefines[i > 0 ? i - 1 : 0];\n\t\t\tIl2CppTypeDefinition& cur = _typesDefines[i];\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbTypeDef data = _rawImage->ReadTypeDef(rowIndex); // token from 1\n\n\t\t\tcur.flags = data.flags;\n\t\t\tcur.nameIndex = EncodeWithIndex(data.typeName);\n\t\t\tcur.namespaceIndex = EncodeWithIndex(data.typeNamespace);\n\n\t\t\tcur.fieldStart = EncodeWithIndex(data.fieldList - 1);\n\t\t\tcur.methodStart = EncodeWithIndex(data.methodList - 1);\n\n\t\t\tif (i > 0)\n\t\t\t{\n\t\t\t\tlast.field_count = (uint16_t)(cur.fieldStart - last.fieldStart);\n\t\t\t\tlast.method_count = (uint16_t)(cur.methodStart - last.methodStart);\n\t\t\t}\n\t\t\tif (i == n - 1)\n\t\t\t{\n\t\t\t\tcur.field_count = (uint16_t)(_rawImage->GetTableRowNum(TableType::FIELD) - DecodeMetadataIndex(cur.fieldStart));\n\t\t\t\tcur.method_count = (uint16_t)(_rawImage->GetTableRowNum(TableType::METHOD) - DecodeMetadataIndex(cur.methodStart));\n\t\t\t}\n\n\t\t\tif (data.extends != 0)\n\t\t\t{\n\t\t\t\tconst Il2CppType* parentType = ReadTypeFromToken(GetGenericContainerByTypeDefinition(&cur), nullptr, DecodeTypeDefOrRefOrSpecCodedIndexTableType(data.extends), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.extends));\n\n\t\t\t\tif (parentType->type == IL2CPP_TYPE_CLASS || parentType->type == IL2CPP_TYPE_VALUETYPE)\n\t\t\t\t{\n\t\t\t\t\tIl2CppTypeDefinition* parentDef = (Il2CppTypeDefinition*)parentType->data.typeHandle;\n\t\t\t\t\t// FIXE ME . check mscorelib\n\t\t\t\t\tconst char* parentNs = il2cpp::vm::GlobalMetadata::GetStringFromIndex(parentDef->namespaceIndex);\n\t\t\t\t\tif (std::strcmp(parentNs, \"System\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tconst char* parentName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(parentDef->nameIndex);\n\t\t\t\t\t\tif (std::strcmp(parentName, \"Enum\") == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcur.bitfield |= (1 << (il2cpp::vm::kBitIsValueType - 1));\n\t\t\t\t\t\t\tcur.bitfield |= (1 << (il2cpp::vm::kBitIsEnum - 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (std::strcmp(parentName, \"ValueType\") == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcur.bitfield |= (1 << (il2cpp::vm::kBitIsValueType - 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcur.parentIndex = AddIl2CppTypeCache(parentType);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcur.parentIndex = kInvalidIndex;\n\t\t\t}\n\n\t\t\tcur.elementTypeIndex = kInvalidIndex;\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitTypeDefs_2()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tTbTypeDef data = _rawImage->ReadTypeDef(i + 1); // token from 1\n\n\t\t\tIl2CppTypeDefinition& last = _typesDefines[i > 0 ? i - 1 : 0];\n\t\t\tIl2CppTypeDefinition& cur = _typesDefines[i];\n\t\t\tuint32_t typeIndex = i; // type index start from 0, diff with field index ...\n\n\t\t\t// enum element_type == \n\t\t\tif (IsEnumType(&cur))\n\t\t\t{\n\t\t\t\tcur.elementTypeIndex = _fieldDetails[DecodeMetadataIndex(cur.fieldStart)].fieldDef.typeIndex;\n\t\t\t}\n\n\t\t\tauto classLayoutRow = _classLayouts.find(typeIndex);\n\t\t\tuint16_t packingSize = 0;\n\t\t\tif (classLayoutRow != _classLayouts.end())\n\t\t\t{\n\t\t\t\tauto& layoutData = classLayoutRow->second;\n\t\t\t\tpackingSize = layoutData.packingSize;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcur.bitfield |= (1 << (il2cpp::vm::kClassSizeIsDefault - 1));\n\t\t\t}\n\t\t\tif (packingSize != 0)\n\t\t\t{\n\t\t\t\tcur.bitfield |= ((uint32_t)il2cpp::vm::GlobalMetadata::ConvertPackingSizeToEnum((uint8_t)packingSize) << (il2cpp::vm::kPackingSize - 1));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcur.bitfield |= (1 << (il2cpp::vm::kPackingSizeIsDefault - 1));\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitParamDefs()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::PARAM);\n\n\t\t// extra 16 for not name params\n\t\t_params.reserve(tb.rowNum + 16);\n\t\t_paramRawIndex2ActualParamIndex = new std::vector<TypeIndex>(tb.rowNum);\n\t\t//for (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t//{\n\t\t//\tuint32_t rowIndex = i + 1;\n\t\t//\tIl2CppParameterDefinition& pd = _params[i].paramDef;\n\t\t//\tTbParam data = _rawImage->ReadParam(rowIndex);\n\n\t\t//\tpd.nameIndex = EncodeWithIndex(data.name);\n\t\t//\tpd.token = EncodeToken(TableType::PARAM, rowIndex);\n\t\t//\t// pd.typeIndex 在InitMethodDefs中解析signature后填充。\n\t\t//}\n\t}\n\n\n\tvoid InterpreterImage::InitFieldDefs()\n\t{\n\t\tconst Table& fieldTb = _rawImage->GetTable(TableType::FIELD);\n\t\t_fieldDetails.resize(fieldTb.rowNum);\n\n\t\tfor (size_t i = 0; i < _typesDefines.size(); i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[i];\n\t\t\tuint32_t start = DecodeMetadataIndex(typeDef.fieldStart);\n\t\t\tfor (uint32_t k = 0; k < typeDef.field_count; k++)\n\t\t\t{\n\t\t\t\tFieldDetail& fd = _fieldDetails[start + k];\n\t\t\t\tfd.typeDefIndex = (uint32_t)i;\n\t\t\t}\n\t\t}\n\n\t\tfor (uint32_t i = 0, n = fieldTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tFieldDetail& fd = _fieldDetails[i];\n\t\t\tIl2CppFieldDefinition& cur = fd.fieldDef;\n\n\t\t\tfd.offset = 0;\n\t\t\tfd.defaultValueIndex = kDefaultValueIndexNull;\n\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbField data = _rawImage->ReadField(rowIndex);\n\n\t\t\tBlobReader br = _rawImage->GetBlobReaderByRawIndex(data.signature);\n\t\t\tFieldRefSig frs;\n\t\t\tReadFieldRefSig(br, GetGenericContainerByTypeDefRawIndex(DecodeMetadataIndex(fd.typeDefIndex)), frs);\n\t\t\tif (data.flags != 0)\n\t\t\t{\n\t\t\t\tIl2CppType typeWithAttrs = *frs.type;\n\t\t\t\ttypeWithAttrs.attrs = data.flags;\n\t\t\t\tfrs.type = MetadataPool::GetPooledIl2CppType(typeWithAttrs);\n\t\t\t}\n\n\t\t\t//cur = {};\n\t\t\tcur.nameIndex = EncodeWithIndex(data.name);\n\t\t\tcur.token = EncodeToken(TableType::FIELD, rowIndex);\n\t\t\tcur.typeIndex = AddIl2CppTypeCache(frs.type);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitFieldLayouts()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::FIELDLAYOUT);\n\t\tfor (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t{\n\t\t\tTbFieldLayout data = _rawImage->ReadFieldLayout(i + 1);\n\t\t\t_fieldDetails[data.field - 1].offset = sizeof(Il2CppObject) + data.offset;\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitFieldRVAs()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::FIELDRVA);\n\t\tfor (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t{\n\t\t\tTbFieldRVA data = _rawImage->ReadFieldRVA(i + 1);\n\t\t\tFieldDetail& fd = _fieldDetails[data.field - 1];\n\t\t\tfd.defaultValueIndex = (uint32_t)_fieldDefaultValues.size();\n\n\t\t\tIl2CppFieldDefaultValue fdv = {};\n\t\t\tfdv.fieldIndex = data.field - 1;\n\t\t\tfdv.typeIndex = fd.fieldDef.typeIndex;\n\n\t\t\tuint32_t dataImageOffset = (uint32_t)-1;\n\t\t\tbool ret = _rawImage->TranslateRVAToImageOffset(data.rva, dataImageOffset);\n\t\t\tIL2CPP_ASSERT(ret);\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\tfdv.dataIndex = (DefaultValueDataIndex)EncodeWithIndex(EncodeWithBlobSource(dataImageOffset, BlobSource::RAW_IMAGE));\n#else\n\t\t\tfdv.dataIndex = (DefaultValueDataIndex)EncodeWithIndex(dataImageOffset);\n#endif\n\t\t\t_fieldDefaultValues.push_back(fdv);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitBlittables()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\n\t\tstd::vector<bool> computFlags(typeDefTb.rowNum, false);\n\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tComputeBlittable(&_typesDefines[i], computFlags);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ComputeBlittable(Il2CppTypeDefinition* def, std::vector<bool>& computFlags)\n\t{\n\t\tif (DecodeImageIndex(def->byvalTypeIndex) != GetIndex())\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tuint32_t typeIndex = GetTypeRawIndex(def);\n\t\tif (computFlags[typeIndex])\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tcomputFlags[typeIndex] = true;\n\n\t\tconst Il2CppType* type = GetIl2CppTypeFromRawIndex(DecodeMetadataIndex(def->byvalTypeIndex));\n\n\t\tconst char* typeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(def->nameIndex);\n\n\n\t\tbool blittable = false;\n\t\tif (type->type == IL2CPP_TYPE_VALUETYPE)\n\t\t{\n\t\t\tblittable = true;\n\t\t\tfor (int i = 0; i < def->field_count; i++)\n\t\t\t{\n\t\t\t\tconst Il2CppFieldDefinition* field = GetFieldDefinitionFromRawIndex(DecodeMetadataIndex(def->fieldStart + i));\n\t\t\t\tconst Il2CppType* fieldType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(field->typeIndex);\n\t\t\t\tif (!hybridclr::metadata::IsInstanceField(fieldType))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tswitch (fieldType->type)\n\t\t\t\t{\n\t\t\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\t\t\tcase IL2CPP_TYPE_CHAR:\n\t\t\t\tcase IL2CPP_TYPE_I1:\n\t\t\t\tcase IL2CPP_TYPE_U1:\n\t\t\t\tcase IL2CPP_TYPE_I2:\n\t\t\t\tcase IL2CPP_TYPE_U2:\n\t\t\t\tcase IL2CPP_TYPE_I4:\n\t\t\t\tcase IL2CPP_TYPE_U4:\n\t\t\t\tcase IL2CPP_TYPE_I:\n\t\t\t\tcase IL2CPP_TYPE_U:\n\t\t\t\tcase IL2CPP_TYPE_I8:\n\t\t\t\tcase IL2CPP_TYPE_U8:\n\t\t\t\tcase IL2CPP_TYPE_R4:\n\t\t\t\tcase IL2CPP_TYPE_R8:\n\t\t\t\tcase IL2CPP_TYPE_PTR:\n\t\t\t\tcase IL2CPP_TYPE_FNPTR:\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t\t\t{\n\t\t\t\t\tIl2CppTypeDefinition* fieldDef = (Il2CppTypeDefinition*)fieldType->data.typeHandle;\n\t\t\t\t\tComputeBlittable(fieldDef, computFlags);\n\t\t\t\t\tblittable = fieldDef->bitfield & (1 << (il2cpp::vm::kBitIsBlittable - 1));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tblittable = false;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!blittable)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (blittable)\n\t\t{\n\t\t\tdef->bitfield |= (1 << (il2cpp::vm::kBitIsBlittable - 1));\n\t\t}\n\t}\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\tDefaultValueDataIndex InterpreterImage::ConvertConstValue(CustomAttributeDataWriter& writer, uint32_t blobIndex, const Il2CppType* type)\n\t{\n\t\tIl2CppTypeEnum ttype = type->type;\n\t\tif (ttype == IL2CPP_TYPE_CLASS)\n\t\t{\n\t\t\treturn kDefaultValueIndexNull;\n\t\t}\n\n\t\tDefaultValueIndex retIndex = EncodeWithIndex(EncodeWithBlobSource((DefaultValueIndex)writer.Size(), BlobSource::CONVERTED_IL2CPP_FORMAT));\n\n\t\tBlobReader reader = _rawImage->GetBlobReaderByRawIndex(blobIndex);\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t{\n\t\t\twriter.Write(reader, 1);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t{\n\t\t\twriter.Write(reader, 2);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I4:\n\t\t{\n\t\t\twriter.WriteCompressedInt32((int32_t)reader.Read32());\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U4:\n\t\t{\n\t\t\twriter.WriteCompressedUint32(reader.Read32());\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R4:\n\t\t{\n\t\t\twriter.Write(reader, 4);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\t{\n\t\t\twriter.Write(reader, 8);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_STRING:\n\t\t{\n\t\t\tstd::string str = il2cpp::utils::StringUtils::Utf16ToUtf8((const Il2CppChar*)reader.GetData(), reader.GetLength() / 2);\n\t\t\twriter.WriteCompressedInt32((int32_t)str.length());\n\t\t\twriter.WriteBytes((const uint8_t*)str.c_str(), (int32_t)str.length());\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not supported const type\");\n\t\t}\n\t\t}\n\t\t\n\t\treturn retIndex;\n\t}\n#endif\n\n\tvoid InterpreterImage::InitConsts()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::CONSTANT);\n\t\tfor (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t{\n\t\t\tTbConstant data = _rawImage->ReadConstant(i + 1);\n\t\t\tTableType parentType = DecodeHasConstantType(data.parent);\n\t\t\tuint32_t rowIndex = DecodeHashConstantIndex(data.parent);\n\n\t\t\tIl2CppType tempType = {};\n\t\t\ttempType.type = (Il2CppTypeEnum)data.type;\n\t\t\tconst Il2CppType& type = *MetadataPool::GetPooledIl2CppType(tempType);\n\t\t\tTypeIndex dataTypeIndex = AddIl2CppTypeCache(&type);\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\tbool isNullValue = type.type == IL2CPP_TYPE_CLASS;\n#endif\n\t\t\tswitch (parentType)\n\t\t\t{\n\t\t\tcase TableType::FIELD:\n\t\t\t{\n\t\t\t\tFieldDetail& fd = _fieldDetails[rowIndex - 1];\n\t\t\t\tfd.defaultValueIndex = (uint32_t)_fieldDefaultValues.size();\n\n\t\t\t\tIl2CppFieldDefaultValue fdv = {};\n\t\t\t\tfdv.fieldIndex = rowIndex - 1;\n\t\t\t\tfdv.typeIndex = dataTypeIndex;\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\tfdv.dataIndex = ConvertConstValue(_constValues, data.value, &type);\n#else\n\t\t\t\tuint32_t dataImageOffset = _rawImage->GetImageOffsetOfBlob(type.type, data.value);\n\t\t\t\tfdv.dataIndex = isNullValue ? kDefaultValueIndexNull : (DefaultValueDataIndex)EncodeWithIndex(dataImageOffset);\n#endif\n\t\t\t\t_fieldDefaultValues.push_back(fdv);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TableType::PARAM:\n\t\t\t{\n\t\t\t\tint32_t actualIndex = (*_paramRawIndex2ActualParamIndex)[rowIndex - 1];\n\t\t\t\tParamDetail& fd = _params[actualIndex];\n\t\t\t\tfd.defaultValueIndex = (uint32_t)_paramDefaultValues.size();\n\n\t\t\t\tIl2CppParameterDefaultValue pdv = {};\n\t\t\t\tpdv.typeIndex = dataTypeIndex;\n\t\t\t\tpdv.parameterIndex = fd.parameterIndex;\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\tpdv.dataIndex = ConvertConstValue(_constValues, data.value, &type);\n#else\n\t\t\t\tuint32_t dataImageOffset = _rawImage->GetImageOffsetOfBlob(type.type, data.value);\n\t\t\t\tpdv.dataIndex = isNullValue ? kDefaultValueIndexNull : (DefaultValueDataIndex)EncodeWithIndex(dataImageOffset);\n#endif\n\t\t\t\t_paramDefaultValues.push_back(pdv);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TableType::PROPERTY:\n\t\t\t{\n\t\t\t\tRaiseNotSupportedException(\"not support property const\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"not support const TableType\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitCustomAttributes()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::CUSTOMATTRIBUTE);\n\t\t_tokenCustomAttributes.reserve(tb.rowNum);\n\n\n\t\tuint32_t threadStaticMethodToken = 0;\n\t\tIl2CppCustomAttributeTypeRange* curTypeRange = nullptr;\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= tb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbCustomAttribute data = _rawImage->ReadCustomAttribute(rowIndex);\n\t\t\tTableType parentType = DecodeHasCustomAttributeCodedIndexTableType(data.parent);\n\t\t\tuint32_t parentRowIndex = DecodeHasCustomAttributeCodedIndexRowIndex(data.parent);\n\t\t\tuint32_t token = EncodeToken(parentType, parentRowIndex);\n\t\t\tif (curTypeRange == nullptr || curTypeRange->token != token)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(_tokenCustomAttributes.find(token) == _tokenCustomAttributes.end());\n\t\t\t\tint32_t attributeStartIndex = EncodeWithIndex((int32_t)_customAttribues.size());\n\t\t\t\tint32_t handleIndex = (int32_t)_customAttributeHandles.size();\n\t\t\t\t_tokenCustomAttributes[token] = { (int32_t)EncodeWithIndex(handleIndex), false, nullptr, nullptr };\n#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\t_customAttributeHandles.push_back({ token, (uint32_t)attributeStartIndex });\n#else\n\t\t\t\t_customAttributeHandles.push_back({ token, attributeStartIndex, 0 });\n#endif\n\t\t\t\tcurTypeRange = &_customAttributeHandles[handleIndex];\n\t\t\t}\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t++curTypeRange->count;\n#endif\n\t\t\tTableType ctorMethodTableType = DecodeCustomAttributeTypeCodedIndexTableType(data.type);\n\t\t\tuint32_t ctorMethodRowIndex = DecodeCustomAttributeTypeCodedIndexRowIndex(data.type);\n\t\t\tuint32_t ctorMethodToken = EncodeToken(ctorMethodTableType, ctorMethodRowIndex);\n\t\t\t//CustomAttribute ca = { ctorMethodToken, data.value };\n\t\t\t//ca.value = data.value;\n\t\t\t//ReadMethodRefInfoFromToken(nullptr, nullptr, , ca.attrCtorMethod);\n\t\t\t_customAttribues.push_back({ ctorMethodToken, data.value });\n\n\t\t\tif (parentType == TableType::FIELD)\n\t\t\t{\n\t\t\t\t// try set thread static flags\n\t\t\t\tif (threadStaticMethodToken == 0)\n\t\t\t\t{\n\t\t\t\t\tif (IsThreadStaticCtorToken(ctorMethodTableType, ctorMethodRowIndex))\n\t\t\t\t\t{\n\t\t\t\t\t\tthreadStaticMethodToken = ctorMethodToken;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (ctorMethodToken == threadStaticMethodToken)\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(threadStaticMethodToken != 0);\n\t\t\t\t\t_fieldDetails[parentRowIndex - 1].offset = THREAD_LOCAL_STATIC_MASK;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\tIL2CPP_ASSERT(_tokenCustomAttributes.size() == _customAttributeHandles.size());\n#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t// add extra Il2CppCustomAttributeTypeRange for compute count\n\t\t_customAttributeHandles.push_back({ 0, EncodeWithIndex((int32_t)_customAttribues.size()) });\n#endif\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\t_customAttribtesCaches.resize(_tokenCustomAttributes.size());\n#endif\n\t}\n\n#ifdef HYBRIDCLR_UNITY_2021_OR_NEW\n\n\tvoid InterpreterImage::InitCustomAttributeData(CustomAttributesInfo& cai, const Il2CppCustomAttributeTypeRange& dataRange)\n\t{\n\t\til2cpp::os::FastAutoLock metaLock(&il2cpp::vm::g_MetadataLock);\n\t\tif (cai.inited)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tBuildCustomAttributesData(cai, dataRange);\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\tcai.inited = true;\n\t}\n\n\tvoid InterpreterImage::BuildCustomAttributesData(CustomAttributesInfo& cai, const Il2CppCustomAttributeTypeRange& curTypeRange)\n\t{\n\t\thybridclr::interpreter::ExecutingInterpImageScope scope(hybridclr::interpreter::InterpreterModule::GetCurrentThreadMachineState(), this->_il2cppImage);\n\t\t_il2cppFormatCustomDataBlob.Reset();\n\t\tconst Il2CppCustomAttributeDataRange& nextTypeRange = *(&curTypeRange + 1);\n\t\tuint32_t attrCount = nextTypeRange.startOffset - curTypeRange.startOffset;\n\t\tIL2CPP_ASSERT(attrCount > 0 && attrCount < 1024);\n\t\t_il2cppFormatCustomDataBlob.WriteAttributeCount(attrCount);\n\t\tint32_t attrStartOffset = DecodeMetadataIndex(curTypeRange.startOffset);\n\t\tint32_t methodIndexDataOffset = _il2cppFormatCustomDataBlob.Size();\n\t\t_il2cppFormatCustomDataBlob.Skip(attrCount * sizeof(int32_t));\n\t\tfor (uint32_t i = 0; i < attrCount; i++)\n\t\t{\n\t\t\tconst CustomAttribute& ca = _customAttribues[attrStartOffset + (int32_t)i];\n\t\t\tMethodRefInfo mri = {};\n\t\t\tReadMethodRefInfoFromToken(nullptr, nullptr, DecodeTokenTableType(ca.ctorMethodToken), DecodeTokenRowIndex(ca.ctorMethodToken), mri);\n\t\t\tconst MethodInfo* ctorMethod = GetMethodInfoFromMethodDef(mri.containerType, mri.methodDef);\n\t\t\tMethodIndex ctorIndex = il2cpp::vm::GlobalMetadata::GetMethodIndexFromDefinition(mri.methodDef);\n\t\t\t_il2cppFormatCustomDataBlob.WriteMethodIndex(methodIndexDataOffset, ctorIndex);\n\t\t\tmethodIndexDataOffset += sizeof(int32_t);\n\t\t\tif (ca.value != 0)\n\t\t\t{\n\t\t\t\tBlobReader reader = _rawImage->GetBlobReaderByRawIndex(ca.value);\n\t\t\t\tConvertILCustomAttributeData2Il2CppFormat(ctorMethod, reader);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(mri.methodDef->parameterCount == 0);\n\t\t\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(0);\n\t\t\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(0);\n\t\t\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(0);\n\t\t\t}\n\t\t}\n\t\tvoid* resultData = HYBRIDCLR_MALLOC(_il2cppFormatCustomDataBlob.Size());\n\t\tstd::memcpy(resultData, _il2cppFormatCustomDataBlob.Data(), _il2cppFormatCustomDataBlob.Size());\n\t\tcai.dataStartPtr = resultData;\n\t\tcai.dataEndPtr = (uint8_t*)resultData + _il2cppFormatCustomDataBlob.Size();\n\t}\n\n\tvoid InterpreterImage::WriteEncodeTypeEnum(CustomAttributeDataWriter& writer, const Il2CppType* type)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\tif (type->type == IL2CPP_TYPE_ENUM || klass->enumtype)\n\t\t{\n\t\t\twriter.WriteByte((byte)IL2CPP_TYPE_ENUM);\n\t\t\tint32_t typeIndex = type->type == IL2CPP_TYPE_CLASS || type->type == IL2CPP_TYPE_VALUETYPE ? ((Il2CppTypeDefinition*)type->data.typeHandle)->byvalTypeIndex : AddIl2CppTypeCache(type);\n\t\t\twriter.WriteCompressedInt32(typeIndex);\n\t\t}\n\t\telse if (klass == il2cpp_defaults.systemtype_class)\n\t\t{\n\t\t\twriter.WriteByte((byte)IL2CPP_TYPE_IL2CPP_TYPE_INDEX);\n\t\t}\n\t\telse\n\t\t{\n\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ConvertBoxedValue(CustomAttributeDataWriter& writer, BlobReader& reader, bool writeType)\n\t{\n\t\tuint64_t obj = 0;\n\t\tIl2CppType kind = {};\n\t\tReadCustomAttributeFieldOrPropType(reader, kind);\n\t\tConvertFixedArg(writer, reader, &kind, true);\n\t}\n\n\tvoid InterpreterImage::ConvertSystemType(CustomAttributeDataWriter& writer, BlobReader& reader, bool writeType)\n\t{\n\t\tif (writeType)\n\t\t{\n\t\t\twriter.WriteByte((byte)IL2CPP_TYPE_IL2CPP_TYPE_INDEX);\n\t\t}\n\t\tIl2CppString* fullName = ReadSerString(reader);\n\t\tif (!fullName)\n\t\t{\n\t\t\twriter.WriteCompressedInt32(-1);\n\t\t\treturn;\n\t\t}\n\t\tIl2CppReflectionType* type = GetReflectionTypeFromName(fullName);\n\t\tif (!type)\n\t\t{\n\t\t\tstd::string stdTypeName = il2cpp::utils::StringUtils::Utf16ToUtf8(fullName->chars);\n\t\t\tTEMP_FORMAT(errMsg, \"CustomAttribute fixed arg type:System.Type fullName:'%s' not find\", stdTypeName.c_str());\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(errMsg));\n\t\t}\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type->type);\n\t\tif (!klass->generic_class && (Il2CppTypeDefinition*)klass->typeMetadataHandle)\n\t\t{\n\t\t\twriter.WriteCompressedInt32(((Il2CppTypeDefinition*)klass->typeMetadataHandle)->byvalTypeIndex);\n\t\t}\n\t\telse\n\t\t{\n\t\t\twriter.WriteCompressedInt32(AddIl2CppTypeCache(type->type));\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ConvertFixedArg(CustomAttributeDataWriter& writer, BlobReader& reader, const Il2CppType* type, bool writeType)\n\t{\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.Write(reader, 1);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.Write(reader, 2);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I4:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.WriteCompressedInt32((int32_t)reader.Read32());\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_U4:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.WriteCompressedUint32(reader.Read32());\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R4:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.Write(reader, 4);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\twriter.Write(reader, 8);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\tint32_t numElem = (int32_t)reader.Read32();\n\t\t\twriter.WriteCompressedInt32(numElem);\n\t\t\tif (numElem != -1)\n\t\t\t{\n\t\t\t\t//Il2CppType kind = {};\n\t\t\t\t//ReadCustomAttributeFieldOrPropType(reader, kind);\n\t\t\t\tconst Il2CppType* eleType = type->data.type;\n\t\t\t\tWriteEncodeTypeEnum(writer, eleType);\n\t\t\t\tif (eleType->type == IL2CPP_TYPE_OBJECT)\n\t\t\t\t{\n\t\t\t\t\t// kArrayTypeWithDifferentElements\n\t\t\t\t\twriter.WriteByte(1);\n\t\t\t\t\tfor (uint16_t i = 0; i < numElem; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tConvertBoxedValue(writer, reader, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// all element type is same.\n\t\t\t\t\twriter.WriteByte(0);\n\t\t\t\t\tfor (uint16_t i = 0; i < numElem; i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tConvertFixedArg(writer, reader, eleType, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_STRING:\n\t\t{\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((uint8_t)type->type);\n\t\t\t}\n\t\t\tbyte b = reader.PeekByte();\n\t\t\tif (b == 0xFF)\n\t\t\t{\n\t\t\t\treader.SkipByte();\n\t\t\t\twriter.WriteCompressedInt32(-1);\n\t\t\t}\n\t\t\telse if (b == 0)\n\t\t\t{\n\t\t\t\treader.SkipByte();\n\t\t\t\twriter.WriteCompressedInt32(0);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst byte* beginDataPtr = reader.GetDataOfReadPosition();\n\t\t\t\tuint32_t len = reader.ReadCompressedUint32();\n\t\t\t\twriter.WriteCompressedInt32((int32_t)len);\n\t\t\t\twriter.WriteBytes(reader.GetDataOfReadPosition(), len);\n\t\t\t\treader.SkipBytes(len);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t{\n\t\t\tConvertBoxedValue(writer, reader, writeType);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tif (!klass)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"type not find\");\n\t\t\t}\n\t\t\tif (klass == il2cpp_defaults.object_class)\n\t\t\t{\n\t\t\t\tConvertBoxedValue(writer, reader, writeType);\n\t\t\t}\n\t\t\telse if (klass == il2cpp_defaults.systemtype_class)\n\t\t\t{\n\t\t\t\tConvertSystemType(writer, reader, writeType);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tTEMP_FORMAT(errMsg, \"fixed arg type:%s.%s not support\", klass->namespaze, klass->name);\n\t\t\t\tRaiseNotSupportedException(errMsg);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\twriter.WriteByte((byte)IL2CPP_TYPE_ENUM);\n\t\t\t\tIL2CPP_ASSERT(klass->enumtype);\n\t\t\t\tint32_t typeIndex = klass->generic_class ? AddIl2CppTypeCache(type) : ((Il2CppTypeDefinition*)type->data.typeHandle)->byvalTypeIndex;\n\t\t\t\twriter.WriteCompressedInt32(typeIndex);\n\t\t\t}\n\t\t\tConvertFixedArg(writer, reader, &klass->element_class->byval_arg, false);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SYSTEM_TYPE:\n\t\t{\n\t\t\tConvertSystemType(writer, reader, true);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_BOXED_OBJECT:\n\t\t{\n\t\t\tuint8_t fieldOrPropType = reader.ReadByte();\n\t\t\tIL2CPP_ASSERT(fieldOrPropType == 0x51);\n\t\t\tConvertBoxedValue(writer, reader, writeType);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_ENUM:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tIL2CPP_ASSERT(klass->enumtype);\n\t\t\tif (writeType)\n\t\t\t{\n\t\t\t\tint32_t typeIndex = klass->generic_class ? AddIl2CppTypeCache(type) : ((Il2CppTypeDefinition*)type->data.typeHandle)->byvalTypeIndex;\n\t\t\t\twriter.WriteCompressedInt32(typeIndex);\n\t\t\t}\n\t\t\tConvertFixedArg(writer, reader, &klass->element_class->byval_arg, false);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support fixed argument type\");\n\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::GetFieldDeclaringTypeIndexAndFieldIndexByName(const Il2CppTypeDefinition* declaringType, const char* name, int32_t& typeIndex, int32_t& fieldIndex)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)declaringType);\n\t\tFieldInfo* field = il2cpp::vm::Class::GetFieldFromName(klass, name);\n\t\tif (!field)\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetFieldDeclaringTypeIndexAndFieldIndexByName can't find field\");\n\t\t}\n\t\tif (field->parent == klass)\n\t\t{\n\t\t\ttypeIndex = kTypeDefinitionIndexInvalid;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tklass = field->parent;\n\t\t\tif (klass->generic_class)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"GetFieldDeclaringTypeIndexAndFieldIndexByName doesn't support field of generic CustomAttribute\");\n\t\t\t}\n\t\t\ttypeIndex = il2cpp::vm::GlobalMetadata::GetIndexForTypeDefinition(klass);\n\t\t}\n\t\tfieldIndex = (int32_t)(field - klass->fields);\n\t}\n\n\tvoid InterpreterImage::GetPropertyDeclaringTypeIndexAndPropertyIndexByName(const Il2CppTypeDefinition* declaringType, const char* name, int32_t& typeIndex, int32_t& fieldIndex)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)declaringType);\n\t\tconst PropertyInfo* propertyInfo = il2cpp::vm::Class::GetPropertyFromName(klass, name);\n\t\tif (!propertyInfo)\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetFieldDeclaringTypeIndexAndFieldIndexByName can't find field\");\n\t\t}\n\t\tif (propertyInfo->parent == klass)\n\t\t{\n\t\t\ttypeIndex = kTypeDefinitionIndexInvalid;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tklass = propertyInfo->parent;\n\t\t\tif (klass->generic_class)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"GetPropertyDeclaringTypeIndexAndPropertyIndexByName doesn't support field of generic CustomAttribute\");\n\t\t\t}\n\t\t\ttypeIndex = il2cpp::vm::GlobalMetadata::GetIndexForTypeDefinition(klass);\n\t\t}\n#if UNITY_ENGINE_TUANJIE\n\t\tfieldIndex = -1;\n\t\tfor (int32_t i = 0; i < klass->property_count; i++)\n\t\t{\n\t\t\tif (klass->properties[i] == propertyInfo)\n\t\t\t{\n\t\t\t\tfieldIndex = i;\n\t\t\t\tbreak;;\n\t\t\t}\n\t\t}\n\t\tIL2CPP_ASSERT(fieldIndex != -1);\n#else\n\t\tfieldIndex = (int32_t)(propertyInfo - klass->properties);\n#endif\n\t}\n\n\tvoid InterpreterImage::ConvertILCustomAttributeData2Il2CppFormat(const MethodInfo* ctorMethod, BlobReader& reader)\n\t{\n\t\tuint16_t prolog = reader.Read16();\n\t\tIL2CPP_ASSERT(prolog == 0x0001);\n\t\tIL2CPP_ASSERT(!ctorMethod->is_generic);\n\n\t\t_tempCtorArgBlob.Reset();\n\t\tfor (uint16_t i = 0; i < ctorMethod->parameters_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(ctorMethod->parameters[i]);\n\t\t\tConvertFixedArg(_tempCtorArgBlob, reader, paramType, true);\n\t\t}\n\n\t\tuint16_t numNamed = reader.Read16();\n\n\t\tuint32_t fieldCount = 0;\n\t\tuint32_t propertyCount = 0;\n\t\t_tempFieldBlob.Reset();\n\t\t_tempPropertyBlob.Reset();\n\t\tconst Il2CppTypeDefinition* declaringType = GetUnderlyingTypeDefinition(&ctorMethod->klass->byval_arg);\n\t\tfor (uint16_t idx = 0; idx < numNamed; idx++)\n\t\t{\n\t\t\tbyte fieldOrPropTypeTag = reader.ReadByte();\n\t\t\tIL2CPP_ASSERT(fieldOrPropTypeTag == 0x53 || fieldOrPropTypeTag == 0x54);\n\t\t\tIl2CppType fieldOrPropType = {};\n\t\t\tReadCustomAttributeFieldOrPropType(reader, fieldOrPropType);\n\t\t\tIl2CppString* fieldOrPropName = ReadSerString(reader);\n\t\t\tstd::string stdStrName = il2cpp::utils::StringUtils::Utf16ToUtf8(fieldOrPropName->chars);\n\t\t\tconst char* cstrName = stdStrName.c_str();\n\t\t\tint32_t fieldOrPropertyDeclaringTypeIndex = kTypeIndexInvalid;\n\t\t\tint32_t fieldOrPropertyIndex = 0;\n\t\t\tif (fieldOrPropTypeTag == 0x53)\n\t\t\t{\n\t\t\t\t++fieldCount;\n\t\t\t\tConvertFixedArg(_tempFieldBlob, reader, &fieldOrPropType, true);\n\t\t\t\tGetFieldDeclaringTypeIndexAndFieldIndexByName(declaringType, cstrName, fieldOrPropertyDeclaringTypeIndex, fieldOrPropertyIndex);\n\t\t\t\tif (fieldOrPropertyDeclaringTypeIndex == kTypeDefinitionIndexInvalid)\n\t\t\t\t{\n\t\t\t\t\t_tempFieldBlob.WriteCompressedInt32(fieldOrPropertyIndex);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_tempFieldBlob.WriteCompressedInt32(-fieldOrPropertyIndex - 1);\n\t\t\t\t\t_tempFieldBlob.WriteCompressedUint32(fieldOrPropertyDeclaringTypeIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++propertyCount;\n\t\t\t\tConvertFixedArg(_tempPropertyBlob, reader, &fieldOrPropType, true);\n\t\t\t\tGetPropertyDeclaringTypeIndexAndPropertyIndexByName(declaringType, cstrName, fieldOrPropertyDeclaringTypeIndex, fieldOrPropertyIndex);\n\t\t\t\tif (fieldOrPropertyDeclaringTypeIndex == kTypeDefinitionIndexInvalid)\n\t\t\t\t{\n\t\t\t\t\t_tempPropertyBlob.WriteCompressedInt32(fieldOrPropertyIndex);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_tempPropertyBlob.WriteCompressedInt32(-fieldOrPropertyIndex - 1);\n\t\t\t\t\t_tempPropertyBlob.WriteCompressedUint32(fieldOrPropertyDeclaringTypeIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(ctorMethod->parameters_count);\n\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(fieldCount);\n\t\t_il2cppFormatCustomDataBlob.WriteCompressedUint32(propertyCount);\n\t\t_il2cppFormatCustomDataBlob.Write(_tempCtorArgBlob);\n\t\t_il2cppFormatCustomDataBlob.Write(_tempFieldBlob);\n\t\t_il2cppFormatCustomDataBlob.Write(_tempPropertyBlob);\n\t}\n#endif\n\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\n\tvoid InterpreterImage::ConstructCustomAttribute(BlobReader& reader, Il2CppObject* obj, const MethodInfo* ctorMethod)\n\t{\n\t\tuint16_t prolog = reader.Read16();\n\t\tIL2CPP_ASSERT(prolog == 0x0001);\n\t\tif (ctorMethod->parameters_count == 0)\n\t\t{\n\t\t\til2cpp::vm::Runtime::Invoke(ctorMethod, obj, nullptr, nullptr);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tint32_t argSize = sizeof(uint64_t) * ctorMethod->parameters_count;\n\t\t\tuint64_t* argDatas = (uint64_t*)alloca(argSize);\n\t\t\tstd::memset(argDatas, 0, argSize);\n\t\t\tvoid** argPtrs = (void**)alloca(sizeof(void*) * ctorMethod->parameters_count); // same with argDatas\n\t\t\tfor (uint8_t i = 0; i < ctorMethod->parameters_count; i++)\n\t\t\t{\n\t\t\t\targPtrs[i] = argDatas + i;\n\t\t\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(ctorMethod->parameters[i]);\n\t\t\t\tReadFixedArg(reader, paramType, argDatas + i);\n\t\t\t\tIl2CppClass* paramKlass = il2cpp::vm::Class::FromIl2CppType(paramType);\n\t\t\t\tif (!IS_CLASS_VALUE_TYPE(paramKlass))\n\t\t\t\t{\n\t\t\t\t\targPtrs[i] = (void*)argDatas[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\til2cpp::vm::Runtime::Invoke(ctorMethod, obj, argPtrs, nullptr);\n\t\t\t// clear ref. may not need. gc memory barrier\n\t\t\tstd::memset(argDatas, 0, argSize);\n\t\t}\n\t\tuint16_t numNamed = reader.Read16();\n\t\tIl2CppClass* klass = obj->klass;\n\t\tfor (uint16_t idx = 0; idx < numNamed; idx++)\n\t\t{\n\t\t\tbyte fieldOrPropTypeTag = reader.ReadByte();\n\t\t\tIL2CPP_ASSERT(fieldOrPropTypeTag == 0x53 || fieldOrPropTypeTag == 0x54);\n\t\t\tIl2CppType fieldOrPropType = {};\n\t\t\tReadCustomAttributeFieldOrPropType(reader, fieldOrPropType);\n\t\t\tIl2CppString* fieldOrPropName = ReadSerString(reader);\n\t\t\tstd::string stdStrName = il2cpp::utils::StringUtils::Utf16ToUtf8(fieldOrPropName->chars);\n\t\t\tconst char* cstrName = stdStrName.c_str();\n\t\t\tuint64_t value = 0;\n\t\t\tReadFixedArg(reader, &fieldOrPropType, &value);\n\t\t\tif (fieldOrPropTypeTag == 0x53)\n\t\t\t{\n\t\t\t\tFieldInfo* field = il2cpp::vm::Class::GetFieldFromName(klass, cstrName);\n\t\t\t\tif (!field)\n\t\t\t\t{\n\t\t\t\t\tTEMP_FORMAT(errMsg, \"CustomAttribute field missing. klass:%s.%s field:%s\", klass->namespaze, klass->name, cstrName);\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeInitializationException(errMsg, nullptr));\n\t\t\t\t}\n\t\t\t\tIL2CPP_ASSERT(IsTypeEqual(&fieldOrPropType, field->type));\n\t\t\t\til2cpp::vm::Field::SetValue(obj, field, &value);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst PropertyInfo* prop = il2cpp::vm::Class::GetPropertyFromName(klass, cstrName);\n\t\t\t\tif (!prop)\n\t\t\t\t{\n\t\t\t\t\tTEMP_FORMAT(errMsg, \"CustomAttribute property missing. klass:%s property:%s\", klass->name, cstrName);\n\t\t\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeInitializationException(errMsg, nullptr));\n\t\t\t\t}\n\t\t\t\tIL2CPP_ASSERT(IsTypeEqual(&fieldOrPropType, GET_METHOD_PARAMETER_TYPE(prop->set->parameters[0])));\n\t\t\t\tIl2CppException* ex = nullptr;\n\t\t\t\tIl2CppClass* propKlass = il2cpp::vm::Class::FromIl2CppType(&fieldOrPropType);\n\t\t\t\tIL2CPP_ASSERT(propKlass);\n\t\t\t\tvoid* args[] = { (IS_CLASS_VALUE_TYPE(propKlass) ? &value : (void*)value) };\n\t\t\t\til2cpp::vm::Runtime::Invoke(prop->set, obj, args, &ex);\n\t\t\t\tif (ex)\n\t\t\t\t{\n\t\t\t\t\til2cpp::vm::Exception::Raise(ex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tCustomAttributesCache* InterpreterImage::GenerateCustomAttributesCacheInternal(CustomAttributeIndex index)\n\t{\n\t\tIL2CPP_ASSERT(index != kCustomAttributeIndexInvalid);\n\t\tIL2CPP_ASSERT(index < (CustomAttributeIndex)_customAttributeHandles.size());\n\t\tCustomAttributesCache* cache = _customAttribtesCaches[index];\n\t\tif (cache)\n\t\t{\n\t\t\treturn cache;\n\t\t}\n\n\t\tIl2CppCustomAttributeTypeRange& typeRange = _customAttributeHandles[index];\n\n\t\thybridclr::interpreter::ExecutingInterpImageScope scope(hybridclr::interpreter::InterpreterModule::GetCurrentThreadMachineState(), this->_il2cppImage);\n\n\t\tcache = (CustomAttributesCache*)IL2CPP_CALLOC(1, sizeof(CustomAttributesCache));\n\t\tint32_t count= (int32_t)typeRange.count;\n\t\tcache->count = count;\n\t\tcache->attributes = (Il2CppObject**)il2cpp::gc::GarbageCollector::AllocateFixed(sizeof(Il2CppObject*) * count, 0);\n\n\t\tint32_t start = DecodeMetadataIndex(GET_CUSTOM_ATTRIBUTE_TYPE_RANGE_START(typeRange));\n\t\tfor (int32_t i = 0; i < count; i++)\n\t\t{\n\t\t\tint32_t attrIndex = start + i;\n\t\t\tIL2CPP_ASSERT(attrIndex >= 0 && attrIndex < (int32_t)_customAttribues.size());\n\t\t\tCustomAttribute& ca = _customAttribues[attrIndex];\n\t\t\tMethodRefInfo mri = {};\n\t\t\tReadMethodRefInfoFromToken(nullptr, nullptr, DecodeTokenTableType(ca.ctorMethodToken), DecodeTokenRowIndex(ca.ctorMethodToken), mri);\n\t\t\tconst MethodInfo* ctorMethod = GetMethodInfoFromMethodDef(mri.containerType, mri.methodDef);\n\t\t\tIL2CPP_ASSERT(ctorMethod);\n\t\t\tIl2CppClass* klass = ctorMethod->klass;\n\t\t\tIl2CppObject* attr = il2cpp::vm::Object::New(klass);\n\t\t\tIl2CppArray* paramArr = nullptr;\n\t\t\tif (ca.value != 0)\n\t\t\t{\n\t\t\t\tBlobReader reader = _rawImage->GetBlobReaderByRawIndex(ca.value);\n\t\t\t\tConstructCustomAttribute(reader, attr, ctorMethod);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(ctorMethod->parameters_count == 0);\n\t\t\t\til2cpp::vm::Runtime::Invoke(ctorMethod, attr, nullptr, nullptr);\n\t\t\t}\n\n\t\t\tcache->attributes[i] = attr;\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)cache->attributes + i);\n\t\t}\n\n\t\til2cpp::os::FastAutoLock metaLock(&il2cpp::vm::g_MetadataLock);\n\t\tCustomAttributesCache* original = _customAttribtesCaches[index];\n\t\tif (original)\n\t\t{\n\t\t\t// A non-NULL return value indicates some other thread already generated this cache.\n\t\t\t// We need to cleanup the resources we allocated\n\t\t\til2cpp::gc::GarbageCollector::FreeFixed(cache->attributes);\n\t\t\tHYBRIDCLR_FREE(cache);\n\t\t\treturn original;\n\t\t}\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\t_customAttribtesCaches[index] = cache;\n\t\treturn cache;\n\t}\n#elif HYBRIDCLR_UNITY_2021\n\tCustomAttributesCache* InterpreterImage::GenerateCustomAttributesCacheInternal(CustomAttributeIndex index)\n\t{\n\t\tIL2CPP_ASSERT(index != kCustomAttributeIndexInvalid);\n\t\tIL2CPP_ASSERT(index < (CustomAttributeIndex)_customAttributeHandles.size());\n\t\tCustomAttributesCache* cache = _customAttribtesCaches[index];\n\t\tif (cache)\n\t\t{\n\t\t\treturn cache;\n\t\t}\n\n\t\thybridclr::interpreter::ExecutingInterpImageScope scope(hybridclr::interpreter::InterpreterModule::GetCurrentThreadMachineState(), this->_il2cppImage);\n\n\t\tIl2CppCustomAttributeTypeRange& typeRange = _customAttributeHandles[index];\n\t\tvoid* start;\n\t\tvoid* end;\n\t\tstd::tie(start, end) = CreateCustomAttributeDataTuple(&typeRange);\n\t\tIL2CPP_ASSERT(start && end);\n\n\t\til2cpp::metadata::CustomAttributeDataReader reader(start, end);\n\n\t\tcache = (CustomAttributesCache*)IL2CPP_CALLOC(1, sizeof(CustomAttributesCache));\n\t\tcache->count = (int)reader.GetCount();\n\t\tcache->attributes = (Il2CppObject**)il2cpp::gc::GarbageCollector::AllocateFixed(sizeof(Il2CppObject*) * cache->count, 0);\n\n\t\til2cpp::metadata::CustomAttributeDataIterator iter = reader.GetDataIterator();\n\t\tfor (int i = 0; i < cache->count; i++)\n\t\t{\n\t\t\tIl2CppException* exc = NULL;\n\t\t\til2cpp::metadata::CustomAttributeCreator creator;\n\t\t\tif (reader.VisitCustomAttributeData(_il2cppImage, &iter, &creator, &exc))\n\t\t\t{\n\t\t\t\tcache->attributes[i] = creator.GetAttribute(&exc);\n\t\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)&cache->attributes[i]);\n\t\t\t}\n\n\t\t\tif (exc != NULL)\n\t\t\t{\n\t\t\t\til2cpp::gc::GarbageCollector::FreeFixed(cache->attributes);\n\t\t\t\tHYBRIDCLR_FREE(cache);\n\t\t\t\til2cpp::vm::Exception::Raise(exc);\n\t\t\t}\n\t\t}\n\n\n\t\til2cpp::os::FastAutoLock metaLock(&il2cpp::vm::g_MetadataLock);\n\t\tCustomAttributesCache* original = _customAttribtesCaches[index];\n\t\tif (original)\n\t\t{\n\t\t\t// A non-NULL return value indicates some other thread already generated this cache.\n\t\t\t// We need to cleanup the resources we allocated\n\t\t\til2cpp::gc::GarbageCollector::FreeFixed(cache->attributes);\n\t\t\tHYBRIDCLR_FREE(cache);\n\t\t\treturn original;\n\t\t}\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\t_customAttribtesCaches[index] = cache;\n\t\treturn cache;\n\t}\n#endif\n\n\tvoid InterpreterImage::InitModuleRefs()\n\t{\n\t\tconst Table& moduleRefTb = _rawImage->GetTable(TableType::MODULEREF);\n\t\t_moduleRefs.reserve(moduleRefTb.rowNum);\n\t\tfor (uint32_t rid = 1; rid <= moduleRefTb.rowNum; rid++)\n\t\t{\n\t\t\tTbModuleRef moduleRef = _rawImage->ReadModuleRef(rid);\n\t\t\tconst char* moduleName = _rawImage->GetStringFromRawIndex(moduleRef.name);\n\t\t\t_moduleRefs.push_back(moduleName);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitImplMaps()\n\t{\n\t\tconst Table& implMapTb = _rawImage->GetTable(TableType::IMPLMAP);\n\t\t_implMapInfos.reserve(implMapTb.rowNum);\n\t\tfor (uint32_t rid = 1; rid <= implMapTb.rowNum; rid++)\n\t\t{\n\t\t\tTbImplMap implMap = _rawImage->ReadImplMap(rid);\n\t\t\tImplMapInfo info = {};\n\t\t\tinfo.moduleName = _moduleRefs[DecodeTokenRowIndex(implMap.importScope) - 1];\n\t\t\tinfo.importName = _rawImage->GetStringFromRawIndex(implMap.importName);\n\t\t\tinfo.mappingFlags = implMap.mappingFlags;\n\t\t\tuint32_t memberForwardedToken = hybridclr::metadata::ConvertMemberForwardedToken2Token(implMap.memberForwarded);\n\t\t\t_implMapInfos.insert({ memberForwardedToken, info });\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitMethodDefs0()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\tconst Table& methodTb = _rawImage->GetTable(TableType::METHOD);\n\n\t\t_methodDefines.resize(methodTb.rowNum);\n\t\tfor (Il2CppMethodDefinition& md : _methodDefines)\n\t\t{\n\t\t\tmd.genericContainerIndex = kGenericContainerIndexInvalid;\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitMethodDefs()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\tconst Table& methodTb = _rawImage->GetTable(TableType::METHOD);\n\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[i];\n\t\t\tuint32_t rawMethodStart = DecodeMetadataIndex(typeDef.methodStart);\n\n\t\t\tfor (int m = 0; m < typeDef.method_count; m++)\n\t\t\t{\n\t\t\t\tIl2CppMethodDefinition& md = _methodDefines[rawMethodStart + m];\n\t\t\t\tmd.declaringType = EncodeWithIndex(i);\n\t\t\t}\n\t\t}\n\n\t\tint32_t paramTableRowNum = _rawImage->GetTable(TableType::PARAM).rowNum;\n\t\tfor (uint32_t index = 0; index < methodTb.rowNum; index++)\n\t\t{\n\t\t\tIl2CppMethodDefinition& md = _methodDefines[index];\n\t\t\tuint32_t rowIndex = index + 1;\n\t\t\tTbMethod methodData = _rawImage->ReadMethod(rowIndex);\n\n\t\t\tmd.nameIndex = EncodeWithIndex(methodData.name);\n\t\t\tmd.parameterStart = methodData.paramList - 1;\n\t\t\t//md.genericContainerIndex = kGenericContainerIndexInvalid;\n\t\t\tmd.token = EncodeToken(TableType::METHOD, rowIndex);\n\t\t\tmd.flags = methodData.flags;\n\t\t\tmd.iflags = methodData.implFlags;\n\t\t\tmd.slot = kInvalidIl2CppMethodSlot;\n\t\t\tif (index > 0)\n\t\t\t{\n\t\t\t\tauto& last = _methodDefines[index - 1];\n\t\t\t\tlast.parameterCount = md.parameterStart - last.parameterStart;\n\t\t\t}\n\t\t\tif (index == methodTb.rowNum - 1)\n\t\t\t{\n\t\t\t\tmd.parameterCount = (int)paramTableRowNum - (int32_t)md.parameterStart;\n\t\t\t}\n\n\t\t\t//MethodBody& body = _methodBodies[index];\n\t\t\t//ReadMethodBody(md, methodData, body);\n\t\t}\n\n\t\tfor (uint32_t i = 0, n = typeDefTb.rowNum; i < n; i++)\n\t\t{\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[i];\n\t\t\tuint32_t rawMethodStart = DecodeMetadataIndex(typeDef.methodStart);\n\t\t\tbool isInterface = IsInterface(typeDef.flags);\n\t\t\tuint16_t slotIdx = 0;\n\t\t\tfor (int m = 0; m < typeDef.method_count; m++)\n\t\t\t{\n\t\t\t\tIl2CppMethodDefinition& md = _methodDefines[rawMethodStart + m];\n\t\t\t\tconst char* methodName = _rawImage->GetStringFromRawIndex(DecodeMetadataIndex(md.nameIndex));\n\t\t\t\tif (!std::strcmp(methodName, \".cctor\"))\n\t\t\t\t{\n\t\t\t\t\ttypeDef.bitfield |= (1 << (il2cpp::vm::kBitHasStaticConstructor - 1));\n\t\t\t\t}\n\t\t\t\tif (!std::strcmp(methodName, \"Finalize\"))\n\t\t\t\t{\n\t\t\t\t\ttypeDef.bitfield |= (1 << (il2cpp::vm::kBitHasFinalizer - 1));\n\t\t\t\t}\n\t\t\t\tif (isInterface && IsInstanceMethod(&md) && IsVirtualMethod(md.flags))\n\t\t\t\t{\n\t\t\t\t\tmd.slot = slotIdx++;\n\t\t\t\t}\n\t\t\t\t// TODO 可以考虑优化一下,将 signature在前一步存到暂时不用的 returnType里\n\t\t\t\tTbMethod methodData = _rawImage->ReadMethod(rawMethodStart + m + 1);\n\n\t\t\t\tBlobReader methodSigReader = _rawImage->GetBlobReaderByRawIndex(methodData.signature);\n\t\t\t\tuint32_t namedParamStart = md.parameterStart;\n\t\t\t\tuint32_t namedParamCount = md.parameterCount;\n\n\t\t\t\tuint32_t actualParamStart = (uint32_t)_params.size();\n\t\t\t\tReadMethodDefSig(\n\t\t\t\t\tmethodSigReader,\n\t\t\t\t\tGetGenericContainerByTypeDefinition(&typeDef),\n\t\t\t\t\tGetGenericContainerByRawIndex(DecodeMetadataIndex(md.genericContainerIndex)),\n\t\t\t\t\tmd,\n\t\t\t\t\t_params);\n\t\t\t\tuint32_t actualParamCount = (uint32_t)_params.size() - actualParamStart;\n\t\t\t\tmd.parameterStart = actualParamStart;\n\t\t\t\tmd.parameterCount = actualParamCount;\n\t\t\t\tif (md.parameterCount >= 256)\n\t\t\t\t{\n\t\t\t\t\tTEMP_FORMAT(errMsg, \"method:%s.%s parameter count:%d is too large\", _rawImage->GetStringFromRawIndex(DecodeMetadataIndex(typeDef.nameIndex)), methodName, md.parameterCount);\n                    RaiseExecutionEngineException(errMsg);\n\t\t\t\t}\n\t\t\t\tfor (uint32_t paramRowIndex = namedParamStart + 1; paramRowIndex <= namedParamStart + namedParamCount; paramRowIndex++)\n\t\t\t\t{\n\t\t\t\t\tTbParam data = _rawImage->ReadParam(paramRowIndex);\n\t\t\t\t\tif (data.sequence > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tint32_t actualParamIndex = actualParamStart + data.sequence - 1;\n\t\t\t\t\t\tParamDetail& paramDetail = _params[actualParamIndex];\n\t\t\t\t\t\tIl2CppParameterDefinition& pd = paramDetail.paramDef;\n\t\t\t\t\t\tIL2CPP_ASSERT(paramDetail.parameterIndex == data.sequence - 1);\n\t\t\t\t\t\tpd.nameIndex = EncodeWithIndex(data.name);\n\t\t\t\t\t\tpd.token = EncodeToken(TableType::PARAM, paramRowIndex);\n\t\t\t\t\t\t(*_paramRawIndex2ActualParamIndex)[paramRowIndex - 1] = actualParamIndex;\n\t\t\t\t\t\tif (data.flags)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconst Il2CppType* fieldType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(pd.typeIndex);\n\t\t\t\t\t\t\tIl2CppType* newType = MetadataPool::ShallowCloneIl2CppType(fieldType);\n\t\t\t\t\t\t\tnewType->attrs = data.flags;\n\t\t\t\t\t\t\t//paramDetail.type = newType;\n\t\t\t\t\t\t\tpd.typeIndex = AddIl2CppTypeCache(newType);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// data.sequence == 0  is for returnType.\n\t\t\t\t\t\t// used for parent of CustomeAttributes of ReturnType\n\t\t\t\t\t\t// il2cpp not support ReturnType CustomAttributes. so we just ignore it.\n#if SUPPORT_METHOD_RETURN_TYPE_CUSTOM_ATTRIBUTE\n\t\t\t\t\t\tmd.returnParameterToken = EncodeToken(TableType::PARAM, paramRowIndex);\n#endif\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst il2cpp::utils::dynamic_array<MethodImpl> InterpreterImage::GetTypeMethodImplByTypeDefinition(const Il2CppTypeDefinition* typeDef)\n\t{\n\t\tuint32_t index = (uint32_t)(typeDef - &_typesDefines[0]);\n\t\tIL2CPP_ASSERT(index < (uint32_t)_typeDetails.size());\n\t\tTypeDefinitionDetail& tdd = _typeDetails[index];\n\t\til2cpp::utils::dynamic_array<MethodImpl> methodImpls(tdd.methodImplCount);\n\n\t\tfor (uint32_t i = 0; i < tdd.methodImplCount; i++)\n\t\t{\n\t\t\tuint32_t index = tdd.methodImplStart + i;\n\t\t\tTbMethodImpl data = _rawImage->ReadMethodImpl(index + 1);\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[data.classIdx - 1];\n\t\t\tIl2CppGenericContainer* gc = GetGenericContainerByTypeDefinition(&typeDef);\n\t\t\tMethodImpl& impl = methodImpls[i];\n\t\t\tReadMethodRefInfoFromToken(gc, nullptr, DecodeMethodDefOrRefCodedIndexTableType(data.methodBody), DecodeMethodDefOrRefCodedIndexRowIndex(data.methodBody), impl.body);\n\t\t\tReadMethodRefInfoFromToken(gc, nullptr, DecodeMethodDefOrRefCodedIndexTableType(data.methodDeclaration), DecodeMethodDefOrRefCodedIndexRowIndex(data.methodDeclaration), impl.declaration);\n\t\t}\n\t\treturn methodImpls;\n\t}\n\n\tvoid InterpreterImage::InitMethodImpls0()\n\t{\n\t\tconst Table& miTb = _rawImage->GetTable(TableType::METHODIMPL);\n\t\tfor (uint32_t i = 0; i < miTb.rowNum; i++)\n\t\t{\n\t\t\tTbMethodImpl data = _rawImage->ReadMethodImpl(i + 1);\n\t\t\tuint32_t typeIndex = data.classIdx - 1;\n\t\t\tTypeDefinitionDetail& tdd = _typeDetails[typeIndex];\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[typeIndex];\n\t\t\tIl2CppGenericContainer* gc = GetGenericContainerByTypeDefinition(&typeDef);\n\t\t\tif (tdd.methodImplCount == 0)\n\t\t\t{\n\t\t\t\ttdd.methodImplStart = i;\n\t\t\t}\n\t\t\t++tdd.methodImplCount;\n\t\t\t//MethodImpl impl;\n\t\t\t//ReadMethodRefInfoFromToken(gc, nullptr, DecodeMethodDefOrRefCodedIndexTableType(data.methodBody), DecodeMethodDefOrRefCodedIndexRowIndex(data.methodBody), impl.body);\n\t\t\t//ReadMethodRefInfoFromToken(gc, nullptr, DecodeMethodDefOrRefCodedIndexTableType(data.methodDeclaration), DecodeMethodDefOrRefCodedIndexRowIndex(data.methodDeclaration), impl.declaration);\n\t\t\t//tdd.methodImpls.push_back(impl);\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitProperties()\n\t{\n\t\tconst Table& propertyMapTb = _rawImage->GetTable(TableType::PROPERTYMAP);\n\t\tconst Table& propertyTb = _rawImage->GetTable(TableType::PROPERTY);\n\t\t_propeties.reserve(propertyTb.rowNum);\n\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= propertyTb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbProperty data = _rawImage->ReadProperty(rowIndex);\n\t\t\t_propeties.push_back({ _rawImage->GetStringFromRawIndex(data.name), data.flags, data.type, 0, 0\n\t\t\t\t, nullptr\n\t\t\t\t, { (StringIndex)EncodeWithIndex(data.name), kMethodIndexInvalid, kMethodIndexInvalid, (uint32_t)data.flags, EncodeToken(TableType::PROPERTY, rowIndex)}\n\t\t\t\t});\n\t\t}\n\n\t\tIl2CppTypeDefinition* last = nullptr;\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= propertyMapTb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbPropertyMap data = _rawImage->ReadPropertyMap(rowIndex);\n\t\t\tIl2CppTypeDefinition* typeDef = &_typesDefines[data.parent - 1];\n\t\t\ttypeDef->propertyStart = EncodeWithIndex(data.propertyList); // start from 1\n\t\t\tif (last != nullptr)\n\t\t\t{\n\t\t\t\tlast->property_count = data.propertyList - DecodeMetadataIndex(last->propertyStart);\n\t\t\t}\n\t\t\tlast = typeDef;\n\t\t}\n\t\tif (last)\n\t\t{\n\t\t\tlast->property_count = propertyTb.rowNum - DecodeMetadataIndex(last->propertyStart) + 1;\n\t\t}\n#if HYBRIDCLR_UNITY_2019\n\t\tfor (const Il2CppTypeDefinition& typeDef : _typesDefines)\n\t\t{\n\t\t\tif (typeDef.property_count == 0)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (int32_t start = DecodeMetadataIndex(typeDef.propertyStart), i = 0; i < typeDef.property_count; i++)\n\t\t\t{\n\t\t\t\t_propeties[start + i - 1].declaringType = &typeDef;\n\t\t\t}\n\t\t}\n#endif\n\t}\n\n\tvoid InterpreterImage::InitEvents()\n\t{\n\t\tconst Table& eventMapTb = _rawImage->GetTable(TableType::EVENTMAP);\n\t\tconst Table& eventTb = _rawImage->GetTable(TableType::EVENT);\n\t\t_events.reserve(eventTb.rowNum);\n\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= eventTb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbEvent data = _rawImage->ReadEvent(rowIndex);\n\t\t\t_events.push_back({ _rawImage->GetStringFromRawIndex(data.name), data.eventFlags, data.eventType, 0, 0, 0\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\t, nullptr\n\t\t\t\t, { (StringIndex)EncodeWithIndex(data.name), kTypeIndexInvalid, kMethodIndexInvalid, kMethodIndexInvalid, kMethodIndexInvalid, EncodeToken(TableType::EVENT, rowIndex)}\n#endif\n\t\t\t\t});\n\t\t}\n\n\t\tIl2CppTypeDefinition* last = nullptr;\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= eventMapTb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbEventMap data = _rawImage->ReadEventMap(rowIndex);\n\t\t\tIl2CppTypeDefinition* typeDef = &_typesDefines[data.parent - 1];\n\t\t\ttypeDef->eventStart = EncodeWithIndex(data.eventList); // start from 1\n\t\t\tif (last != nullptr)\n\t\t\t{\n\t\t\t\tlast->event_count = data.eventList - DecodeMetadataIndex(last->eventStart);\n\t\t\t}\n\t\t\tlast = typeDef;\n\t\t}\n\t\tif (last)\n\t\t{\n\t\t\tlast->event_count = eventTb.rowNum - DecodeMetadataIndex(last->eventStart) + 1;\n\t\t}\n#if HYBRIDCLR_UNITY_2019\n\t\tfor (const Il2CppTypeDefinition& typeDef : _typesDefines)\n\t\t{\n\t\t\tif (typeDef.event_count == 0)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (int32_t start = DecodeMetadataIndex(typeDef.eventStart), i = 0; i < typeDef.event_count; i++)\n\t\t\t{\n\t\t\t\tEventDetail& ed = _events[start + i - 1];\n\t\t\t\ted.declaringType = &typeDef;\n\t\t\t\ted.il2cppDefinition.typeIndex = typeDef.byvalTypeIndex;\n\t\t\t}\n\t\t}\n#endif\n\t}\n\n\n\tvoid InterpreterImage::InitMethodSemantics()\n\t{\n\t\tconst Table& msTb = _rawImage->GetTable(TableType::METHODSEMANTICS);\n\t\tfor (uint32_t rowIndex = 1; rowIndex <= msTb.rowNum; rowIndex++)\n\t\t{\n\t\t\tTbMethodSemantics data = _rawImage->ReadMethodSemantics(rowIndex);\n\t\t\tuint32_t method = data.method;\n\t\t\tuint16_t semantics = data.semantics;\n\t\t\tTableType tableType = DecodeHasSemanticsCodedIndexTableType(data.association);\n\t\t\tuint32_t propertyOrEventIndex = DecodeHasSemanticsCodedIndexRowIndex(data.association) - 1;\n\t\t\tif (semantics & (uint16_t)MethodSemanticsAttributes::Getter)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(tableType == TableType::PROPERTY);\n\t\t\t\tPropertyDetail& pd = _propeties[propertyOrEventIndex];\n\t\t\t\tpd.getterMethodIndex = method;\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\tpd.il2cppDefinition.get = method - DecodeMetadataIndex(pd.declaringType->methodStart) - 1;\n#endif\n\t\t\t}\n\t\t\tif (semantics & (uint16_t)MethodSemanticsAttributes::Setter)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(tableType == TableType::PROPERTY);\n\t\t\t\tPropertyDetail& pd = _propeties[propertyOrEventIndex];\n\t\t\t\tpd.setterMethodIndex = method;\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\tpd.il2cppDefinition.set = method - DecodeMetadataIndex(pd.declaringType->methodStart) - 1;\n#endif\n\t\t\t}\n\t\t\tif (semantics & (uint16_t)MethodSemanticsAttributes::AddOn)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(tableType == TableType::EVENT);\n\t\t\t\tEventDetail& ed = _events[propertyOrEventIndex];\n\t\t\t\ted.addMethodIndex = method;\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\ted.il2cppDefinition.add = method - DecodeMetadataIndex(ed.declaringType->methodStart) - 1;\n#endif\n\t\t\t}\n\t\t\tif (semantics & (uint16_t)MethodSemanticsAttributes::RemoveOn)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(tableType == TableType::EVENT);\n\t\t\t\tEventDetail& ed = _events[propertyOrEventIndex];\n\t\t\t\ted.removeMethodIndex = method;\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\ted.il2cppDefinition.remove = method - DecodeMetadataIndex(ed.declaringType->methodStart) - 1;\n#endif\n\t\t\t}\n\t\t\tif (semantics & (uint16_t)MethodSemanticsAttributes::Fire)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(tableType == TableType::EVENT);\n\t\t\t\tEventDetail& ed = _events[propertyOrEventIndex];\n\t\t\t\ted.fireMethodIndex = method;\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\ted.il2cppDefinition.raise = method - DecodeMetadataIndex(ed.declaringType->methodStart) - 1;\n#endif\n\t\t\t}\n\t\t}\n\t}\n\n\tstruct EnclosingClassInfo\n\t{\n\t\tuint32_t enclosingTypeIndex; // rowIndex - 1\n\t\tstd::vector<uint32_t> nestedTypeIndexs;\n\t};\n\n\tvoid InterpreterImage::InitNestedClass()\n\t{\n\t\tconst Table& nestedClassTb = _rawImage->GetTable(TableType::NESTEDCLASS);\n\t\t_nestedTypeDefineIndexs.reserve(nestedClassTb.rowNum);\n\t\tstd::vector<EnclosingClassInfo> enclosingTypes;\n\n\t\tfor (uint32_t i = 0; i < nestedClassTb.rowNum; i++)\n\t\t{\n\t\t\tTbNestedClass data = _rawImage->ReadNestedClass(i + 1);\n\t\t\tIl2CppTypeDefinition& nestedType = _typesDefines[data.nestedClass - 1];\n\t\t\tIl2CppTypeDefinition& enclosingType = _typesDefines[data.enclosingClass - 1];\n\t\t\tif (enclosingType.nested_type_count == 0)\n\t\t\t{\n\t\t\t\t// 此行代码不能删，用于标识 enclosingTypes的index\n\t\t\t\tenclosingType.nestedTypesStart = (uint32_t)enclosingTypes.size();\n\t\t\t\tenclosingTypes.push_back({ data.enclosingClass - 1 });\n\t\t\t}\n\t\t\t++enclosingType.nested_type_count;\n\t\t\tenclosingTypes[enclosingType.nestedTypesStart].nestedTypeIndexs.push_back(data.nestedClass - 1);\n\t\t\t//_nestedTypeDefineIndexs.push_back(data.nestedClass - 1);\n\t\t\tnestedType.declaringTypeIndex = enclosingType.byvalTypeIndex;\n\t\t}\n\n\t\tfor (auto& enclosingType : enclosingTypes)\n\t\t{\n\t\t\tIl2CppTypeDefinition& enclosingTypeDef = _typesDefines[enclosingType.enclosingTypeIndex];\n\t\t\tIL2CPP_ASSERT(enclosingType.nestedTypeIndexs.size() == (size_t)enclosingTypeDef.nested_type_count);\n\t\t\tenclosingTypeDef.nestedTypesStart = (NestedTypeIndex)_nestedTypeDefineIndexs.size();\n\t\t\tenclosingTypeDef.nested_type_count = (uint16_t)enclosingType.nestedTypeIndexs.size();\n\t\t\t_nestedTypeDefineIndexs.insert(_nestedTypeDefineIndexs.end(), enclosingType.nestedTypeIndexs.begin(), enclosingType.nestedTypeIndexs.end());\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitClassLayouts0()\n\t{\n\t\tconst Table& classLayoutTb = _rawImage->GetTable(TableType::CLASSLAYOUT);\n\t\tfor (uint32_t i = 0; i < classLayoutTb.rowNum; i++)\n\t\t{\n\t\t\tTbClassLayout data = _rawImage->ReadClassLayout(i + 1);\n\t\t\t_classLayouts[data.parent - 1] = data;\n\t\t\tif (data.classSize > 0)\n\t\t\t{\n\t\t\t\tIl2CppTypeDefinitionSizes& typeSizes = _typeDetails[data.parent - 1].typeSizes;\n\t\t\t\ttypeSizes.instance_size = data.classSize + sizeof(Il2CppObject);\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitClassLayouts()\n\t{\n\t\tClassFieldLayoutCalculator calculator(this);\n\t\tfor (Il2CppTypeDefinition& type : _typesDefines)\n\t\t{\n\t\t\tconst Il2CppType* il2cppType = GetIl2CppTypeFromTypeDefinition(&type);\n\t\t\tcalculator.CalcClassNotStaticFields(il2cppType);\n\t\t}\n\n\t\tfor (TypeDefinitionDetail& type : _typeDetails)\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* typeDef = GetTypeDefinitionByTypeDetail(&type);\n\t\t\tconst Il2CppType* il2cppType = GetIl2CppTypeFromTypeDefinition(typeDef);\n\t\t\tcalculator.CalcClassStaticFields(il2cppType);\n\t\t\tClassLayoutInfo* layout = calculator.GetClassLayoutInfo(il2cppType);\n\n\t\t\tauto& sizes = type.typeSizes;\n\t\t\tsizes.native_size = layout->nativeSize;\n\t\t\tif (typeDef->genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t\t{\n\t\t\t\tsizes.static_fields_size = layout->staticFieldsSize;\n\t\t\t\tsizes.thread_static_fields_size = layout->threadStaticFieldsSize;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsizes.static_fields_size = 0;\n\t\t\t\tsizes.thread_static_fields_size = 0;\n\t\t\t}\n\t\t\tif (sizes.instance_size == 0)\n\t\t\t{\n\t\t\t\tsizes.instance_size = layout->instanceSize;\n\t\t\t}\n\t\t\tint32_t fieldStart = DecodeMetadataIndex(typeDef->fieldStart);\n\t\t\tfor (int32_t i = 0, end = typeDef->field_count; i < end ; i++)\n\t\t\t{\n\t\t\t\tFieldDetail& fd = _fieldDetails[fieldStart + i];\n\t\t\t\tFieldLayout& fieldLayout = layout->fields[i];\n\t\t\t\tif (fd.offset == 0)\n\t\t\t\t{\n\t\t\t\t\tfd.offset = fieldLayout.offset;\n\t\t\t\t}\n\t\t\t\telse if (fd.offset == THREAD_LOCAL_STATIC_MASK)\n\t\t\t\t{\n\t\t\t\t\tfd.offset = fieldLayout.offset;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(fd.offset == fieldLayout.offset);\n\t\t\t\t\tint a = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tuint32_t InterpreterImage::AddIl2CppTypeCache(const Il2CppType* type)\n\t{\n\t\tauto it = _type2Indexs.find(type);\n\t\tif (it != _type2Indexs.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\t\tuint32_t encodeIndex = EncodeWithIndex((uint32_t)_types.size());\n\t\t_types.push_back(type);\n\t\t_type2Indexs.insert({ type, encodeIndex });\n\t\treturn encodeIndex;\n\t}\n\n\tuint32_t InterpreterImage::AddIl2CppGenericContainers(Il2CppGenericContainer& geneContainer)\n\t{\n\t\tuint32_t index = (uint32_t)_genericContainers.size();\n\t\t_genericContainers.push_back(geneContainer);\n\t\treturn EncodeWithIndex(index);\n\t}\n\n\tvoid InterpreterImage::InitClass()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\t_classList.resize(typeDefTb.rowNum);\n\t}\n\n\tIl2CppClass* InterpreterImage::GetTypeInfoFromTypeDefinitionRawIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT(index < _classList.size());\n\t\tIl2CppClass* klass = _classList[index];\n\t\tif (klass)\n\t\t{\n\t\t\treturn klass;\n\t\t}\n\t\til2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\t\tklass = _classList[index];\n\t\tif (klass)\n\t\t{\n\t\t\treturn klass;\n\t\t}\n\t\tklass = il2cpp::vm::GlobalMetadata::FromTypeDefinition(EncodeWithIndex(index));\n\t\tIL2CPP_ASSERT(klass->interfaces_count <= klass->interface_offsets_count || _typesDefines[index].interfaceOffsetsStart == 0);\n\t\til2cpp::os::Atomic::FullMemoryBarrier();\n\t\t_classList[index] = klass;\n\t\treturn klass;\n\t}\n\n\tconst Il2CppType* InterpreterImage::GetInterfaceFromGlobalOffset(TypeInterfaceIndex globalOffset)\n\t{\n\t\tIL2CPP_ASSERT((uint32_t)globalOffset < (uint32_t)_interfaceDefines.size());\n\n\t\tTypeIndex typeIndex = _interfaceDefines[globalOffset];\n\t\tif (typeIndex == kTypeIndexInvalid)\n\t\t{\n\t\t\tuint32_t rowIndex = globalOffset + 1;\n\t\t\tTbInterfaceImpl data = _rawImage->ReadInterfaceImpl(rowIndex);\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[data.classIdx - 1];\n\t\t\tconst Il2CppType* intType = ReadTypeFromToken(GetGenericContainerByTypeDefinition(&typeDef), nullptr,\n\t\t\t\tDecodeTypeDefOrRefOrSpecCodedIndexTableType(data.interfaceIdx), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.interfaceIdx));\n\t\t\t_interfaceDefines[globalOffset] = typeIndex = DecodeMetadataIndex(AddIl2CppTypeCache(intType));\n\t\t}\n\n\t\treturn _types[typeIndex];\n\t}\n\n\tconst Il2CppType* InterpreterImage::GetInterfaceFromIndex(const Il2CppClass* klass, TypeInterfaceIndex globalOffset)\n\t{\n\t\treturn GetInterfaceFromGlobalOffset(globalOffset);\n\t}\n\n\tconst Il2CppType* InterpreterImage::GetInterfaceFromOffset(const Il2CppClass* klass, TypeInterfaceIndex offset)\n\t{\n\t\tconst Il2CppTypeDefinition* typeDef = (const Il2CppTypeDefinition*)(klass->typeMetadataHandle);\n\t\tIL2CPP_ASSERT(typeDef);\n\t\treturn GetInterfaceFromOffset(typeDef, offset);\n\t}\n\n\tconst Il2CppType* InterpreterImage::GetInterfaceFromOffset(const Il2CppTypeDefinition* typeDef, TypeInterfaceIndex offset)\n\t{\n\t\tuint32_t globalOffset = typeDef->interfacesStart + offset;\n\t\treturn GetInterfaceFromGlobalOffset(globalOffset);\n\t}\n\n\tIl2CppInterfaceOffsetInfo InterpreterImage::GetInterfaceOffsetInfo(const Il2CppTypeDefinition* typeDefine, TypeInterfaceOffsetIndex index)\n\t{\n\t\tuint32_t globalIndex = DecodeMetadataIndex((uint32_t)(typeDefine->interfaceOffsetsStart + index));\n\t\tIL2CPP_ASSERT(globalIndex < (uint32_t)_interfaceOffsets.size());\n\n\t\tInterfaceOffsetInfo& offsetPair = _interfaceOffsets[globalIndex];\n\t\treturn { offsetPair.type, (int32_t)offsetPair.offset };\n\t}\n\n\tIl2CppClass* InterpreterImage::GetNestedTypeFromOffset(const Il2CppTypeDefinition* typeDefine, TypeNestedTypeIndex offset)\n\t{\n\t\tuint32_t globalIndex = typeDefine->nestedTypesStart + offset;\n\t\tIL2CPP_ASSERT(globalIndex < (uint32_t)_nestedTypeDefineIndexs.size());\n\t\tuint32_t typeDefIndex = _nestedTypeDefineIndexs[globalIndex];\n\t\tIL2CPP_ASSERT(typeDefIndex < (uint32_t)_typesDefines.size());\n\t\treturn il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)&_typesDefines[typeDefIndex]);\n\t}\n\n\tIl2CppClass* InterpreterImage::GetNestedTypeFromOffset(const Il2CppClass* klass, TypeNestedTypeIndex offset)\n\t{\n\t\treturn GetNestedTypeFromOffset((Il2CppTypeDefinition*)klass->typeMetadataHandle, offset);\n\t}\n\n\tIl2CppTypeDefinition* InterpreterImage::GetNestedTypes(Il2CppTypeDefinition* typeDefinition, void** iter)\n\t{\n\t\tif (_nestedTypeDefineIndexs.empty())\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tconst TypeDefinitionIndex* nestedTypeIndices = (const TypeDefinitionIndex*)(&_nestedTypeDefineIndexs[typeDefinition->nestedTypesStart]);\n\n\t\tif (!*iter)\n\t\t{\n\t\t\tif (typeDefinition->nested_type_count == 0)\n\t\t\t\treturn NULL;\n\n\t\t\t*iter = (void*)(nestedTypeIndices);\n\t\t\treturn &_typesDefines[nestedTypeIndices[0]];\n\t\t}\n\n\t\tTypeDefinitionIndex* nestedTypeAddress = (TypeDefinitionIndex*)*iter;\n\t\tnestedTypeAddress++;\n\t\tptrdiff_t index = nestedTypeAddress - nestedTypeIndices;\n\n\t\tif (index < typeDefinition->nested_type_count)\n\t\t{\n\t\t\t*iter = nestedTypeAddress;\n\t\t\treturn &_typesDefines[*nestedTypeAddress];\n\t\t}\n\n\t\treturn NULL;\n\t}\n\n\tconst Il2CppAssembly* InterpreterImage::GetReferencedAssembly(int32_t referencedAssemblyTableIndex, const Il2CppAssembly assembliesTable[], int assembliesCount)\n\t{\n\t\tauto& table = _rawImage->GetTable(TableType::ASSEMBLYREF);\n\t\tIL2CPP_ASSERT((uint32_t)referencedAssemblyTableIndex < table.rowNum);\n\n\t\tTbAssemblyRef assRef = _rawImage->ReadAssemblyRef(referencedAssemblyTableIndex + 1);\n\t\tconst char* refAssName = _rawImage->GetStringFromRawIndex(assRef.name);\n\t\tconst Il2CppAssembly* il2cppAssRef = il2cpp::vm::Assembly::GetLoadedAssembly(refAssName);\n\t\tif (!il2cppAssRef)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetDllNotFoundException(refAssName));\n\t\t}\n\t\treturn il2cppAssRef;\n\t}\n\n\tvoid InterpreterImage::ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret)\n\t{\n\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\tconst FieldDetail& fd = GetFieldDetailFromRawIndex(rowIndex - 1);\n\t\tret.containerType = GetIl2CppTypeFromRawTypeDefIndex(DecodeMetadataIndex(fd.typeDefIndex));\n\t\tret.field = &fd.fieldDef;\n\t}\n\n\tvoid InterpreterImage::GetClassAndMethodGenericContainerFromGenericContainerIndex(GenericContainerIndex idx, const Il2CppGenericContainer*& klassGc, const Il2CppGenericContainer*& methodGc)\n\t{\n\t\tIl2CppGenericContainer* gc = GetGenericContainerByRawIndex(DecodeMetadataIndex(idx));\n\t\tIL2CPP_ASSERT(gc);\n\t\tif (gc->is_method)\n\t\t{\n\t\t\tconst Il2CppMethodDefinition* methodDef = GetMethodDefinitionFromRawIndex(DecodeMetadataIndex(gc->ownerIndex));\n\t\t\tklassGc = GetGenericContainerByTypeDefRawIndex(DecodeMetadataIndex(methodDef->declaringType));\n\t\t\tmethodGc = GetGenericContainerByRawIndex(DecodeMetadataIndex(methodDef->genericContainerIndex));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tklassGc = gc;\n\t\t\tmethodGc = nullptr;\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitGenericParamConstraintDefs()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::GENERICPARAMCONSTRAINT);\n\t\t_genericConstraints.resize(tb.rowNum, kTypeIndexInvalid);\n\t\tfor (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t{\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbGenericParamConstraint data = _rawImage->ReadGenericParamConstraint(rowIndex);\n\t\t\tIl2CppGenericParameter& genericParam = _genericParams[data.owner - 1];\n\n\t\t\tif (genericParam.constraintsCount == 0)\n\t\t\t{\n\t\t\t\tgenericParam.constraintsStart = EncodeWithIndex(i);\n\t\t\t}\n\t\t\t++genericParam.constraintsCount;\n\t\t\t//_genericConstraints[i] == kTypeIndexInvalid;\n\n\t\t\t//Il2CppType paramCons = {};\n\n\t\t\t//const Il2CppGenericContainer* klassGc;\n\t\t\t//const Il2CppGenericContainer* methodGc;\n\t\t\t//GetClassAndMethodGenericContainerFromGenericContainerIndex(genericParam.ownerIndex, klassGc, methodGc);\n\n\t\t\t//ReadTypeFromToken(klassGc, methodGc, DecodeTypeDefOrRefOrSpecCodedIndexTableType(data.constraint), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.constraint), paramCons);\n\t\t\t//_genericConstraints[i] = DecodeMetadataIndex(AddIl2CppTypeCache(paramCons));\n\t\t}\n\t}\n\n\tvoid InterpreterImage::InitGenericParamDefs0()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::GENERICPARAM);\n\t\t_genericParams.resize(tb.rowNum);\n\t}\n\n\tvoid InterpreterImage::InitGenericParamDefs()\n\t{\n\t\tconst Table& tb = _rawImage->GetTable(TableType::GENERICPARAM);\n\t\tfor (uint32_t i = 0; i < tb.rowNum; i++)\n\t\t{\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbGenericParam data = _rawImage->ReadGenericParam(rowIndex);\n\t\t\tIl2CppGenericParameter& paramDef = _genericParams[i];\n\t\t\tparamDef.num = data.number;\n\t\t\tparamDef.flags = data.flags;\n\t\t\tparamDef.nameIndex = EncodeWithIndex(data.name);\n\t\t\t// constraintsStart 和 constrantsCount init at InitGenericParamConstrains() latter\n\n\t\t\tTableType ownerType = DecodeTypeOrMethodDefCodedIndexTableType(data.owner);\n\t\t\tuint32_t ownerIndex = DecodeTypeOrMethodDefCodedIndexRowIndex(data.owner);\n\t\t\tIL2CPP_ASSERT(ownerIndex > 0);\n\t\t\tIl2CppGenericContainer* geneContainer;\n\t\t\tint32_t interIndex = ownerIndex - 1;\n\t\t\tif (ownerType == TableType::TYPEDEF)\n\t\t\t{\n\t\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[interIndex];\n\t\t\t\tif (typeDef.genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t\t\t{\n\t\t\t\t\tIl2CppGenericContainer c = {};\n\t\t\t\t\tc.ownerIndex = EncodeWithIndex(interIndex);\n\t\t\t\t\tc.is_method = false;\n\t\t\t\t\ttypeDef.genericContainerIndex = AddIl2CppGenericContainers(c);\n\t\t\t\t}\n\t\t\t\tgeneContainer = &_genericContainers[DecodeMetadataIndex(typeDef.genericContainerIndex)];\n\t\t\t\tparamDef.ownerIndex = typeDef.genericContainerIndex;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppMethodDefinition& methodDef = _methodDefines[interIndex];\n\t\t\t\tif (methodDef.genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t\t\t{\n\t\t\t\t\tIl2CppGenericContainer c = {};\n\t\t\t\t\tc.ownerIndex = EncodeWithIndex(interIndex);\n\t\t\t\t\tc.is_method = true;\n\t\t\t\t\tmethodDef.genericContainerIndex = AddIl2CppGenericContainers(c);\n\t\t\t\t}\n\t\t\t\tgeneContainer = &_genericContainers[DecodeMetadataIndex(methodDef.genericContainerIndex)];\n\t\t\t\tparamDef.ownerIndex = methodDef.genericContainerIndex;\n\t\t\t}\n\t\t\tif (geneContainer->type_argc == 0)\n\t\t\t{\n\t\t\t\tgeneContainer->genericParameterStart = EncodeWithIndex(i);\n\t\t\t}\n\t\t\t++geneContainer->type_argc;\n\t\t}\n\t}\n\n\n\tvoid InterpreterImage::InitInterfaces()\n\t{\n\t\tconst Table& table = _rawImage->GetTable(TableType::INTERFACEIMPL);\n\n\t\t// interface中只包含直接继承的interface,不包括来自父类的\n\t\t// 此interface只在CastClass及Type.GetInterfaces()反射函数中\n\t\t// 发挥作用，不在callvir中发挥作用。\n\t\t// interfaceOffsets中包含了水平展开的所有interface(包括父类的)\n\t\t_interfaceDefines.resize(table.rowNum, kTypeIndexInvalid);\n\t\tuint32_t lastClassIdx = 0;\n\t\tfor (uint32_t i = 0; i < table.rowNum; i++)\n\t\t{\n\t\t\tuint32_t rowIndex = i + 1;\n\t\t\tTbInterfaceImpl data = _rawImage->ReadInterfaceImpl(rowIndex);\n\n\t\t\tIl2CppTypeDefinition& typeDef = _typesDefines[data.classIdx - 1];\n\t\t\t//Il2CppType intType = {};\n\t\t\t//ReadTypeFromToken(GetGenericContainerByTypeDefinition(&typeDef), nullptr,\n\t\t\t//\tDecodeTypeDefOrRefOrSpecCodedIndexTableType(data.interfaceIdx), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.interfaceIdx), intType);\n\t\t\t//_interfaceDefines[i] = DecodeMetadataIndex(AddIl2CppTypeCache(intType));\n\t\t\tif (typeDef.interfaces_count == 0)\n\t\t\t{\n\t\t\t\ttypeDef.interfacesStart = (InterfacesIndex)i;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// 必须连续\n\t\t\t\tIL2CPP_ASSERT(data.classIdx == lastClassIdx);\n\t\t\t}\n\t\t\t++typeDef.interfaces_count;\n\t\t\tlastClassIdx = data.classIdx;\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ComputeVTable(TypeDefinitionDetail* tdd)\n\t{\n\t\tIl2CppTypeDefinition& typeDef = *GetTypeDefinitionByTypeDetail(tdd);\n\t\tif (IsInterface(typeDef.flags) || typeDef.interfaceOffsetsStart != 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeDef.parentIndex != kInvalidIndex)\n\t\t{\n\t\t\tconst Il2CppType* parentType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef.parentIndex);\n\t\t\tconst Il2CppTypeDefinition* parentTypeDef = GetUnderlyingTypeDefinition(parentType);\n\t\t\tif (IsInterpreterType(parentTypeDef) && parentTypeDef->interfaceOffsetsStart == 0)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(DecodeImageIndex(parentTypeDef->byvalTypeIndex) == this->GetIndex());\n\t\t\t\tint32_t typeDefIndex = GetTypeRawIndexByEncodedIl2CppTypeIndex(parentTypeDef->byvalTypeIndex);\n\t\t\t\tComputeVTable(&_typeDetails[typeDefIndex]);\n\t\t\t}\n\t\t}\n\n\t\tconst Il2CppType* type = GetIl2CppTypeFromRawIndex(DecodeMetadataIndex(typeDef.byvalTypeIndex));\n\t\tVTableSetUp* typeTree = VTableSetUp::BuildByType(_cacheTrees, type);\n\n\t\tuint32_t offsetsStart = (uint32_t)_interfaceOffsets.size();\n\n\t\tauto& vms = typeTree->GetVirtualMethodImpls();\n\t\tif (vms.empty())\n\t\t{\n\t\t\ttdd->vtable = nullptr;\n\t\t\ttdd->vtableCount = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttdd->vtable = (VirtualMethodImpl*)HYBRIDCLR_METADATA_CALLOC(vms.size(), sizeof(VirtualMethodImpl));\n\t\t\ttdd->vtableCount = (uint32_t)vms.size();\n\t\t\tstd::memcpy(tdd->vtable, &vms[0], vms.size() * sizeof(VirtualMethodImpl));\n\t\t}\n\n\t\tauto& interfaceOffsetInfos = typeTree->GetInterfaceOffsetInfos();\n\t\tfor (auto ioi : interfaceOffsetInfos)\n\t\t{\n\t\t\t_interfaceOffsets.push_back({ ioi.type, ioi.offset });\n\t\t}\n\n\t\ttypeDef.vtableStart = EncodeWithIndex(0);\n\t\ttypeDef.vtable_count = (uint16_t)vms.size();\n\t\ttypeDef.interfaceOffsetsStart = EncodeWithIndex(offsetsStart);\n\t\ttypeDef.interface_offsets_count = (uint16_t)interfaceOffsetInfos.size();\n\n\t\tIl2CppClass* klass = _classList[GetTypeRawIndex(&typeDef)];\n\t\tIL2CPP_ASSERT(!klass);\n\t}\n\n\tvoid InterpreterImage::InitVTables()\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\n\t\tfor (TypeDefinitionDetail& td : _typeDetails)\n\t\t{\n\t\t\tComputeVTable(&td);\n\t\t}\n\n\t\tfor (auto& e : _cacheTrees)\n\t\t{\n\t\t\te.second->~VTableSetUp();\n\t\t\tHYBRIDCLR_FREE(e.second);\n\t\t}\n\t\tIl2CppType2TypeDeclaringTreeMap temp;\n\t\t_cacheTrees.swap(temp);\n\t}\n\n\t// index => MethodDefinition -> DeclaringClass -> index - klass->methodStart -> MethodInfo*\n\tconst MethodInfo* InterpreterImage::GetMethodInfoFromMethodDefinitionRawIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT((size_t)index <= _methodDefines.size());\n\t\tconst Il2CppMethodDefinition* methodDefinition = GetMethodDefinitionFromRawIndex(index);\n\t\tconst Il2CppTypeDefinition* typeDefinition = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromIndex(methodDefinition->declaringType);\n\t\tint32_t indexInClass = index - DecodeMetadataIndex(typeDefinition->methodStart);\n\t\tIL2CPP_ASSERT(indexInClass >= 0 && indexInClass < typeDefinition->method_count);\n\t\tIl2CppClass* klass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)typeDefinition);\n\t\til2cpp::vm::Class::SetupMethods(klass);\n\t\treturn klass->methods[indexInClass];\n\t}\n\n\tconst MethodInfo* InterpreterImage::GetMethodInfoFromMethodDefinition(const Il2CppMethodDefinition* methodDef)\n\t{\n\t\tuint32_t rawIndex = (uint32_t)(methodDef - &_methodDefines[0]);\n\t\tIL2CPP_ASSERT(rawIndex < (uint32_t)_methodDefines.size());\n\t\treturn GetMethodInfoFromMethodDefinitionRawIndex(rawIndex);\n\t}\n\n\t// typeDef vTableSlot -> type virtual method index -> MethodDefinition*\n\tconst Il2CppMethodDefinition* InterpreterImage::GetMethodDefinitionFromVTableSlot(const Il2CppTypeDefinition* typeDef, int32_t vTableSlot)\n\t{\n\t\tuint32_t typeDefIndex = GetTypeRawIndex(typeDef);\n\t\tIL2CPP_ASSERT(typeDefIndex < (uint32_t)_typeDetails.size());\n\t\tTypeDefinitionDetail& td = _typeDetails[typeDefIndex];\n\n\t\tIL2CPP_ASSERT(vTableSlot >= 0 && vTableSlot < (int32_t)td.vtableCount);\n\t\tVirtualMethodImpl& vmi = td.vtable[vTableSlot];\n\t\treturn vmi.method;\n\t}\n\n\tconst MethodInfo* InterpreterImage::GetMethodInfoFromVTableSlot(const Il2CppClass* klass, int32_t vTableSlot)\n\t{\n\t\tIL2CPP_ASSERT(!klass->generic_class);\n\t\tconst Il2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)klass->typeMetadataHandle;\n\t\t//const Il2CppMethodDefinition* methodDef = GetMethodDefinitionFromVTableSlot((Il2CppTypeDefinition*)klass->typeMetadataHandle, vTableSlot);\n\t\t// FIX ME. why return null?\n\t\t//IL2CPP_ASSERT(methodDef);\n\n\t\tuint32_t typeDefIndex = GetTypeRawIndex(typeDef);\n\t\tIL2CPP_ASSERT(typeDefIndex < (uint32_t)_typeDetails.size());\n\t\tTypeDefinitionDetail& td = _typeDetails[typeDefIndex];\n\n\t\tIL2CPP_ASSERT(vTableSlot >= 0 && vTableSlot < (int32_t)td.vtableCount);\n\t\tVirtualMethodImpl& vmi = td.vtable[vTableSlot];\n\t\tif (vmi.method)\n\t\t{\n\t\t\tif (vmi.method->declaringType == EncodeWithIndex(typeDefIndex))\n\t\t\t{\n\t\t\t\treturn il2cpp::vm::GlobalMetadata::GetMethodInfoFromMethodHandle((Il2CppMetadataMethodDefinitionHandle)vmi.method);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* implClass = il2cpp::vm::Class::FromIl2CppType(vmi.type);\n\t\t\t\tIL2CPP_ASSERT(implClass != klass);\n\t\t\t\til2cpp::vm::Class::SetupMethods(implClass);\n\t\t\t\tfor (uint32_t i = 0; i < implClass->method_count; i++)\n\t\t\t\t{\n\t\t\t\t\tconst MethodInfo* implMethod = implClass->methods[i];\n\t\t\t\t\tif (implMethod->token == vmi.method->token)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn implMethod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tRaiseExecutionEngineException(\"not find vtable method\");\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tIl2CppMethodPointer InterpreterImage::GetAdjustorThunk(uint32_t token)\n\t{\n\t\tuint32_t methodIndex = DecodeTokenRowIndex(token) - 1;\n\t\tIL2CPP_ASSERT(methodIndex < (uint32_t)_methodDefines.size());\n\t\tconst Il2CppMethodDefinition* methodDef = &_methodDefines[methodIndex];\n\t\treturn IsInstanceMethod(methodDef) ? hybridclr::interpreter::InterpreterModule::GetAdjustThunkMethodPointer(methodDef) : nullptr;\n\t}\n\n\tIl2CppMethodPointer InterpreterImage::GetMethodPointer(uint32_t token)\n\t{\n\t\tuint32_t methodIndex = DecodeTokenRowIndex(token) - 1;\n\t\tIL2CPP_ASSERT(methodIndex < (uint32_t)_methodDefines.size());\n\t\tconst Il2CppMethodDefinition* methodDef = &_methodDefines[methodIndex];\n\t\treturn hybridclr::interpreter::InterpreterModule::GetMethodPointer(methodDef);\n\t}\n\n\tInvokerMethod InterpreterImage::GetMethodInvoker(uint32_t token)\n\t{\n\t\tuint32_t methodIndex = DecodeTokenRowIndex(token) - 1;\n\t\tIL2CPP_ASSERT(methodIndex < (uint32_t)_methodDefines.size());\n\t\tconst Il2CppMethodDefinition* methodDef = &_methodDefines[methodIndex];\n\t\treturn hybridclr::interpreter::InterpreterModule::GetMethodInvoker(methodDef);\n\t}\n\n\n\tIl2CppString* InterpreterImage::ReadSerString(BlobReader& reader)\n\t{\n\t\tbyte b = reader.PeekByte();\n\t\tif (b == 0xFF)\n\t\t{\n\t\t\treader.SkipByte();\n\t\t\treturn nullptr;\n\t\t}\n\t\telse if (b == 0)\n\t\t{\n\t\t\treader.SkipByte();\n\t\t\treturn il2cpp::vm::String::Empty();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tuint32_t len = reader.ReadCompressedUint32();\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\treturn il2cpp::vm::String::NewLen((char*)reader.GetAndSkipCurBytes(len), len);\n#else\n\t\t\tchar* chars = (char*)reader.GetDataOfReadPosition();\n\t\t\treader.SkipBytes(len);\n\t\t\treturn il2cpp::vm::String::NewLen(chars, len);\n#endif\n\t\t}\n\t}\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\tbool InterpreterImage::ReadUTF8SerString(BlobReader& reader, std::string& s)\n\t{\n\t\tbyte b = reader.PeekByte();\n\t\tif (b == 0xFF)\n\t\t{\n\t\t\treader.SkipByte();\n\t\t\treturn false;\n\t\t}\n\t\telse if (b == 0)\n\t\t{\n\t\t\treader.SkipByte();\n\t\t\ts.clear();\n\t\t\treturn true;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tuint32_t len = reader.ReadCompressedUint32();\n\t\t\tchar* chars = (char*)reader.GetDataOfReadPosition();\n\t\t\treader.SkipBytes(len);\n\t\t\ts.assign(chars, len);\n\t\t\treturn true;\n\t\t}\n\t}\n#endif\n\n\tIl2CppReflectionType* InterpreterImage::ReadSystemType(BlobReader& reader)\n\t{\n\t\tIl2CppString* fullName = ReadSerString(reader);\n\t\tif (!fullName)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tIl2CppReflectionType* type = GetReflectionTypeFromName(fullName);\n\t\tif (!type)\n\t\t{\n\t\t\tstd::string stdTypeName = il2cpp::utils::StringUtils::Utf16ToUtf8(fullName->chars);\n\t\t\tTEMP_FORMAT(errMsg, \"CustomAttribute fixed arg type:System.Type fullName:'%s' not find\", stdTypeName.c_str());\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(errMsg));\n\t\t}\n\t\treturn type;\n\t}\n\n\n\tIl2CppObject* InterpreterImage::ReadBoxedValue(BlobReader& reader)\n\t{\n\t\tuint64_t obj = 0;\n\t\tIl2CppType kind = {};\n\t\tReadCustomAttributeFieldOrPropType(reader, kind);\n\t\tReadFixedArg(reader, &kind, &obj);\n\t\tIl2CppClass* valueType = il2cpp::vm::Class::FromIl2CppType(&kind);\n\t\treturn il2cpp::vm::Object::Box(valueType, &obj);\n\t}\n\n\tvoid InterpreterImage::ReadFixedArg(BlobReader& reader, const Il2CppType* argType, void* data)\n\t{\n\t\tswitch (argType->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\t{\n\t\t\t*(byte*)data = reader.ReadByte();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\t{\n\t\t\t*(uint16_t*)data = reader.Read16();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t{\n\t\t\t*(byte*)data = reader.ReadByte();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t{\n\t\t\t*(uint16_t*)data = reader.Read16();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t{\n\t\t\t*(uint32_t*)data = reader.Read32();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t{\n\t\t\t*(uint64_t*)data = reader.Read64();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R4:\n\t\t{\n\t\t\t*(float*)data = reader.ReadFloat();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_R8:\n\t\t{\n\t\t\t*(double*)data = reader.ReadDouble();\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t{\n\t\t\tuint32_t numElem = reader.Read32();\n\t\t\tif (numElem != (uint32_t)-1)\n\t\t\t{\n\t\t\t\tIl2CppClass* arrKlass = il2cpp::vm::Class::FromIl2CppType(argType);\n\t\t\t\tIl2CppArray* arr = il2cpp::vm::Array::New(il2cpp::vm::Class::GetElementClass(arrKlass), numElem);\n\t\t\t\tfor (uint16_t i = 0; i < numElem; i++)\n\t\t\t\t{\n\t\t\t\t\tReadFixedArg(reader, argType->data.type, GET_ARRAY_ELEMENT_ADDRESS(arr, i, arr->klass->element_size));\n\t\t\t\t}\n\t\t\t\t*(void**)data = arr;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t*(void**)data = nullptr;\n\t\t\t}\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_STRING:\n\t\t{\n\t\t\t*(Il2CppString**)data = ReadSerString(reader);\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t{\n\t\t\t*(Il2CppObject**)data = ReadBoxedValue(reader);\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(argType);\n\t\t\tif (!klass)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"type not find\");\n\t\t\t}\n\t\t\tif (klass == il2cpp_defaults.object_class)\n\t\t\t{\n\t\t\t\t*(Il2CppObject**)data = ReadBoxedValue(reader);\n\t\t\t}\n\t\t\telse if (klass == il2cpp_defaults.systemtype_class)\n\t\t\t{\n\t\t\t\t*(Il2CppReflectionType**)data = ReadSystemType(reader);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tTEMP_FORMAT(errMsg, \"fixed arg type:%s.%s not support\", klass->namespaze, klass->name);\n\t\t\t\tRaiseNotSupportedException(errMsg);\n\t\t\t}\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* valueType = il2cpp::vm::Class::FromIl2CppType(argType);\n\t\t\tIL2CPP_ASSERT(valueType->enumtype);\n\t\t\tReadFixedArg(reader, &valueType->element_class->byval_arg, data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SYSTEM_TYPE:\n\t\t{\n\t\t\t*(Il2CppReflectionType**)data = ReadSystemType(reader);\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_BOXED_OBJECT:\n\t\t{\n\t\t\tuint8_t fieldOrPropType = reader.ReadByte();\n\t\t\tIL2CPP_ASSERT(fieldOrPropType == 0x51);\n\t\t\t*(Il2CppObject**)data = ReadBoxedValue(reader);\n\t\t\tHYBRIDCLR_SET_WRITE_BARRIER((void**)data);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_ENUM:\n\t\t{\n\t\t\tIl2CppClass* valueType = il2cpp::vm::Class::FromIl2CppType(argType);\n\t\t\tIL2CPP_ASSERT(valueType->enumtype);\n\t\t\tReadFixedArg(reader, &valueType->element_class->byval_arg, data);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support fixed argument type\");\n\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ReadCustomAttributeFieldOrPropType(BlobReader& reader, Il2CppType& type)\n\t{\n\t\ttype.type = (Il2CppTypeEnum)reader.ReadByte();\n\n\t\tswitch (type.type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R4:\n\t\tcase IL2CPP_TYPE_R8:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\t{\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t{\n\t\t\tIl2CppType eleType = {};\n\t\t\tReadCustomAttributeFieldOrPropType(reader, eleType);\n\t\t\ttype.data.type = MetadataPool::GetPooledIl2CppType(eleType);\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_ENUM:\n\t\t{\n\t\t\tIl2CppString* enumTypeName = ReadSerString(reader);\n\n\t\t\tIl2CppReflectionType* enumType = GetReflectionTypeFromName(enumTypeName);\n\t\t\tif (!enumType)\n\t\t\t{\n\t\t\t\tstd::string stdStrName = il2cpp::utils::StringUtils::Utf16ToUtf8(enumTypeName->chars);\n\t\t\t\tTEMP_FORMAT(errMsg, \"ReadCustomAttributeFieldOrPropType enum:'%s' not exists\", stdStrName.c_str());\n\t\t\t\tRaiseExecutionEngineException(errMsg);\n\t\t\t}\n\t\t\ttype = *enumType->type;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_SYSTEM_TYPE:\n\t\t{\n\t\t\ttype = il2cpp_defaults.systemtype_class->byval_arg;\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_BOXED_OBJECT:\n\t\t{\n\t\t\ttype = il2cpp_defaults.object_class->byval_arg;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tTEMP_FORMAT(errMsg, \"ReadCustomAttributeFieldOrPropType. image:%s unknown type:%d\", GetIl2CppImage()->name, (int)type.type);\n\t\t\tRaiseBadImageException(errMsg);\n\t\t}\n\t\t}\n\t}\n\n\tvoid InterpreterImage::ReadMethodDefSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, Il2CppMethodDefinition& methodDef, std::vector<ParamDetail>& paramArr)\n\t{\n\t\tuint8_t rawSigFlags = reader.ReadByte();\n\n\t\tif (rawSigFlags & (uint8_t)MethodSigFlags::GENERIC)\n\t\t{\n\t\t\t//IL2CPP_ASSERT(false);\n\t\t\tuint32_t genParamCount = reader.ReadCompressedUint32();\n\t\t\tIl2CppGenericContainer* gc = GetGenericContainerByRawIndex(DecodeMetadataIndex(methodDef.genericContainerIndex));\n\t\t\tIL2CPP_ASSERT(gc->type_argc == genParamCount);\n\t\t}\n\t\tuint32_t paramCount = reader.ReadCompressedUint32();\n\t\t//IL2CPP_ASSERT(paramCount >= methodDef.parameterCount);\n\n\t\tconst Il2CppType* returnType = ReadType(reader, klassGenericContainer, methodGenericContainer);\n\t\tmethodDef.returnType = AddIl2CppTypeCache(returnType);\n\n\t\tint readParamNum = 0;\n\t\tfor (; reader.NonEmpty(); )\n\t\t{\n\t\t\tParamDetail curParam = {};\n\t\t\tconst Il2CppType* type = ReadType(reader, klassGenericContainer, methodGenericContainer);\n\t\t\tcurParam.parameterIndex = readParamNum++;\n\t\t\tcurParam.paramDef.typeIndex = AddIl2CppTypeCache(type);\n\t\t\tparamArr.push_back(curParam);\n\t\t}\n\t\tIL2CPP_ASSERT(readParamNum == (int)paramCount);\n\t}\n\n\tconst Il2CppType* InterpreterImage::GetModuleIl2CppType(uint32_t moduleRowIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound)\n\t{\n\t\tIL2CPP_ASSERT(moduleRowIndex == 1);\n\t\tuint32_t encodedNamespaceIndex = EncodeWithIndex(typeNamespace);\n\t\tuint32_t encodedNameIndex = EncodeWithIndex(typeName);\n\t\tfor (TypeDefinitionDetail& type : _typeDetails)\n\t\t{\n\t\t\tIl2CppTypeDefinition* typeDef = GetTypeDefinitionByTypeDetail(&type);\n\t\t\tif (typeDef->namespaceIndex == encodedNamespaceIndex && typeDef->nameIndex == encodedNameIndex)\n\t\t\t{\n\t\t\t\treturn GetIl2CppTypeFromTypeDefinition(typeDef);\n\t\t\t}\n\t\t}\n\t\tif (!raiseExceptionIfNotFound)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tconst char* typeNameStr = _rawImage->GetStringFromRawIndex(typeName);\n\t\tconst char* typeNamespaceStr = _rawImage->GetStringFromRawIndex(typeNamespace);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\n\t\t\tCStringToStringView(typeNamespaceStr),\n\t\t\tCStringToStringView(typeNameStr),\n\t\t\tCStringToStringView(_il2cppImage->nameNoExt)));\n\t\treturn nullptr;\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/InterpreterImage.h",
    "content": "#pragma once\n\n#include <unordered_map>\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n#include \"metadata/CustomAttributeDataReader.h\"\n#include \"CustomAttributeDataWriter.h\"\n#endif\n\n#include \"Image.h\"\n#include \"CustomAttributeDataWriter.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstruct InterfaceOffsetInfo\n\t{\n\t\tconst Il2CppType* type;\n\t\tuint32_t offset;\n\t};\n\n\n\tstruct TypeDefinitionDetail\n\t{\n\t\tuint32_t methodImplStart;\n\t\tuint32_t methodImplCount;\n\t\tuint32_t vtableCount;\n\t\tIl2CppTypeDefinitionSizes typeSizes;\n\t\tVirtualMethodImpl* vtable;\n\t};\n\n\tstruct ParamDetail\n\t{\n\t\tIl2CppParameterDefinition paramDef;\n\t\tuint32_t parameterIndex;\n\t\tuint32_t defaultValueIndex; // -1 for invalid\n\t};\n\n\tstruct FieldDetail\n\t{\n\t\tIl2CppFieldDefinition fieldDef;\n\t\tuint32_t typeDefIndex;\n\t\tuint32_t offset;\n\t\tuint32_t defaultValueIndex; // -1 for invalid\n\t};\n\n\tstruct PropertyDetail\n\t{\n\t\tconst char* name;\n\t\tuint16_t flags;\n\t\tuint32_t signatureBlobIndex;\n\t\tuint32_t getterMethodIndex; // start from 1;\n\t\tuint32_t setterMethodIndex;\n\t\tconst Il2CppTypeDefinition* declaringType;\n\t\tIl2CppPropertyDefinition il2cppDefinition;\n\t};\n\n\tstruct EventDetail\n\t{\n\t\tconst char* name;\n\t\tuint16_t eventFlags;\n\t\tuint32_t eventType; // TypeDefOrRef codedIndex\n\t\tuint32_t addMethodIndex; // start from 1\n\t\tuint32_t removeMethodIndex; // start from 1\n\t\tuint32_t fireMethodIndex; // start from 1;\n#if HYBRIDCLR_UNITY_2019\n\t\tconst Il2CppTypeDefinition* declaringType;\n\t\tIl2CppEventDefinition il2cppDefinition;\n#endif\n\t};\n\n\tstruct CustomAttribute\n\t{\n\t\tuint32_t ctorMethodToken;\n\t\tuint32_t value;\n\t};\n\n\tstruct CustomAttributesInfo\n\t{\n\t\tint32_t typeRangeIndex;\n\t\tbool inited;\n\t\tvoid* dataStartPtr;\n\t\tvoid* dataEndPtr;\n\t};\n\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\tenum class BlobSource\n\t{\n\t\tRAW_IMAGE = 0,\n\t\tCONVERTED_IL2CPP_FORMAT = 1,\n\t};\n#endif\n\n\tstruct ImplMapInfo\n\t{\n\t\tconst char* moduleName;\n\t\tconst char* importName;\n\t\tuint32_t mappingFlags;\n\t};\n\n\tclass InterpreterImage : public Image\n\t{\n\tpublic:\n\n\t\tstatic void Initialize();\n\n\t\tstatic uint32_t AllocImageIndex(uint32_t dllLength);\n\n\t\tstatic void RegisterImage(InterpreterImage* image);\n\n\t\tstatic InterpreterImage* GetImage(uint32_t imageIndex)\n\t\t{\n\t\t\t//os::FastAutoLock lock(&s_imageLock);\n\t\t\tIL2CPP_ASSERT(imageIndex < kMaxMetadataImageCount);\n\t\t\treturn s_images[imageIndex];\n\t\t}\n\n\tprivate:\n\n\t\tstatic InterpreterImage* s_images[kMaxMetadataImageCount];\n\n\tpublic:\n\n\t\tInterpreterImage(uint32_t imageIndex) : _index(imageIndex), _inited(false), _il2cppImage(nullptr)\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t, _constValues(1024), _il2cppFormatCustomDataBlob(256), _tempCtorArgBlob(256), _tempFieldBlob(256), _tempPropertyBlob(256)\n#endif\n\t\t{\n\n\t\t}\n\n\t\tLoadImageErrorCode Load(const void* imageData, size_t length)\n\t\t{\n\t\t\tif (_inited)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"image can't be inited again\");\n\t\t\t}\n\t\t\t_inited = true;\n\t\t\tLoadImageErrorCode err = InitRawImage(imageData, length);\n\t\t\tif (err != LoadImageErrorCode::OK)\n\t\t\t{\n\t\t\t\treturn err;\n\t\t\t}\n\t\t\terr = _rawImage->Load(imageData, length);\n\t\t\tif (err != LoadImageErrorCode::OK)\n\t\t\t{\n\t\t\t\tdelete _rawImage;\n\t\t\t\t_rawImage = nullptr;\n\t\t\t\treturn err;\n\t\t\t}\n\t\t\treturn LoadImageErrorCode::OK;\n\t\t}\n\n\t\tbool IsInitialized() const\n\t\t{\n\t\t\treturn _inited;\n\t\t}\n\n\t\tuint32_t GetIndex() const\n\t\t{\n\t\t\treturn _index;\n\t\t}\n\n\t\tconst Il2CppImage* GetIl2CppImage() const\n\t\t{\n\t\t\treturn _il2cppImage;\n\t\t}\n\n\t\tuint32_t EncodeWithIndex(uint32_t rawIndex) const\n\t\t{\n\t\t\treturn EncodeImageAndMetadataIndex(_index, rawIndex);\n\t\t}\n\n\t\tuint32_t EncodeWithIndexExcept0(uint32_t rawIndex) const\n\t\t{\n\t\t\treturn rawIndex != 0 ? EncodeImageAndMetadataIndex(_index, rawIndex) : 0;\n\t\t}\n\n\t\tMethodBody* GetMethodBody(uint32_t token) override\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeTokenTableType(token) == TableType::METHOD);\n\t\t\tuint32_t rowIndex = DecodeTokenRowIndex(token);\n\t\t\tIL2CPP_ASSERT(rowIndex > 0 && rowIndex <= (uint32_t)_methodDefines.size());\n\n\n\t\t\tconst Il2CppMethodDefinition* methodDef = &_methodDefines[rowIndex - 1];\n\t\t\tbool isGenericMethod = methodDef->genericContainerIndex != kGenericContainerIndexInvalid || _typesDefines[DecodeMetadataIndex(methodDef->declaringType)].genericContainerIndex != kGenericContainerIndexInvalid;\n\n\t\t\tTbMethod methodData = _rawImage->ReadMethod(rowIndex);\n\t\t\tMethodBody* resultMethodBody = new (HYBRIDCLR_MALLOC_ZERO(sizeof(MethodBody))) MethodBody();\n\t\t\tReadMethodBody(*methodDef, methodData, *resultMethodBody);\n\t\t\treturn resultMethodBody;\n\t\t}\n\n\t\t// type index start from 0, difference with table index...\n\t\tIl2CppMetadataTypeHandle GetAssemblyTypeHandleFromRawIndex(AssemblyTypeIndex index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(index) == 0);\n\t\t\tIL2CPP_ASSERT(index >= 0 && (size_t)index < _typesDefines.size());\n\t\t\treturn (Il2CppMetadataTypeHandle)&_typesDefines[index];\n\t\t}\n\n\t\tIl2CppMetadataTypeHandle GetAssemblyExportedTypeHandleFromRawIndex(AssemblyTypeIndex index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(index) == 0);\n\t\t\tIL2CPP_ASSERT(index >= 0 && (size_t)index < _typesDefines.size());\n\t\t\treturn (Il2CppMetadataTypeHandle)&_exportedTypeDefines[index];\n\t\t}\n\n\t\tconst Il2CppTypeDefinitionSizes* GetTypeDefinitionSizesFromRawIndex(TypeDefinitionIndex index)\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _typeDetails.size());\n\t\t\treturn &_typeDetails[index].typeSizes;\n\t\t}\n\n\t\tconst char* GetStringFromRawIndex(StringIndex index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(index) == 0);\n\t\t\treturn _rawImage->GetStringFromRawIndex(index);\n\t\t}\n\n\t\tuint32_t GetTypeRawIndex(const Il2CppTypeDefinition* typeDef) const\n\t\t{\n\t\t\treturn (uint32_t)(typeDef - &_typesDefines[0]);\n\t\t}\n\n\t\tIl2CppTypeDefinition* GetTypeDefinitionByTypeDetail(const TypeDefinitionDetail* typeDetail)\n\t\t{\n\t\t\tuint32_t index = (uint32_t)(typeDetail - &_typeDetails[0]);\n\t\t\treturn &_typesDefines[index];\n\t\t}\n\n\t\tuint32_t GetTypeRawIndexByEncodedIl2CppTypeIndex(int32_t il2cppTypeIndex) const\n\t\t{\n\t\t\treturn GetTypeRawIndex((const Il2CppTypeDefinition*)_types[DecodeMetadataIndex(il2cppTypeIndex)]->data.typeHandle);\n\t\t}\n\n\t\tconst Il2CppTypeDefinition* GetTypeFromRawIndex(uint32_t index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _typesDefines.size());\n\t\t\treturn &_typesDefines[index];\n\t\t}\n\n\t\tconst Il2CppType* GetIl2CppTypeFromRawIndex(uint32_t index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _types.size());\n\t\t\treturn _types[index];\n\t\t}\n\n\t\tconst Il2CppType* GetIl2CppTypeFromRawTypeDefIndex(uint32_t index) override\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_typesDefines.size());\n\t\t\treturn _types[DecodeMetadataIndex(_typesDefines[index].byvalTypeIndex)];\n\t\t}\n\n\t\tconst Il2CppFieldDefinition* GetFieldDefinitionFromRawIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_fieldDetails.size());\n\t\t\treturn &(_fieldDetails[index].fieldDef);\n\t\t}\n\n\t\tconst FieldDetail& GetFieldDetailFromRawIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_fieldDetails.size());\n\t\t\treturn _fieldDetails[index];\n\t\t}\n\n\t\tconst Il2CppMethodDefinition* GetMethodDefinitionFromRawIndex(uint32_t index) override\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _methodDefines.size());\n\t\t\treturn &_methodDefines[index];\n\t\t}\n\n\t\tMethodIndex GetMethodIndexFromDefinition(const Il2CppMethodDefinition* methodDefine)\n\t\t{\n\t\t\treturn EncodeWithIndex((uint32_t)(methodDefine - &_methodDefines[0]));\n\t\t}\n\n\t\tconst Il2CppGenericParameter* GetGenericParameterByGlobalIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_genericParams.size());\n\t\t\treturn &_genericParams[index];\n\t\t}\n\n\t\tconst Il2CppGenericParameter* GetGenericParameterByRawIndex(const Il2CppGenericContainer* container, uint32_t index)\n\t\t{\n\t\t\tuint32_t globalIndex = DecodeMetadataIndex(container->genericParameterStart) + index;\n\t\t\tIL2CPP_ASSERT(globalIndex < (uint32_t)_genericParams.size());\n\t\t\treturn &_genericParams[globalIndex];\n\t\t}\n\n\t\tIl2CppGenericContainer* GetGenericContainerByRawIndex(uint32_t index) override\n\t\t{\n\t\t\tif (index != kGenericContainerIndexInvalid)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(index < (uint32_t)_genericContainers.size());\n\t\t\t\treturn &_genericContainers[index];\n\t\t\t}\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tIl2CppGenericContainer* GetGenericContainerByTypeDefinition(const Il2CppTypeDefinition* typeDef)\n\t\t{\n\t\t\tGenericContainerIndex idx = DecodeMetadataIndex(typeDef->genericContainerIndex);\n\t\t\tif (idx != kGenericContainerIndexInvalid)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(idx < (GenericContainerIndex)_genericContainers.size());\n\t\t\t\treturn &_genericContainers[idx];\n\t\t\t}\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tIl2CppGenericContainer* GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex) override\n\t\t{\n\t\t\tIL2CPP_ASSERT(typeDefIndex < (int32_t)_typeDetails.size());\n\t\t\treturn GetGenericContainerByTypeDefinition(&_typesDefines[typeDefIndex]);\n\t\t}\n\n\t\tconst il2cpp::utils::dynamic_array<MethodImpl> GetTypeMethodImplByTypeDefinition(const Il2CppTypeDefinition* typeDef);\n\n\t\tconst Il2CppType* GetGenericParameterConstraintFromIndex(GenericParameterConstraintIndex index)\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _genericConstraints.size());\n\t\t\tTypeIndex typeIndex = _genericConstraints[index];\n\t\t\tif (typeIndex == kTypeIndexInvalid)\n\t\t\t{\n\n\t\t\t\tTbGenericParamConstraint data = _rawImage->ReadGenericParamConstraint(index + 1);\n\t\t\t\tIl2CppGenericParameter& genericParam = _genericParams[data.owner - 1];\n\n\t\t\t\tconst Il2CppGenericContainer* klassGc;\n\t\t\t\tconst Il2CppGenericContainer* methodGc;\n\t\t\t\tGetClassAndMethodGenericContainerFromGenericContainerIndex(genericParam.ownerIndex, klassGc, methodGc);\n\n\t\t\t\tconst Il2CppType* paramCons = ReadTypeFromToken(klassGc, methodGc, DecodeTypeDefOrRefOrSpecCodedIndexTableType(data.constraint), DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(data.constraint));\n\t\t\t\t_genericConstraints[index] = typeIndex = DecodeMetadataIndex(AddIl2CppTypeCache(paramCons));\n\t\t\t}\n\t\t\treturn _types[typeIndex];\n\t\t}\n\n\t\tIl2CppClass* GetNestedTypeFromOffset(const Il2CppClass* klass, TypeNestedTypeIndex offset);\n\t\tIl2CppClass* GetNestedTypeFromOffset(const Il2CppTypeDefinition* typeDef, TypeNestedTypeIndex offset);\n\n\t\tconst MethodInfo* GetMethodInfoFromMethodDefinitionRawIndex(uint32_t index);\n\t\tconst MethodInfo* GetMethodInfoFromMethodDefinition(const Il2CppMethodDefinition* methodDef);\n\t\tconst Il2CppMethodDefinition* GetMethodDefinitionFromVTableSlot(const Il2CppTypeDefinition* typeDefine, int32_t vTableSlot);\n\t\tconst MethodInfo* GetMethodInfoFromVTableSlot(const Il2CppClass* klass, int32_t vTableSlot);\n\n\t\tIl2CppTypeDefinition* GetNestedTypes(Il2CppTypeDefinition* handle, void** iter);\n\n\t\tvoid GetClassAndMethodGenericContainerFromGenericContainerIndex(GenericContainerIndex idx, const Il2CppGenericContainer*& klassGc, const Il2CppGenericContainer*& methodGc);\n\n\t\tIl2CppMethodPointer GetAdjustorThunk(uint32_t token);\n\t\tIl2CppMethodPointer GetMethodPointer(uint32_t token);\n\t\tInvokerMethod GetMethodInvoker(uint32_t token);\n\n\t\tconst Il2CppParameterDefinition* GetParameterDefinitionFromIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT((size_t)index < _params.size());\n\t\t\treturn &_params[index].paramDef;\n\t\t}\n\n\t\tconst Il2CppParameterDefaultValue* GetParameterDefaultValueEntryByRawIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_params.size());\n\t\t\tuint32_t defaultValueIndex = _params[index].defaultValueIndex;\n\t\t\treturn defaultValueIndex != kDefaultValueIndexNull ? &_paramDefaultValues[defaultValueIndex] : nullptr;\n\t\t}\n\n\t\tuint32_t GetFieldOffset(const Il2CppTypeDefinition* typeDef, int32_t fieldIndexInType)\n\t\t{\n\t\t\tuint32_t fieldActualIndex = DecodeMetadataIndex(typeDef->fieldStart) + fieldIndexInType;\n\t\t\tIL2CPP_ASSERT(fieldActualIndex < (uint32_t)_fieldDetails.size());\n\t\t\treturn _fieldDetails[fieldActualIndex].offset;\n\t\t}\n\n\t\tuint32_t GetFieldOffset(TypeDefinitionIndex typeIndex, int32_t fieldIndexInType)\n\t\t{\n\t\t\tIl2CppTypeDefinition* typeDef = &_typesDefines[typeIndex];\n\t\t\treturn GetFieldOffset(typeDef, fieldIndexInType);\n\t\t}\n\n\t\tuint32_t GetFieldOffset(const Il2CppClass* klass, int32_t fieldIndexInType)\n\t\t{\n\t\t\tIl2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)(klass->typeMetadataHandle);\n\t\t\treturn GetFieldOffset(typeDef, fieldIndexInType);\n\t\t}\n\n\t\tint32_t GetPackingSize(const Il2CppTypeDefinition* typeDef) const\n\t\t{\n\t\t\tint32_t typeIndex = GetTypeRawIndex(typeDef);\n\t\t\tauto it = _classLayouts.find(typeIndex);\n\t\t\treturn it != _classLayouts.end() ? it->second.packingSize : 0;\n\t\t}\n\n\t\tTbClassLayout GetClassLayout(const Il2CppTypeDefinition* typeDef) const\n\t\t{\n\t\t\tint32_t typeIndex = GetTypeRawIndex(typeDef);\n\t\t\tauto it = _classLayouts.find(typeIndex);\n\t\t\treturn it != _classLayouts.end() ? it->second : TbClassLayout{};\n\t\t}\n\n\t\tconst Il2CppFieldDefaultValue* GetFieldDefaultValueEntryByRawIndex(uint32_t index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index < (uint32_t)_fieldDetails.size());\n\t\t\tuint32_t fdvIndex = _fieldDetails[index].defaultValueIndex;\n\t\t\tIL2CPP_ASSERT(fdvIndex != kDefaultValueIndexNull);\n\t\t\treturn &_fieldDefaultValues[fdvIndex];\n\t\t}\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tstatic uint32_t EncodeWithBlobSource(uint32_t index, BlobSource source)\n\t\t{\n\t\t\treturn (index << 1) | (uint32_t)source;\n\t\t}\n#endif\n\n\t\tconst uint8_t* GetFieldOrParameterDefalutValueByRawIndex(uint32_t index)\n\t\t{\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\treturn _rawImage->GetFieldOrParameterDefalutValueByRawIndex(index);\n#else\n\t\t\tBlobSource source = (BlobSource)(index & 0x1);\n\t\t\tuint32_t offset = index >> 1;\n\t\t\tif (source == BlobSource::RAW_IMAGE)\n\t\t\t{\n\t\t\t\treturn _rawImage->GetFieldOrParameterDefalutValueByRawIndex(offset);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn _constValues.DataAt(offset);\n\t\t\t}\n#endif\n\t\t}\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tDefaultValueDataIndex ConvertConstValue(CustomAttributeDataWriter& writer, uint32_t blobIndex, const Il2CppType* type);\n#endif\n\n\t\tIl2CppPropertyDefinition* GetPropertyDefinitionFromIndex(PropertyIndex index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index > 0 && index <= (int32_t)_propeties.size());\n\t\t\tPropertyDetail& pd = _propeties[(uint32_t)index - 1];\n\t\t\treturn &pd.il2cppDefinition;\n\t\t}\n\n\t\tIl2CppMetadataPropertyInfo GetPropertyInfo(const Il2CppClass* klass, TypePropertyIndex index)\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)klass->typeMetadataHandle;\n\t\t\tIL2CPP_ASSERT(typeDef->propertyStart);\n\t\t\tuint32_t rowIndex = DecodeMetadataIndex(typeDef->propertyStart) + index;\n\t\t\tPropertyDetail& pd = _propeties[rowIndex - 1];\n\t\t\tuint32_t baseMethodIdx = DecodeMetadataIndex(typeDef->methodStart) + 1;\n#if UNITY_ENGINE_TUANJIE\n\t\t\tconst MethodInfo* getter = pd.getterMethodIndex ? il2cpp::vm::Class::GetOrSetupOneMethod(const_cast<Il2CppClass*>(klass), pd.getterMethodIndex - baseMethodIdx) : nullptr;\n\t\t\tconst MethodInfo* setter = pd.setterMethodIndex ? il2cpp::vm::Class::GetOrSetupOneMethod(const_cast<Il2CppClass*>(klass), pd.setterMethodIndex - baseMethodIdx) : nullptr;\n#else\n\t\t\tconst MethodInfo* getter = pd.getterMethodIndex ? klass->methods[pd.getterMethodIndex - baseMethodIdx] : nullptr;\n\t\t\tconst MethodInfo* setter = pd.setterMethodIndex ? klass->methods[pd.setterMethodIndex - baseMethodIdx] : nullptr;\n#endif\n\t\t\treturn { pd.name, getter, setter, pd.flags, EncodeToken(TableType::PROPERTY, rowIndex) };\n\t\t}\n\n#ifdef HYBRIDCLR_UNITY_2019\n\t\tconst Il2CppEventDefinition* GetEventDefinitionFromIndex(EventIndex index)\n\t\t{\n\t\t\tIL2CPP_ASSERT(index > 0 && index <= (int32_t)_events.size());\n\t\t\tEventDetail& pd = _events[index - 1];\n\t\t\treturn &pd.il2cppDefinition;\n\t\t}\n#endif\n\n\n\t\tIl2CppMetadataEventInfo GetEventInfo(const Il2CppClass* klass, TypeEventIndex index)\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)klass->typeMetadataHandle;\n\t\t\tIL2CPP_ASSERT(typeDef->eventStart);\n\t\t\tuint32_t rowIndex = DecodeMetadataIndex(typeDef->eventStart) + index;\n\t\t\tEventDetail& pd = _events[rowIndex - 1];\n\t\t\tuint32_t baseMethodIdx = DecodeMetadataIndex(typeDef->methodStart) + 1;\n#if UNITY_ENGINE_TUANJIE\n\t\t\tconst MethodInfo* addOn = pd.addMethodIndex ? il2cpp::vm::Class::GetOrSetupOneMethod(const_cast<Il2CppClass*>(klass), pd.addMethodIndex - baseMethodIdx) : nullptr;\n\t\t\tconst MethodInfo* removeOn = pd.removeMethodIndex ? il2cpp::vm::Class::GetOrSetupOneMethod(const_cast<Il2CppClass*>(klass), pd.removeMethodIndex - baseMethodIdx) : nullptr;\n\t\t\tconst MethodInfo* raiseOn = pd.fireMethodIndex ? il2cpp::vm::Class::GetOrSetupOneMethod(const_cast<Il2CppClass*>(klass), pd.fireMethodIndex - baseMethodIdx) : nullptr;\n#else\n\t\t\tconst MethodInfo* addOn = pd.addMethodIndex ? klass->methods[pd.addMethodIndex - baseMethodIdx] : nullptr;\n\t\t\tconst MethodInfo* removeOn = pd.removeMethodIndex ? klass->methods[pd.removeMethodIndex - baseMethodIdx] : nullptr;\n\t\t\tconst MethodInfo* raiseOn = pd.fireMethodIndex ? klass->methods[pd.fireMethodIndex - baseMethodIdx] : nullptr;\n#endif\n\t\t\treturn { pd.name, &klass->byval_arg, addOn, removeOn, raiseOn, EncodeToken(TableType::EVENT, rowIndex) };\n\t\t}\n\n\t\tconst Il2CppAssembly* GetReferencedAssembly(int32_t referencedAssemblyTableIndex, const Il2CppAssembly assembliesTable[], int assembliesCount);\n\n\t\tIl2CppMetadataCustomAttributeHandle GetCustomAttributeTypeToken(uint32_t token)\n\t\t{\n\t\t\tauto it = _tokenCustomAttributes.find(token);\n\t\t\treturn it != _tokenCustomAttributes.end() ? (Il2CppMetadataCustomAttributeHandle)&_customAttributeHandles[DecodeMetadataIndex(it->second.typeRangeIndex)] : nullptr;\n\t\t}\n\n\t\tCustomAttributeIndex GetCustomAttributeIndex(uint32_t token)\n\t\t{\n\t\t\tauto it = _tokenCustomAttributes.find(token);\n\t\t\treturn it != _tokenCustomAttributes.end() ? it->second.typeRangeIndex : kCustomAttributeIndexInvalid;\n\t\t}\n\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tstd::tuple<void*, void*> GetCustomAttributeDataRange(uint32_t token)\n\t\t{\n\t\t\tconst Il2CppCustomAttributeTypeRange* dataRangeCur = (const Il2CppCustomAttributeTypeRange*)GetCustomAttributeTypeToken(token);\n\t\t\tCustomAttributeIndex curIndex = DecodeMetadataIndex(GET_CUSTOM_ATTRIBUTE_TYPE_RANGE_START(*dataRangeCur));\n\t\t\tCustomAttributeIndex nextIndex = DecodeMetadataIndex(GET_CUSTOM_ATTRIBUTE_TYPE_RANGE_START(*(dataRangeCur + 1)));\n\t\t\tCustomAttribute& curCa = _customAttribues[curIndex];\n\t\t\tCustomAttribute& nextCa = _customAttribues[nextIndex];\n\t\t\treturn std::tuple<void*, void*>((void*)_rawImage->GetBlobReaderByRawIndex(curCa.value).GetData(), (void*)_rawImage->GetBlobReaderByRawIndex(nextCa.value).GetData());\n\t\t}\n\n\t\tCustomAttributesCache* GenerateCustomAttributesCacheInternal(const Il2CppCustomAttributeTypeRange* typeRange)\n\t\t{\n\t\t\tCustomAttributeIndex index = (CustomAttributeIndex)(typeRange - (const Il2CppCustomAttributeTypeRange*)&_customAttributeHandles[0]);\n\t\t\tIL2CPP_ASSERT(index >= 0 && index < (CustomAttributeIndex)_customAttributeHandles.size());\n\t\t\treturn GenerateCustomAttributesCacheInternal(index);\n\t\t}\n\n\t\tbool HasAttribute(CustomAttributeIndex index, Il2CppClass* attribute)\n\t\t{\n\t\t\tconst Il2CppCustomAttributeTypeRange* typeRange = &_customAttributeHandles[DecodeMetadataIndex(index)];\n\t\t\treturn HasAttribute(typeRange, attribute);\n\t\t}\n\n\t\tbool HasAttribute(const Il2CppCustomAttributeTypeRange* typeRange, Il2CppClass* attribute)\n\t\t{\n\t\t\tCustomAttributesCache* attrCache = GenerateCustomAttributesCacheInternal(typeRange);\n\t\t\treturn HasAttribute(attrCache, attribute);\n\t\t}\n\n\t\tbool HasAttributeByToken(uint32_t token, Il2CppClass* attribute)\n\t\t{\n\t\t\tCustomAttributeIndex index = GetCustomAttributeIndex(token);\n\t\t\tif (index == kCustomAttributeIndexInvalid)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tCustomAttributesCache* attrCache = GenerateCustomAttributesCacheInternal(DecodeMetadataIndex(index));\n\t\t\treturn HasAttribute(attrCache, attribute);\n\t\t}\n\n\t\tbool HasAttribute(CustomAttributesCache* attrCache, Il2CppClass* attribute)\n\t\t{\n\t\t\tfor (int i = 0; i < attrCache->count; i++)\n\t\t\t{\n\t\t\t\tIl2CppObject* attrObj = attrCache->attributes[i];\n\t\t\t\tif (il2cpp::vm::Class::IsAssignableFrom(attribute, attrObj->klass))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tCustomAttributesCache* GenerateCustomAttributesCacheInternal(CustomAttributeIndex index);\n#else\n\n\t\tvoid InitCustomAttributeData(CustomAttributesInfo& cai, const Il2CppCustomAttributeTypeRange& dataRange);\n\t\t\t\n\t\til2cpp::metadata::CustomAttributeDataReader CreateCustomAttributeDataReader(Il2CppMetadataCustomAttributeHandle handle)\n\t\t{\n\t\t\tconst Il2CppCustomAttributeTypeRange* dataRange = (const Il2CppCustomAttributeTypeRange*)handle;\n\t\t\tIL2CPP_ASSERT(_tokenCustomAttributes.find(dataRange->token) != _tokenCustomAttributes.end());\n\t\t\tCustomAttributesInfo& cai = _tokenCustomAttributes[dataRange->token];\n\t\t\tif (!cai.inited)\n\t\t\t{\n\t\t\t\tInitCustomAttributeData(cai, *dataRange);\n\t\t\t}\n#if HYBRIDCLR_UNITY_2022_OR_NEW\n\t\t\treturn il2cpp::metadata::CustomAttributeDataReader(_il2cppImage, cai.dataStartPtr, cai.dataEndPtr);\n#else\n\t\t\treturn il2cpp::metadata::CustomAttributeDataReader(cai.dataStartPtr, cai.dataEndPtr);\n#endif\n\t\t}\n\n\t\tstd::tuple<void*, void*> CreateCustomAttributeDataTuple(const Il2CppCustomAttributeDataRange* dataRange)\n\t\t{\n\t\t\tIL2CPP_ASSERT(_tokenCustomAttributes.find(dataRange->token) != _tokenCustomAttributes.end());\n\t\t\tCustomAttributesInfo& cai = _tokenCustomAttributes[dataRange->token];\n\t\t\tif (!cai.inited)\n\t\t\t{\n\t\t\t\tInitCustomAttributeData(cai, *dataRange);\n\t\t\t}\n\t\t\treturn std::tuple<void*, void*>(cai.dataStartPtr, cai.dataEndPtr);\n\t\t}\n\n\t\tstd::tuple<void*, void*> CreateCustomAttributeDataTupleByToken(uint32_t token)\n\t\t{\n\t\t\tconst Il2CppCustomAttributeTypeRange* dataRangeCur = (const Il2CppCustomAttributeTypeRange*)GetCustomAttributeTypeToken(token);\n\t\t\treturn dataRangeCur ? CreateCustomAttributeDataTuple(dataRangeCur) : std::tuple<void*, void*>(nullptr, nullptr);\n\t\t}\n\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\tCustomAttributesCache* GenerateCustomAttributesCacheInternal(const Il2CppCustomAttributeTypeRange* typeRange)\n\t\t{\n\t\t\tCustomAttributeIndex index = (CustomAttributeIndex)(typeRange - (const Il2CppCustomAttributeTypeRange*)&_customAttributeHandles[0]);\n\t\t\tIL2CPP_ASSERT(index >= 0 && index < (CustomAttributeIndex)_customAttributeHandles.size());\n\t\t\treturn GenerateCustomAttributesCacheInternal(index);\n\t\t}\n\n\t\tCustomAttributesCache* GenerateCustomAttributesCacheInternal(CustomAttributeIndex index);\n#endif\n\n\t\tvoid BuildCustomAttributesData(CustomAttributesInfo& cai, const Il2CppCustomAttributeTypeRange& typeRange);\n\t\tvoid ConvertILCustomAttributeData2Il2CppFormat(const MethodInfo* ctorMethod, BlobReader& reader);\n\t\tvoid ConvertFixedArg(CustomAttributeDataWriter& writer, BlobReader& reader, const Il2CppType* type, bool writeType);\n\t\tvoid ConvertBoxedValue(CustomAttributeDataWriter& writer, BlobReader& reader, bool writeType);\n\t\tvoid ConvertSystemType(CustomAttributeDataWriter& writer, BlobReader& reader, bool writeType);\n\t\tvoid WriteEncodeTypeEnum(CustomAttributeDataWriter& writer, const Il2CppType* type);\n\t\tvoid GetFieldDeclaringTypeIndexAndFieldIndexByName(const Il2CppTypeDefinition* declaringType, const char* name, int32_t& typeIndex, int32_t& fieldIndex);\n\t\tvoid GetPropertyDeclaringTypeIndexAndPropertyIndexByName(const Il2CppTypeDefinition* declaringType, const char* name, int32_t& typeIndex, int32_t& fieldIndex);\n#endif\n\n\t\tImplMapInfo* GetImplMapInfo(uint32_t token)\n\t\t{\n\t\t\tauto it = _implMapInfos.find(token);\n\t\t\treturn it != _implMapInfos.end() ? &it->second : nullptr;\n\t\t}\n\n\t\tIl2CppClass* GetTypeInfoFromTypeDefinitionRawIndex(uint32_t index);\n\n\t\tconst Il2CppType* GetInterfaceFromGlobalOffset(TypeInterfaceIndex offset);\n\t\tconst Il2CppType* GetInterfaceFromIndex(const Il2CppClass* klass, TypeInterfaceIndex index);\n\t\tconst Il2CppType* GetInterfaceFromOffset(const Il2CppClass* klass, TypeInterfaceIndex offset);\n\t\tconst Il2CppType* GetInterfaceFromOffset(const Il2CppTypeDefinition* typeDefine, TypeInterfaceIndex offset);\n\n\t\tIl2CppInterfaceOffsetInfo GetInterfaceOffsetInfo(const Il2CppTypeDefinition* typeDefine, TypeInterfaceOffsetIndex index);\n\n\t\tuint32_t AddIl2CppTypeCache(const Il2CppType* type);\n\n\t\tuint32_t AddIl2CppGenericContainers(Il2CppGenericContainer& geneContainer);\n\n\t\tconst Il2CppType* GetModuleIl2CppType(uint32_t moduleRowIndex, uint32_t typeNamespace, uint32_t typeName, bool raiseExceptionIfNotFound) override;\n\t\tvoid ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret) override;\n\t\tvoid ReadMethodDefSig(BlobReader& reader, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer, Il2CppMethodDefinition& methodDef, std::vector<ParamDetail>& paramArr);\n\n\t\tvoid InitBasic(Il2CppImage* image);\n\t\tvoid BuildIl2CppImage(Il2CppImage* image);\n\t\tvoid BuildIl2CppAssembly(Il2CppAssembly* assembly);\n\n\t\tvoid InitRuntimeMetadatas() override;\n\tprotected:\n\n\t\tvoid InitTypeDefs_0();\n\t\tvoid InitTypeDefs_1();\n\t\tvoid InitTypeDefs_2();\n\t\tvoid InitConsts();\n\n\t\tvoid InitClass();\n\n\t\tvoid InitParamDefs();\n\t\tvoid InitGenericParamConstraintDefs();\n\t\tvoid InitGenericParamDefs0();\n\t\tvoid InitGenericParamDefs();\n\t\tvoid InitFieldDefs();\n\t\tvoid InitFieldLayouts();\n\t\tvoid InitFieldRVAs();\n\t\tvoid InitBlittables();\n\t\tvoid InitMethodDefs0();\n\t\tvoid InitMethodDefs();\n\t\tvoid InitMethodImpls0();\n\t\tvoid InitNestedClass();\n\t\tvoid InitClassLayouts0();\n\t\tvoid InitClassLayouts();\n\t\tvoid InitCustomAttributes();\n\t\tvoid InitModuleRefs();\n\t\tvoid InitImplMaps();\n\t\tvoid InitProperties();\n\t\tvoid InitEvents();\n\t\tvoid InitMethodSemantics();\n\t\tvoid InitInterfaces();\n\t\tvoid InitVTables();\n\n\t\tvoid ComputeBlittable(Il2CppTypeDefinition* def, std::vector<bool>& computFlags);\n\t\tvoid ComputeVTable(TypeDefinitionDetail* tdd);\n\n\t\tvoid SetIl2CppImage(Il2CppImage* image)\n\t\t{\n\t\t\t_il2cppImage = image;\n\t\t}\n\n\t\tIl2CppString* ReadSerString(BlobReader& reader);\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tbool ReadUTF8SerString(BlobReader& reader, std::string& s);\n#endif\n\t\tIl2CppReflectionType* ReadSystemType(BlobReader& reader);\n\t\tIl2CppObject* ReadBoxedValue(BlobReader& reader);\n\t\tvoid ReadFixedArg(BlobReader& reader, const Il2CppType* argType, void* data);\n\t\tvoid ReadCustomAttributeFieldOrPropType(BlobReader& reader, Il2CppType& type);\n#if !HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tvoid ConstructCustomAttribute(BlobReader& reader, Il2CppObject* obj, const MethodInfo* ctorMethod);\n#endif\n\n\n\t\tbool _inited;\n\t\tIl2CppImage* _il2cppImage;\n\t\tconst uint32_t _index;\n\n\t\tstd::vector<TypeDefinitionDetail> _typeDetails;\n\t\tstd::vector<Il2CppTypeDefinition> _typesDefines;\n\t\tstd::vector<Il2CppTypeDefinition> _exportedTypeDefines;\n\n\t\tstd::vector<const Il2CppType*> _types;\n\t\tIl2CppHashMap<const Il2CppType*, uint32_t, Il2CppTypeHashShallow, Il2CppTypeEqualityComparerShallow> _type2Indexs;\n\t\tstd::vector<TypeIndex> _interfaceDefines;\n\t\tstd::vector<InterfaceOffsetInfo> _interfaceOffsets;\n\n\t\tstd::vector<Il2CppMethodDefinition> _methodDefines;\n\n\t\tstd::vector<ParamDetail> _params;\n\t\tstd::vector<int32_t>* _paramRawIndex2ActualParamIndex; // rawIindex = rowIndex - 1; because local function, param list count maybe less than actual method param count\n\t\tstd::vector<Il2CppParameterDefaultValue> _paramDefaultValues;\n\n\t\tstd::vector<Il2CppGenericParameter> _genericParams;\n\t\tstd::vector<TypeIndex> _genericConstraints; // raw TypeIndex\n\t\tstd::vector<Il2CppGenericContainer> _genericContainers;\n\n\t\tstd::vector<FieldDetail> _fieldDetails;\n\t\tstd::vector<Il2CppFieldDefaultValue> _fieldDefaultValues;\n\n\t\tstd::unordered_map<uint32_t, TbClassLayout> _classLayouts;\n\t\tstd::vector<uint32_t> _nestedTypeDefineIndexs;\n\n\t\t// runtime data \n\t\tstd::vector<Il2CppClass*> _classList;\n\t\tIl2CppType2TypeDeclaringTreeMap _cacheTrees;\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tCustomAttributeDataWriter _constValues;\n#endif\n\n\n\t\tstd::unordered_map<uint32_t, CustomAttributesInfo> _tokenCustomAttributes;\n\t\tstd::vector<Il2CppCustomAttributeTypeRange> _customAttributeHandles;\n#if !HYBRIDCLR_UNITY_2022_OR_NEW\n\t\tstd::vector<CustomAttributesCache*> _customAttribtesCaches;\n#endif\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tCustomAttributeDataWriter _il2cppFormatCustomDataBlob;\n\t\tCustomAttributeDataWriter _tempCtorArgBlob;\n\t\tCustomAttributeDataWriter _tempFieldBlob;\n\t\tCustomAttributeDataWriter _tempPropertyBlob;\n#endif\n\t\tstd::vector<CustomAttribute> _customAttribues;\n\n\t\tstd::vector<PropertyDetail> _propeties;\n\t\tstd::vector<EventDetail> _events;\n\n\t\tstd::vector<const char*> _moduleRefs;\n\t\tstd::unordered_map<uint32_t, ImplMapInfo> _implMapInfos;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataDef.h",
    "content": "#pragma once\n\n#include \"il2cpp-config.h\"\n\n#include \"Coff.h\"\n#include \"Tables.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tenum class CorILMethodFormat : uint8_t\n\t{\n\t\tTiny = 0x2,\n\t\tFat = 0x3,\n\t\tMoreSects = 0x8,\n\t\tInitLocals = 0x10,\n\t};\n\n\tenum class CorILSecion : uint8_t\n\t{\n\t\tEHTable = 0x1,\n\t\tOptILTable = 0x2,\n\t\tFatFormat = 0x40,\n\t\tMoreSects = 0x80,\n\t};\n\n\tenum class CorILExceptionClauseType\n\t{\n\t\tException = 0,\n\t\tFilter = 1,\n\t\tFinally = 2,\n\t\tFault = 4,\n\t};\n\n\tstruct CorILMethodFatHeader\n\t{\n\t\tuint16_t flags : 12;\n\t\tuint16_t size : 4;\n\t\tuint16_t maxStack;\n\t\tuint32_t codeSize;\n\t\tuint32_t localVarSigToken;\n\t};\n\n\tstruct CorILEHSmall\n\t{\n\t\tuint16_t flags;\n\t\tuint16_t tryOffset;\n\t\tuint8_t tryLength;\n\t\tuint8_t handlerOffset0;\n\t\tuint8_t handlerOffset1;\n\t\tuint8_t handlerLength;\n\t\tuint32_t classTokenOrFilterOffset;\n\t};\n\n\tstatic_assert(sizeof(CorILEHSmall) == 12, \"sizeof(CorILEHSmall) != 12\");\n\n\tstruct CorILEHFat\n\t{\n\t\tuint32_t flags;\n\t\tuint32_t tryOffset;\n\t\tuint32_t tryLength;\n\t\tuint32_t handlerOffset;\n\t\tuint32_t handlerLength;\n\t\tuint32_t classTokenOrFilterOffset;\n\t};\n\n\tstatic_assert(sizeof(CorILEHFat) == 24, \"sizeof(CorILEHFat) != 24\");\n\n\tstruct CorILEHSectionHeaderSmall\n\t{\n\t\tuint8_t kind;\n\t\tuint8_t dataSize;\n\t\tuint16_t reserved;\n\t\tCorILEHSmall clauses[0];\n\t};\n\n#pragma pack(push, 1)\n\tstruct CorILEHSectionHeaderFat\n\t{\n\t\tuint8_t kind;\n\t\tuint8_t dataSize0;\n\t\tuint8_t dataSize1;\n\t\tuint8_t dataSize2;\n\t\tCorILEHFat clauses[0];\n\t};\n#pragma pack(pop)\n\n\tconst int MAX_TABLE_INDEX = 0x37;\n\tconst int TABLE_NUM = MAX_TABLE_INDEX + 1;\n\n\tclass TagBits\n\t{\n\tpublic:\n\t\tstatic const uint32_t TypeDefOrRef = 2;\n\t\tstatic const uint32_t HasConstant = 2;\n\t\tstatic const uint32_t HasCustomAttribute = 5;\n\t\tstatic const uint32_t HasFieldMarshal = 1;\n\t\tstatic const uint32_t HasDeclSecurity = 2;\n\t\tstatic const uint32_t MemberRefParent = 3;\n\t\tstatic const uint32_t HasSemantics = 1;\n\t\tstatic const uint32_t MethodDefOrRef = 1;\n\t\tstatic const uint32_t MemberForwarded = 1;\n\t\tstatic const uint32_t Implementation = 2;\n\t\tstatic const uint32_t CustomAttributeType = 3;\n\t\tstatic const uint32_t ResoulutionScope = 2;\n\t\tstatic const uint32_t TypeOrMethodDef = 1;\n\t\tstatic const uint32_t HasCustomDebugInformation = 5;\n\n\t};\n\n\n\tconst TableType HasCustomAttributeAssociateTables[] = {\n\t\tTableType::METHOD,\n\t\tTableType::FIELD,\n\t\tTableType::TYPEREF,\n\t\tTableType::TYPEDEF,\n\t\tTableType::PARAM,\n\t\tTableType::INTERFACEIMPL,\n\t\tTableType::MEMBERREF,\n\t\tTableType::MODULE,\n\t\tTableType::DECLSECURITY,\n\t\tTableType::PROPERTY,\n\t\tTableType::EVENT,\n\t\tTableType::STANDALONESIG,\n\t\tTableType::MODULEREF,\n\t\tTableType::TYPESPEC,\n\t\tTableType::ASSEMBLY,\n\t\tTableType::ASSEMBLYREF,\n\t\tTableType::FILE,\n\t\tTableType::EXPORTEDTYPE,\n\t\tTableType::MANIFESTRESOURCE,\n\t\tTableType::GENERICPARAM,\n\t\tTableType::GENERICPARAMCONSTRAINT,\n\t\tTableType::METHODSPEC,\n\t};\n\n\tconst TableType HasCustomDebugInformation[] = {\n\t\tTableType::METHOD,\n\t\tTableType::FIELD,\n\t\tTableType::TYPEREF,\n\t\tTableType::TYPEDEF,\n\t\tTableType::PARAM,\n\t\tTableType::INTERFACEIMPL,\n\t\tTableType::MEMBERREF,\n\t\tTableType::MODULE,\n\t\tTableType::DECLSECURITY,\n\t\tTableType::PROPERTY,\n\t\tTableType::EVENT,\n\t\tTableType::STANDALONESIG,\n\t\tTableType::MODULEREF,\n\t\tTableType::TYPESPEC,\n\t\tTableType::ASSEMBLY,\n\t\tTableType::ASSEMBLYREF,\n\t\tTableType::FILE,\n\t\tTableType::EXPORTEDTYPE,\n\t\tTableType::MANIFESTRESOURCE,\n\t\tTableType::GENERICPARAM,\n\t\tTableType::GENERICPARAMCONSTRAINT,\n\t\tTableType::METHODSPEC,\n\t\tTableType::DOCUMENT,\n\t\tTableType::LOCALSCOPE,\n\t\tTableType::LOCALVARIABLE,\n\t\tTableType::LOCALCONSTANT,\n\t\tTableType::IMPORTSCOPE,\n\t};\n\n\tinline TableType DecodeTokenTableType(uint32_t index)\n\t{\n\t\treturn TableType(index >> 24);\n\t}\n\n\tinline uint32_t DecodeTokenRowIndex(uint32_t index)\n\t{\n\t\treturn index & 0xFFFFFF;\n\t}\n\n\tstruct SectionHeader\n\t{\n\t\tuint32_t virtualAddressBegin;\n\t\tuint32_t virtualAddressEnd;\n\t\tuint32_t ptrRawDataRelatedToVirtualAddress;\n\t};\n\n\tstruct ColumnOffsetSize\n\t{\n\t\tuint32_t size;\n\t\tuint16_t offset;\n\t};\n\n\tenum class SigType\n\t{\n\t\tDEFAULT = 0,\n\t\tC = 1,\n\t\tST_STDCALL = 2,\n\t\tST_THISCALL = 3,\n\t\tST_FASTCALL = 4,\n\t\tVARARG = 5,\n\t\tFIELD = 6,\n\t\tLOCAL_VAR = 7,\n\t\tPROPERTY_NOT_THIS = 8,\n\t\tGENERIC = 0x10,\n\t\tSENTINEL = 0x41,\n\t};\n\n\tconst uint32_t kSigMask = 0x0F;\n\n\tinline SigType DecodeSigType(uint8_t rawSigType)\n\t{\n\t\treturn (SigType)(rawSigType & kSigMask);\n\t}\n\n\tinline uint8_t DecodeSigFlags(uint8_t rawSigType)\n\t{\n\t\treturn (uint8_t)(rawSigType & 0xF0);\n\t}\n\n\tinline uint32_t EncodeToken(TableType type, uint32_t index)\n\t{\n\t\treturn ((uint32_t)type << 24) | index;\n\t}\n\n\tinline void DecodeToken(uint32_t token, TableType& type, uint32_t& rowIndex)\n\t{\n\t\ttype = (TableType)(token >> 24);\n\t\trowIndex = token & 0xFFFFFF;\n\t}\n\n\tenum class MethodSigFlags\n\t{\n\t\tHAS_THIS = 0x20,\n\t\tEXPLICITTHIS = 0x40,\n\t\tDEFAULT = 0x0,\n\t\tVARARG = 0x5,\n\t\tGENERIC = 0x10,\n\t};\n\n\tinline Il2CppTypeEnum GetElementType(Il2CppTypeEnum encodeType)\n\t{\n\t\treturn (Il2CppTypeEnum)((uint8_t)encodeType & 0x3f);\n\t}\n\n\tinline TableType DecodeTypeDefOrRefOrSpecCodedIndexTableType(uint32_t encodedToken)\n\t{\n\t\tswitch (encodedToken & 0x3)\n\t\t{\n\t\tcase 0: return TableType::TYPEDEF;\n\t\tcase 1: return TableType::TYPEREF;\n\t\tcase 2: return  TableType::TYPESPEC;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeTypeDefOrRefOrSpecCodedIndexRowIndex(uint32_t encodedToken)\n\t{\n\t\treturn encodedToken >> 2;\n\t}\n\n\tinline uint32_t EncodeTypeDefOrRefOrSpecCodedIndex(TableType type, uint32_t rowIndex)\n\t{\n\t\tuint32_t tableBits;\n\t\tswitch (type)\n\t\t{\n\t\tcase TableType::TYPEDEF: tableBits = 0; break;\n\t\tcase TableType::TYPEREF: tableBits = 1; break;\n\t\tcase TableType::TYPESPEC: tableBits = 2; break;\n\t\tdefault: IL2CPP_ASSERT(0); tableBits = 0; break;\n\t\t}\n\t\treturn (rowIndex << 2) | tableBits;\n\t}\n\n\tinline uint32_t ConvertTypeDefOrRefOrSpecToken2CodedIndex(uint32_t token)\n\t{\n\t\tTableType type;\n\t\tuint32_t rowIndex;\n\t\tDecodeToken(token, type, rowIndex);\n\n\t\tuint32_t tableBits;\n\t\tswitch (type)\n\t\t{\n\t\tcase TableType::TYPEDEF: tableBits = 0; break;\n\t\tcase TableType::TYPEREF: tableBits = 1; break;\n\t\tcase TableType::TYPESPEC: tableBits = 2; break;\n\t\tdefault: IL2CPP_ASSERT(0); tableBits = 0; break;\n\t\t}\n\t\treturn (rowIndex << 2) | tableBits;\n\t}\n\n\tinline void DecodeResolutionScopeCodedIndex(uint32_t encodedToken, TableType& tokenType, uint32_t& rawIndex)\n\t{\n\t\tswitch (encodedToken & 0x3)\n\t\t{\n\t\tcase 0: tokenType = TableType::MODULE; break;\n\t\tcase 1: tokenType = TableType::MODULEREF; break;\n\t\tcase 2: tokenType = TableType::ASSEMBLYREF; break;\n\t\tcase 3: tokenType = TableType::TYPEREF; break;\n\t\t}\n\t\trawIndex = encodedToken >> 2;\n\t}\n\n\tinline TableType DecodeTypeOrMethodDefCodedIndexTableType(uint32_t encodeIndex)\n\t{\n\t\tswitch (encodeIndex & 0x1)\n\t\t{\n\t\tcase 0: return TableType::TYPEDEF;\n\t\tcase 1: return TableType::METHOD;\n\t\t}\n\t\tIL2CPP_ASSERT(false);\n\t\treturn (TableType)-1;\n\t}\n\n\tinline uint32_t DecodeTypeOrMethodDefCodedIndexRowIndex(uint32_t encodeIndex)\n\t{\n\t\treturn encodeIndex >> 1;\n\t}\n\n\tinline TableType DecodeMethodDefOrRefCodedIndexTableType(uint32_t token)\n\t{\n\t\tswitch (token & 0x1)\n\t\t{\n\t\tcase 0: return TableType::METHOD;\n\t\tcase 1: return TableType::MEMBERREF;\n\t\t}\n\t\treturn (TableType)-1;\n\t}\n\n\tinline uint32_t DecodeMethodDefOrRefCodedIndexRowIndex(uint32_t token)\n\t{\n\t\treturn token >> 1;\n\t}\n\n\tinline uint32_t EncodeMethodDefOrRefCodedIndex(TableType type, uint32_t rowIndex)\n\t{\n\t\tIL2CPP_ASSERT(type == TableType::METHOD || type == TableType::MEMBERREF);\n\t\treturn (rowIndex << 1) | (type != TableType::METHOD);\n\t}\n\n\tinline uint32_t ConvertMethodDefOrRefToken2CodedIndex(uint32_t token)\n\t{\n\t\tTableType type;\n\t\tuint32_t rowIndex;\n\t\tDecodeToken(token, type, rowIndex);\n\t\treturn EncodeMethodDefOrRefCodedIndex(type, rowIndex);\n\t}\n\n\tinline TableType DecodeMemberRefParentType(uint32_t token)\n\t{\n\t\tswitch (token & 0x7)\n\t\t{\n\t\tcase 0: return TableType::TYPEDEF;\n\t\tcase 1: return TableType::TYPEREF;\n\t\tcase 2: return TableType::MODULEREF;\n\t\tcase 3: return TableType::METHOD;\n\t\tcase 4: return TableType::TYPESPEC;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeMemberRefParentRowIndex(uint32_t token)\n\t{\n\t\treturn token >> 3;\n\t}\n\n\tinline TableType DecodeFieldDefOrDefType(uint32_t encodeIndex)\n\t{\n\t\tswitch (encodeIndex & 0x1)\n\t\t{\n\t\tcase 0: return TableType::FIELD;\n\t\tcase 1: return TableType::MEMBERREF;\n\t\t}\n\t\treturn (TableType)-1;\n\t}\n\n\tinline uint32_t DecodeFieldDefOrDefTypeRowIndex(uint32_t encodeIndex)\n\t{\n\t\treturn encodeIndex >> 1;\n\t}\n\n\tinline uint32_t EncodeFieldDefOrRefCodedIndex(TableType type, uint32_t rowIndex)\n\t{\n\t\tIL2CPP_ASSERT(type == TableType::FIELD || type == TableType::MEMBERREF);\n\t\treturn (rowIndex << 1) | (type != TableType::FIELD);\n\t}\n\n\tinline uint32_t ConvertFieldDefOrRefToken2CodedIndex(uint32_t token)\n\t{\n\t\tTableType type;\n\t\tuint32_t rowIndex;\n\t\tDecodeToken(token, type, rowIndex);\n\t\treturn EncodeFieldDefOrRefCodedIndex(type, rowIndex);\n\t}\n\n\tinline TableType DecodeMemberRefParentCodedIndexTableType(uint32_t encodeIndex)\n\t{\n\t\tswitch ((encodeIndex & 0x7))\n\t\t{\n\t\tcase 0: return TableType::TYPEDEF;\n\t\tcase 1: return TableType::TYPEREF;\n\t\tcase 2: return TableType::MODULEREF;\n\t\tcase 3: return TableType::METHOD;\n\t\tcase 4: return TableType::TYPESPEC;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeMemberRefParentCodedIndexRowIndex(uint32_t encodeIndex)\n\t{\n\t\treturn encodeIndex >> 3;\n\t}\n\n\tinline TableType DecodeHasCustomAttributeCodedIndexTableType(uint32_t codedIndex)\n\t{\n\t\tswitch (codedIndex & 0x1f)\n\t\t{\n\t\tcase 0: return TableType::METHOD;\n\t\tcase 1: return TableType::FIELD;\n\t\tcase 2: return TableType::TYPEREF;\n\t\tcase 3: return TableType::TYPEDEF;\n\t\tcase 4: return TableType::PARAM;\n\t\tcase 5: return TableType::INTERFACEIMPL;\n\t\tcase 6: return TableType::MEMBERREF;\n\t\tcase 7: return TableType::MODULE;\n\t\tcase 8: return TableType::DECLSECURITY;\n\t\tcase 9: return TableType::PROPERTY;\n\t\tcase 10: return TableType::EVENT;\n\t\tcase 11: return TableType::STANDALONESIG;\n\t\tcase 12: return TableType::MODULEREF;\n\t\tcase 13: return TableType::TYPESPEC;\n\t\tcase 14: return TableType::ASSEMBLY;\n\t\tcase 15: return TableType::ASSEMBLYREF;\n\t\tcase 16: return TableType::FILE;\n\t\tcase 17: return TableType::EXPORTEDTYPE;\n\t\tcase 18: return TableType::MANIFESTRESOURCE;\n\t\tcase 19: return TableType::GENERICPARAM;\n\t\tcase 20: return TableType::GENERICPARAMCONSTRAINT;\n\t\tcase 21: return TableType::METHODSPEC;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeHasCustomAttributeCodedIndexRowIndex(uint32_t codedIndex)\n\t{\n\t\treturn codedIndex >> 5;\n\t}\n\n\tinline TableType DecodeCustomAttributeTypeCodedIndexTableType(uint32_t codeIndex)\n\t{\n\t\tswitch (codeIndex & 0x7)\n\t\t{\n\t\tcase 2: return TableType::METHOD;\n\t\tcase 3: return TableType::MEMBERREF;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeCustomAttributeTypeCodedIndexRowIndex(uint32_t codedIndex)\n\t{\n\t\treturn codedIndex >> 3;\n\t}\n\n\tinline uint32_t ConvertMemberForwardedToken2Token(uint32_t memberForwardedToken)\n\t{\n\t\tTableType tableType = memberForwardedToken & 0x1 ? TableType::METHOD : TableType::FIELD;\n\t\tuint32_t rowIndex = memberForwardedToken >> 1;\n\t\treturn EncodeToken(tableType, rowIndex);\n\t}\n\n\tenum class UserStringEncoding\n\t{\n\t\tASCII = 0,\n\t\tUnicode = 1,\n\t};\n\n\tstruct ExceptionClause\n\t{\n\t\tCorILExceptionClauseType flags;\n\t\tuint32_t tryOffset;\n\t\tuint32_t tryLength;\n\t\tuint32_t handlerOffsets;\n\t\tuint32_t handlerLength;\n\t\tuint32_t classTokenOrFilterOffset;\n\t};\n\n\tstruct MethodBody\n\t{\n\t\tuint32_t flags;\n\t\tuint32_t codeSize;\n\t\tconst uint8_t* ilcodes;\n\t\tuint32_t maxStack;\n\t\tstd::vector<ExceptionClause> exceptionClauses;\n\t\til2cpp::utils::dynamic_array<const Il2CppType*> localVars;\n\t\t// optional data sections\n\t};\n\n\n\n\tstruct MethodRefInfo\n\t{\n\t\tconst Il2CppType* containerType; // maybe generic\n\t\tconst Il2CppMethodDefinition* methodDef;\n\t\tconst Il2CppGenericInst* instantiation;\n\t};\n\n\tstruct MethodImpl\n\t{\n\t\tMethodRefInfo body;\n\t\tMethodRefInfo declaration;\n\t};\n\n\tstruct MethodDefSig\n\t{\n\t\tconst Il2CppType* classType;\n\t\tconst char* name;\n\t\tuint32_t flags;\n\t\tuint32_t genericParamCount;\n\t\tconst Il2CppType* returnType;\n\t\til2cpp::utils::dynamic_array<const Il2CppType*> params;\n\t};\n\n\tstruct MethodRefSig\n\t{\n\t\tuint32_t flags;\n\t\tuint32_t genericParamCount;\n\t\tconst Il2CppType* returnType;\n\t\til2cpp::utils::dynamic_array<const Il2CppType*> params;\n\t};\n\n\tstruct FieldRefSig\n\t{\n\t\tconst Il2CppType* type;\n\t};\n\n\tstruct FieldRefInfo\n\t{\n\t\tconst Il2CppType* containerType; // maybe generic\n\t\tconst Il2CppFieldDefinition* field;\n\t};\n\n\tstruct ResolveModuleRef\n\t{\n\n\t};\n\n\tstruct ResolveMethodDef\n\t{\n\t\tconst Il2CppMethodDefinition* methodDef;\n\t};\n\n\tstruct ResolveMemberRefParent\n\t{\n\t\tTableType parentType;\n\t\tconst Il2CppType* type; // TYPEREF, TYPEDEF,TYPESPEC\n\t\tResolveModuleRef moduleRef;\n\t\tResolveMethodDef methodDef;\n\t};\n\n\tstruct ResolveMemberRefSig\n\t{\n\t\tTableType memberType; // FIELDPTR OR METHODPTR\n\t\tMethodRefSig method;\n\t\tFieldRefSig field;\n\t};\n\n\tstruct ResolveMemberRef\n\t{\n\t\tResolveMemberRefParent parent;\n\t\tconst char* name;\n\t\tResolveMemberRefSig signature;\n\t};\n\n\tstruct MemberRefInfo\n\t{\n\t\tTableType memberType;\n\t\tMethodRefInfo method;\n\t\tFieldRefInfo field;\n\t};\n\n\tstruct ResolveStandAloneMethodSig\n\t{\n\t\tint32_t flags;\n\t\tconst Il2CppType* returnType;\n\t\til2cpp::utils::dynamic_array<const Il2CppType*> params;\n\t};\n\n\tinline TableType DecodeHasConstantType(uint32_t token)\n\t{\n\t\tswitch (token & 0x3)\n\t\t{\n\t\tcase 0: return TableType::FIELD;\n\t\tcase 1: return TableType::PARAM;\n\t\tcase 2: return TableType::PROPERTY;\n\t\tdefault: IL2CPP_ASSERT(false); return (TableType)-1;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tinline uint32_t DecodeHashConstantIndex(uint32_t token)\n\t{\n\t\treturn token >> 2;\n\t}\n\n\tenum class MethodSemanticsAttributes\n\t{\n\t\tSetter = 0x1,\n\t\tGetter = 0x2,\n\t\tOther = 0x4,\n\t\tAddOn = 0x8,\n\t\tRemoveOn = 0x10,\n\t\tFire = 0x20,\n\t};\n\n\tinline TableType DecodeHasSemanticsCodedIndexTableType(uint32_t codedIndex)\n\t{\n\t\tswitch (codedIndex & 0x1)\n\t\t{\n\t\tcase 0: return TableType::EVENT;\n\t\tcase 1: return TableType::PROPERTY;\n\t\t}\n\t\treturn (TableType)-1;\n\t}\n\n\tinline uint32_t DecodeHasSemanticsCodedIndexRowIndex(uint32_t codedIndex)\n\t{\n\t\treturn codedIndex >> 1;\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataModule.cpp",
    "content": "#include \"MetadataModule.h\"\n\n#include \"os/Atomic.h\"\n#include \"os/Mutex.h\"\n#include \"os/File.h\"\n#include \"vm/Exception.h\"\n#include \"vm/String.h\"\n#include \"vm/Assembly.h\"\n#include \"vm/Class.h\"\n#include \"vm/Object.h\"\n#include \"vm/Image.h\"\n#include \"vm/MetadataLock.h\"\n#include \"utils/Logging.h\"\n#include \"utils/MemoryMappedFile.h\"\n#include \"utils/Memory.h\"\n\n#include \"../interpreter/InterpreterModule.h\"\n\n#include \"Assembly.h\"\n#include \"InterpreterImage.h\"\n#include \"ConsistentAOTHomologousImage.h\"\n#include \"SuperSetAOTHomologousImage.h\"\n#include \"MetadataPool.h\"\n\nusing namespace il2cpp;\n\nnamespace hybridclr\n{\n\nnamespace metadata\n{\n\n\n\n    void MetadataModule::Initialize()\n    {\n        MetadataPool::Initialize();\n        InterpreterImage::Initialize();\n        Assembly::InitializePlaceHolderAssemblies();\n    }\n\n    Image* MetadataModule::GetUnderlyingInterpreterImage(const MethodInfo* methodInfo)\n    {\n        return metadata::IsInterpreterMethod(methodInfo) ? hybridclr::metadata::MetadataModule::GetImage(methodInfo->klass)\n            : (metadata::Image*)hybridclr::metadata::AOTHomologousImage::FindImageByAssembly(\n                methodInfo->klass->rank ? il2cpp_defaults.corlib->assembly : methodInfo->klass->image->assembly);\n    }\n}\n}\n"
  },
  {
    "path": "hybridclr/metadata/MetadataModule.h",
    "content": "#pragma once\n\n#include \"InterpreterImage.h\"\n#include \"AOTHomologousImage.h\"\n#include \"Assembly.h\"\n\nnamespace hybridclr\n{\n\nnamespace metadata\n{\n\tclass MetadataModule\n\t{\n\tpublic:\n\n\t\tstatic void Initialize();\n\n\t\tstatic InterpreterImage* GetImage(uint32_t imageIndex)\n\t\t{\n\t\t\treturn InterpreterImage::GetImage(imageIndex);\n\t\t}\n\n\t\tstatic InterpreterImage* GetImage(const Il2CppImage* image)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(image->token));\n\t\t}\n\n\t\tstatic InterpreterImage* GetImage(const Il2CppClass* klass)\n\t\t{\n\t\t\treturn GetImage(klass->image);\n\t\t}\n\n\t\tstatic InterpreterImage* GetImage(const Il2CppTypeDefinition* typeDef)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(typeDef->byvalTypeIndex));\n\t\t}\n\n\t\tstatic InterpreterImage* GetImage(const Il2CppMethodDefinition* method)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(method->nameIndex));\n\t\t}\n\n\t\tstatic InterpreterImage* GetImage(const MethodInfo* method)\n\t\t{\n\t\t\treturn GetImage(method->klass->image);\n\t\t}\n\n\t\tstatic InterpreterImage* GetImageByEncodedIndex(uint32_t encodedIndex)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(encodedIndex));\n\t\t}\n\t\t\n\t\tstatic Image* GetUnderlyingInterpreterImage(const MethodInfo* method);\n\n\n\t\tstatic const char* GetStringFromEncodeIndex(StringIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetStringFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic uint32_t GetTypeEncodeIndex(const Il2CppTypeDefinition* typeDef)\n\t\t{\n\t\t\tInterpreterImage* image = GetImage(typeDef);\n\t\t\treturn hybridclr::metadata::EncodeImageAndMetadataIndex(image->GetIndex(), image->GetTypeRawIndex(typeDef));\n\t\t}\n\n\t\tstatic Il2CppMetadataTypeHandle GetAssemblyTypeHandleFromRawIndex(const Il2CppImage* image, AssemblyTypeIndex index)\n\t\t{\n\t\t\treturn GetImage(image)->GetAssemblyTypeHandleFromRawIndex(index);\n\t\t}\n\n\t\tstatic Il2CppMetadataTypeHandle GetAssemblyTypeHandleFromEncodeIndex(AssemblyTypeIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetAssemblyTypeHandleFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic Il2CppMetadataTypeHandle GetAssemblyExportedTypeHandleFromEncodeIndex(AssemblyTypeIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetAssemblyExportedTypeHandleFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic const Il2CppTypeDefinitionSizes* GetTypeDefinitionSizesFromEncodeIndex(TypeDefinitionIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetTypeDefinitionSizesFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic const Il2CppType* GetIl2CppTypeFromEncodeIndex(uint32_t index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\tIL2CPP_ASSERT(imageIndex > 0);\n\n\t\t\tuint32_t rawIndex = DecodeMetadataIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetIl2CppTypeFromRawIndex(rawIndex);\n\t\t}\n\n\t\tstatic Il2CppClass* GetTypeInfoFromTypeDefinitionEncodeIndex(TypeDefinitionIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\tIL2CPP_ASSERT(imageIndex > 0);\n\n\t\t\tuint32_t rawIndex = DecodeMetadataIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetTypeInfoFromTypeDefinitionRawIndex(rawIndex);\n\t\t}\n\n\t\tstatic const Il2CppFieldDefinition* GetFieldDefinitionFromEncodeIndex(uint32_t index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetFieldDefinitionFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic const Il2CppMethodDefinition* GetMethodDefinitionFromIndex(MethodIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetMethodDefinitionFromRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic uint32_t GetFieldOffset(const Il2CppClass* klass, int32_t fieldIndexInType, FieldInfo* field)\n\t\t{\n\t\t\treturn GetImage(klass)->GetFieldOffset(klass, fieldIndexInType);\n\t\t}\n\n\t\tstatic const MethodInfo* GetMethodInfoFromMethodDefinitionIndex(uint32_t index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(index);\n\t\t\treturn GetImage(imageIndex)->GetMethodInfoFromMethodDefinitionRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic const MethodInfo* GetMethodInfoFromMethodDefinition(const Il2CppMethodDefinition* methodDef)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(methodDef->nameIndex);\n\t\t\treturn GetImage(imageIndex)->GetMethodInfoFromMethodDefinition(methodDef);\n\t\t}\n\n\t\tstatic const MethodInfo* GetMethodInfoFromVTableSlot(const Il2CppClass* klass, int32_t vTableSlot)\n\t\t{\n\t\t\treturn GetImage(klass)->GetMethodInfoFromVTableSlot(klass, vTableSlot);\n\t\t}\n\n\t\tstatic const Il2CppMethodDefinition* GetMethodDefinitionFromVTableSlot(const Il2CppTypeDefinition* typeDefine, int32_t vTableSlot)\n\t\t{\n\t\t\treturn GetImage(typeDefine)->GetMethodDefinitionFromVTableSlot(typeDefine, vTableSlot);\n\t\t}\n\n\t\tstatic Il2CppMethodPointer GetAdjustorThunk(const Il2CppImage* image, uint32_t token)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(image->token);\n\t\t\treturn GetImage(imageIndex)->GetAdjustorThunk(token);\n\t\t}\n\n\t\tstatic Il2CppMethodPointer GetMethodPointer(const Il2CppImage* image, uint32_t token)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(image->token);\n\t\t\treturn GetImage(imageIndex)->GetMethodPointer(token);\n\t\t}\n\n\t\tstatic InvokerMethod GetMethodInvoker(const Il2CppImage* image, uint32_t token)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(image->token);\n\t\t\treturn GetImage(imageIndex)->GetMethodInvoker(token);\n\t\t}\n\n\t\tstatic const Il2CppParameterDefinition* GetParameterDefinitionFromIndex(const Il2CppImage* image, ParameterIndex index)\n\t\t{\n\t\t\tuint32_t imageIndex = DecodeImageIndex(image->token);\n\t\t\treturn GetImage(imageIndex)->GetParameterDefinitionFromIndex(index);\n\t\t}\n\n\t\tstatic const Il2CppType* GetInterfaceFromIndex(const Il2CppClass* klass, TypeInterfaceIndex index)\n\t\t{\n\t\t\treturn GetImage(klass)->GetInterfaceFromIndex(klass, index);\n\t\t}\n\n\t\tstatic const Il2CppType* GetInterfaceFromOffset(const Il2CppClass* klass, TypeInterfaceIndex offset)\n\t\t{\n\t\t\treturn GetImage(klass)->GetInterfaceFromOffset(klass, offset);\n\t\t}\n\n\t\tstatic const Il2CppType* GetInterfaceFromOffset(const Il2CppTypeDefinition* typeDefine, TypeInterfaceIndex offset)\n\t\t{\n\t\t\treturn GetImage(typeDefine)->GetInterfaceFromOffset(typeDefine, offset);\n\t\t}\n\n\t\tstatic Il2CppInterfaceOffsetInfo GetInterfaceOffsetInfo(const Il2CppTypeDefinition* typeDefine, TypeInterfaceOffsetIndex index)\n\t\t{\n\t\t\treturn GetImage(typeDefine)->GetInterfaceOffsetInfo(typeDefine, index);\n\t\t}\n\n\t\tstatic Il2CppClass* GetNestedTypeFromOffset(const Il2CppClass* klass, TypeNestedTypeIndex offset)\n\t\t{\n\t\t\treturn GetImage(klass)->GetNestedTypeFromOffset(klass, offset);\n\t\t}\n\n\t\tstatic Il2CppClass* GetNestedTypeFromOffset(const Il2CppTypeDefinition* typeDefinition, TypeNestedTypeIndex offset)\n\t\t{\n\t\t\treturn GetImage(typeDefinition)->GetNestedTypeFromOffset(typeDefinition, offset);\n\t\t}\n\n\t\tstatic Il2CppMetadataTypeHandle GetNestedTypes(Il2CppMetadataTypeHandle handle, void** iter)\n\t\t{\n\t\t\tIl2CppTypeDefinition* typeDef = (Il2CppTypeDefinition*)handle;\n\t\t\treturn (Il2CppMetadataTypeHandle)(GetImage(typeDef)->GetNestedTypes(typeDef, iter));\n\t\t}\n\n\t\tstatic const Il2CppGenericContainer* GetGenericContainerFromEncodeIndex(uint32_t index)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(index))->GetGenericContainerByRawIndex(DecodeMetadataIndex(index));\n\n\t\t}\n\n\t\tstatic const Il2CppFieldDefaultValue* GetFieldDefaultValueEntry(uint32_t index)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(index))->GetFieldDefaultValueEntryByRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n\t\tstatic const uint8_t* GetFieldOrParameterDefalutValue(uint32_t index)\n\t\t{\n\t\t\treturn GetImage(DecodeImageIndex(index))->GetFieldOrParameterDefalutValueByRawIndex(DecodeMetadataIndex(index));\n\t\t}\n\n#if HYBRIDCLR_UNITY_2020\n\t\tstatic bool HasAttribute(const Il2CppImage* image, uint32_t token, Il2CppClass* attribute)\n\t\t{\n\t\t\treturn GetImage(image)->HasAttributeByToken(token, attribute);\n\t\t}\n\n\t\tstatic std::tuple<void*, void*> GetCustomAttributeDataRange(const Il2CppImage* image, uint32_t token)\n\t\t{\n\t\t\treturn GetImage(image)->GetCustomAttributeDataRange(token);\n\t\t}\n#endif\n\n\t\tstatic bool IsImplementedByInterpreter(MethodInfo* method)\n\t\t{\n\t\t\tIl2CppClass* klass = method->klass;\n\t\t\tIl2CppClass* parent = klass->parent;\n\t\t\tif (parent != il2cpp_defaults.multicastdelegate_class && parent != il2cpp_defaults.delegate_class)\n\t\t\t{\n\t\t\t\treturn AOTHomologousImage::FindImageByAssembly(klass->image->assembly);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn strcmp(method->name, \"Invoke\") == 0;\n\t\t\t}\n\t\t}\n\tprivate:\n\n\t};\n}\n\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataPool.cpp",
    "content": "#include \"MetadataPool.h\"\n\n#include \"utils/MemoryPool.h\"\n#include \"vm/MetadataAlloc.h\"\n#include \"vm/MetadataLock.h\"\n#include \"vm/GlobalMetadata.h\"\n\n#include \"MetadataModule.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tusing il2cpp::utils::HashUtils;\n\n\tconstexpr int kMaxPrimitiveType = (int)IL2CPP_TYPE_OBJECT;\n\n\tstatic bool s_initializedMetadataPool = false;\n\n\tstatic Il2CppType s_primitiveTypes[(int)kMaxPrimitiveType + 1];\n\tstatic Il2CppType s_byRefPrimitiveTypes[(int)kMaxPrimitiveType + 1];\n\n\tclass Il2CppArrayTypeHash\n\t{\n\tpublic:\n\t\tsize_t operator()(const Il2CppArrayType* t1) const\n\t\t{\n\t\t\treturn Hash(t1);\n\t\t}\n\n\t\tstatic size_t Hash(const Il2CppArrayType* t1);\n\t};\n\n\tclass Il2CppTypeFullHash\n\t{\n\tpublic:\n\t\tsize_t operator()(const Il2CppType* t1) const\n\t\t{\n\t\t\treturn Hash(t1);\n\t\t}\n\n\t\tstatic size_t Hash(const Il2CppType* t1)\n\t\t{\n\t\t\tsize_t hash = t1->type;\n\n\t\t\thash = HashUtils::Combine(hash, t1->byref);\n\n\t\t\thash = il2cpp::utils::HashUtils::Combine(hash, t1->attrs);\n\t\t\t//hash = il2cpp::utils::HashUtils::Combine(hash, t1->num_mods);\n\t\t\thash = il2cpp::utils::HashUtils::Combine(hash, t1->pinned);\n\t\t\t//hash = il2cpp::utils::HashUtils::Combine(hash, t1->valuetype);\n\n\t\t\tswitch (t1->type)\n\t\t\t{\n\t\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\t{\n\t\t\t\treturn HashUtils::Combine(hash, reinterpret_cast<size_t>(t1->data.typeHandle));\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\tcase IL2CPP_TYPE_PTR:\n\t\t\t{\n\t\t\t\treturn HashUtils::Combine(hash, Hash(t1->data.type));\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_ARRAY:\n\t\t\t{\n\t\t\t\tconst Il2CppArrayType* a = t1->data.array;\n\t\t\t\t// dont' compute sizes and lobounds\n\t\t\t\thash = HashUtils::Combine(hash, Il2CppArrayTypeHash::Hash(a));\n\t\t\t\treturn hash;\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t\t{\n\t\t\t\treturn HashUtils::Combine(hash, (size_t)t1->data.generic_class);\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_VAR:\n\t\t\tcase IL2CPP_TYPE_MVAR:\n\t\t\t\treturn HashUtils::Combine(hash, reinterpret_cast<size_t>(t1->data.genericParameterHandle));\n\t\t\tdefault:\n\t\t\t\treturn hash;\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\t};\n\n\tsize_t Il2CppArrayTypeHash::Hash(const Il2CppArrayType* t1)\n\t{\n\t\tsize_t hash = t1->rank;\n\t\thash = HashUtils::Combine(hash, t1->numsizes);\n\t\thash = HashUtils::Combine(hash, t1->numlobounds);\n\t\thash = HashUtils::Combine(hash, Il2CppTypeFullHash::Hash(t1->etype));\n\n\t\tfor (uint8_t i = 0; i < t1->numsizes; ++i)\n\t\t{\n\t\t\thash = HashUtils::Combine(hash, t1->sizes[i]);\n\t\t}\n\t\tfor (uint8_t i = 0; i < t1->numlobounds; ++i)\n\t\t{\n\t\t\thash = HashUtils::Combine(hash, t1->lobounds[i]);\n\t\t}\n\t\treturn hash;\n\t}\n\n\tclass Il2CppArrayTypeEqualityComparer\n\t{\n\tpublic:\n\t\tbool operator()(const Il2CppArrayType* t1, const Il2CppArrayType* t2) const\n\t\t{\n\t\t\treturn AreEqual(t1, t2);\n\t\t}\n\n\t\tstatic bool AreEqual(const Il2CppArrayType* t1, const Il2CppArrayType* t2);\n\t};\n\n\tclass Il2CppTypeFullEqualityComparer\n\t{\n\tpublic:\n\t\tbool operator()(const Il2CppType* t1, const Il2CppType* t2) const\n\t\t{\n\t\t\treturn AreEqual(t1, t2);\n\t\t}\n\n\t\tstatic bool AreEqual(const Il2CppType* t1, const Il2CppType* t2)\n\t\t{\n\t\t\tif (t1->type != t2->type)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (t1->byref != t2->byref\n\t\t\t\t|| t1->attrs != t2->attrs\n\t\t\t\t|| t1->pinned != t2->pinned)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch (t1->type)\n\t\t\t{\n\t\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\t\treturn t1->data.typeHandle == t2->data.typeHandle;\n\t\t\tcase IL2CPP_TYPE_PTR:\n\t\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\t\treturn AreEqual(t1->data.type, t2->data.type);\n\n\t\t\tcase IL2CPP_TYPE_ARRAY:\n\t\t\t{\n\t\t\t\tconst Il2CppArrayType* a1 = t1->data.array;\n\t\t\t\tconst Il2CppArrayType* a2 = t2->data.array;\n\t\t\t\treturn Il2CppArrayTypeEqualityComparer::AreEqual(a1, a2);\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t\t{\n\t\t\t\treturn t1->data.generic_class == t2->data.generic_class;\n\t\t\t}\n\t\t\tcase IL2CPP_TYPE_VAR:\n\t\t\tcase IL2CPP_TYPE_MVAR:\n\t\t\t\treturn t1->data.genericParameterHandle == t2->data.genericParameterHandle;\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t};\n\n\tbool Il2CppArrayTypeEqualityComparer::AreEqual(const Il2CppArrayType* a1, const Il2CppArrayType* a2)\n\t{\n\t\tif (a1->rank != a2->rank || a1->numsizes != a2->numsizes || a1->numlobounds != a2->numlobounds)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (uint8_t i = 0; i < a1->numsizes; ++i)\n\t\t{\n\t\t\tif (a1->sizes[i] != a2->sizes[i])\n\t\t\t\treturn false;\n\t\t}\n\t\tfor (uint8_t i = 0; i < a1->numlobounds; ++i)\n\t\t{\n\t\t\tif (a1->lobounds[i] != a2->lobounds[i])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn Il2CppTypeFullEqualityComparer::AreEqual(a1->etype, a2->etype);\n\t}\n\n\n\tclass Il2CppArrayTypeHash2\n\t{\n\tpublic:\n\t\tsize_t operator()(const Il2CppArrayType* t1) const\n\t\t{\n\t\t\treturn Hash(t1);\n\t\t}\n\n\t\tstatic size_t Hash(const Il2CppArrayType* t1)\n\t\t{\n\t\t\tsize_t hash = t1->rank;\n\t\t\thash = HashUtils::Combine(hash, Il2CppTypeFullHash::Hash(t1->etype));\n\t\t\treturn hash;\n\t\t}\n\t};\n\n\tclass Il2CppArrayTypeEqualityComparer2\n\t{\n\tpublic:\n\t\tbool operator()(const Il2CppArrayType* t1, const Il2CppArrayType* t2) const\n\t\t{\n\t\t\treturn AreEqual(t1, t2);\n\t\t}\n\n\t\tstatic bool AreEqual(const Il2CppArrayType* a1, const Il2CppArrayType* a2)\n\t\t{\n\t\t\tif (a1->rank != a2->rank)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Il2CppTypeFullEqualityComparer::AreEqual(a1->etype, a2->etype);\n\t\t}\n\t};\n\n\n\ttypedef Il2CppHashSet<const Il2CppType*, Il2CppTypeFullHash, Il2CppTypeFullEqualityComparer> Il2CppTypeHashSet;\n\tstatic Il2CppTypeHashSet* s_Il2CppTypePool = nullptr;\n\n\ttypedef Il2CppHashSet<const Il2CppArrayType*, Il2CppArrayTypeHash2, Il2CppArrayTypeEqualityComparer2> Il2CppArrayTypeHashSet;\n\tIl2CppArrayTypeHashSet* s_Il2CppArrayTypePool = nullptr;\n\n\n\tstatic void InitMetadataPool()\n\t{\n\t\tIL2CPP_ASSERT(!s_initializedMetadataPool);\n\t\ts_initializedMetadataPool = true;\n\t\tstd::memset(s_primitiveTypes, 0, sizeof(s_primitiveTypes));\n\t\tstd::memset(s_byRefPrimitiveTypes, 0, sizeof(s_byRefPrimitiveTypes));\n\n\t\tfor (int i = 0; i <= kMaxPrimitiveType; i++)\n\t\t{\n\t\t\tIl2CppType& type = s_primitiveTypes[i];\n\t\t\ttype.type = (Il2CppTypeEnum)i;\n\t\t\tbool isValueType = i != IL2CPP_TYPE_OBJECT && i != IL2CPP_TYPE_STRING && i != IL2CPP_TYPE_VOID;\n\t\t\tSET_IL2CPPTYPE_VALUE_TYPE(type, isValueType);\n\n\t\t\tIl2CppType& byRefType = s_byRefPrimitiveTypes[i];\n\t\t\tbyRefType.type = (Il2CppTypeEnum)i;\n\t\t\tbyRefType.byref = 1;\n\t\t}\n\t\ts_Il2CppTypePool = new Il2CppTypeHashSet();\n\t\ts_Il2CppArrayTypePool = new Il2CppArrayTypeHashSet();\n\t}\n\n\tstatic const Il2CppType* TryGetPrimitiveType(const Il2CppType& originalType)\n\t{\n\t\tif (!s_initializedMetadataPool)\n\t\t{\n\t\t\tInitMetadataPool();\n\t\t}\n\t\tif (originalType.attrs || originalType.num_mods || originalType.pinned)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tIl2CppTypeEnum type = originalType.type;\n\t\tswitch (type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VOID:\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R4:\n\t\tcase IL2CPP_TYPE_R8:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t\treturn originalType.byref ? s_byRefPrimitiveTypes + (int)type : s_primitiveTypes + (int)type;\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* typeDef = (const Il2CppTypeDefinition*)originalType.data.typeHandle;\n\t\t\tif (typeDef)\n\t\t\t{\n\t\t\t\tif (originalType.byref)\n\t\t\t\t{\n#if HYBRIDCLR_UNITY_2019\n\t\t\t\t\treturn il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->byrefTypeIndex);\n#endif\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->byvalTypeIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nullptr;\n\t\t}\n\t\tdefault:\n\t\t\treturn nullptr;\n\t\t}\n\t}\n\n\tvoid MetadataPool::Initialize()\n\t{\n\t\t//InitMetadataPool();\n\n\t}\n\n\tstatic bool NeedCache(const Il2CppType& originalType)\n\t{\n\t\tIl2CppTypeEnum type = originalType.type;\n\t\tswitch (type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VOID:\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R4:\n\t\tcase IL2CPP_TYPE_R8:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t\treturn true;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\treturn NeedCache(*originalType.data.type);\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\treturn originalType.data.typeHandle == nullptr;\n\t\t}\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tstatic Il2CppType* DeepCloneIl2CppType(const Il2CppType& type)\n\t{\n\t\tIl2CppType* newType = MetadataMallocT<Il2CppType>();\n\t\t*newType = type;\n\n\t\treturn newType;\n\t}\n\n\tconst Il2CppType* MetadataPool::GetPooledIl2CppType(const Il2CppType& type)\n\t{\n\t\tconst Il2CppType* pooledType = TryGetPrimitiveType(type);\n\t\tif (pooledType)\n\t\t{\n\t\t\treturn pooledType;\n\t\t}\n\n\t\tbool needCache = NeedCache(type);\n\n\t\tif (needCache)\n\t\t{\n\t\t\tauto it = s_Il2CppTypePool->find(&type);\n\t\t\tif (it != s_Il2CppTypePool->end())\n\t\t\t\treturn *it;\n\t\t}\n\t\tIl2CppType* newType = DeepCloneIl2CppType(type);\n\t\tif (needCache)\n\t\t{\n\t\t\tauto ret = s_Il2CppTypePool->insert(newType);\n\t\t\tIL2CPP_ASSERT(ret.second);\n\t\t}\n\t\treturn newType;\n\t}\n\n\tIl2CppType* MetadataPool::ShallowCloneIl2CppType(const Il2CppType* type)\n\t{\n\t\tIl2CppType* newType = MetadataMallocT<Il2CppType>();\n\t\t*newType = *type;\n\n\t\treturn newType;\n\t}\n\n\tconst Il2CppArrayType* MetadataPool::GetPooledIl2CppArrayType(const Il2CppType* elementType, uint32_t rank)\n\t{\n\t\tIl2CppArrayType type = {};\n\t\ttype.etype = elementType;\n\t\ttype.rank = rank;\n\n\t\tbool needCache = NeedCache(*elementType);\n\n\t\tif (needCache)\n\t\t{\n\t\t\tauto it = s_Il2CppArrayTypePool->find(&type);\n\t\t\tif (it != s_Il2CppArrayTypePool->end())\n\t\t\t\treturn *it;\n\t\t}\n\n\t\tIl2CppArrayType* newType = MetadataMallocT<Il2CppArrayType>();\n\t\t*newType = type;\n\n\t\tif (needCache)\n\t\t{\n\t\t\tauto ret = s_Il2CppArrayTypePool->insert(newType);\n\t\t\tIL2CPP_ASSERT(ret.second);\n\t\t}\n\t\treturn newType;\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataPool.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n\n#include \"metadata/GenericMetadata.h\"\n#include \"vm/MetadataAlloc.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\ttemplate<typename T>\n\tT* MetadataMallocT()\n\t{\n\t\treturn (T*)HYBRIDCLR_METADATA_MALLOC(sizeof(T));\n\t}\n\n\ttemplate<typename T>\n\tT* MetadataCallocT(size_t count)\n\t{\n\t\treturn (T*)HYBRIDCLR_METADATA_CALLOC(count, sizeof(T));\n\t}\n\n\tclass MetadataPool\n\t{\n\tpublic:\n\t\tstatic void Initialize();\n\t\tstatic const Il2CppType* GetPooledIl2CppType(const Il2CppType& type);\n\t\tstatic Il2CppType* ShallowCloneIl2CppType(const Il2CppType* type);\n\t\tstatic const Il2CppArrayType* GetPooledIl2CppArrayType(const Il2CppType* elementType, uint32_t rank);\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataReader.h",
    "content": "#pragma once\n\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n    struct ByteSpan\n    {\n        const byte* data;\n        uint32_t length;\n        ByteSpan() : data(nullptr), length(0) {}\n        ByteSpan(const byte* data, uint32_t length) : data(data), length(length) {}\n    };\n\n    class MetadataReader\n    {\n    private:\n        const byte* _data;\n    public:\n        MetadataReader(const byte* data) : _data(data) {}\n        int16_t ReadInt16()\n        {\n            int16_t value = GetI2LittleEndian(_data);\n            _data += 2;\n            return value;\n        }\n\n        bool ReadBool()\n        {\n            return *(_data++) != 0;\n        }\n\n        uint8_t ReadUInt8()\n        {\n            return *(_data++);\n        }\n\n        uint16_t ReadUInt16()\n        {\n            uint16_t value = GetU2LittleEndian(_data);\n            _data += 2;\n            return value;\n        }\n\n        int32_t ReadInt32()\n        {\n            int32_t value = GetI4LittleEndian(_data);\n            _data += 4;\n            return value;\n        }\n\n        uint32_t ReadUInt32()\n        {\n            uint32_t value = GetU4LittleEndian(_data);\n            _data += 4;\n            return value;\n        }\n\n        int64_t ReadInt64()\n        {\n            int64_t value = GetI8LittleEndian(_data);\n            _data += 8;\n            return value;\n        }\n\n        uint64_t ReadUInt64()\n        {\n            uint64_t value = GetU8LittleEndian(_data);\n            _data += 8;\n            return value;\n        }\n\n        const byte* ReadFixedBytes(int32_t byteCount)\n        {\n            const byte* value = _data;\n            _data += byteCount;\n            return value;\n        }\n\n        ByteSpan ReadBytes()\n        {\n            uint32_t byteCount = ReadUInt32();\n            const byte* buffer = _data;\n            _data += byteCount;\n            return ByteSpan(buffer, byteCount);\n        }\n\n        const byte* CurrentDataPtr() const\n        {\n            return _data;\n        }\n    };\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MetadataUtil.cpp",
    "content": "#include \"MetadataUtil.h\"\n\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/GlobalMetadataFileInternals.h\"\n#include \"vm/Type.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Class.h\"\n#include \"metadata/Il2CppTypeCompare.h\"\n#include \"metadata/GenericMetadata.h\"\n\n#include \"Image.h\"\n#include \"MetadataPool.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tconst uint32_t kMetadataImageIndexExtraShiftBitsArr[4] = \n\t{\n\t\tkMetadataImageIndexExtraShiftBitsA,\n\t\tkMetadataImageIndexExtraShiftBitsB,\n\t\tkMetadataImageIndexExtraShiftBitsC,\n\t\tkMetadataImageIndexExtraShiftBitsD,\n\t};\n\n\tconst uint32_t kMetadataIndexMaskArr[4] = \n\t{\n\t\tkMetadataIndexMaskA,\n\t\tkMetadataIndexMaskB,\n\t\tkMetadataIndexMaskC,\n\t\tkMetadataIndexMaskD,\n\t};\n\n\n\tuint32_t GetNotZeroBitCount(uint64_t x)\n\t{\n\t\tuint32_t count = 0;\n\t\tfor (int i = 0; i < 64; i++)\n\t\t{\n\t\t\tif (x & ((uint64_t)1 << i))\n\t\t\t{\n\t\t\t\t++count;\n\t\t\t}\n\t\t}\n\t\treturn count;\n\t}\n\n\tint32_t GetTypeValueSize(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn PTR_SIZE;\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t\treturn 1;\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t\treturn 2;\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\treturn 4;\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\treturn 8;\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_BYREF:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t\treturn PTR_SIZE;\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t\treturn sizeof(Il2CppTypedRef);\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\treturn PTR_SIZE;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\treturn il2cpp::vm::Class::GetValueSize(klass, nullptr);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\tif (genericClass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\t\treturn PTR_SIZE;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\t\treturn il2cpp::vm::Class::GetValueSize(klass, nullptr);\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tTEMP_FORMAT(errMsg, \"GetTypeValueSize unknown type:%d\", (int)type->type);\n\t\t\tRaiseExecutionEngineException(errMsg);\n\t\t\treturn -1;\n\t\t}\n\t\t}\n\t}\n\n\tbool IsValueType(const Il2CppType* type)\n\t{\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_R4:\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\tcase IL2CPP_TYPE_VALUETYPE: return true;\n\t\tcase IL2CPP_TYPE_GENERICINST: return type->data.generic_class->type->type == IL2CPP_TYPE_VALUETYPE;\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tbool IsTypeSameByTypeIndex(TypeIndex t1, TypeIndex t2)\n\t{\n\t\tconst Il2CppType* srcParamType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(t1);\n\t\tIL2CPP_ASSERT(srcParamType);\n\t\tconst Il2CppType* dstParamType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(t2);\n\t\tIL2CPP_ASSERT(dstParamType);\n\t\treturn il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(srcParamType, dstParamType);\n\t}\n\n\tbool IsTypeEqual(const Il2CppType* t1, const Il2CppType* t2)\n\t{\n\t\treturn il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(t1, t2);\n\t}\n\n\tbool IsTypeGenericCompatible(const Il2CppType* typeTo, const Il2CppType* typeFrom)\n\t{\n\t\tif (typeTo->type != typeFrom->type)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tswitch (typeTo->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass1 = il2cpp::vm::Class::FromIl2CppType(typeTo);\n\t\t\tIl2CppClass* klass2 = il2cpp::vm::Class::FromIl2CppType(typeFrom);\n\t\t\treturn klass1->instance_size == klass2->instance_size;\n\t\t}\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\tIl2CppClass* klass1 = il2cpp::vm::Class::FromIl2CppType(typeTo);\n\t\t\tIl2CppClass* klass2 = il2cpp::vm::Class::FromIl2CppType(typeFrom);\n\t\t\treturn il2cpp::vm::Class::IsAssignableFrom(klass1, klass2);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppClass* klass1 = il2cpp::vm::Class::FromIl2CppType(typeTo);\n\t\t\tIl2CppClass* klass2 = il2cpp::vm::Class::FromIl2CppType(typeFrom);\n\t\t\tif (IS_CLASS_VALUE_TYPE(klass1) != IS_CLASS_VALUE_TYPE(klass2))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (IS_CLASS_VALUE_TYPE(klass1))\n\t\t\t{\n\t\t\t\treturn klass1->instance_size == klass2->instance_size;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn il2cpp::vm::Class::IsAssignableFrom(klass1, klass2);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: return true;\n\t\t}\n\t\treturn true;\n\t}\n\n\tconst Il2CppType* TryInflateIfNeed(const Il2CppType* selfType, const Il2CppGenericContext* genericContext, bool inflateMethodVars)\n\t{\n\t\t// FIXME mEMORY LEAK\n\t\treturn genericContext ? il2cpp::metadata::GenericMetadata::InflateIfNeeded(selfType, genericContext, inflateMethodVars) : selfType;\n\t}\n\n\tconst Il2CppType* TryInflateIfNeed(const Il2CppType* containerType, const Il2CppType* selfType)\n\t{\n\t\tif (IsGenericIns(containerType) /* && IsGenericIns(selfType)*/)\n\t\t{\n\t\t\t// TOTO memory leak\n\t\t\treturn il2cpp::metadata::GenericMetadata::InflateIfNeeded(selfType, &containerType->data.generic_class->context, true);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn selfType;\n\t\t}\n\t}\n\n\tbool IsSameOverrideType(const Il2CppType* t1, const Il2CppType* t2)\n\t{\n\t\tif (t1->type != t2->type)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (t1->byref != t2->byref)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (t1->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn t1->data.typeHandle == t2->data.typeHandle;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\treturn IsSameOverrideType(t1->data.type, t2->data.type);\n\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\t{\n\t\t\tif (t1->data.array->rank != t2->data.array->rank)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn IsSameOverrideType(t1->data.array->etype, t2->data.array->etype);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tconst Il2CppGenericInst* i1 = t1->data.generic_class->context.class_inst;\n\t\t\tconst Il2CppGenericInst* i2 = t2->data.generic_class->context.class_inst;\n\n\t\t\t// this happens when maximum generic recursion is hit\n\t\t\tif (i1 == NULL || i2 == NULL)\n\t\t\t{\n\t\t\t\treturn i1 == i2;\n\t\t\t}\n\n\t\t\tif (i1->type_argc != i2->type_argc)\n\t\t\t\treturn false;\n\n\t\t\tif (!IsSameOverrideType(t1->data.generic_class->type, t2->data.generic_class->type))\n\t\t\t\treturn false;\n\n\t\t\tfor (uint32_t i = 0; i < i1->type_argc; ++i)\n\t\t\t{\n\t\t\t\tif (!IsSameOverrideType(i1->type_argv[i], i2->type_argv[i]))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t\tcase IL2CPP_TYPE_VAR:\n\t\t{\n\t\t\treturn t1->data.genericParameterHandle == t2->data.genericParameterHandle;\n\t\t}\n\t\tcase IL2CPP_TYPE_MVAR:\n\t\t{\n\t\t\tconst Il2CppGenericParameter* gp1 = (const Il2CppGenericParameter*)t1->data.genericParameterHandle;\n\t\t\tconst Il2CppGenericParameter* gp2 = (const Il2CppGenericParameter*)t2->data.genericParameterHandle;\n\t\t\treturn gp1->num == gp2->num;\n\t\t}\n\t\tdefault:\n\t\t\treturn true;\n\t\t}\n\t\tRaiseExecutionEngineException(\"\");\n\t\treturn false;\n\t}\n\n\tstatic bool IsGenericMethodSameGenericParamCount(const Il2CppMethodDefinition* method1, const Il2CppMethodDefinition* method2)\n\t{\n\t\tif (method1->genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t{\n\t\t\treturn method2->genericContainerIndex == kGenericContainerIndexInvalid;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (method2->genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppGenericContainer* genericContainer1 = (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(method1->genericContainerIndex);\n\t\t\t\tIl2CppGenericContainer* genericContainer2 = (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(method2->genericContainerIndex);\n\t\t\t\treturn genericContainer1->type_argc == genericContainer2->type_argc;\n\t\t\t}\n\t\t}\n\t}\n\n\tbool IsOverrideMethodIgnoreName(const Il2CppType* type1, const Il2CppMethodDefinition* methodDef1, const Il2CppType* type2, const Il2CppMethodDefinition* methodDef2)\n\t{\n\t\tif (methodDef1->parameterCount != methodDef2->parameterCount)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (!IsGenericMethodSameGenericParamCount(methodDef1, methodDef2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tconst Il2CppType* returnType1 = TryInflateIfNeed(type1, il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(methodDef1->returnType));\n\t\tconst Il2CppType* returnType2 = TryInflateIfNeed(type2, il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(methodDef2->returnType));\n\n\n\t\tif (!IsSameOverrideType(returnType1, returnType2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (uint32_t i = 0; i < methodDef1->parameterCount; i++)\n\t\t{\n\t\t\tconst Il2CppParameterDefinition* srcParam = (const Il2CppParameterDefinition*)il2cpp::vm::GlobalMetadata::GetParameterDefinitionFromIndex(methodDef1, methodDef1->parameterStart + i);\n\t\t\tIL2CPP_ASSERT(srcParam);\n\t\t\tconst Il2CppParameterDefinition* dstParam = (const Il2CppParameterDefinition*)il2cpp::vm::GlobalMetadata::GetParameterDefinitionFromIndex(methodDef2, methodDef2->parameterStart + i);\n\t\t\tIL2CPP_ASSERT(dstParam);\n\n\t\t\tconst Il2CppType* paramType1 = TryInflateIfNeed(type1, il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(srcParam->typeIndex));\n\t\t\tconst Il2CppType* paramType2 = TryInflateIfNeed(type2, il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(dstParam->typeIndex));\n\n\t\t\tif (!IsSameOverrideType(paramType1, paramType2))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tbool IsOverrideMethod(const Il2CppType* type1, const Il2CppMethodDefinition* methodDef1, const Il2CppType* type2, const Il2CppMethodDefinition* methodDef2)\n\t{\n\t\tconst char* name1 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef1->nameIndex);\n\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef2->nameIndex);\n\t\tif (std::strcmp(name1, name2))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn IsOverrideMethodIgnoreName(type1, methodDef1, type2, methodDef2);\n\t}\n\n\tbool IsMatchSigType(const Il2CppType* dstType, const Il2CppType* sigType, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer)\n\t{\n\t\tif (dstType->type != sigType->type)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (dstType->byref != sigType->byref)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (dstType->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn dstType->data.typeHandle == sigType->data.typeHandle;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\treturn IsMatchSigType(dstType->data.type, sigType->data.type, klassGenericContainer, methodGenericContainer);\n\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\t{\n\t\t\tif (dstType->data.array->rank != sigType->data.array->rank)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn IsMatchSigType(dstType->data.array->etype, sigType->data.array->etype, klassGenericContainer, methodGenericContainer);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tconst Il2CppGenericInst* i1 = dstType->data.generic_class->context.class_inst;\n\t\t\tconst Il2CppGenericInst* i2 = sigType->data.generic_class->context.class_inst;\n\n\t\t\t// this happens when maximum generic recursion is hit\n\t\t\tif (i1 == NULL || i2 == NULL)\n\t\t\t{\n\t\t\t\treturn i1 == i2;\n\t\t\t}\n\n\t\t\tif (i1->type_argc != i2->type_argc)\n\t\t\t\treturn false;\n\n\t\t\tif (!IsMatchSigType(dstType->data.generic_class->type, sigType->data.generic_class->type, klassGenericContainer, methodGenericContainer))\n\t\t\t\treturn false;\n\n\t\t\tfor (uint32_t i = 0; i < i1->type_argc; ++i)\n\t\t\t{\n\t\t\t\tif (!IsMatchSigType(i1->type_argv[i], i2->type_argv[i], klassGenericContainer, methodGenericContainer))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t\tcase IL2CPP_TYPE_VAR:\n\t\t{\n\t\t\tif ((int32_t)sigType->data.__genericParameterIndex >= klassGenericContainer->type_argc)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tIl2CppMetadataGenericParameterHandle sigGph = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex(\n\t\t\t\t(Il2CppMetadataGenericContainerHandle)klassGenericContainer, sigType->data.__genericParameterIndex);\n\t\t\treturn dstType->data.genericParameterHandle == sigGph;\n\t\t}\n\t\tcase IL2CPP_TYPE_MVAR:\n\t\t{\n\t\t\tif ((int32_t)sigType->data.__genericParameterIndex >= methodGenericContainer->type_argc)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tIl2CppMetadataGenericParameterHandle sigGph = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex(\n\t\t\t\t(Il2CppMetadataGenericContainerHandle)methodGenericContainer, sigType->data.__genericParameterIndex);\n\t\t\treturn dstType->data.genericParameterHandle == sigGph;\n\t\t}\n\t\tdefault:\n\t\t\treturn true;\n\t\t}\n\t\tRaiseExecutionEngineException(\"\");\n\t\treturn false;\n\t}\n\n\tbool IsMatchSigType(const Il2CppType* dstType, const Il2CppType* sigType, const Il2CppType** klassInstArgv, const Il2CppType** methodInstArgv)\n\t{\n\t\tif (dstType->byref != sigType->byref)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sigType->type == IL2CPP_TYPE_VAR)\n\t\t{\n\t\t\tsigType = klassInstArgv[sigType->data.__genericParameterIndex];\n\t\t}\n\t\telse if (sigType->type == IL2CPP_TYPE_MVAR)\n\t\t{\n\t\t\tsigType = methodInstArgv[sigType->data.__genericParameterIndex];\n\t\t}\n\n\t\tif (dstType->type != sigType->type)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tswitch (sigType->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn dstType->data.typeHandle == sigType->data.typeHandle;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\t\treturn IsMatchSigType(dstType->data.type, sigType->data.type, klassInstArgv, methodInstArgv);\n\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\t{\n\t\t\tif (dstType->data.array->rank != sigType->data.array->rank)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn IsMatchSigType(dstType->data.array->etype, sigType->data.array->etype, klassInstArgv, methodInstArgv);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tconst Il2CppGenericInst* i1 = dstType->data.generic_class->context.class_inst;\n\t\t\tconst Il2CppGenericInst* i2 = sigType->data.generic_class->context.class_inst;\n\n\t\t\t// this happens when maximum generic recursion is hit\n\t\t\tif (i1 == NULL || i2 == NULL)\n\t\t\t{\n\t\t\t\treturn i1 == i2;\n\t\t\t}\n\n\t\t\tif (i1->type_argc != i2->type_argc)\n\t\t\t\treturn false;\n\n\t\t\tif (!IsMatchSigType(dstType->data.generic_class->type, sigType->data.generic_class->type, klassInstArgv, methodInstArgv))\n\t\t\t\treturn false;\n\n\t\t\tfor (uint32_t i = 0; i < i1->type_argc; ++i)\n\t\t\t{\n\t\t\t\tif (!IsMatchSigType(i1->type_argv[i], i2->type_argv[i], klassInstArgv, methodInstArgv))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t\tcase IL2CPP_TYPE_VAR:\n\t\t{\n\t\t\t/*Il2CppMetadataGenericParameterHandle sigGph = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex(\n\t\t\t\t(Il2CppMetadataGenericContainerHandle)klassGenericContainer, sigType->data.__genericParameterIndex);\n\t\t\treturn dstType->data.genericParameterHandle == sigType->data.__genericParameterIndex;*/\n\t\t\tRaiseNotSupportedException(\"\");\n\t\t\tbreak;\n\t\t}\n\t\tcase IL2CPP_TYPE_MVAR:\n\t\t{\n\t\t\t/*Il2CppMetadataGenericParameterHandle sigGph = il2cpp::vm::GlobalMetadata::GetGenericParameterFromIndex(\n\t\t\t\t(Il2CppMetadataGenericContainerHandle)methodGenericContainer, sigType->data.__genericParameterIndex);\n\t\t\treturn dstType->data.genericParameterHandle == sigGph;*/\n\t\t\tRaiseNotSupportedException(\"\");\n\t\t\tbreak;\n\t\t}\n\t\tdefault: return true;\n\t\t}\n\t\tRaiseExecutionEngineException(\"\");\n\t\treturn false;\n\t}\n\n\tbool IsMatchMethodSig(const Il2CppMethodDefinition* methodDef, const MethodRefSig& resolveSig, const Il2CppGenericContainer* klassGenericContainer)\n\t{\n\t\tif (methodDef->parameterCount != (uint16_t)resolveSig.params.size())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tIl2CppGenericContainer* methodGenericContainer = nullptr;\n\t\t// if generic param not match. return false\n\t\tif (methodDef->genericContainerIndex == kGenericContainerIndexInvalid)\n\t\t{\n\t\t\tif (resolveSig.genericParamCount)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmethodGenericContainer = (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(methodDef->genericContainerIndex);\n\t\t\tif (resolveSig.genericParamCount != methodGenericContainer->type_argc)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tconst Il2CppType* returnType1 = resolveSig.returnType;\n\t\tconst Il2CppType* returnType2 = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(methodDef->returnType);\n\t\tif (!IsMatchSigType(returnType2, returnType1, klassGenericContainer, methodGenericContainer))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (uint32_t i = 0; i < methodDef->parameterCount; i++)\n\t\t{\n\t\t\tconst Il2CppType* paramType1 = resolveSig.params[i];\n\t\t\tconst Il2CppParameterDefinition* dstParam = (const Il2CppParameterDefinition*)il2cpp::vm::GlobalMetadata::GetParameterDefinitionFromIndex(methodDef, methodDef->parameterStart + i);\n\t\t\tIL2CPP_ASSERT(dstParam);\n\t\t\tconst Il2CppType* paramType2 = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(dstParam->typeIndex);\n\t\t\tif (!IsMatchSigType(paramType2, paramType1, klassGenericContainer, methodGenericContainer))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tbool IsMatchMethodSig(const MethodInfo* methodDef, const MethodRefSig& resolveSig, const Il2CppGenericContainer* klassGenericContainer)\n\t{\n\t\tif ((size_t)methodDef->parameters_count != resolveSig.params.size())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tconst Il2CppGenericContainer* methodGenericContainer = GetGenericContainer(methodDef);\n\t\tif (methodGenericContainer)\n\t\t{\n\t\t\tif (methodGenericContainer->type_argc != resolveSig.genericParamCount)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (resolveSig.genericParamCount)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tconst Il2CppType* returnType1 = resolveSig.returnType;\n\t\tconst Il2CppType* returnType2 = methodDef->return_type;\n\t\tif (!IsMatchSigType(returnType2, returnType1, klassGenericContainer, methodGenericContainer))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (uint32_t i = 0; i < methodDef->parameters_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* paramType1 = resolveSig.params[i];\n\t\t\tconst Il2CppType* paramType2 = GET_METHOD_PARAMETER_TYPE(methodDef->parameters[i]);\n\t\t\tif (!IsMatchSigType(paramType2, paramType1, klassGenericContainer, methodGenericContainer))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tbool IsMatchMethodSig(const MethodInfo* methodDef, const MethodRefSig& resolveSig, const Il2CppType** klassInstArgv, const Il2CppType** methodInstArgv)\n\t{\n\t\tif ((size_t)methodDef->parameters_count != resolveSig.params.size())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tconst Il2CppGenericContainer* methodGenericContainer = GetGenericContainer(methodDef);\n\t\tif (methodGenericContainer)\n\t\t{\n\t\t\tif (methodGenericContainer->type_argc != resolveSig.genericParamCount)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (resolveSig.genericParamCount)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tconst Il2CppType* returnType1 = resolveSig.returnType;\n\t\tconst Il2CppType* returnType2 = methodDef->return_type;\n\t\tif (!IsMatchSigType(returnType2, returnType1, klassInstArgv, methodInstArgv))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (uint32_t i = 0; i < methodDef->parameters_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* paramType1 = resolveSig.params[i];\n\t\t\tconst Il2CppType* paramType2 = GET_METHOD_PARAMETER_TYPE(methodDef->parameters[i]);\n\t\t\tif (!IsMatchSigType(paramType2, paramType1, klassInstArgv, methodInstArgv))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tconst Il2CppMethodDefinition* ResolveMethodDefinition(const Il2CppType* type, const char* resolveMethodName, const MethodRefSig& resolveSig)\n\t{\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n\t\tconst Il2CppGenericContainer* klassGenericContainer = GetGenericContainerFromIl2CppType(type);\n\t\tconst char* typeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n\t\tfor (uint32_t i = 0; i < typeDef->method_count; i++)\n\t\t{\n\t\t\tconst Il2CppMethodDefinition* methodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromIndex(typeDef->methodStart + i);\n\t\t\tconst char* methodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex);\n\t\t\tif (std::strcmp(resolveMethodName, methodName) == 0 && IsMatchMethodSig(methodDef, resolveSig, klassGenericContainer))\n\t\t\t{\n\t\t\t\treturn methodDef;\n\t\t\t}\n\t\t}\n\t\tRaiseMethodNotFindException(type, resolveMethodName);\n\t\treturn nullptr;\n\t}\n\n\tconst MethodInfo* GetMethodInfoFromMethodDef(const Il2CppType* type, const Il2CppMethodDefinition* methodDef)\n\t{\n\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\til2cpp::vm::Class::SetupMethods(klass);\n\t\tvoid* iter = nullptr;\n\t\tfor (const MethodInfo* cur = nullptr; (cur = il2cpp::vm::Class::GetMethods(klass, &iter)) != nullptr; )\n\t\t{\n\t\t\tif (!cur->is_inflated)\n\t\t\t{\n\t\t\t\tif ((const Il2CppMethodDefinition*)cur->methodMetadataHandle == methodDef)\n\t\t\t\t{\n\t\t\t\t\treturn cur;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ((const Il2CppMethodDefinition*)cur->genericMethod->methodDefinition->methodMetadataHandle == methodDef)\n\t\t\t\t{\n\t\t\t\t\treturn cur;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tRaiseMethodNotFindException(type, il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex));\n\t\treturn nullptr;\n\t}\n\n\tbool ResolveField(const Il2CppType* type, const char* resolveFieldName, const Il2CppType* resolveFieldType, const Il2CppFieldDefinition*& retFieldDef)\n\t{\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n\t\tconst Il2CppGenericContainer* klassGenericContainer = GetGenericContainerFromIl2CppType(type);\n\t\tfor (uint16_t i = 0; i < typeDef->field_count; i++)\n\t\t{\n\t\t\tconst Il2CppFieldDefinition* fieldDef = il2cpp::vm::GlobalMetadata::GetFieldDefinitionFromTypeDefAndFieldIndex(typeDef, i);\n\t\t\tconst char* fieldName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(fieldDef->nameIndex);\n\t\t\tconst Il2CppType* fieldType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(fieldDef->typeIndex);\n\t\t\tif (std::strcmp(resolveFieldName, fieldName) == 0 && IsMatchSigType(fieldType, resolveFieldType, klassGenericContainer, nullptr))\n\t\t\t{\n\t\t\t\tretFieldDef = fieldDef;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tretFieldDef = nullptr;\n\t\treturn false;\n\t}\n\n\tconst Il2CppGenericContainer* GetGenericContainerFromIl2CppType(const Il2CppType* type)\n\t{\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromGenericClass(type->data.generic_class);\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t{\n\t\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(((Il2CppTypeDefinition*)type->data.typeHandle)->genericContainerIndex);\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\t}\n\t}\n\n\tconst Il2CppGenericInst* TryInflateGenericInst(const Il2CppGenericInst* inst, const Il2CppGenericContext* genericContext)\n\t{\n\t\tIL2CPP_ASSERT(inst->type_argc > 0);\n\t\tconst Il2CppType** argv = (const Il2CppType**)alloca(sizeof(Il2CppType*) * inst->type_argc);\n\t\tfor (uint32_t i = 0; i < inst->type_argc; i++)\n\t\t{\n\t\t\targv[i] = TryInflateIfNeed(inst->type_argv[i], genericContext, true);\n\t\t}\n\t\treturn il2cpp::vm::MetadataCache::GetGenericInst(argv, inst->type_argc);\n\t}\n\n\tbool HasNotInstantiatedGenericType(const Il2CppGenericInst* inst)\n\t{\n\t\tif (inst == nullptr)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (uint32_t i = 0; i < inst->type_argc; i++)\n\t\t{\n\t\t\tif (HasNotInstantiatedGenericType(inst->type_argv[i]))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tbool HasNotInstantiatedGenericType(const Il2CppType* type)\n\t{\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\t\treturn true;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_SZARRAY: return HasNotInstantiatedGenericType(type->data.type);\n\t\tcase IL2CPP_TYPE_ARRAY: return HasNotInstantiatedGenericType(type->data.array->etype);\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n#if HYBRIDCLR_UNITY_2019\n\t\t\tconst Il2CppTypeDefinition* typeDefinition = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeDefinitionFromIl2CppType(type);\n#else\n\t\t\tconst Il2CppTypeDefinition* typeDefinition = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromType(type);\n#endif\n\t\t\treturn typeDefinition->genericContainerIndex != kGenericContainerIndexInvalid;\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\treturn HasNotInstantiatedGenericType(genericClass->context.class_inst);\n\t\t}\n\t\tcase IL2CPP_TYPE_VAR:\n        case IL2CPP_TYPE_MVAR:\n        {\n            return true;\n        }\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tconst Il2CppType* GetIl2CppTypeFromTypeDefinition(const Il2CppTypeDefinition* typeDef)\n\t{\n\t\tIl2CppType type = {};\n\t\tbool isValueType = IsValueType(typeDef);\n\t\ttype.type = isValueType ? IL2CPP_TYPE_VALUETYPE : IL2CPP_TYPE_CLASS;\n\t\ttype.data.typeHandle = (Il2CppMetadataTypeHandle)typeDef;\n\t\tSET_IL2CPPTYPE_VALUE_TYPE(type, isValueType);\n\t\treturn MetadataPool::GetPooledIl2CppType(type);\n\t}\n}\n}\n"
  },
  {
    "path": "hybridclr/metadata/MetadataUtil.h",
    "content": "#pragma once\n#include <tuple>\n\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Exception.h\"\n#include \"utils/HashUtils.h\"\n#include \"metadata/Il2CppTypeHash.h\"\n#include \"metadata/Il2CppTypeCompare.h\"\n\n#include \"../CommonDef.h\"\n#include \"MetadataDef.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n    class Image;\n\n#pragma region byteorder\n\n    template<int N>\n    inline void* GetAlignBorder(const void* pointer)\n    {\n        uint64_t p = (uint64_t)pointer;\n        if (p % N == 0)\n        {\n            return (void*)pointer;\n        }\n        else\n        {\n            return (void*)((p + N - 1) / N * N);\n        }\n    }\n\n    inline int32_t GetI1(const byte* data)\n    {\n        return *(int8_t*)data;\n    }\n\n    inline uint16_t GetU2LittleEndian(const byte* data)\n    {\n#if SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS\n        uint16_t value = *(uint16_t*)data;\n#else\n        uint16_t value = (uint16_t)data[0] | ((uint16_t)data[1] << 8);\n#endif\n        return value;\n    }\n\n    inline uint16_t GetI2LittleEndian(const byte* data)\n    {\n        return (int16_t)GetU2LittleEndian(data);\n    }\n\n    inline uint32_t GetU4LittleEndian(const byte* data)\n    {\n#if SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS\n        uint32_t value = *(uint32_t*)data;\n#else\n        uint32_t value = (uint32_t)data[0]\n            | ((uint32_t)data[1] << 8)\n            | ((uint32_t)data[2] << 16)\n            | ((uint32_t)data[3] << 24);\n#endif\n        return value;\n    }\n\n    inline int32_t GetI4LittleEndian(const byte* data)\n    {\n        return (int32_t)GetU4LittleEndian(data);\n    }\n\n    inline uint64_t GetU8LittleEndian(const byte* data)\n    {\n#if SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS\n        uint64_t value = *(uint64_t*)data;\n#else\n        uint64_t value = (uint64_t)data[0]\n            + ((uint64_t)data[1] << 8)\n            + ((uint64_t)data[2] << 16)\n            + ((uint64_t)data[3] << 24)\n            + ((uint64_t)data[4] << 32)\n            + ((uint64_t)data[5] << 40)\n            + ((uint64_t)data[6] << 48)\n            + ((uint64_t)data[7] << 56);\n#endif\n        return value;\n    }\n\n    inline int64_t GetI8LittleEndian(const byte* data)\n    {\n        return GetU8LittleEndian(data);\n    }\n\n    uint32_t GetNotZeroBitCount(uint64_t x);\n\n#pragma endregion\n\n\n#pragma region interpreter metadtata index\n\n    const uint32_t kMetadataIndexBits = 22;\n\n    const uint32_t kMetadataKindBits = 2;\n\n    const uint32_t kMetadataKindShiftBits = 32 - kMetadataKindBits;\n\n    const uint32_t kMetadataImageIndexShiftBits = kMetadataIndexBits;\n\n    const uint32_t kMetadataImageIndexExtraShiftBitsA = 6;\n    const uint32_t kMetadataImageIndexExtraShiftBitsB = 4;\n    const uint32_t kMetadataImageIndexExtraShiftBitsC = 2;\n    const uint32_t kMetadataImageIndexExtraShiftBitsD = 0;\n    extern const uint32_t kMetadataImageIndexExtraShiftBitsArr[4];\n\n    const uint32_t kMetadataIndexMaskA = (1 << (kMetadataIndexBits + kMetadataImageIndexExtraShiftBitsA)) - 1;\n    const uint32_t kMetadataIndexMaskB = (1 << (kMetadataIndexBits + kMetadataImageIndexExtraShiftBitsB)) - 1;\n    const uint32_t kMetadataIndexMaskC = (1 << (kMetadataIndexBits + kMetadataImageIndexExtraShiftBitsC)) - 1;\n    const uint32_t kMetadataIndexMaskD = (1 << (kMetadataIndexBits + kMetadataImageIndexExtraShiftBitsD)) - 1;\n    extern const uint32_t kMetadataIndexMaskArr[4];\n\n    const uint32_t kMetadataImageIndexBits = 32 - kMetadataIndexBits;\n\n    const uint32_t kMaxMetadataImageCount = (1 << kMetadataImageIndexBits);\n\n    const uint32_t kMaxMetadataImageIndexWithoutKind = 1u << (kMetadataImageIndexBits - kMetadataKindBits);\n\n    const uint32_t kInvalidImageIndex = 0;\n\n    const int32_t kInvalidIndex = -1;\n\n    inline int32_t DecodeMetadataKind(uint32_t index)\n    {\n\t\treturn index >> kMetadataKindShiftBits;\n\t}\n\n    inline uint32_t DecodeImageIndex(int32_t index)\n    {\n        if (index == kInvalidIndex)\n        {\n\t\t\treturn 0;\n\t\t}\n        uint32_t uindex = (uint32_t)index;\n        uint32_t kind = uindex >> kMetadataKindShiftBits;\n        return (uindex & ~kMetadataIndexMaskArr[kind]) >> kMetadataImageIndexShiftBits;\n    }\n\n    inline uint32_t DecodeMetadataIndex(int32_t index)\n    {\n        if (index == kInvalidIndex)\n        {\n            return kInvalidIndex;\n        }\n        uint32_t uindex = (uint32_t)index;\n        uint32_t kind = uindex >> kMetadataKindShiftBits;\n        return uindex & kMetadataIndexMaskArr[kind];\n    }\n\n    inline int32_t EncodeImageAndMetadataIndex(uint32_t imageIndex, int32_t rawIndex)\n    {\n        if (rawIndex == kInvalidIndex)\n        {\n\t\t\treturn kInvalidIndex;\n\t\t}\n        IL2CPP_ASSERT(((imageIndex << kMetadataImageIndexShiftBits) & (uint32_t)rawIndex) == 0);\n        return (imageIndex << kMetadataIndexBits) | (uint32_t)rawIndex;\n    }\n\n    inline bool IsInterpreterIndex(int32_t index)\n    {\n        //return DecodeImageIndex(index) != 0;\n        return index != kInvalidIndex && ((uint32_t)index & ~kMetadataIndexMaskA) != 0;\n    }\n\n    inline bool IsInterpreterType(const Il2CppTypeDefinition* typeDefinition)\n    {\n        return IsInterpreterIndex(typeDefinition->byvalTypeIndex);\n    }\n\n    inline bool IsInterpreterType(const Il2CppClass* klass)\n    {\n        return IsInterpreterIndex(klass->image->token) && klass->rank == 0;\n    }\n\n    inline bool IsInterpreterImage(const Il2CppImage* image)\n    {\n        return IsInterpreterIndex(image->token);\n    }\n\n    inline bool IsPrologHasThis(uint32_t flags)\n    {\n        return flags & 0x20;\n    }\n\n    inline bool IsPrologExplicitThis(uint32_t flags)\n    {\n        return flags & 0x40;\n    }\n\n#pragma endregion\n\n\n#pragma region method and klass\n\n    inline bool IsInstanceField(const Il2CppType* type)\n    {\n        return (type->attrs & FIELD_ATTRIBUTE_STATIC) == 0;\n    }\n\n    inline bool IsInterpreterMethod(const MethodInfo* method)\n    {\n        return IsInterpreterType(method->klass);\n    }\n\n    inline bool IsInterpreterMethod(const Il2CppMethodDefinition* method)\n    {\n        return IsInterpreterIndex(method->declaringType);\n    }\n\n    inline bool IsInterpreterImplement(const MethodInfo* method)\n    {\n        return method->isInterpterImpl;\n    }\n\n    inline bool IsInstanceMethod(const MethodInfo* method)\n    {\n        return !(method->flags & METHOD_ATTRIBUTE_STATIC);\n    }\n\n    inline bool IsInstanceMethod(const Il2CppMethodDefinition* method)\n    {\n        return !(method->flags & METHOD_ATTRIBUTE_STATIC);\n    }\n\n    inline bool IsStaticMethod(const MethodInfo* method)\n    {\n        return (method->flags & METHOD_ATTRIBUTE_STATIC);\n    }\n\n    inline bool IsPrivateMethod(uint32_t flags)\n    {\n        return (flags & METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == METHOD_ATTRIBUTE_PRIVATE;\n    }\n\n    inline bool IsPublicMethod(uint32_t flags)\n    {\n        return (flags & METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK) == METHOD_ATTRIBUTE_PUBLIC;\n    }\n\n    inline bool IsGenericIns(const Il2CppType* type)\n    {\n        return type->type == IL2CPP_TYPE_GENERICINST;\n    }\n\n    inline bool IsVirtualMethod(uint32_t flags)\n    {\n        return flags & METHOD_ATTRIBUTE_VIRTUAL;\n    }\n\n    inline bool IsAbstractMethod(uint32_t flags)\n    {\n        return flags & METHOD_ATTRIBUTE_ABSTRACT;\n    }\n\n    inline bool IsNewSlot(uint32_t flags)\n    {\n        return flags & METHOD_ATTRIBUTE_NEW_SLOT;\n    }\n\n    inline bool IsSealed(uint32_t flags)\n    {\n        return flags & METHOD_ATTRIBUTE_FINAL;\n    }\n\n    inline bool IsInterface(uint32_t flags)\n    {\n        return flags & TYPE_ATTRIBUTE_INTERFACE;\n    }\n\n\tinline bool IsPInvokeMethod(uint32_t flags)\n\t{\n\t\treturn flags & METHOD_ATTRIBUTE_PINVOKE_IMPL;\n\t}\n\n#define IMPLMAP_FLAG_NOT_MANGLE 0x1\n\n#define IMPLMAP_FLAG_CHARSET_MASK 0x6\n#define IMPLMAP_FLAG_CHARSET_NOT_SPECIFIED 0x0\n#define IMPLMAP_FLAG_CHARSET_ANSI 0x2\n#define IMPLMAP_FLAG_CHARSET_UNICODE 0x4\n#define IMPLMAP_FLAG_CHARSET_AUTO 0x6\n\n#define IMPLMAP_FLAG_SUPPORTS_LAST_ERROR 0x40\n\n#define IMPLMAP_FLAG_CALLCONV_MASK 0x700\n#define IMPLMAP_FLAG_CALLCONV_PLATFORMAPI 0x100\n#define IMPLMAP_FLAG_CALLCONV_CDECL 0x200\n#define IMPLMAP_FLAG_CALLCONV_STDCALL 0x300\n#define IMPLMAP_FLAG_CALLCONV_THISCALL 0x400\n#define IMPLMAP_FLAG_CALLCONV_FASTCALL 0x500\n\n\n\tinline bool IsDllImportNoMangle(uint32_t mappingFlags)\n\t{\n\t\treturn mappingFlags & IMPLMAP_FLAG_NOT_MANGLE;\n\t}\n\n    inline Il2CppCharSet GetDllImportCharSet(uint32_t mappingFlags)\n    {\n        uint32_t charSet = mappingFlags & IMPLMAP_FLAG_CHARSET_MASK;\n        switch (charSet)\n        {\n\t\tcase IMPLMAP_FLAG_CHARSET_NOT_SPECIFIED:\n\t\t\treturn Il2CppCharSet::CHARSET_NOT_SPECIFIED;\n\t\tcase IMPLMAP_FLAG_CHARSET_ANSI:\n\t\t\treturn Il2CppCharSet::CHARSET_ANSI;\n\t\tcase IMPLMAP_FLAG_CHARSET_UNICODE:\n\t\t\treturn Il2CppCharSet::CHARSET_UNICODE;\n        default:\n            IL2CPP_ASSERT(false);\n\t\t\treturn Il2CppCharSet::CHARSET_NOT_SPECIFIED;\n        }\n    }\n\n    inline Il2CppCallConvention GetDllImportCallConvention(uint32_t mappingFlags)\n    {\n\t\tuint32_t callConv = mappingFlags & IMPLMAP_FLAG_CALLCONV_MASK;\n        switch (callConv)\n        {\n        case IMPLMAP_FLAG_CALLCONV_PLATFORMAPI: return Il2CppCallConvention::IL2CPP_CALL_DEFAULT;\n\t\tcase IMPLMAP_FLAG_CALLCONV_CDECL: return Il2CppCallConvention::IL2CPP_CALL_C;\n\t\tcase IMPLMAP_FLAG_CALLCONV_STDCALL: return Il2CppCallConvention::IL2CPP_CALL_STDCALL;\n\t\tcase IMPLMAP_FLAG_CALLCONV_THISCALL: return Il2CppCallConvention::IL2CPP_CALL_THISCALL;\n\t\tcase IMPLMAP_FLAG_CALLCONV_FASTCALL: return Il2CppCallConvention::IL2CPP_CALL_FASTCALL;\n\t\tdefault:\n\t\t\tIL2CPP_ASSERT(false);\n\t\t\treturn Il2CppCallConvention::IL2CPP_CALL_DEFAULT;\n        }\n    }\n\n    bool IsValueType(const Il2CppType* type);\n\n    inline bool IsValueType(const Il2CppTypeDefinition* typeDef)\n    {\n        return typeDef->bitfield & (1 << (il2cpp::vm::kBitIsValueType - 1));\n    }\n\n    inline bool IsEnumType(const Il2CppTypeDefinition* typeDef)\n    {\n        return (typeDef->bitfield >> (il2cpp::vm::kBitIsEnum - 1)) & 0x1;\n    }\n\n    inline const Il2CppTypeDefinition* GetUnderlyingTypeDefinition(const Il2CppType* type)\n    {\n        if (IsGenericIns(type))\n        {\n            return (Il2CppTypeDefinition*)type->data.generic_class->type->data.typeHandle;\n        }\n        else\n        {\n            return (Il2CppTypeDefinition*)type->data.typeHandle;\n        }\n    }\n\n    const Il2CppType* GetIl2CppTypeFromTypeDefinition(const Il2CppTypeDefinition* typeDef);\n\n    inline uint32_t GetActualArgumentNum(const MethodInfo* method)\n    {\n        return (uint32_t)method->parameters_count + (!(method->flags & METHOD_ATTRIBUTE_STATIC));\n    }\n\n    inline bool IsReturnVoidMethod(const MethodInfo* method)\n    {\n        return method->return_type->type == IL2CPP_TYPE_VOID;\n    }\n\n    inline bool IsVoidType(const Il2CppType* type)\n    {\n        return type->type == IL2CPP_TYPE_VOID;\n    }\n\n    inline const MethodInfo* GetUnderlyingMethodInfo(const MethodInfo* method)\n    {\n        return !method->genericMethod || method->is_generic ? method : method->genericMethod->methodDefinition;\n    }\n\n    inline bool IsChildTypeOfMulticastDelegate(const Il2CppClass* klass)\n    {\n        return klass->parent == il2cpp_defaults.multicastdelegate_class;\n    }\n\n    inline int32_t GetActualParamCount(const MethodInfo* methodInfo)\n    {\n        return IsInstanceMethod(methodInfo) ? (methodInfo->parameters_count + 1) : methodInfo->parameters_count;\n    }\n\n    inline int32_t GetFieldOffset(const FieldInfo* fieldInfo)\n    {\n        Il2CppClass* klass = fieldInfo->parent;\n        return IS_CLASS_VALUE_TYPE(klass) ? (fieldInfo->offset - sizeof(Il2CppObject)) : fieldInfo->offset;\n    }\n\n    inline int32_t GetThreadStaticFieldOffset(const FieldInfo* fieldInfo)\n    {\n        return il2cpp::vm::MetadataCache::GetThreadLocalStaticOffsetForField(const_cast<FieldInfo*>(fieldInfo));\n    }\n\n    const Il2CppType* TryInflateIfNeed(const Il2CppType* selfType, const Il2CppGenericContext* genericContext, bool inflateMethodVars);\n    const Il2CppType* TryInflateIfNeed(const Il2CppType* containerType, const Il2CppType* selfType);\n\n    bool IsTypeSameByTypeIndex(TypeIndex t1, TypeIndex t2);\n\n    bool IsTypeEqual(const Il2CppType* t1, const Il2CppType* t2);\n\n    bool IsTypeGenericCompatible(const Il2CppType* t1, const Il2CppType* t2);\n\n    bool IsOverrideMethod(const Il2CppType* type1, const Il2CppMethodDefinition* method1, const Il2CppType* type2, const Il2CppMethodDefinition* method2);\n    bool IsOverrideMethodIgnoreName(const Il2CppType* type1, const Il2CppMethodDefinition* methodDef1, const Il2CppType* type2, const Il2CppMethodDefinition* methodDef2);\n\n    const Il2CppMethodDefinition* ResolveMethodDefinition(const Il2CppType* type, const char* resolveMethodName, const MethodRefSig& resolveSig);\n\n    const MethodInfo* GetMethodInfoFromMethodDef(const Il2CppType* type, const Il2CppMethodDefinition* methodDef);\n\n    bool ResolveField(const Il2CppType* type, const char* resolveFieldName, const Il2CppType* resolveFieldType, const Il2CppFieldDefinition*& retFieldDef);\n\n    inline void ResolveFieldThrow(const Il2CppType* type, const char* resolveFieldName, const Il2CppType* resolveFieldType, const Il2CppFieldDefinition*& retFieldDef)\n    {\n        if (!ResolveField(type, resolveFieldName, resolveFieldType, retFieldDef))\n        {\n            RaiseMissingFieldException(type, resolveFieldName);\n        }\n    }\n\n    const Il2CppGenericContainer* GetGenericContainerFromIl2CppType(const Il2CppType* type);\n\n    inline const Il2CppGenericContainer* GetGenericContainer(const MethodInfo* methodDef)\n    {\n        return methodDef->is_inflated ?\n            (const Il2CppGenericContainer*)methodDef->genericMethod->methodDefinition->genericContainerHandle :\n            (const Il2CppGenericContainer*)methodDef->genericContainerHandle;\n    }\n\n    bool IsMatchSigType(const Il2CppType* dstType, const Il2CppType* sigType, const Il2CppGenericContainer* klassGenericContainer, const Il2CppGenericContainer* methodGenericContainer);\n\n    bool IsMatchMethodSig(const Il2CppMethodDefinition* methodDef, const MethodRefSig& resolveSig, const Il2CppGenericContainer* klassGenericContainer);\n    bool IsMatchMethodSig(const MethodInfo* methodDef, const MethodRefSig& resolveSig, const Il2CppGenericContainer* klassGenericContainer);\n    bool IsMatchMethodSig(const MethodInfo* methodDef, const MethodRefSig& resolveSig, const Il2CppType** klassInstArgv, const Il2CppType** methodInstArgv);\n\n    const Il2CppGenericInst* TryInflateGenericInst(const Il2CppGenericInst* inst, const Il2CppGenericContext* genericContext);\n\n\tbool HasNotInstantiatedGenericType(const Il2CppType* type);\n    bool HasNotInstantiatedGenericType(const Il2CppGenericInst* inst);\n\n#pragma endregion\n\n\n#pragma region misc\n\n    int32_t GetTypeValueSize(const Il2CppType* type);\n\n    inline int32_t GetTypeValueSize(const Il2CppClass* klass)\n    {\n        if (IS_CLASS_VALUE_TYPE(klass))\n        {\n            return il2cpp::vm::Class::GetValueSize((Il2CppClass*)klass, nullptr);\n        }\n        else\n        {\n            return sizeof(Il2CppObject*);\n        }\n    }\n\n    inline int32_t GetStackSizeByByteSize(int32_t size)\n    {\n        return (size + 7) / 8;\n    }\n\n    inline int32_t GetTypeValueStackObjectCount(const Il2CppType* type)\n    {\n        return (GetTypeValueSize(type) + 7) / 8;\n    }\n\n    inline void RaiseBadImageException(const char* msg = nullptr)\n    {\n        il2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetBadImageFormatException(msg));\n    }\n#pragma endregion\n\n    class Il2CppTypeHashShallow\n    {\n    public:\n        size_t operator()(const Il2CppType* t1) const\n        {\n            size_t h = (size_t)t1->data.dummy;\n            h = il2cpp::utils::HashUtils::Combine(h, t1->attrs);\n            h = il2cpp::utils::HashUtils::Combine(h, (size_t)t1->type);\n            h = il2cpp::utils::HashUtils::Combine(h, t1->byref);\n            h = il2cpp::utils::HashUtils::Combine(h, t1->pinned);\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n            h = il2cpp::utils::HashUtils::Combine(h, t1->valuetype);\n#endif\n            return h;\n        }\n    };\n\n    class Il2CppTypeEqualityComparerShallow\n    {\n    public:\n        bool operator()(const Il2CppType* t1, const Il2CppType* t2) const\n        {\n            return (t1->data.dummy == t2->data.dummy)\n                && t1->type == t2->type\n                && t1->attrs == t2->attrs\n                && t1->byref == t2->byref\n                && t1->pinned == t2->pinned\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n                && t1->valuetype == t2->valuetype\n#endif\n                ;\n        }\n    };\n\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MethodBodyCache.cpp",
    "content": "#include <unordered_map>\n\n#include \"MethodBodyCache.h\"\n\n#include \"MetadataModule.h\"\n#include \"AOTHomologousImage.h\"\n#include \"Opcodes.h\"\n#include \"MetadataDef.h\"\n\n#include \"utils/HashUtils.h\"\n#include \"../RuntimeConfig.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstruct ImageTokenPair\n\t{\n\t\thybridclr::metadata::Image* image;\n\t\tuint32_t token;\n\t};\n\n\tstruct ImageTokenPairHash\n\t{\n\t\tsize_t operator()(const ImageTokenPair& s) const noexcept\n\t\t{\n\t\t\treturn il2cpp::utils::HashUtils::Combine((size_t)s.image, (size_t)s.token);\n\t\t}\n\t};\n\n\tstruct ImageTokenPairEqualTo\n\t{\n\t\tbool operator()(const ImageTokenPair& p1, const ImageTokenPair& p2) const\n\t\t{\n\t\t\treturn p1.image == p2.image && p1.token == p2.token;\n\t\t}\n\t};\n\n\tenum class InlineMode : uint8_t\n\t{\n\t\tNone,\n\t\tInlineable,\n\t\tNotInlineable,\n\t};\n\n\tstruct MethodBodyCacheInfo\n\t{\n\t\tMethodBody* methodBody;\n\t\tint32_t accessVersion;\n\t\tuint16_t accessCount;\n\t\tInlineMode inlineMode;\n\t};\n\n\tconstexpr int32_t kMinShrinkMethodBodyCacheInterval = 256;\n\tstatic bool s_enableShrinkMethodBodyCache = true;\n\tstatic int32_t s_methodBodyCacheVersion = 0;\n\tstatic Il2CppHashMap<ImageTokenPair, MethodBodyCacheInfo*, ImageTokenPairHash, ImageTokenPairEqualTo> s_methodBodyCache;\n\n\n\tstatic MethodBodyCacheInfo* GetOrInitMethodBodyCache(hybridclr::metadata::Image* image, uint32_t token)\n\t{\n\t\tImageTokenPair key = { image, token };\n\t\tauto it = s_methodBodyCache.find(key);\n\t\tif (it != s_methodBodyCache.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\t\tMethodBody* methodBody = image->GetMethodBody(token);\n\t\tMethodBodyCacheInfo* ci = (MethodBodyCacheInfo*)HYBRIDCLR_MALLOC_ZERO(sizeof(MethodBodyCacheInfo));\n\t\t*ci = { methodBody, s_methodBodyCacheVersion, 0, InlineMode::None};\n\t\ts_methodBodyCache[key] = ci;\n\t\treturn ci;\n\t}\n\n\tMethodBody* MethodBodyCache::GetMethodBody(hybridclr::metadata::Image* image, uint32_t token)\n\t{\n\t\tMethodBodyCacheInfo* ci = GetOrInitMethodBodyCache(image, token);\n\t\tci->accessVersion = s_methodBodyCacheVersion;\n\t\t++ci->accessCount;\n\t\treturn ci->methodBody;\n\t}\n\n\tstatic void ShrinkMethodBodyCache(int32_t shrinkMethodBodyCacheInterval)\n\t{\n\t\tif (s_methodBodyCache.size() <= RuntimeConfig::GetMaxMethodBodyCacheSize())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tint32_t expiredVersion = s_methodBodyCacheVersion - shrinkMethodBodyCacheInterval;\n\t\tfor (auto it = s_methodBodyCache.begin(); it != s_methodBodyCache.end(); )\n\t\t{\n\t\t\tMethodBodyCacheInfo* ci = it->second;\n\t\t\t// add extra interval when accessCount exceeded 1\n\t\t\tint32_t accessVersion = ci->accessVersion + (ci->accessCount - 1) * shrinkMethodBodyCacheInterval;\n\t\t\tif (accessVersion < expiredVersion)\n\t\t\t{\n\t\t\t\tif (ci->methodBody)\n\t\t\t\t{\n\t\t\t\t\tci->methodBody->~MethodBody();\n\t\t\t\t\tHYBRIDCLR_FREE(ci->methodBody);\n\t\t\t\t}\n\t\t\t\tHYBRIDCLR_FREE(ci);\n\t\t\t\ts_methodBodyCache.erase(it++);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++it;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid MethodBodyCache::EnableShrinkMethodBodyCache(bool shrink)\n\t{\n\t\ts_enableShrinkMethodBodyCache = shrink;\n\t\tif (shrink)\n\t\t{\n\t\t\t++s_methodBodyCacheVersion;\n\n\t\t\tint32_t shrinkMethodBodyCacheInterval = std::max(RuntimeConfig::GetMaxMethodBodyCacheSize() / 2, kMinShrinkMethodBodyCacheInterval);\n\t\t\tif (s_methodBodyCacheVersion % shrinkMethodBodyCacheInterval == 0)\n\t\t\t{\n\t\t\t\tShrinkMethodBodyCache(shrinkMethodBodyCacheInterval);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic bool IsILCodeInlineable(const byte* ilcodeStart, uint32_t codeSize)\n\t{\n\t\tconst byte* codeEnd = ilcodeStart + codeSize;\n\t\tconst byte* ip = ilcodeStart;\n\n\t\twhile (ip < codeEnd)\n\t\t{\n\t\t\tconst OpCodeInfo* oc = DecodeOpCodeInfo(ip, codeEnd);\n\t\t\tIL2CPP_ASSERT(oc);\n\t\t\tint32_t opCodeSize = GetOpCodeSize(ip, oc);\n\t\t\tip += opCodeSize;\n\t\t\tint32_t nextOffset = (int32_t)(ip - ilcodeStart);\n\t\t\tIL2CPP_ASSERT(nextOffset >= 0 && nextOffset <= (int32_t)codeSize);\n\n\t\t\tswitch (oc->flow)\n\t\t\t{\n\t\t\tcase FlowType::Branch:\n\t\t\tcase FlowType::CondBranch:\n\t\t\tcase FlowType::Throw:\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdefault: break;\n\t\t\t}\n\t\t}\n\t\tIL2CPP_ASSERT(ip == codeEnd);\n\t\treturn true;\n\t}\n\n\tstatic bool ComputeInlinable(metadata::Image* image, uint32_t token)\n\t{\n\t\tmetadata::MethodBody* methodBody = MethodBodyCache::GetMethodBody(image, token);\n\t\tif (methodBody == nullptr || methodBody->ilcodes == nullptr)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif ((int32_t)methodBody->codeSize > RuntimeConfig::GetMaxInlineableMethodBodySize() || !methodBody->exceptionClauses.empty())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn IsILCodeInlineable(methodBody->ilcodes, methodBody->codeSize);\n\t}\n\n\tbool MethodBodyCache::IsInlineable(const MethodInfo* methodInfo)\n\t{\n\t\tIL2CPP_ASSERT(methodInfo->isInterpterImpl);\n\n\t\tmetadata::Image* image = MetadataModule::GetUnderlyingInterpreterImage(methodInfo);\n\t\tIL2CPP_ASSERT(image);\n\t\tMethodBodyCacheInfo* ci = GetOrInitMethodBodyCache(image, methodInfo->token);\n\t\tci->accessVersion = s_methodBodyCacheVersion;\n\t\t++ci->accessCount;\n\t\tif (ci->inlineMode != InlineMode::None)\n\t\t{\n\t\t\treturn ci->inlineMode == InlineMode::Inlineable;\n\t\t}\n\t\tbool inlineable = ComputeInlinable(image, methodInfo->token);\n\t\tci->inlineMode = inlineable ? InlineMode::Inlineable : InlineMode::NotInlineable;\n\t\treturn inlineable;\n\t}\n\n\tvoid MethodBodyCache::DisableInline(const MethodInfo* methodInfo)\n\t{\n\t\tIL2CPP_ASSERT(methodInfo->isInterpterImpl);\n\t\tmetadata::Image* image = MetadataModule::GetUnderlyingInterpreterImage(methodInfo);\n\t\tIL2CPP_ASSERT(image);\n\t\tMethodBodyCacheInfo* ci = GetOrInitMethodBodyCache(image, methodInfo->token);\n\t\tci->inlineMode = InlineMode::NotInlineable;\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/MethodBodyCache.h",
    "content": "#pragma once\n\n#include \"Image.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tclass MethodBodyCache\n\t{\n\tpublic:\n\t\tstatic MethodBody* GetMethodBody(hybridclr::metadata::Image* image, uint32_t token);\n\t\tstatic void EnableShrinkMethodBodyCache(bool shrink);\n\n\t\tstatic bool IsInlineable(const MethodInfo* method);\n\t\tstatic void DisableInline(const MethodInfo* method);\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Opcodes.cpp",
    "content": "﻿#include \"Opcodes.h\"\n\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tOpCodeInfo g_opcodeInfos[(int)OpcodeEnum::__Count] =\n\t{\n\t\t//!!!{{OPCODE_INFO\n\t\t{ OpcodeEnum::NOP, \"nop\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::NOP, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::BREAK, \"break\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::BREAK, FlowType::Break, 0 },\n\t\t{ OpcodeEnum::LDARG_0, \"ldarg.0\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDARG_0, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDARG_1, \"ldarg.1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDARG_1, FlowType::Next, 1 },\n\t\t{ OpcodeEnum::LDARG_2, \"ldarg.2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDARG_2, FlowType::Next, 2 },\n\t\t{ OpcodeEnum::LDARG_3, \"ldarg.3\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDARG_3, FlowType::Next, 3 },\n\t\t{ OpcodeEnum::LDLOC_0, \"ldloc.0\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDLOC_0, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLOC_1, \"ldloc.1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDLOC_1, FlowType::Next, 1 },\n\t\t{ OpcodeEnum::LDLOC_2, \"ldloc.2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDLOC_2, FlowType::Next, 2 },\n\t\t{ OpcodeEnum::LDLOC_3, \"ldloc.3\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDLOC_3, FlowType::Next, 3 },\n\t\t{ OpcodeEnum::STLOC_0, \"stloc.0\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STLOC_0, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STLOC_1, \"stloc.1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STLOC_1, FlowType::Next, 1 },\n\t\t{ OpcodeEnum::STLOC_2, \"stloc.2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STLOC_2, FlowType::Next, 2 },\n\t\t{ OpcodeEnum::STLOC_3, \"stloc.3\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STLOC_3, FlowType::Next, 3 },\n\t\t{ OpcodeEnum::LDARG_S, \"ldarg.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::LDARG_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDARGA_S, \"ldarga.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::LDARGA_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STARG_S, \"starg.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::STARG_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLOC_S, \"ldloc.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::LDLOC_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLOCA_S, \"ldloca.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::LDLOCA_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STLOC_S, \"stloc.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::STLOC_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDNULL, \"ldnull\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDNULL, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_I4_M1, \"ldc.i4.m1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_M1, FlowType::Next, -1 },\n\t\t{ OpcodeEnum::LDC_I4_0, \"ldc.i4.0\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_0, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_I4_1, \"ldc.i4.1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_1, FlowType::Next, 1 },\n\t\t{ OpcodeEnum::LDC_I4_2, \"ldc.i4.2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_2, FlowType::Next, 2 },\n\t\t{ OpcodeEnum::LDC_I4_3, \"ldc.i4.3\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_3, FlowType::Next, 3 },\n\t\t{ OpcodeEnum::LDC_I4_4, \"ldc.i4.4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_4, FlowType::Next, 4 },\n\t\t{ OpcodeEnum::LDC_I4_5, \"ldc.i4.5\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_5, FlowType::Next, 5 },\n\t\t{ OpcodeEnum::LDC_I4_6, \"ldc.i4.6\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_6, FlowType::Next, 6 },\n\t\t{ OpcodeEnum::LDC_I4_7, \"ldc.i4.7\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_7, FlowType::Next, 7 },\n\t\t{ OpcodeEnum::LDC_I4_8, \"ldc.i4.8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDC_I4_8, FlowType::Next, 8 },\n\t\t{ OpcodeEnum::LDC_I4_S, \"ldc.i4.s\", {}, OutputType::None, ArgType::Data, 1, 255, OpcodeValue::LDC_I4_S, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_I4, \"ldc.i4\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDC_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_I8, \"ldc.i8\", {}, OutputType::None, ArgType::Data, 8, 255, OpcodeValue::LDC_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_R4, \"ldc.r4\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDC_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDC_R8, \"ldc.r8\", {}, OutputType::None, ArgType::Data, 8, 255, OpcodeValue::LDC_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED99, \"unused99\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED99, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::DUP, \"dup\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::DUP, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::POP, \"pop\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::POP, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::JMP, \"jmp\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::JMP, FlowType::Call, 0 },\n\t\t{ OpcodeEnum::CALL, \"call\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::CALL, FlowType::Call, 0 },\n\t\t{ OpcodeEnum::CALLI, \"calli\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::CALLI, FlowType::Call, 0 },\n\t\t{ OpcodeEnum::RET, \"ret\", {}, OutputType::None, ArgType::StaticBranch, 0, 255, OpcodeValue::RET, FlowType::Return, 0 },\n\t\t{ OpcodeEnum::BR_S, \"br.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BR_S, FlowType::Branch, 0 },\n\t\t{ OpcodeEnum::BRFALSE_S, \"brfalse.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BRFALSE_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BRTRUE_S, \"brtrue.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BRTRUE_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BEQ_S, \"beq.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BEQ_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGE_S, \"bge.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BGE_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGT_S, \"bgt.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BGT_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLE_S, \"ble.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BLE_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLT_S, \"blt.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BLT_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BNE_UN_S, \"bne.un.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BNE_UN_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGE_UN_S, \"bge.un.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BGE_UN_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGT_UN_S, \"bgt.un.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BGT_UN_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLE_UN_S, \"ble.un.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BLE_UN_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLT_UN_S, \"blt.un.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::BLT_UN_S, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BR, \"br\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BR, FlowType::Branch, 0 },\n\t\t{ OpcodeEnum::BRFALSE, \"brfalse\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BRFALSE, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BRTRUE, \"brtrue\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BRTRUE, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BEQ, \"beq\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BEQ, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGE, \"bge\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BGE, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGT, \"bgt\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BGT, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLE, \"ble\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BLE, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLT, \"blt\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BLT, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BNE_UN, \"bne.un\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BNE_UN, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGE_UN, \"bge.un\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BGE_UN, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BGT_UN, \"bgt.un\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BGT_UN, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLE_UN, \"ble.un\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BLE_UN, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::BLT_UN, \"blt.un\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::BLT_UN, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::SWITCH, \"switch\", {}, OutputType::None, ArgType::Switch, -1, 255, OpcodeValue::SWITCH, FlowType::CondBranch, 0 },\n\t\t{ OpcodeEnum::LDIND_I1, \"ldind.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_U1, \"ldind.u1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_U1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_I2, \"ldind.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_U2, \"ldind.u2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_U2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_I4, \"ldind.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_U4, \"ldind.u4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_U4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_I8, \"ldind.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_I, \"ldind.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_R4, \"ldind.r4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_R8, \"ldind.r8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDIND_REF, \"ldind.ref\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDIND_REF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_REF, \"stind.ref\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_REF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_I1, \"stind.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_I2, \"stind.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_I4, \"stind.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_I8, \"stind.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_R4, \"stind.r4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STIND_R8, \"stind.r8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ADD, \"add\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::ADD, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SUB, \"sub\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SUB, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::MUL, \"mul\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::MUL, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::DIV, \"div\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::DIV, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::DIV_UN, \"div.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::DIV_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::REM, \"rem\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::REM, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::REM_UN, \"rem.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::REM_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::AND, \"and\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::AND, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::OR, \"or\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::OR, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::XOR, \"xor\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::XOR, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SHL, \"shl\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SHL, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SHR, \"shr\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SHR, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SHR_UN, \"shr.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SHR_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::NEG, \"neg\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::NEG, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::NOT, \"not\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::NOT, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_I1, \"conv.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_I2, \"conv.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_I4, \"conv.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_I8, \"conv.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_R4, \"conv.r4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_R8, \"conv.r8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_U4, \"conv.u4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_U4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_U8, \"conv.u8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_U8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CALLVIRT, \"callvirt\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::CALLVIRT, FlowType::Call, 0 },\n\t\t{ OpcodeEnum::CPOBJ, \"cpobj\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::CPOBJ, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDOBJ, \"ldobj\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDOBJ, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDSTR, \"ldstr\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDSTR, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::NEWOBJ, \"newobj\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::NEWOBJ, FlowType::Call, 0 },\n\t\t{ OpcodeEnum::CASTCLASS, \"castclass\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::CASTCLASS, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ISINST, \"isinst\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::ISINST, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_R_UN, \"conv.r.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_R_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED58, \"unused58\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED58, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED1, \"unused1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNBOX, \"unbox\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::UNBOX, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::THROW, \"throw\", {}, OutputType::None, ArgType::StaticBranch, 0, 255, OpcodeValue::THROW, FlowType::Throw, 0 },\n\t\t{ OpcodeEnum::LDFLD, \"ldfld\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDFLD, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDFLDA, \"ldflda\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDFLDA, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STFLD, \"stfld\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::STFLD, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDSFLD, \"ldsfld\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDSFLD, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDSFLDA, \"ldsflda\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDSFLDA, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STSFLD, \"stsfld\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::STSFLD, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STOBJ, \"stobj\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::STOBJ, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I1_UN, \"conv.ovf.i1.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I1_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I2_UN, \"conv.ovf.i2.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I2_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I4_UN, \"conv.ovf.i4.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I4_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I8_UN, \"conv.ovf.i8.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I8_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U1_UN, \"conv.ovf.u1.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U1_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U2_UN, \"conv.ovf.u2.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U2_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U4_UN, \"conv.ovf.u4.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U4_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U8_UN, \"conv.ovf.u8.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U8_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I_UN, \"conv.ovf.i.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U_UN, \"conv.ovf.u.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::BOX, \"box\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::BOX, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::NEWARR, \"newarr\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::NEWARR, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLEN, \"ldlen\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDLEN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEMA, \"ldelema\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDELEMA, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_I1, \"ldelem.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_U1, \"ldelem.u1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_U1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_I2, \"ldelem.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_U2, \"ldelem.u2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_U2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_I4, \"ldelem.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_U4, \"ldelem.u4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_U4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_I8, \"ldelem.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_I, \"ldelem.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_R4, \"ldelem.r4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_R8, \"ldelem.r8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM_REF, \"ldelem.ref\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::LDELEM_REF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_I, \"stelem.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_I1, \"stelem.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_I2, \"stelem.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_I4, \"stelem.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_I8, \"stelem.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_R4, \"stelem.r4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_R4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_R8, \"stelem.r8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_R8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM_REF, \"stelem.ref\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STELEM_REF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDELEM, \"ldelem\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDELEM, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STELEM, \"stelem\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::STELEM, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNBOX_ANY, \"unbox.any\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::UNBOX_ANY, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED5, \"unused5\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED5, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED6, \"unused6\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED6, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED7, \"unused7\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED7, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED8, \"unused8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED9, \"unused9\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED9, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED10, \"unused10\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED10, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED11, \"unused11\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED11, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED12, \"unused12\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED12, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED13, \"unused13\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED13, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED14, \"unused14\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED14, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED15, \"unused15\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED15, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED16, \"unused16\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED16, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED17, \"unused17\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED17, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I1, \"conv.ovf.i1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U1, \"conv.ovf.u1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I2, \"conv.ovf.i2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U2, \"conv.ovf.u2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I4, \"conv.ovf.i4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U4, \"conv.ovf.u4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U4, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I8, \"conv.ovf.i8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U8, \"conv.ovf.u8\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U8, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED50, \"unused50\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED50, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED18, \"unused18\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED18, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED19, \"unused19\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED19, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED20, \"unused20\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED20, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED21, \"unused21\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED21, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED22, \"unused22\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED22, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED23, \"unused23\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED23, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::REFANYVAL, \"refanyval\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::REFANYVAL, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CKFINITE, \"ckfinite\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CKFINITE, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED24, \"unused24\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED24, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED25, \"unused25\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED25, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::MKREFANY, \"mkrefany\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::MKREFANY, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED59, \"unused59\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED59, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED60, \"unused60\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED60, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED61, \"unused61\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED61, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED62, \"unused62\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED62, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED63, \"unused63\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED63, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED64, \"unused64\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED64, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED65, \"unused65\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED65, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED66, \"unused66\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED66, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED67, \"unused67\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED67, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDTOKEN, \"ldtoken\", {}, OutputType::None, ArgType::Data, 4, 255, OpcodeValue::LDTOKEN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_U2, \"conv.u2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_U2, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_U1, \"conv.u1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_U1, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_I, \"conv.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_I, \"conv.ovf.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_OVF_U, \"conv.ovf.u\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_OVF_U, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ADD_OVF, \"add.ovf\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::ADD_OVF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ADD_OVF_UN, \"add.ovf.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::ADD_OVF_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::MUL_OVF, \"mul.ovf\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::MUL_OVF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::MUL_OVF_UN, \"mul.ovf.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::MUL_OVF_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SUB_OVF, \"sub.ovf\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SUB_OVF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SUB_OVF_UN, \"sub.ovf.un\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::SUB_OVF_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ENDFINALLY, \"endfinally\", {}, OutputType::None, ArgType::StaticBranch, 0, 255, OpcodeValue::ENDFINALLY, FlowType::Return, 0 },\n\t\t{ OpcodeEnum::LEAVE, \"leave\", {}, OutputType::None, ArgType::BranchTarget, 4, 255, OpcodeValue::LEAVE, FlowType::Branch, 0 },\n\t\t{ OpcodeEnum::LEAVE_S, \"leave.s\", {}, OutputType::None, ArgType::BranchTarget, 1, 255, OpcodeValue::LEAVE_S, FlowType::Branch, 0 },\n\t\t{ OpcodeEnum::STIND_I, \"stind.i\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::STIND_I, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONV_U, \"conv.u\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::CONV_U, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED26, \"unused26\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED26, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED27, \"unused27\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED27, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED28, \"unused28\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED28, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED29, \"unused29\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED29, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED30, \"unused30\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED30, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED31, \"unused31\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED31, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED32, \"unused32\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED32, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED33, \"unused33\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED33, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED34, \"unused34\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED34, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED35, \"unused35\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED35, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED36, \"unused36\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED36, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED37, \"unused37\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED37, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED38, \"unused38\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED38, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED39, \"unused39\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED39, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED40, \"unused40\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED40, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED41, \"unused41\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED41, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED42, \"unused42\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED42, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED43, \"unused43\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED43, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED44, \"unused44\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED44, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED45, \"unused45\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED45, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED46, \"unused46\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED46, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED47, \"unused47\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED47, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED48, \"unused48\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::UNUSED48, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::PREFIX7, \"prefix7\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX7, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX6, \"prefix6\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX6, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX5, \"prefix5\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX5, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX4, \"prefix4\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX4, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX3, \"prefix3\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX3, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX2, \"prefix2\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX2, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIX1, \"prefix1\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIX1, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::PREFIXREF, \"prefixref\", {}, OutputType::None, ArgType::None, 0, 255, OpcodeValue::PREFIXREF, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::ARGLIST, \"arglist\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::ARGLIST, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CEQ, \"ceq\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CEQ, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CGT, \"cgt\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CGT, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CGT_UN, \"cgt.un\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CGT_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CLT, \"clt\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CLT, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CLT_UN, \"clt.un\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CLT_UN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDFTN, \"ldftn\", {}, OutputType::None, ArgType::Data, 4, 254, OpcodeValue::LDFTN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDVIRTFTN, \"ldvirtftn\", {}, OutputType::None, ArgType::Data, 4, 254, OpcodeValue::LDVIRTFTN, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED56, \"unused56\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED56, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDARG, \"ldarg\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::LDARG, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDARGA, \"ldarga\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::LDARGA, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STARG, \"starg\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::STARG, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLOC, \"ldloc\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::LDLOC, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LDLOCA, \"ldloca\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::LDLOCA, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::STLOC, \"stloc\", {}, OutputType::None, ArgType::Data, 2, 254, OpcodeValue::STLOC, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::LOCALLOC, \"localloc\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::LOCALLOC, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED57, \"unused57\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED57, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ENDFILTER, \"endfilter\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::ENDFILTER, FlowType::Return, 0 },\n\t\t{ OpcodeEnum::UNALIGNED_, \"unaligned.\", {}, OutputType::None, ArgType::Data, 1, 254, OpcodeValue::UNALIGNED_, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::VOLATILE_, \"volatile.\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::VOLATILE_, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::TAIL_, \"tail.\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::TAIL_, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::INITOBJ, \"initobj\", {}, OutputType::None, ArgType::Data, 4, 254, OpcodeValue::INITOBJ, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::CONSTRAINED_, \"constrained.\", {}, OutputType::None, ArgType::Data, 4, 254, OpcodeValue::CONSTRAINED_, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::CPBLK, \"cpblk\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::CPBLK, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::INITBLK, \"initblk\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::INITBLK, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::NO_, \"no.\", {}, OutputType::None, ArgType::Data, 1, 254, OpcodeValue::NO_, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::RETHROW, \"rethrow\", {}, OutputType::None, ArgType::StaticBranch, 0, 254, OpcodeValue::RETHROW, FlowType::Throw, 0 },\n\t\t{ OpcodeEnum::UNUSED, \"unused\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::SIZEOF, \"sizeof\", {}, OutputType::None, ArgType::Data, 4, 254, OpcodeValue::SIZEOF, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::REFANYTYPE, \"refanytype\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::REFANYTYPE, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::READONLY_, \"readonly.\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::READONLY_, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::UNUSED53, \"unused53\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED53, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED54, \"unused54\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED54, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED55, \"unused55\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED55, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::UNUSED70, \"unused70\", {}, OutputType::None, ArgType::None, 0, 254, OpcodeValue::UNUSED70, FlowType::Next, 0 },\n\t\t{ OpcodeEnum::ILLEGAL, \"illegal\", {}, OutputType::None, ArgType::None, 0, 0, OpcodeValue::ILLEGAL, FlowType::Meta, 0 },\n\t\t{ OpcodeEnum::ENDMAC, \"endmac\", {}, OutputType::None, ArgType::None, 0, 0, OpcodeValue::ENDMAC, FlowType::Meta, 0 },\n\n\t\t//!!!}}OPCODE_INFO\n\t};\n\n\tconst OpCodeInfo* DecodeOpCodeInfo(const byte*& ip, const byte* end)\n\t{\n\t\tif (ip >= end)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tbyte c = *ip;\n\t\tif (c < (byte)OpcodeValue::PREFIX7)\n\t\t{\n\t\t\treturn &g_opcodeInfos[c];\n\t\t}\n\t\telse if (c == (byte)OpcodeValue::PREFIX1)\n\t\t{\n\t\t\t++ip;\n\t\t\tif (ip >= end)\n\t\t\t{\n\t\t\t\treturn nullptr;\n\t\t\t}\n\t\t\treturn &g_opcodeInfos[(int)(*ip) + (int)OpcodeEnum::ARGLIST];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tIL2CPP_ASSERT(false && \"unknown prefix\");\n\t\t\treturn nullptr;\n\t\t}\n\t}\n\n\tuint32_t GetOpCodeSize(const byte*& ip, const OpCodeInfo* opCodeInfo)\n\t{\n\t\tif (opCodeInfo->inlineType != ArgType::Switch)\n\t\t{\n\t\t\treturn 1 + opCodeInfo->inlineParam;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn metadata::GetI4LittleEndian(ip + 1) * 4 + 5;\n\t\t}\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/Opcodes.h",
    "content": "﻿#pragma once\n\n#include \"../CommonDef.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tenum class OpcodeValue : uint8_t\n\t{\n\t\t//!!!{{OPCODE_VALUE\n\t\tNOP = 0,\n\t\tBREAK = 1,\n\t\tLDARG_0 = 2,\n\t\tLDARG_1 = 3,\n\t\tLDARG_2 = 4,\n\t\tLDARG_3 = 5,\n\t\tLDLOC_0 = 6,\n\t\tLDLOC_1 = 7,\n\t\tLDLOC_2 = 8,\n\t\tLDLOC_3 = 9,\n\t\tSTLOC_0 = 10,\n\t\tSTLOC_1 = 11,\n\t\tSTLOC_2 = 12,\n\t\tSTLOC_3 = 13,\n\t\tLDARG_S = 14,\n\t\tLDARGA_S = 15,\n\t\tSTARG_S = 16,\n\t\tLDLOC_S = 17,\n\t\tLDLOCA_S = 18,\n\t\tSTLOC_S = 19,\n\t\tLDNULL = 20,\n\t\tLDC_I4_M1 = 21,\n\t\tLDC_I4_0 = 22,\n\t\tLDC_I4_1 = 23,\n\t\tLDC_I4_2 = 24,\n\t\tLDC_I4_3 = 25,\n\t\tLDC_I4_4 = 26,\n\t\tLDC_I4_5 = 27,\n\t\tLDC_I4_6 = 28,\n\t\tLDC_I4_7 = 29,\n\t\tLDC_I4_8 = 30,\n\t\tLDC_I4_S = 31,\n\t\tLDC_I4 = 32,\n\t\tLDC_I8 = 33,\n\t\tLDC_R4 = 34,\n\t\tLDC_R8 = 35,\n\t\tUNUSED99 = 36,\n\t\tDUP = 37,\n\t\tPOP = 38,\n\t\tJMP = 39,\n\t\tCALL = 40,\n\t\tCALLI = 41,\n\t\tRET = 42,\n\t\tBR_S = 43,\n\t\tBRFALSE_S = 44,\n\t\tBRTRUE_S = 45,\n\t\tBEQ_S = 46,\n\t\tBGE_S = 47,\n\t\tBGT_S = 48,\n\t\tBLE_S = 49,\n\t\tBLT_S = 50,\n\t\tBNE_UN_S = 51,\n\t\tBGE_UN_S = 52,\n\t\tBGT_UN_S = 53,\n\t\tBLE_UN_S = 54,\n\t\tBLT_UN_S = 55,\n\t\tBR = 56,\n\t\tBRFALSE = 57,\n\t\tBRTRUE = 58,\n\t\tBEQ = 59,\n\t\tBGE = 60,\n\t\tBGT = 61,\n\t\tBLE = 62,\n\t\tBLT = 63,\n\t\tBNE_UN = 64,\n\t\tBGE_UN = 65,\n\t\tBGT_UN = 66,\n\t\tBLE_UN = 67,\n\t\tBLT_UN = 68,\n\t\tSWITCH = 69,\n\t\tLDIND_I1 = 70,\n\t\tLDIND_U1 = 71,\n\t\tLDIND_I2 = 72,\n\t\tLDIND_U2 = 73,\n\t\tLDIND_I4 = 74,\n\t\tLDIND_U4 = 75,\n\t\tLDIND_I8 = 76,\n\t\tLDIND_I = 77,\n\t\tLDIND_R4 = 78,\n\t\tLDIND_R8 = 79,\n\t\tLDIND_REF = 80,\n\t\tSTIND_REF = 81,\n\t\tSTIND_I1 = 82,\n\t\tSTIND_I2 = 83,\n\t\tSTIND_I4 = 84,\n\t\tSTIND_I8 = 85,\n\t\tSTIND_R4 = 86,\n\t\tSTIND_R8 = 87,\n\t\tADD = 88,\n\t\tSUB = 89,\n\t\tMUL = 90,\n\t\tDIV = 91,\n\t\tDIV_UN = 92,\n\t\tREM = 93,\n\t\tREM_UN = 94,\n\t\tAND = 95,\n\t\tOR = 96,\n\t\tXOR = 97,\n\t\tSHL = 98,\n\t\tSHR = 99,\n\t\tSHR_UN = 100,\n\t\tNEG = 101,\n\t\tNOT = 102,\n\t\tCONV_I1 = 103,\n\t\tCONV_I2 = 104,\n\t\tCONV_I4 = 105,\n\t\tCONV_I8 = 106,\n\t\tCONV_R4 = 107,\n\t\tCONV_R8 = 108,\n\t\tCONV_U4 = 109,\n\t\tCONV_U8 = 110,\n\t\tCALLVIRT = 111,\n\t\tCPOBJ = 112,\n\t\tLDOBJ = 113,\n\t\tLDSTR = 114,\n\t\tNEWOBJ = 115,\n\t\tCASTCLASS = 116,\n\t\tISINST = 117,\n\t\tCONV_R_UN = 118,\n\t\tUNUSED58 = 119,\n\t\tUNUSED1 = 120,\n\t\tUNBOX = 121,\n\t\tTHROW = 122,\n\t\tLDFLD = 123,\n\t\tLDFLDA = 124,\n\t\tSTFLD = 125,\n\t\tLDSFLD = 126,\n\t\tLDSFLDA = 127,\n\t\tSTSFLD = 128,\n\t\tSTOBJ = 129,\n\t\tCONV_OVF_I1_UN = 130,\n\t\tCONV_OVF_I2_UN = 131,\n\t\tCONV_OVF_I4_UN = 132,\n\t\tCONV_OVF_I8_UN = 133,\n\t\tCONV_OVF_U1_UN = 134,\n\t\tCONV_OVF_U2_UN = 135,\n\t\tCONV_OVF_U4_UN = 136,\n\t\tCONV_OVF_U8_UN = 137,\n\t\tCONV_OVF_I_UN = 138,\n\t\tCONV_OVF_U_UN = 139,\n\t\tBOX = 140,\n\t\tNEWARR = 141,\n\t\tLDLEN = 142,\n\t\tLDELEMA = 143,\n\t\tLDELEM_I1 = 144,\n\t\tLDELEM_U1 = 145,\n\t\tLDELEM_I2 = 146,\n\t\tLDELEM_U2 = 147,\n\t\tLDELEM_I4 = 148,\n\t\tLDELEM_U4 = 149,\n\t\tLDELEM_I8 = 150,\n\t\tLDELEM_I = 151,\n\t\tLDELEM_R4 = 152,\n\t\tLDELEM_R8 = 153,\n\t\tLDELEM_REF = 154,\n\t\tSTELEM_I = 155,\n\t\tSTELEM_I1 = 156,\n\t\tSTELEM_I2 = 157,\n\t\tSTELEM_I4 = 158,\n\t\tSTELEM_I8 = 159,\n\t\tSTELEM_R4 = 160,\n\t\tSTELEM_R8 = 161,\n\t\tSTELEM_REF = 162,\n\t\tLDELEM = 163,\n\t\tSTELEM = 164,\n\t\tUNBOX_ANY = 165,\n\t\tUNUSED5 = 166,\n\t\tUNUSED6 = 167,\n\t\tUNUSED7 = 168,\n\t\tUNUSED8 = 169,\n\t\tUNUSED9 = 170,\n\t\tUNUSED10 = 171,\n\t\tUNUSED11 = 172,\n\t\tUNUSED12 = 173,\n\t\tUNUSED13 = 174,\n\t\tUNUSED14 = 175,\n\t\tUNUSED15 = 176,\n\t\tUNUSED16 = 177,\n\t\tUNUSED17 = 178,\n\t\tCONV_OVF_I1 = 179,\n\t\tCONV_OVF_U1 = 180,\n\t\tCONV_OVF_I2 = 181,\n\t\tCONV_OVF_U2 = 182,\n\t\tCONV_OVF_I4 = 183,\n\t\tCONV_OVF_U4 = 184,\n\t\tCONV_OVF_I8 = 185,\n\t\tCONV_OVF_U8 = 186,\n\t\tUNUSED50 = 187,\n\t\tUNUSED18 = 188,\n\t\tUNUSED19 = 189,\n\t\tUNUSED20 = 190,\n\t\tUNUSED21 = 191,\n\t\tUNUSED22 = 192,\n\t\tUNUSED23 = 193,\n\t\tREFANYVAL = 194,\n\t\tCKFINITE = 195,\n\t\tUNUSED24 = 196,\n\t\tUNUSED25 = 197,\n\t\tMKREFANY = 198,\n\t\tUNUSED59 = 199,\n\t\tUNUSED60 = 200,\n\t\tUNUSED61 = 201,\n\t\tUNUSED62 = 202,\n\t\tUNUSED63 = 203,\n\t\tUNUSED64 = 204,\n\t\tUNUSED65 = 205,\n\t\tUNUSED66 = 206,\n\t\tUNUSED67 = 207,\n\t\tLDTOKEN = 208,\n\t\tCONV_U2 = 209,\n\t\tCONV_U1 = 210,\n\t\tCONV_I = 211,\n\t\tCONV_OVF_I = 212,\n\t\tCONV_OVF_U = 213,\n\t\tADD_OVF = 214,\n\t\tADD_OVF_UN = 215,\n\t\tMUL_OVF = 216,\n\t\tMUL_OVF_UN = 217,\n\t\tSUB_OVF = 218,\n\t\tSUB_OVF_UN = 219,\n\t\tENDFINALLY = 220,\n\t\tLEAVE = 221,\n\t\tLEAVE_S = 222,\n\t\tSTIND_I = 223,\n\t\tCONV_U = 224,\n\t\tUNUSED26 = 225,\n\t\tUNUSED27 = 226,\n\t\tUNUSED28 = 227,\n\t\tUNUSED29 = 228,\n\t\tUNUSED30 = 229,\n\t\tUNUSED31 = 230,\n\t\tUNUSED32 = 231,\n\t\tUNUSED33 = 232,\n\t\tUNUSED34 = 233,\n\t\tUNUSED35 = 234,\n\t\tUNUSED36 = 235,\n\t\tUNUSED37 = 236,\n\t\tUNUSED38 = 237,\n\t\tUNUSED39 = 238,\n\t\tUNUSED40 = 239,\n\t\tUNUSED41 = 240,\n\t\tUNUSED42 = 241,\n\t\tUNUSED43 = 242,\n\t\tUNUSED44 = 243,\n\t\tUNUSED45 = 244,\n\t\tUNUSED46 = 245,\n\t\tUNUSED47 = 246,\n\t\tUNUSED48 = 247,\n\t\tPREFIX7 = 248,\n\t\tPREFIX6 = 249,\n\t\tPREFIX5 = 250,\n\t\tPREFIX4 = 251,\n\t\tPREFIX3 = 252,\n\t\tPREFIX2 = 253,\n\t\tPREFIX1 = 254,\n\t\tPREFIXREF = 255,\n\t\tARGLIST = 0,\n\t\tCEQ = 1,\n\t\tCGT = 2,\n\t\tCGT_UN = 3,\n\t\tCLT = 4,\n\t\tCLT_UN = 5,\n\t\tLDFTN = 6,\n\t\tLDVIRTFTN = 7,\n\t\tUNUSED56 = 8,\n\t\tLDARG = 9,\n\t\tLDARGA = 10,\n\t\tSTARG = 11,\n\t\tLDLOC = 12,\n\t\tLDLOCA = 13,\n\t\tSTLOC = 14,\n\t\tLOCALLOC = 15,\n\t\tUNUSED57 = 16,\n\t\tENDFILTER = 17,\n\t\tUNALIGNED_ = 18,\n\t\tVOLATILE_ = 19,\n\t\tTAIL_ = 20,\n\t\tINITOBJ = 21,\n\t\tCONSTRAINED_ = 22,\n\t\tCPBLK = 23,\n\t\tINITBLK = 24,\n\t\tNO_ = 25,\n\t\tRETHROW = 26,\n\t\tUNUSED = 27,\n\t\tSIZEOF = 28,\n\t\tREFANYTYPE = 29,\n\t\tREADONLY_ = 30,\n\t\tUNUSED53 = 31,\n\t\tUNUSED54 = 32,\n\t\tUNUSED55 = 33,\n\t\tUNUSED70 = 34,\n\t\tILLEGAL = 0,\n\t\tENDMAC = 0,\n\n\t\t//!!!}}OPCODE_VALUE\n\t};\n\n\tenum class OpcodeEnum\n\t{\n\t\t//!!!{{OPCODE_ENUM\n\t\tNOP,\n\t\tBREAK,\n\t\tLDARG_0,\n\t\tLDARG_1,\n\t\tLDARG_2,\n\t\tLDARG_3,\n\t\tLDLOC_0,\n\t\tLDLOC_1,\n\t\tLDLOC_2,\n\t\tLDLOC_3,\n\t\tSTLOC_0,\n\t\tSTLOC_1,\n\t\tSTLOC_2,\n\t\tSTLOC_3,\n\t\tLDARG_S,\n\t\tLDARGA_S,\n\t\tSTARG_S,\n\t\tLDLOC_S,\n\t\tLDLOCA_S,\n\t\tSTLOC_S,\n\t\tLDNULL,\n\t\tLDC_I4_M1,\n\t\tLDC_I4_0,\n\t\tLDC_I4_1,\n\t\tLDC_I4_2,\n\t\tLDC_I4_3,\n\t\tLDC_I4_4,\n\t\tLDC_I4_5,\n\t\tLDC_I4_6,\n\t\tLDC_I4_7,\n\t\tLDC_I4_8,\n\t\tLDC_I4_S,\n\t\tLDC_I4,\n\t\tLDC_I8,\n\t\tLDC_R4,\n\t\tLDC_R8,\n\t\tUNUSED99,\n\t\tDUP,\n\t\tPOP,\n\t\tJMP,\n\t\tCALL,\n\t\tCALLI,\n\t\tRET,\n\t\tBR_S,\n\t\tBRFALSE_S,\n\t\tBRTRUE_S,\n\t\tBEQ_S,\n\t\tBGE_S,\n\t\tBGT_S,\n\t\tBLE_S,\n\t\tBLT_S,\n\t\tBNE_UN_S,\n\t\tBGE_UN_S,\n\t\tBGT_UN_S,\n\t\tBLE_UN_S,\n\t\tBLT_UN_S,\n\t\tBR,\n\t\tBRFALSE,\n\t\tBRTRUE,\n\t\tBEQ,\n\t\tBGE,\n\t\tBGT,\n\t\tBLE,\n\t\tBLT,\n\t\tBNE_UN,\n\t\tBGE_UN,\n\t\tBGT_UN,\n\t\tBLE_UN,\n\t\tBLT_UN,\n\t\tSWITCH,\n\t\tLDIND_I1,\n\t\tLDIND_U1,\n\t\tLDIND_I2,\n\t\tLDIND_U2,\n\t\tLDIND_I4,\n\t\tLDIND_U4,\n\t\tLDIND_I8,\n\t\tLDIND_I,\n\t\tLDIND_R4,\n\t\tLDIND_R8,\n\t\tLDIND_REF,\n\t\tSTIND_REF,\n\t\tSTIND_I1,\n\t\tSTIND_I2,\n\t\tSTIND_I4,\n\t\tSTIND_I8,\n\t\tSTIND_R4,\n\t\tSTIND_R8,\n\t\tADD,\n\t\tSUB,\n\t\tMUL,\n\t\tDIV,\n\t\tDIV_UN,\n\t\tREM,\n\t\tREM_UN,\n\t\tAND,\n\t\tOR,\n\t\tXOR,\n\t\tSHL,\n\t\tSHR,\n\t\tSHR_UN,\n\t\tNEG,\n\t\tNOT,\n\t\tCONV_I1,\n\t\tCONV_I2,\n\t\tCONV_I4,\n\t\tCONV_I8,\n\t\tCONV_R4,\n\t\tCONV_R8,\n\t\tCONV_U4,\n\t\tCONV_U8,\n\t\tCALLVIRT,\n\t\tCPOBJ,\n\t\tLDOBJ,\n\t\tLDSTR,\n\t\tNEWOBJ,\n\t\tCASTCLASS,\n\t\tISINST,\n\t\tCONV_R_UN,\n\t\tUNUSED58,\n\t\tUNUSED1,\n\t\tUNBOX,\n\t\tTHROW,\n\t\tLDFLD,\n\t\tLDFLDA,\n\t\tSTFLD,\n\t\tLDSFLD,\n\t\tLDSFLDA,\n\t\tSTSFLD,\n\t\tSTOBJ,\n\t\tCONV_OVF_I1_UN,\n\t\tCONV_OVF_I2_UN,\n\t\tCONV_OVF_I4_UN,\n\t\tCONV_OVF_I8_UN,\n\t\tCONV_OVF_U1_UN,\n\t\tCONV_OVF_U2_UN,\n\t\tCONV_OVF_U4_UN,\n\t\tCONV_OVF_U8_UN,\n\t\tCONV_OVF_I_UN,\n\t\tCONV_OVF_U_UN,\n\t\tBOX,\n\t\tNEWARR,\n\t\tLDLEN,\n\t\tLDELEMA,\n\t\tLDELEM_I1,\n\t\tLDELEM_U1,\n\t\tLDELEM_I2,\n\t\tLDELEM_U2,\n\t\tLDELEM_I4,\n\t\tLDELEM_U4,\n\t\tLDELEM_I8,\n\t\tLDELEM_I,\n\t\tLDELEM_R4,\n\t\tLDELEM_R8,\n\t\tLDELEM_REF,\n\t\tSTELEM_I,\n\t\tSTELEM_I1,\n\t\tSTELEM_I2,\n\t\tSTELEM_I4,\n\t\tSTELEM_I8,\n\t\tSTELEM_R4,\n\t\tSTELEM_R8,\n\t\tSTELEM_REF,\n\t\tLDELEM,\n\t\tSTELEM,\n\t\tUNBOX_ANY,\n\t\tUNUSED5,\n\t\tUNUSED6,\n\t\tUNUSED7,\n\t\tUNUSED8,\n\t\tUNUSED9,\n\t\tUNUSED10,\n\t\tUNUSED11,\n\t\tUNUSED12,\n\t\tUNUSED13,\n\t\tUNUSED14,\n\t\tUNUSED15,\n\t\tUNUSED16,\n\t\tUNUSED17,\n\t\tCONV_OVF_I1,\n\t\tCONV_OVF_U1,\n\t\tCONV_OVF_I2,\n\t\tCONV_OVF_U2,\n\t\tCONV_OVF_I4,\n\t\tCONV_OVF_U4,\n\t\tCONV_OVF_I8,\n\t\tCONV_OVF_U8,\n\t\tUNUSED50,\n\t\tUNUSED18,\n\t\tUNUSED19,\n\t\tUNUSED20,\n\t\tUNUSED21,\n\t\tUNUSED22,\n\t\tUNUSED23,\n\t\tREFANYVAL,\n\t\tCKFINITE,\n\t\tUNUSED24,\n\t\tUNUSED25,\n\t\tMKREFANY,\n\t\tUNUSED59,\n\t\tUNUSED60,\n\t\tUNUSED61,\n\t\tUNUSED62,\n\t\tUNUSED63,\n\t\tUNUSED64,\n\t\tUNUSED65,\n\t\tUNUSED66,\n\t\tUNUSED67,\n\t\tLDTOKEN,\n\t\tCONV_U2,\n\t\tCONV_U1,\n\t\tCONV_I,\n\t\tCONV_OVF_I,\n\t\tCONV_OVF_U,\n\t\tADD_OVF,\n\t\tADD_OVF_UN,\n\t\tMUL_OVF,\n\t\tMUL_OVF_UN,\n\t\tSUB_OVF,\n\t\tSUB_OVF_UN,\n\t\tENDFINALLY,\n\t\tLEAVE,\n\t\tLEAVE_S,\n\t\tSTIND_I,\n\t\tCONV_U,\n\t\tUNUSED26,\n\t\tUNUSED27,\n\t\tUNUSED28,\n\t\tUNUSED29,\n\t\tUNUSED30,\n\t\tUNUSED31,\n\t\tUNUSED32,\n\t\tUNUSED33,\n\t\tUNUSED34,\n\t\tUNUSED35,\n\t\tUNUSED36,\n\t\tUNUSED37,\n\t\tUNUSED38,\n\t\tUNUSED39,\n\t\tUNUSED40,\n\t\tUNUSED41,\n\t\tUNUSED42,\n\t\tUNUSED43,\n\t\tUNUSED44,\n\t\tUNUSED45,\n\t\tUNUSED46,\n\t\tUNUSED47,\n\t\tUNUSED48,\n\t\tPREFIX7,\n\t\tPREFIX6,\n\t\tPREFIX5,\n\t\tPREFIX4,\n\t\tPREFIX3,\n\t\tPREFIX2,\n\t\tPREFIX1,\n\t\tPREFIXREF,\n\t\tARGLIST,\n\t\tCEQ,\n\t\tCGT,\n\t\tCGT_UN,\n\t\tCLT,\n\t\tCLT_UN,\n\t\tLDFTN,\n\t\tLDVIRTFTN,\n\t\tUNUSED56,\n\t\tLDARG,\n\t\tLDARGA,\n\t\tSTARG,\n\t\tLDLOC,\n\t\tLDLOCA,\n\t\tSTLOC,\n\t\tLOCALLOC,\n\t\tUNUSED57,\n\t\tENDFILTER,\n\t\tUNALIGNED_,\n\t\tVOLATILE_,\n\t\tTAIL_,\n\t\tINITOBJ,\n\t\tCONSTRAINED_,\n\t\tCPBLK,\n\t\tINITBLK,\n\t\tNO_,\n\t\tRETHROW,\n\t\tUNUSED,\n\t\tSIZEOF,\n\t\tREFANYTYPE,\n\t\tREADONLY_,\n\t\tUNUSED53,\n\t\tUNUSED54,\n\t\tUNUSED55,\n\t\tUNUSED70,\n\t\tILLEGAL,\n\t\tENDMAC,\n\n\t\t//!!!}}OPCODE_ENUM\n\t\t__Count,\n\t};\n\n\n\tenum class FlowType\n\t{\n\t\tNext,\n\t\tBranch,\n\t\tCondBranch,\n\t\tCall,\n\t\tReturn,\n\t\tMeta,\n\t\tThrow,\n\t\tBreak,\n\t};\n\n\tenum class ArgType\n\t{\n\t\tNone,\n\t\tData,\n\t\tStaticBranch,\n\t\tBranchTarget,\n\t\tSwitch,\n\t};\n\n\tenum class InputType\n\t{\n\t\tNone,\n\t};\n\n\tenum class OutputType\n\t{\n\t\tNone,\n\t};\n\n\tenum class OpCodeKind\n\t{\n\t\tPrimitive,\n\t\tObjModel,\n\t\tMacro,\n\t\tPrefix,\n\t\tNternal,\n\t};\n\n\tstruct OpCodeInfo\n\t{\n\t\tOpcodeEnum id;\n\t\tconst char name[16];\n\t\tInputType intput[3];\n\t\tOutputType output;\n\t\tArgType inlineType;\n\t\tint32_t inlineParam;\n\t\tuint8_t flag;\n\t\tOpcodeValue baseOpValue;\n\t\tFlowType flow;\n\t\tint32_t constValue;\n\t};\n\n\textern OpCodeInfo g_opcodeInfos[(int)OpcodeEnum::__Count];\n\n\tconst OpCodeInfo* DecodeOpCodeInfo(const byte*& ip, const byte* end);\n\n\tuint32_t GetOpCodeSize(const byte*& ip, const OpCodeInfo* opCodeInfo);\n}\n}\n\n"
  },
  {
    "path": "hybridclr/metadata/PDBImage.cpp",
    "content": "#include \"PDBImage.h\"\n\n#include <algorithm>\n\n#include \"vm/MetadataLock.h\"\n\n#include \"../interpreter/InterpreterDefs.h\"\n\n#include \"BlobReader.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tconstexpr uint32_t kHiddenLine = 0xfeefee;\n\n\tLoadImageErrorCode PDBImage::LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize)\n\t{\n\t\tentryPointToken = 0;\n\t\tmetadataRva = 0;\n\t\tmetadataSize = _imageLength;\n\n\t\t_sections.push_back({ 0, _imageLength, 0 });\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n\tuint32_t PDBImage::FindILOffsetByIROffset(const il2cpp::utils::dynamic_array<ILMapper>& ilMapper, uint32_t irOffset)\n\t{\n\t\tauto it = std::upper_bound(ilMapper.begin(), ilMapper.end(), irOffset, [](uint32_t irOffset, const ILMapper& mapper) { return irOffset < mapper.irOffset; });\n\t\tif (it != ilMapper.begin())\n\t\t{\n\t\t\tauto next = it;\n\t\t\tif (next != ilMapper.end())\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(next->irOffset > irOffset);\n\t\t\t}\n\t\t\t--it;\n\t\t\tIL2CPP_ASSERT(it->irOffset <= irOffset);\n\t\t\treturn it->ilOffset;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tconst PDBImage::SymbolSequencePoint* PDBImage::FindSequencePoint(const il2cpp::utils::dynamic_array<SymbolSequencePoint>& sequencePoints, uint32_t ilOffset)\n\t{\n\t\tauto it = std::upper_bound(sequencePoints.begin(), sequencePoints.end(), ilOffset, [](uint32_t ilOffset, const SymbolSequencePoint& ssp) { return ilOffset < ssp.ilOffset; });\n\t\tif (it != sequencePoints.begin())\n\t\t{\n\t\t\tauto next = it;\n\t\t\tif (next != sequencePoints.end())\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(next->ilOffset > ilOffset);\n\t\t\t}\n\t\t\t--it;\n\t\t\tIL2CPP_ASSERT(it->ilOffset <= ilOffset);\n\t\t\treturn &(*it);\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tconst PDBImage::SymbolDocumentData* PDBImage::GetDocument(uint32_t documentToken)\n\t{\n\t\tconst Table& tableMeta = GetTable(TableType::DOCUMENT);\n\t\tuint32_t rowIndex = DecodeTokenRowIndex(documentToken);\n\t\tif (rowIndex == 0 || rowIndex > tableMeta.rowNum)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tauto it = _documents.find(documentToken);\n\t\tif (it != _documents.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\n\t\tTbDocument document = ReadDocument(rowIndex);\n\t\tSymbolDocumentData* documentData = new (HYBRIDCLR_MALLOC_ZERO(sizeof(SymbolDocumentData))) SymbolDocumentData();\n\t\tBlobReader reader = GetBlobReaderByRawIndex(document.name);\n\t\t\n\t\t// FIXME. this is a utf-8 char.\n\t\tchar sep = (char)reader.ReadByte();\n\t\tstd::string sourceFileNames;\n\t\tbool first = true;\n\t\twhile (reader.NonEmpty())\n\t\t{\n\t\t\tif (sep && !first)\n\t\t\t{\n\t\t\t\tsourceFileNames.push_back(sep);\n\t\t\t}\n\t\t\tuint32_t sourceFileNameIndex = reader.ReadCompressedUint32();\n\t\t\tif (sourceFileNameIndex > 0)\n\t\t\t{\n\t\t\t\tBlobReader sourceFileNameReader = GetBlobReaderByRawIndex(sourceFileNameIndex);\n\t\t\t\tsourceFileNames.append((const char*)sourceFileNameReader.GetData(), sourceFileNameReader.GetLength());\n\t\t\t}\n\t\t\tfirst = false;\n\t\t}\n\t\tdocumentData->sourceFiles = CopyString(sourceFileNames.c_str());\n\n\t\t_documents.add(documentToken, documentData);\n\t\treturn documentData;\n\t}\n\n\tvoid PDBImage::SetupStackFrameInfo(const MethodInfo* method, const void* ip, Il2CppStackFrameInfo& stackFrame)\n\t{\n\t\til2cpp::os::FastAutoLock lock(&il2cpp::vm::g_MetadataLock);\n\t\tauto it = _methodInfos.find(method);\n\t\tif (it == _methodInfos.end())\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tconst SymbolMethodInfoData* methodInfoData = it->second;\n\t\tconst SymbolMethodDefData* methodData = methodInfoData->methodData;\n\t\tconst hybridclr::interpreter::InterpMethodInfo* imi = (const hybridclr::interpreter::InterpMethodInfo*)method->interpData;\n\t\tIL2CPP_ASSERT(ip >= imi->codes && ip < imi->codes + imi->codeLength);\n\t\tconst byte* actualIp = (const byte*)ip;\n\n\t\tuint32_t irOffset = (uint32_t)((uintptr_t)actualIp - (uintptr_t)imi->codes);\n\t\tuint32_t ilOffset = FindILOffsetByIROffset(methodInfoData->ilMapper, irOffset);\n\t\t// when call sub interpreter method, ip point to next instruction, so we need to adjust ilOffset.\n\t\tif (ilOffset > 0)\n\t\t{\n\t\t\t--ilOffset;\n\t\t}\n\t\tstackFrame.ilOffset = ilOffset;\n\n\t\tconst SymbolSequencePoint* ssp = FindSequencePoint(methodData->sequencePoints, ilOffset);\n\t\tif (!ssp)\n\t\t{\n\t\t\tstackFrame.sourceCodeLineNumber = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tstackFrame.sourceCodeLineNumber = ssp->line;\n\n\t\tstackFrame.filePath = GetDocumentName(ssp->document);\n\t}\n\n\tvoid PDBImage::SetMethodDebugInfo(const MethodInfo* method, const il2cpp::utils::dynamic_array<ILMapper>& ilMapper)\n\t{\n\t\tIL2CPP_ASSERT(_methodInfos.find(method) == _methodInfos.end());\n\t\tSymbolMethodDefData* methodData = GetMethodDataFromCache(method->token);\n\t\tif (!methodData)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tSymbolMethodInfoData* methodInfoData = new (HYBRIDCLR_MALLOC_ZERO(sizeof(SymbolMethodInfoData))) SymbolMethodInfoData();\n\t\tmethodInfoData->methodData = methodData;\n\t\tmethodInfoData->ilMapper = ilMapper;\n\t\t_methodInfos.add(method, methodInfoData);\n\t}\n\n\n\tPDBImage::SymbolMethodDefData* PDBImage::GetMethodDataFromCache(uint32_t methodToken)\n\t{\n\t\tconst Table& tableMeta = GetTable(TableType::METHODDEBUGINFORMATION);\n\t\tuint32_t rowIndex = hybridclr::metadata::DecodeTokenRowIndex(methodToken);\n\t\tif (rowIndex == 0 || rowIndex > tableMeta.rowNum)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tauto it = _methods.find(methodToken);\n\t\tif (it != _methods.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\n\t\tSymbolMethodDefData* methodData = new (HYBRIDCLR_MALLOC_ZERO(sizeof(SymbolMethodDefData))) SymbolMethodDefData();\n\n\t\t// see https://github.com/dotnet/runtime/blob/main/docs/design/specs/PortablePdb-Metadata.md\n\t\tTbMethodDebugInformation smb = ReadMethodDebugInformation(rowIndex);\n\t\tmethodData->document = smb.document;\n\t\tif (smb.sequencePoints > 0)\n\t\t{\n\t\t\tauto& sequencePoints = methodData->sequencePoints;\n\t\t\tBlobReader reader = GetBlobReaderByRawIndex(smb.sequencePoints);\n\t\t\tuint32_t localSignature = reader.ReadCompressedUint32();\n\t\t\tuint32_t document = smb.document ? smb.document : reader.ReadCompressedUint32();\n\t\t\tint32_t prevStartLine = -1;\n\t\t\tint32_t prevStartColumn = -1;\n\t\t\twhile (reader.NonEmpty())\n\t\t\t{\n\t\t\t\tuint32_t deltaIlOffset = reader.ReadCompressedUint32();\n\t\t\t\t// document record\n\t\t\t\tif (deltaIlOffset == 0 && !sequencePoints.empty())\n\t\t\t\t{\n\t\t\t\t\tdocument = reader.ReadCompressedUint32();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tuint32_t deltaLines = reader.ReadCompressedUint32();\n\t\t\t\tint32_t deltaColumns = deltaLines == 0 ? reader.ReadCompressedUint32() : reader.ReadCompressedInt32();\n\t\t\t\t\n\t\t\t\tuint32_t ilOffset = sequencePoints.empty() ? deltaIlOffset : sequencePoints.back().ilOffset + deltaIlOffset;\n\n\t\t\t\tSymbolSequencePoint ssp = {};\n\t\t\t\tssp.document = document;\n\t\t\t\tssp.ilOffset = ilOffset;\n\t\t\t\t// hidden-sequence-point record\n\t\t\t\tif (deltaLines == 0 && deltaColumns == 0)\n\t\t\t\t{\n\t\t\t\t\tssp.line = ssp.endLine = kHiddenLine;\n\t\t\t\t\tssp.column = ssp.endColumn = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// sequence-point record\n\t\t\t\t\tif (prevStartColumn < 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tprevStartLine = reader.ReadCompressedUint32();\n\t\t\t\t\t\tprevStartColumn = reader.ReadCompressedUint32();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tprevStartLine += reader.ReadCompressedInt32();\n\t\t\t\t\t\tprevStartColumn += reader.ReadCompressedInt32();\n\t\t\t\t\t}\n\t\t\t\t\tssp.line = prevStartLine;\n\t\t\t\t\tssp.endLine = prevStartLine + deltaLines;\n\t\t\t\t\tssp.column = prevStartColumn;\n\t\t\t\t\tssp.endColumn = prevStartColumn + deltaColumns;\n\t\t\t\t}\n\t\t\t\tsequencePoints.push_back(ssp);\n\t\t\t}\n\t\t}\n\n\t\t_methods.add(methodToken, methodData);\n\t\treturn methodData;\n\t}\n}\n}\n\n\n"
  },
  {
    "path": "hybridclr/metadata/PDBImage.h",
    "content": "#pragma once\n\n#include \"RawImageBase.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstruct ILMapper\n\t{\n\t\tuint32_t irOffset;\n\t\tuint32_t ilOffset;\n\t};\n\n\tclass PDBImage : public RawImageBase\n\t{\n\tpublic:\n\t\tPDBImage() : RawImageBase()\n\t\t{\n\t\t}\n\n\t\tLoadImageErrorCode LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize) override;\n\n\t\tIl2CppString* GetUserStringBlogByIndex(uint32_t index) const override\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"PDBImage::GetUserStringBlogByIndex Not implemented\");\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tvoid SetupStackFrameInfo(const MethodInfo* method, const void* ip, Il2CppStackFrameInfo& stackFrame);\n\t\tvoid SetMethodDebugInfo(const MethodInfo* method, const il2cpp::utils::dynamic_array<ILMapper>& ilMapper);\n\tprivate:\n\n\t\tstruct SymbolDocumentData\n\t\t{\n\t\t\tconst char* sourceFiles;\n\t\t};\n\n\t\tstruct SymbolSequencePoint\n\t\t{\n\t\t\tuint32_t document;\n\t\t\tuint32_t ilOffset;\n\t\t\tuint32_t line;\n\t\t\tuint32_t column;\n\t\t\tuint32_t endLine;\n\t\t\tuint32_t endColumn;\n\t\t};\n\n\t\tstruct SymbolMethodDefData\n\t\t{\n\t\t\tuint32_t document;\n\t\t\til2cpp::utils::dynamic_array<SymbolSequencePoint> sequencePoints;\n\t\t};\n\n\t\tstruct SymbolMethodInfoData\n\t\t{\n\t\t\tSymbolMethodDefData* methodData;\n\t\t\til2cpp::utils::dynamic_array<ILMapper> ilMapper;\n\t\t};\n\n\t\tSymbolMethodDefData* GetMethodDataFromCache(uint32_t methodToken);\n\t\tstatic uint32_t FindILOffsetByIROffset(const il2cpp::utils::dynamic_array<ILMapper>& ilMapper, uint32_t irOffset);\n\t\tstatic const SymbolSequencePoint* FindSequencePoint(const il2cpp::utils::dynamic_array<SymbolSequencePoint>& sequencePoints, uint32_t ilOffset);\n\t\tconst SymbolDocumentData* GetDocument(uint32_t documentToken);\n\t\tconst char* GetDocumentName(uint32_t documentToken)\n\t\t{\n\t\t\tconst SymbolDocumentData* document = GetDocument(documentToken);\n\t\t\treturn document ? document->sourceFiles : nullptr;\n\t\t}\n\n\t\ttypedef Il2CppHashMap<uint32_t, SymbolMethodDefData*, il2cpp::utils::PassThroughHash<uint32_t>> SymbolMethodDataMap;\n\t\tSymbolMethodDataMap _methods;\n\n\t\ttypedef Il2CppHashMap<uint32_t, SymbolDocumentData*, il2cpp::utils::PassThroughHash<uint32_t>> SymbolDocumentDataMap;\n\t\tSymbolDocumentDataMap _documents;\n\n\t\ttypedef Il2CppHashMap<const MethodInfo*, SymbolMethodInfoData*, il2cpp::utils::PassThroughHash<const MethodInfo*>> SymbolMethodInfoDataMap;\n\t\tSymbolMethodInfoDataMap _methodInfos;\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/RawImage.cpp",
    "content": "\n#include \"RawImage.h\"\n\n#include <cstring>\n#include <iostream>\n\n#include \"MetadataUtil.h\"\n#include \"Opcodes.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tconst int kOptionalHeaderSize32 = 224;\n\tconst int kOptionalHeaderSize64 = 240;\n\tconst int kCliHeaderOffset32 = 208;\n\tconst int kCliHeaderOffset64 = 224;\n\n\tLoadImageErrorCode RawImage::LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize)\n\t{\n\t\tconst byte* imageData = _imageData;\n\t\tconst byte* ptr_lfanew = imageData + 0x3c;\n\t\tuint32_t lfanew = *(uint32_t*)ptr_lfanew;\n\t\tif (lfanew >= _imageLength)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\n\t\tconst byte* ptrSig = imageData + lfanew;\n\t\t/*if (ptr_sig[0] != 'P' || ptr_sig[1] != 'E' || ptr_sig[2] != 0 || ptr_sig[3] != 0)*/\n\t\tif (std::strncmp((const char*)ptrSig, \"PE\\0\\0\", 4))\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\n\t\tPEHeader* peHeader = (PEHeader*)(ptrSig + 4);\n\n\t\tbool isDll = (peHeader->characteristics & 0x2000);\n\t\t// std::cout << \"load \" << (_isDll ? \"dll\" : \"exe\") << std::endl;\n\n\t\t// optional size may be 224(32bit matchine) or 240 (64bit)\n\t\tif (peHeader->optionalHeadersize != kOptionalHeaderSize32 && peHeader->optionalHeadersize != kOptionalHeaderSize64)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\tbool is32BitFormat = peHeader->optionalHeadersize == kOptionalHeaderSize32;\n\n\n\t\tPESectionHeader* _peSectionHeaders = (PESectionHeader*)((byte*)peHeader + 20 + peHeader->optionalHeadersize);\n\n\t\tfor (uint16_t secIdx = 0; secIdx < peHeader->sections; secIdx++)\n\t\t{\n\t\t\tconst PESectionHeader* ph = _peSectionHeaders + secIdx;\n\t\t\tif ((byte*)ph >= _ptrRawDataEnd)\n\t\t\t{\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\t_sections.push_back({ ph->virtualAddress, ph->virtualAddress + ph->virtualSize, ph->ptrRawData - ph->virtualAddress });\n\t\t}\n\n\n\t\tconst PEDirEntry* ptrCLIHeaderEntry = (PEDirEntry*)(((byte*)peHeader)\n\t\t\t+ 20 /* pe header size */\n\t\t\t+ (is32BitFormat ? kCliHeaderOffset32 : kCliHeaderOffset64) /* pe optional header -> pe header data directories -> cli header */);\n\t\tuint32_t cLIHeaderOffset;\n\t\tif (!TranslateRVAToImageOffset(ptrCLIHeaderEntry->rva, cLIHeaderOffset))\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\tif (cLIHeaderOffset >= _imageLength)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\n\t\tconst CLIHeader* ptrCLIHeader = (const CLIHeader*)(imageData + cLIHeaderOffset);\n\t\tentryPointToken = ptrCLIHeader->entryPointToken;\n\t\tmetadataRva = ptrCLIHeader->metaData.rva;\n\t\tmetadataSize = ptrCLIHeader->metaData.size;\n\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n}\n}"
  },
  {
    "path": "hybridclr/metadata/RawImage.h",
    "content": "#pragma once\n\n#include \"RawImageBase.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\tclass RawImage : public RawImageBase\n\t{\n\tpublic:\n\t\tRawImage(): RawImageBase()\n\t\t{\n\n\t\t}\n\n\t\tLoadImageErrorCode LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize) override;\n\n\n\tprivate:\n\n\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/RawImageBase.cpp",
    "content": "#include \"RawImage.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tLoadImageErrorCode RawImageBase::Load(const void* rawImageData, size_t length)\n\t{\n\t\t_imageData = (const byte*)rawImageData;\n\t\t_imageLength = uint32_t(length);\n\t\t_ptrRawDataEnd = _imageData + length;\n\n\t\tuint32_t metadataRva = 0;\n\t\tuint32_t metadataSize = 0;\n\t\tLoadImageErrorCode err = LoadCLIHeader(_entryPointToken, metadataRva, metadataSize);\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\n\t\terr = LoadStreamHeaders(metadataRva, metadataSize);\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\t\terr = PostLoadStreams();\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\n#if IL2CPP_DEBUG\n\t\terr = ValidateStreams();\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n#endif\n\t\terr = LoadTables();\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\t\terr = PostLoadTables();\n\t\tif (err != LoadImageErrorCode::OK)\n\t\t{\n\t\t\treturn err;\n\t\t}\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n\tLoadImageErrorCode RawImageBase::LoadStreamHeaders(uint32_t metadataRva, uint32_t metadataSize)\n\t{\n\t\tuint32_t metaOffset;\n\t\tif (!TranslateRVAToImageOffset(metadataRva, metaOffset))\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\tif (metaOffset >= _imageLength)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\n\t\tconst MetadataRootPartial* ptrMetaRoot = (const MetadataRootPartial*)(_imageData + metaOffset);\n\t\tif (ptrMetaRoot->signature != 0x424A5342)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\t//std::cout << \"version:\" << (const char*)&(ptrMetaRoot->versionFirstByte) << std::endl;\n\t\tconst byte* ptrMetaData = (const byte*)ptrMetaRoot;\n\n\t\tuint16_t numStreamHeader = *(uint16_t*)(ptrMetaData + 16 + ptrMetaRoot->length + 2);\n\t\tconst StreamHeader* ptrStreamHeaders = (const StreamHeader*)(ptrMetaData + 16 + ptrMetaRoot->length + 4);\n\n\t\tconst StreamHeader* curSH = ptrStreamHeaders;\n\t\tconst size_t maxStreamNameSize = 16;\n\t\tfor (int i = 0; i < numStreamHeader; i++)\n\t\t{\n\t\t\t//std::cout << \"name:\" << (char*)curSH->name << \", offset:\" << curSH->offset << \", size:\" << curSH->size << std::endl;\n\n\t\t\tif (curSH->offset >= metadataSize)\n\t\t\t{\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\tCliStream* rs = nullptr;\n\t\t\tCliStream nonStandardStream;\n\t\t\tCliStream pdbStream;\n\t\t\tif (!std::strncmp(curSH->name, \"#~\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &_streamTables;\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#Strings\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &_streamStringHeap;\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#US\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &_streamUS;\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#GUID\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &_streamGuidHeap;\n\t\t\t\tif (curSH->size % 16 != 0)\n\t\t\t\t{\n\t\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#Blob\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &_streamBlobHeap;\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#-\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &nonStandardStream;\n\t\t\t}\n\t\t\telse if (!std::strncmp(curSH->name, \"#Pdb\", maxStreamNameSize))\n\t\t\t{\n\t\t\t\trs = &pdbStream;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//std::cerr << \"unknown stream name:\" << curSH->name << std::endl;\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\trs->data = ptrMetaData + curSH->offset;\n\t\t\trs->size = curSH->size;\n\t\t\trs->name = curSH->name;\n\t\t\tsize_t sizeOfStream = 8 + (std::strlen(curSH->name) / 4 + 1) * 4;\n\t\t\tcurSH = (const StreamHeader*)((byte*)curSH + sizeOfStream);\n\t\t}\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n\tLoadImageErrorCode RawImageBase::ValidateStreams() const\n\t{\n\t\t{\n\t\t\tuint32_t stringNum = 0;\n\t\t\tconst byte* cur;\n\t\t\tfor (cur = _streamStringHeap.data; cur < _streamStringHeap.data + _streamStringHeap.size; )\n\t\t\t{\n\t\t\t\t++stringNum;\n\t\t\t\t//std::cout << \"#strings.[\" << stringNum << \"]  \" << cur << std::endl;\n\t\t\t\tcur += std::strlen((const char*)cur) + 1;\n\t\t\t}\n\t\t\tif (cur != _streamStringHeap.data + _streamStringHeap.size)\n\t\t\t{\n\t\t\t\t//std::cerr << \"bad #strings\" << std::endl;\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\t//std::cout << \"=== #String. num:\" << stringNum << std::endl;\n\t\t}\n\n\n\t\t{\n\t\t\t//std::cout << \"=== #GUID. num:\" << _streamGuidHeap.size / 16 << std::endl;\n\t\t}\n\t\t{\n\t\t\tconst byte* cur;\n\t\t\tuint32_t usNum = 0;\n\t\t\tuint32_t lengthSize;\n\t\t\tfor (cur = _streamUS.data; cur < _streamUS.data + _streamUS.size;)\n\t\t\t{\n\t\t\t\t++usNum;\n\t\t\t\tuint32_t stringLength = BlobReader::ReadCompressedUint32(cur, lengthSize);\n\t\t\t\tcur += lengthSize;\n\t\t\t\t//std::cout << \"#us.[\" << usNum << \"].size:\" << stringLength << std::endl;\n\t\t\t\tcur += stringLength;\n\t\t\t}\n\t\t\tif (cur != _streamUS.data + _streamUS.size)\n\t\t\t{\n\t\t\t\t//std::cerr << \"bad #US\" << std::endl;\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\t//std::cout << \"=== #US. num:\" << usNum << std::endl;\n\t\t}\n\n\t\t{\n\t\t\tconst byte* cur;\n\t\t\tuint32_t blobNum = 0;\n\t\t\tuint32_t lengthSize;\n\t\t\tfor (cur = _streamBlobHeap.data; cur < _streamBlobHeap.data + _streamBlobHeap.size;)\n\t\t\t{\n\t\t\t\t++blobNum;\n\t\t\t\tuint32_t stringLength = BlobReader::ReadCompressedUint32(cur, lengthSize);\n\t\t\t\tcur += lengthSize;\n\t\t\t\t//std::cout << \"#blob.[\" << blobNum << \"].size:\" << stringLength << std::endl;\n\t\t\t\tcur += stringLength;\n\t\t\t}\n\t\t\tif (cur != _streamBlobHeap.data + _streamBlobHeap.size)\n\t\t\t{\n\t\t\t\t//std::cerr << \"bad #Blob\" << std::endl;\n\t\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t\t}\n\t\t\t//std::cout << \"=== #Blob. num:\" << blobNum << std::endl;\n\t\t\treturn LoadImageErrorCode::OK;\n\t\t}\n\n\t}\n\n\tLoadImageErrorCode RawImageBase::LoadTables()\n\t{\n\t\tconst TableStreamHeader* ptrTableHeader = (const TableStreamHeader*)_streamTables.data;\n\t\tif (ptrTableHeader->reserved != 0 || ptrTableHeader->majorVersion != 2 || ptrTableHeader->minorVersion != 0)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\tif ((ptrTableHeader->heapSizes & ~0x7))\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\t_4byteStringIndex = ptrTableHeader->heapSizes & 0x1;\n\t\t_4byteGUIDIndex = ptrTableHeader->heapSizes & 0x2;\n\t\t_4byteBlobIndex = ptrTableHeader->heapSizes & 0x4;\n\n\t\tuint64_t validMask = ((uint64_t)1 << TABLE_NUM) - 1;\n\t\tif (ptrTableHeader->valid & ~validMask)\n\t\t{\n\t\t\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t}\n\t\t// sorted include not exist table, so check is not need.\n\t\t//if (ptrTableHeader->sorted & ~validMask)\n\t\t//{\n\t\t//\treturn LoadImageErrorCode::BAD_IMAGE;\n\t\t//}\n\n\t\tuint32_t validTableNum = GetNotZeroBitCount(ptrTableHeader->valid);\n\t\t//std::cout << \"valid table num:\" << validTableNum << std::endl;\n\t\t//printf(\"#~ size:%0x\\n\", _streamTables.size);\n\t\tconst uint32_t* tableRowNums = (uint32_t*)(_streamTables.data + 24);\n\t\tconst byte* tableDataBegin = _streamTables.data + 24 + 4 * validTableNum;\n\n\t\t{\n\t\t\tint curValidTableIndex = 0;\n\t\t\tfor (int i = 0; i <= MAX_TABLE_INDEX; i++)\n\t\t\t{\n\t\t\t\tuint64_t mask = (uint64_t)1 << i;\n\t\t\t\t_tables[i] = {};\n\t\t\t\tif (ptrTableHeader->valid & mask)\n\t\t\t\t{\n\t\t\t\t\tuint32_t rowNum = tableRowNums[curValidTableIndex];\n\t\t\t\t\t_tables[i].rowNum = rowNum;\n\t\t\t\t\t++curValidTableIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tBuildTableRowMetas();\n\n\t\tint curValidTableIndex = 0;\n\t\tconst byte* curTableData = tableDataBegin;\n\t\tfor (int i = 0; i <= MAX_TABLE_INDEX; i++)\n\t\t{\n\t\t\tuint64_t mask = (uint64_t)1 << i;\n\t\t\tbool sorted = ptrTableHeader->sorted & mask;\n\t\t\tif (ptrTableHeader->valid & mask)\n\t\t\t{\n\t\t\t\tuint32_t rowNum = tableRowNums[curValidTableIndex];\n\t\t\t\tuint32_t totalSize = 0;\n\t\t\t\tauto& table = _tableRowMetas[i];\n\t\t\t\tfor (auto& col : table)\n\t\t\t\t{\n\t\t\t\t\tcol.offset = totalSize;\n\t\t\t\t\ttotalSize += col.size;\n\t\t\t\t}\n\t\t\t\tuint32_t metaDataRowSize = totalSize;\n\t\t\t\t//uint64_t offset = curTableData - _imageData;\n\t\t\t\t_tables[i] = { curTableData, metaDataRowSize, rowNum, true, sorted };\n\t\t\t\tcurTableData += metaDataRowSize * rowNum;\n\t\t\t\t//std::cout << \"table:\" << i << \" ,\" << curValidTableIndex << \", row_size:\" << metaDataRowSize << \", row_num:\" << rowNum << std::endl;\n\t\t\t\t//printf(\"table:[%d][%d] offset:%0llx row_size:%d row_count:%d\\n\", i, curValidTableIndex, offset, metaDataRowSize, rowNum);\n\t\t\t\t++curValidTableIndex;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t_tables[i] = { nullptr, 0, 0, false, sorted };\n\t\t\t}\n\t\t}\n\n\t\treturn LoadImageErrorCode::OK;\n\t}\n\n\tvoid RawImageBase::BuildTableRowMetas()\n\t{\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::MODULE];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::TYPEREF];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::MODULE, TableType::MODULEREF, TableType::ASSEMBLYREF, TableType::TYPEREF, TagBits::ResoulutionScope) });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::TYPEDEF];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FIELDPTR];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FIELD];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHODPTR];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHOD];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::PARAM) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::PARAMPTR];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::PARAM) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::PARAM];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::INTERFACEIMPL];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::MEMBERREF];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD, TableType::MODULEREF, TableType::TYPEDEF, TableType::TYPEREF, TagBits::MemberRefParent) });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::CONSTANT];\n\t\t\ttable.push_back({ 1 });\n\t\t\ttable.push_back({ 1 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::PARAM, TableType::FIELD, TableType::PROPERTY, TagBits::HasConstant) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::CUSTOMATTRIBUTE];\n\t\t\ttable.push_back({ ComputTableIndexByte(HasCustomAttributeAssociateTables, sizeof(HasCustomAttributeAssociateTables) / sizeof(TableType), TagBits::HasCustomAttribute) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::CustomAttributeType) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FIELDMARSHAL];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD, TableType::PARAM, TagBits::HasFieldMarshal) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::DECLSECURITY];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TableType::ASSEMBLY, TagBits::HasDeclSecurity) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::CLASSLAYOUT];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FIELDLAYOUT];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::STANDALONESIG];\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::EVENTMAP];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::EVENT) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::EVENTPTR];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::EVENT) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::EVENT];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::PROPERTYMAP];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::PROPERTY) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::PROPERTYPTR];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::PROPERTY) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::PROPERTY];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHODSEMANTICS];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::EVENT, TableType::PROPERTY, TagBits::HasSemantics) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHODIMPL];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::MODULEREF];\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::TYPESPEC];\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::IMPLMAP];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD, TableType::METHOD, TagBits::MemberForwarded) });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::MODULEREF) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FIELDRVA];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FIELD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLY];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLYPROCESSOR];\n\t\t\ttable.push_back({ 4 });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLYOS];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLYREF];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLYREFPROCESSOR];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::ASSEMBLYREF) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::ASSEMBLYREFOS];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::ASSEMBLYREF) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::FILE];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::EXPORTEDTYPE];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FILE, TableType::EXPORTEDTYPE, TableType::ASSEMBLY, TagBits::Implementation) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::MANIFESTRESOURCE];\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::FILE, TableType::ASSEMBLYREF, TagBits::Implementation) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::NESTEDCLASS];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::GENERICPARAM];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TagBits::TypeOrMethodDef) });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHODSPEC];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::GENERICPARAMCONSTRAINT];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::GENERICPARAM) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::DOCUMENT];\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::METHODDEBUGINFORMATION];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::DOCUMENT) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::LOCALSCOPE];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::IMPORTSCOPE) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::LOCALVARIABLE) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::LOCALCONSTANT) });\n\t\t\ttable.push_back({ 4 });\n\t\t\ttable.push_back({ 4 });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::LOCALVARIABLE];\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ 2 });\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::LOCALCONSTANT];\n\t\t\ttable.push_back({ ComputStringIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::IMPORTSCOPE];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::IMPORTSCOPE) });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::STATEMACHINEMETHOD];\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t\ttable.push_back({ ComputTableIndexByte(TableType::METHOD) });\n\t\t}\n\t\t{\n\t\t\tauto& table = _tableRowMetas[(int)TableType::CUSTOMDEBUGINFORMATION];\n\t\t\ttable.push_back({ ComputTableIndexByte(HasCustomDebugInformation, sizeof(HasCustomDebugInformation) / sizeof(TableType), TagBits::HasCustomDebugInformation) });\n\t\t\ttable.push_back({ ComputGUIDIndexByte() });\n\t\t\ttable.push_back({ ComputBlobIndexByte() });\n\t\t}\n\n\n\t\tfor (int i = 0; i < TABLE_NUM; i++)\n\t\t{\n\t\t\tauto& table = _tableRowMetas[i];\n\t\t\tif (table.empty())\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(_tables[i].rowNum == 0 && _tables[i].rowMetaDataSize == 0);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tuint32_t totalSize = 0;\n\t\t\t\tfor (auto& col : table)\n\t\t\t\t{\n\t\t\t\t\tcol.offset = totalSize;\n\t\t\t\t\ttotalSize += col.size;\n\t\t\t\t}\n\t\t\t\tuint32_t computSize = ComputTableRowMetaDataSize((TableType)i);\n\t\t\t\tIL2CPP_ASSERT(totalSize == computSize);\n\t\t\t}\n\t\t}\n\t}\n\n\tuint32_t RawImageBase::ComputTableRowMetaDataSize(TableType tableIndex) const\n\t{\n\t\tswitch (tableIndex)\n\t\t{\n\t\tcase TableType::MODULE: return 2 + ComputStringIndexByte() + ComputGUIDIndexByte() * 3;\n\t\tcase TableType::TYPEREF: return ComputTableIndexByte(TableType::MODULE, TableType::MODULEREF, TableType::ASSEMBLYREF, TableType::TYPEREF, TagBits::ResoulutionScope)\n\t\t\t+ ComputStringIndexByte() * 2;\n\t\tcase TableType::TYPEDEF: return 4 + ComputStringIndexByte() * 2\n\t\t\t+ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef)\n\t\t\t+ ComputTableIndexByte(TableType::FIELD)\n\t\t\t+ ComputTableIndexByte(TableType::METHOD);\n\t\tcase TableType::FIELDPTR: return ComputTableIndexByte(TableType::FIELD);\n\t\tcase TableType::FIELD: return 2 + ComputStringIndexByte() + ComputBlobIndexByte();\n\t\tcase TableType::METHODPTR: return ComputTableIndexByte(TableType::METHOD);\n\t\tcase TableType::METHOD: return 4 + 2 + 2 + ComputStringIndexByte() + ComputBlobIndexByte() + ComputTableIndexByte(TableType::PARAM);\n\t\tcase TableType::PARAMPTR: return ComputTableIndexByte(TableType::PARAM);\n\t\tcase TableType::PARAM: return 2 + 2 + ComputStringIndexByte();\n\t\tcase TableType::INTERFACEIMPL: return ComputTableIndexByte(TableType::TYPEDEF)\n\t\t\t+ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef);\n\t\tcase TableType::MEMBERREF: return ComputTableIndexByte(TableType::METHOD, TableType::MODULEREF, TableType::TYPEDEF, TableType::TYPEREF, TagBits::MemberRefParent)\n\t\t\t+ ComputStringIndexByte() + ComputBlobIndexByte();\n\t\tcase TableType::CONSTANT: return 2\n\t\t\t+ ComputTableIndexByte(TableType::PARAM, TableType::FIELD, TableType::PROPERTY, TagBits::HasConstant)\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::CUSTOMATTRIBUTE: return ComputTableIndexByte(HasCustomAttributeAssociateTables, sizeof(HasCustomAttributeAssociateTables) / sizeof(TableType), TagBits::HasCustomAttribute)\n\t\t\t+ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::CustomAttributeType)\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::FIELDMARSHAL: return ComputTableIndexByte(TableType::FIELD, TableType::PARAM, TagBits::HasFieldMarshal)\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::DECLSECURITY: return 2 + ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TableType::ASSEMBLY, TagBits::HasDeclSecurity)\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::CLASSLAYOUT: return 2 + 4 + ComputTableIndexByte(TableType::TYPEDEF);\n\t\tcase TableType::FIELDLAYOUT: return 4 + ComputTableIndexByte(TableType::FIELD);\n\t\tcase TableType::STANDALONESIG: return ComputBlobIndexByte();\n\t\tcase TableType::EVENTMAP: return ComputTableIndexByte(TableType::TYPEDEF) + ComputTableIndexByte(TableType::EVENT);\n\t\tcase TableType::EVENTPTR: return ComputTableIndexByte(TableType::EVENT);\n\t\tcase TableType::EVENT: return 2\n\t\t\t+ ComputStringIndexByte()\n\t\t\t+ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef);\n\t\tcase TableType::PROPERTYMAP: return ComputTableIndexByte(TableType::TYPEDEF)\n\t\t\t+ ComputTableIndexByte(TableType::PROPERTY);\n\t\tcase TableType::PROPERTYPTR: return ComputTableIndexByte(TableType::PROPERTY);\n\t\tcase TableType::PROPERTY: return 2 + ComputStringIndexByte() + ComputBlobIndexByte();\n\t\tcase TableType::METHODSEMANTICS: return 2\n\t\t\t+ ComputTableIndexByte(TableType::METHOD)\n\t\t\t+ ComputTableIndexByte(TableType::EVENT, TableType::PROPERTY, TagBits::HasSemantics);\n\t\tcase TableType::METHODIMPL: return ComputTableIndexByte(TableType::TYPEDEF)\n\t\t\t+ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef)\n\t\t\t+ ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef);\n\t\tcase TableType::MODULEREF: return ComputStringIndexByte();\n\t\tcase TableType::TYPESPEC: return ComputBlobIndexByte();\n\t\tcase TableType::IMPLMAP: return 2\n\t\t\t+ ComputTableIndexByte(TableType::FIELD, TableType::METHOD, TagBits::MemberForwarded)\n\t\t\t+ ComputStringIndexByte()\n\t\t\t+ ComputTableIndexByte(TableType::MODULEREF);\n\t\tcase TableType::FIELDRVA: return 4 + ComputTableIndexByte(TableType::FIELD);\n\t\tcase TableType::ENCLOG: return 4 + 4;\n\t\tcase TableType::ENCMAP: return 4;\n\t\tcase TableType::ASSEMBLY: return 4 + 4 * 2 + 4\n\t\t\t+ ComputBlobIndexByte()\n\t\t\t+ ComputStringIndexByte() * 2;\n\t\tcase TableType::ASSEMBLYPROCESSOR: return 4;\n\t\tcase TableType::ASSEMBLYOS: return 4 + 4 + 4;\n\t\tcase TableType::ASSEMBLYREF: return 2 * 4 + 4\n\t\t\t+ ComputBlobIndexByte()\n\t\t\t+ ComputStringIndexByte() * 2\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::ASSEMBLYREFPROCESSOR: return 4 + ComputTableIndexByte(TableType::ASSEMBLYREF);\n\t\tcase TableType::ASSEMBLYREFOS: return 4 * 3 + ComputTableIndexByte(TableType::ASSEMBLYREF);\n\t\tcase TableType::FILE: return 4 + ComputStringIndexByte() + ComputBlobIndexByte();\n\t\tcase TableType::EXPORTEDTYPE: return 4 + 4\n\t\t\t+ ComputStringIndexByte() * 2\n\t\t\t+ ComputTableIndexByte(TableType::FILE, TableType::EXPORTEDTYPE, TableType::ASSEMBLY, TagBits::Implementation);\n\t\tcase TableType::MANIFESTRESOURCE: return 4 + 4\n\t\t\t+ ComputStringIndexByte()\n\t\t\t+ ComputTableIndexByte(TableType::FILE, TableType::ASSEMBLYREF, TagBits::Implementation);\n\t\tcase TableType::NESTEDCLASS: return ComputTableIndexByte(TableType::TYPEDEF) * 2;\n\t\tcase TableType::GENERICPARAM: return 2 + 2\n\t\t\t+ ComputTableIndexByte(TableType::TYPEDEF, TableType::METHOD, TagBits::TypeOrMethodDef)\n\t\t\t+ ComputStringIndexByte();\n\t\tcase TableType::METHODSPEC: return ComputTableIndexByte(TableType::METHOD, TableType::MEMBERREF, TagBits::MethodDefOrRef)\n\t\t\t+ ComputBlobIndexByte();\n\t\tcase TableType::GENERICPARAMCONSTRAINT: return ComputTableIndexByte(TableType::GENERICPARAM)\n\t\t\t+ ComputTableIndexByte(TableType::TYPEDEF, TableType::TYPEREF, TableType::TYPESPEC, TagBits::TypeDefOrRef);\n\t\tcase TableType::UNUSED8:\n\t\tcase TableType::UNUSED9:\n\t\tcase TableType::UNUSED10:\n\t\t\tLogPanic(\"unused table type\");\n\t\t\treturn 0;\n\t\tcase TableType::DOCUMENT: return ComputBlobIndexByte() + ComputGUIDIndexByte() + ComputBlobIndexByte() + ComputGUIDIndexByte();\n\t\tcase TableType::METHODDEBUGINFORMATION: return ComputTableIndexByte(TableType::DOCUMENT) + ComputBlobIndexByte();\n\t\tcase TableType::LOCALSCOPE:  return ComputTableIndexByte(TableType::METHOD) + ComputTableIndexByte(TableType::IMPORTSCOPE)\n\t\t\t+ ComputTableIndexByte(TableType::LOCALVARIABLE) + ComputTableIndexByte(TableType::LOCALCONSTANT) + 4 + 4;\n\t\tcase TableType::LOCALVARIABLE: return 2 + 2 + ComputStringIndexByte();\n\t\tcase TableType::LOCALCONSTANT: return ComputStringIndexByte() + ComputBlobIndexByte();\n\t\tcase TableType::IMPORTSCOPE: return ComputTableIndexByte(TableType::IMPORTSCOPE) + ComputBlobIndexByte();\n\t\tcase TableType::STATEMACHINEMETHOD: return ComputTableIndexByte(TableType::METHOD) * 2;\n\t\tcase TableType::CUSTOMDEBUGINFORMATION: return ComputTableIndexByte(HasCustomDebugInformation, sizeof(HasCustomDebugInformation) / sizeof(TableType), TagBits::HasCustomDebugInformation)\n\t\t\t+ ComputGUIDIndexByte() + ComputBlobIndexByte();\n\t\tdefault:\n\t\t\tLogPanic(\"unknown table type\");\n\t\t\treturn 0;\n\t\t}\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/metadata/RawImageBase.h",
    "content": "#pragma once\n\n#include \"../CommonDef.h\"\n\n#include \"vm/String.h\"\n\n#include \"MetadataDef.h\"\n#include \"BlobReader.h\"\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tenum class LoadImageErrorCode\n\t{\n\t\tOK = 0,\n\t\tBAD_IMAGE,\n\t\tNOT_IMPLEMENT,\n\t\tAOT_ASSEMBLY_NOT_FIND,\n\t\tHOMOLOGOUS_ONLY_SUPPORT_AOT_ASSEMBLY,\n\t\tHOMOLOGOUS_ASSEMBLY_HAS_BEEN_LOADED,\n\t\tINVALID_HOMOLOGOUS_MODE,\n\t\tPDB_BAD_FILE,\n\t\tUNKNOWN_IMAGE_FORMAT,\n\t\tUNSUPPORT_FORMAT_VERSION,\n\t\tUNMATCH_FORMAT_VARIANT,\n\t};\n\n\tclass RawImageBase\n\t{\n\tpublic:\n\t\tRawImageBase() : _imageData(nullptr), _imageLength(0), _ptrRawDataEnd(nullptr),\n\t\t\t_streamStringHeap{}, _streamUS{}, _streamBlobHeap{}, _streamGuidHeap{}, _streamTables{},\n\t\t\t_4byteStringIndex(false), _4byteGUIDIndex(false), _4byteBlobIndex(false)\n\t\t{\n\n\t\t}\n\n\t\tvirtual ~RawImageBase()\n\t\t{\n\t\t\tif (_imageData)\n\t\t\t{\n\t\t\t\tHYBRIDCLR_FREE((void*)_imageData);\n\t\t\t\t_imageData = nullptr;\n\t\t\t}\n\t\t}\n\t\tvirtual LoadImageErrorCode Load(const void* imageData, size_t length);\n\t\tvirtual LoadImageErrorCode PostLoadStreams() { return LoadImageErrorCode::OK; }\n\t\tvirtual LoadImageErrorCode PostLoadTables() { return LoadImageErrorCode::OK; }\n\n\t\tvirtual Il2CppString* GetUserStringBlogByIndex(uint32_t index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(index >= 0 && (uint32_t)index < _streamUS.size);\n\t\t\tconst byte* str = _streamUS.data + index;\n\t\t\tuint32_t lengthSize;\n\t\t\tuint32_t stringLength = BlobReader::ReadCompressedUint32(str, lengthSize);\n\t\t\treturn CreateUserString((const char*)(str + lengthSize), stringLength);\n\t\t}\n\n\t\tconst char* GetStringFromRawIndex(StringIndex index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(index) == 0);\n\t\t\tIL2CPP_ASSERT(index >= 0 && (uint32_t)index < _streamStringHeap.size);\n\t\t\treturn (const char*)(_streamStringHeap.data + index);\n\t\t}\n\n\t\tconst byte* GetBlobFromRawIndex(StringIndex index) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(index) == 0);\n\t\t\tIL2CPP_ASSERT(index == 0 || (index > 0 && (size_t)index < _streamBlobHeap.size));\n\t\t\treturn _streamBlobHeap.data + index;\n\t\t}\n\n\t\tconst uint8_t* GetFieldOrParameterDefalutValueByRawIndex(uint32_t index) const\n\t\t{\n\t\t\treturn _imageData + index;\n\t\t}\n\n\t\tstatic BlobReader DecodeBlob(const byte* buf)\n\t\t{\n\t\t\tuint32_t sizeLength;\n\t\t\tuint32_t length = BlobReader::ReadCompressedUint32(buf, sizeLength);\n\t\t\treturn BlobReader(buf + sizeLength, length);\n\t\t}\n\n\t\tBlobReader GetBlobReaderByRawIndex(uint32_t rawIndex) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(DecodeImageIndex(rawIndex) == 0);\n\t\t\tconst byte* buf = _streamBlobHeap.data + rawIndex;\n\t\t\treturn DecodeBlob(buf);\n\t\t}\n\n\t\tuint32_t GetImageOffsetOfBlob(Il2CppTypeEnum type, uint32_t index) const\n\t\t{\n\t\t\tif (type != IL2CPP_TYPE_STRING)\n\t\t\t{\n\t\t\t\treturn (uint32_t)(GetBlobReaderByRawIndex(index).GetData() - _imageData);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn (uint32_t)(_streamBlobHeap.data + index - _imageData);\n\t\t\t}\n\t\t}\n\n\t\tconst byte* GetDataPtrByImageOffset(uint32_t imageOffset) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(imageOffset < _imageLength);\n\t\t\treturn _imageData + imageOffset;\n\t\t}\n\n\n\t\tuint32_t GetEntryPointToken() const\n\t\t{\n\t\t\treturn _entryPointToken;\n\t\t}\n\n\n\t\tconst Table& GetTable(TableType type) const\n\t\t{\n\t\t\treturn _tables[(int)type];\n\t\t}\n\n\t\tuint32_t GetTableRowNum(TableType tableIndex) const\n\t\t{\n\t\t\treturn _tables[(int)tableIndex].rowNum;\n\t\t}\n\n\t\tbool TranslateRVAToImageOffset(uint32_t rvaOffset, uint32_t& imageOffset) const\n\t\t{\n\t\t\tfor (const SectionHeader& sh : _sections)\n\t\t\t{\n\t\t\t\tif (sh.virtualAddressBegin <= rvaOffset && rvaOffset < sh.virtualAddressEnd)\n\t\t\t\t{\n\t\t\t\t\timageOffset = sh.ptrRawDataRelatedToVirtualAddress + rvaOffset;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tvirtual LoadImageErrorCode LoadStreamHeaders(uint32_t metadataRva, uint32_t metadataSize);\n\t\tvirtual LoadImageErrorCode ValidateStreams() const;\n\t\tvirtual LoadImageErrorCode LoadTables();\n\n\t\tvirtual void BuildTableRowMetas();\n\n\t\tuint32_t ComputTableRowMetaDataSize(TableType tableIndex) const;\n\n\t\tuint32_t ComputStringIndexByte() const\n\t\t{\n\t\t\treturn _4byteStringIndex ? 4 : 2;\n\t\t}\n\n\t\tuint32_t ComputGUIDIndexByte() const\n\t\t{\n\t\t\treturn _4byteGUIDIndex ? 4 : 2;\n\t\t}\n\n\t\tuint32_t ComputBlobIndexByte() const\n\t\t{\n\t\t\treturn _4byteBlobIndex ? 4 : 2;\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(TableType tableIndex) const\n\t\t{\n\t\t\treturn _tables[(int)tableIndex].rowNum < 65536 ? 2 : 4;\n\t\t}\n\n\t\tuint32_t ComputIndexByte(uint32_t maxRowNum, uint32_t tagBitNum) const\n\t\t{\n\t\t\treturn (maxRowNum << tagBitNum) < 65536 ? 2 : 4;\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(TableType t1, TableType t2, uint32_t tagBitNum) const\n\t\t{\n\t\t\tuint32_t n = GetTableRowNum(t1);\n\t\t\tn = std::max(n, GetTableRowNum(t2));\n\t\t\treturn ComputIndexByte(n, tagBitNum);\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(TableType t1, TableType t2, TableType t3, uint32_t tagBitNum) const\n\t\t{\n\t\t\tuint32_t n = GetTableRowNum(t1);\n\t\t\tn = std::max(n, GetTableRowNum(t2));\n\t\t\tn = std::max(n, GetTableRowNum(t3));\n\t\t\treturn ComputIndexByte(n, tagBitNum);\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(TableType t1, TableType t2, TableType t3, TableType t4, uint32_t tagBitNum) const\n\t\t{\n\t\t\tuint32_t n = GetTableRowNum(t1);\n\t\t\tn = std::max(n, GetTableRowNum(t2));\n\t\t\tn = std::max(n, GetTableRowNum(t3));\n\t\t\tn = std::max(n, GetTableRowNum(t4));\n\t\t\treturn ComputIndexByte(n, tagBitNum);\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(TableType t1, TableType t2, TableType t3, TableType t4, TableType t5, uint32_t tagBitNum) const\n\t\t{\n\t\t\tuint32_t n = GetTableRowNum(t1);\n\t\t\tn = std::max(n, GetTableRowNum(t2));\n\t\t\tn = std::max(n, GetTableRowNum(t3));\n\t\t\tn = std::max(n, GetTableRowNum(t4));\n\t\t\tn = std::max(n, GetTableRowNum(t5));\n\t\t\treturn ComputIndexByte(n, tagBitNum);\n\t\t}\n\n\t\tuint32_t ComputTableIndexByte(const TableType* ts, int num, uint32_t tagBitNum) const\n\t\t{\n\t\t\tuint32_t n = 0;\n\t\t\tfor (int i = 0; i < num; i++)\n\t\t\t{\n\t\t\t\tn = std::max(n, GetTableRowNum(ts[i]));\n\t\t\t}\n\t\t\treturn ComputIndexByte(n, tagBitNum);\n\t\t}\n\n\tprotected:\n\t\tvirtual LoadImageErrorCode LoadCLIHeader(uint32_t& entryPointToken, uint32_t& metadataRva, uint32_t& metadataSize) = 0;\n\n\t\tconst byte* GetTableRowPtr(TableType type, uint32_t rawIndex) const\n\t\t{\n\t\t\tauto& tb = _tables[(int)type];\n\t\t\tIL2CPP_ASSERT(rawIndex > 0 && rawIndex <= tb.rowNum);\n\t\t\treturn tb.data + tb.rowMetaDataSize * (rawIndex - 1);\n\t\t}\n\n\t\tconst std::vector<ColumnOffsetSize>& GetRowSchema(TableType type) const\n\t\t{\n\t\t\treturn _tableRowMetas[(int)type];\n\t\t}\n\n\t\tuint32_t ReadColumn(const byte* rowPtr, const ColumnOffsetSize& columnMt) const\n\t\t{\n\t\t\treturn ReadColumn(rowPtr, columnMt.offset, columnMt.size);\n\t\t}\n\n\t\tuint32_t ReadColumn(const byte* data, uint32_t offset, uint32_t size) const\n\t\t{\n\t\t\tconst byte* dataPtr = data + offset;\n\t\t\tswitch (size)\n\t\t\t{\n\t\t\tcase 1: return *dataPtr;\n\t\t\tcase 2: return GetU2LittleEndian(dataPtr);\n\t\t\tcase 4: return GetU4LittleEndian(dataPtr);\n\t\t\tdefault: IL2CPP_ASSERT(false); return 0;\n\t\t\t}\n\t\t}\n\n\t\tvoid ReadColumn(const byte* rowPtr, const ColumnOffsetSize& columnMt, uint8_t& value) const\n\t\t{\n            IL2CPP_ASSERT(columnMt.size == 1);\n\t\t\tconst byte* dataPtr = rowPtr + columnMt.offset;\n\t\t\tvalue = *dataPtr;\n\t\t}\n\n\t\tvoid ReadColumn(const byte* rowPtr, const ColumnOffsetSize& columnMt, uint32_t& value) const\n\t\t{\n\t\t\tIL2CPP_ASSERT(columnMt.size == 2 || columnMt.size == 4);\n\t\t\tconst byte* dataPtr = rowPtr + columnMt.offset;\n\t\t\tvalue = columnMt.size == 2 ? GetU2LittleEndian(dataPtr) : GetU4LittleEndian(dataPtr);\n\t\t}\n\n\t\tstatic Il2CppString* CreateUserString(const char* str, uint32_t length)\n\t\t{\n\t\t\tif (length == 0)\n\t\t\t{\n\t\t\t\treturn il2cpp::vm::String::Empty();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(length % 2 == 1);\n\t\t\t\tUserStringEncoding charEncoding = (UserStringEncoding)str[length - 1];\n\t\t\t\treturn il2cpp::vm::String::NewUtf16((const Il2CppChar*)str, (length - 1) / 2);\n\t\t\t}\n\t\t}\n\n\tpublic:\n\n#define TABLE_BEGIN(name, tableType) virtual Tb##name Read##name(uint32_t rawIndex) \\\n        { \\\n        IL2CPP_ASSERT(rawIndex > 0 && rawIndex <= GetTable(tableType).rowNum); \\\n        const byte* rowPtr = GetTableRowPtr(tableType, rawIndex); \\\n        auto& rowSchema = GetRowSchema(tableType); \\\n        uint32_t __fieldIndex = 0; \\\n        Tb##name __r = {};\n\n#define __F(fieldName) const ColumnOffsetSize& col_##fieldName = rowSchema[__fieldIndex++]; \\\n        __r.fieldName = ReadColumn(rowPtr, col_##fieldName);\n\n#define TABLE_END return __r; \\\n        }\n\n#define TABLE1(name, tableType, f1) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\nTABLE_END\n\n#define TABLE2(name, tableType, f1, f2) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\n__F(f2) \\\nTABLE_END\n\n#define TABLE3(name, tableType, f1, f2, f3) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\n__F(f2) \\\n__F(f3) \\\nTABLE_END\n\n#define TABLE4(name, tableType, f1, f2, f3, f4) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\n__F(f2) \\\n__F(f3) \\\n__F(f4) \\\nTABLE_END\n\n#define TABLE5(name, tableType, f1, f2, f3, f4, f5) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\n__F(f2) \\\n__F(f3) \\\n__F(f4) \\\n__F(f5) \\\nTABLE_END\n\n#define TABLE6(name, tableType, f1, f2, f3, f4, f5, f6) TABLE_BEGIN(name, tableType) \\\n__F(f1) \\\n__F(f2) \\\n__F(f3) \\\n__F(f4) \\\n__F(f5) \\\n__F(f6) \\\nTABLE_END\n\n\tTABLE5(Module, TableType::MODULE, generation, name, mvid, encid, encBaseId)\n\tTABLE3(TypeRef, TableType::TYPEREF, resolutionScope, typeName, typeNamespace)\n\tTABLE6(TypeDef, TableType::TYPEDEF, flags, typeName, typeNamespace, extends, fieldList, methodList)\n\tTABLE1(TypeSpec, TableType::TYPESPEC, signature);\n\tTABLE4(ImplMap, TableType::IMPLMAP, mappingFlags, memberForwarded, importName, importScope)\n\tTABLE1(ModuleRef, TableType::MODULEREF, name)\n\tTABLE3(Field, TableType::FIELD, flags, name, signature)\n\tTABLE4(GenericParam, TableType::GENERICPARAM, number, flags, owner, name)\n\tTABLE2(GenericParamConstraint, TableType::GENERICPARAMCONSTRAINT, owner, constraint)\n\tTABLE3(MemberRef, TableType::MEMBERREF, classIdx, name, signature)\n\tTABLE1(StandAloneSig, TableType::STANDALONESIG, signature)\n\tTABLE3(MethodImpl, TableType::METHODIMPL, classIdx, methodBody, methodDeclaration)\n\tTABLE2(FieldRVA, TableType::FIELDRVA, rva, field)\n\tTABLE2(FieldLayout, TableType::FIELDLAYOUT, offset, field)\n\tTABLE4(Constant, TableType::CONSTANT, type, padding, parent, value)\n\tTABLE2(MethodSpec, TableType::METHODSPEC, method, instantiation)\n\tTABLE3(CustomAttribute, TableType::CUSTOMATTRIBUTE, parent, type, value)\n\tTABLE2(PropertyMap, TableType::PROPERTYMAP, parent, propertyList)\n\tTABLE3(Property, TableType::PROPERTY, flags, name, type)\n\tTABLE2(EventMap, TableType::EVENTMAP, parent, eventList)\n\tTABLE3(Event, TableType::EVENT, eventFlags, name, eventType)\n\tTABLE3(MethodSemantics, TableType::METHODSEMANTICS, semantics, method, association)\n\n\tTABLE2(NestedClass, TableType::NESTEDCLASS, nestedClass, enclosingClass)\n\tTABLE6(Method, TableType::METHOD, rva, implFlags, flags, name, signature, paramList)\n\tTABLE3(Param, TableType::PARAM, flags, sequence, name)\n\n\tTABLE3(ClassLayout, TableType::CLASSLAYOUT, packingSize, classSize, parent)\n\tTABLE2(InterfaceImpl, TableType::INTERFACEIMPL, classIdx, interfaceIdx)\n\n\tTABLE_BEGIN(Assembly, TableType::ASSEMBLY)\n\t__F(hashAlgId)\n\t__F(majorVersion)\n\t__F(minorVersion)\n\t__F(buildNumber)\n\t__F(revisionNumber)\n\t__F(flags)\n\t__F(publicKey)\n\t__F(name)\n\t__F(locale)\n\tTABLE_END\n\n\n\tTABLE_BEGIN(AssemblyRef, TableType::ASSEMBLYREF)\n\t__F(majorVersion)\n\t__F(minorVersion)\n\t__F(buildNumber)\n\t__F(revisionNumber)\n\t__F(flags)\n\t__F(publicKeyOrToken)\n\t__F(name)\n\t__F(locale)\n\t__F(hashValue)\n\tTABLE_END\n\n\tTABLE4(Document, TableType::DOCUMENT, name, hashAlgorithm, hash, language)\n\tTABLE2(MethodDebugInformation, TableType::METHODDEBUGINFORMATION, document, sequencePoints)\n\tTABLE6(LocalScope, TableType::LOCALSCOPE, method, importScope, variables, constants, startOffset, length)\n\tTABLE3(LocalVariable, TableType::LOCALVARIABLE, attributes, index, name)\n\tTABLE2(LocalConstant, TableType::LOCALCONSTANT, name, signature)\n\tTABLE2(ImportScope, TableType::IMPORTSCOPE, parent, imports)\n\tTABLE2(StateMachineMethod, TableType::STATEMACHINEMETHOD, moveNextMethod, kickoffMethod)\n\tTABLE3(CustomDebugInformation, TableType::CUSTOMDEBUGINFORMATION, parent, kind, value)\n\n\n\tprotected:\n\t\tconst byte* _imageData;\n\t\tuint32_t _imageLength;\n\t\tconst byte* _ptrRawDataEnd;\n\n\t\tstd::vector<SectionHeader> _sections;\n\n\n\t\tuint32_t _entryPointToken;\n\n\t\tCliStream _streamStringHeap;\n\t\tCliStream _streamUS;\n\t\tCliStream _streamBlobHeap;\n\t\tCliStream _streamGuidHeap;\n\t\tCliStream _streamTables;\n\n\t\tbool _4byteStringIndex;\n\t\tbool _4byteGUIDIndex;\n\t\tbool _4byteBlobIndex;\n\n\t\tTable _tables[TABLE_NUM];\n\t\tstd::vector<ColumnOffsetSize> _tableRowMetas[TABLE_NUM];\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/metadata/SuperSetAOTHomologousImage.cpp",
    "content": "#include \"SuperSetAOTHomologousImage.h\"\n\n#include \"vm/MetadataLock.h\"\n#include \"vm/GlobalMetadata.h\"\n#include \"vm/Class.h\"\n#include \"vm/Image.h\"\n#include \"vm/Exception.h\"\n#include \"vm/MetadataCache.h\"\n#include \"metadata/GenericMetadata.h\"\n#include \"MetadataPool.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n\n\n\tconst Il2CppMethodDefinition* FindMatchMethod(const Il2CppTypeDefinition* aotTypeDef, const SuperSetMethodDefDetail& method2, const char* methodName, const MethodRefSig& methodSignature)\n\t{\n\t\tconst Il2CppGenericContainer* klassGenContainer = aotTypeDef->genericContainerIndex != kGenericContainerIndexInvalid ?\n\t\t\t(const Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(aotTypeDef->genericContainerIndex) : nullptr;\n\t\tfor (uint16_t i = 0; i < aotTypeDef->method_count; i++)\n\t\t{\n\t\t\t//const MethodInfo* method1 = klass1->methods[i];\n\t\t\tconst Il2CppMethodDefinition* aotMethodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromIndex(aotTypeDef->methodStart + i);\n\t\t\tconst char* aotMethodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(aotMethodDef->nameIndex);\n\t\t\tif (std::strcmp(aotMethodName, methodName))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (IsMatchMethodSig(aotMethodDef, methodSignature, klassGenContainer))\n\t\t\t{\n\t\t\t\treturn aotMethodDef;\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\n\tconst Il2CppFieldDefinition* FindMatchField(const Il2CppTypeDefinition* aotTypeDef, const SuperSetFieldDefDetail& field2, const char* fieldName, const Il2CppType* fieldType)\n\t{\n\t\tconst Il2CppGenericContainer* klassGenContainer = aotTypeDef->genericContainerIndex != kGenericContainerIndexInvalid ?\n\t\t\t(const Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(aotTypeDef->genericContainerIndex) : nullptr;\n\t\tfor (uint16_t i = 0; i < aotTypeDef->field_count; i++)\n\t\t{\n\t\t\t//const FieldInfo* field1 = klass1->fields + i;\n\t\t\tconst Il2CppFieldDefinition* aotField = il2cpp::vm::GlobalMetadata::GetFieldDefinitionFromTypeDefAndFieldIndex(aotTypeDef, i);\n\t\t\tconst char* aotFieldName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(aotField->nameIndex);\n\t\t\tif (std::strcmp(aotFieldName, fieldName))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst Il2CppType* aotFieldType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(aotField->typeIndex);\n\t\t\tif (IsMatchSigType(aotFieldType, fieldType, klassGenContainer, nullptr))\n\t\t\t{\n\t\t\t\treturn aotField;\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitRuntimeMetadatas()\n\t{\n\t\t_defaultIl2CppType = &il2cpp_defaults.missing_class->byval_arg;\n\n\t\tstd::vector< SuperSetTypeIntermediateInfo> typeIntermediateInfos;\n\t\tInitTypes0(typeIntermediateInfos);\n\t\tInitNestedClass(typeIntermediateInfos);\n\t\tInitTypes1(typeIntermediateInfos);\n\n\t\tInitMethods(typeIntermediateInfos);\n\t\tInitFields(typeIntermediateInfos);\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitTypes0(std::vector< SuperSetTypeIntermediateInfo>& typeIntermediateInfos)\n\t{\n\t\tconst Table& typeDefTb = _rawImage->GetTable(TableType::TYPEDEF);\n\t\tuint32_t typeCount = typeDefTb.rowNum;\n\t\ttypeIntermediateInfos.resize(typeCount);\n\t\t_typeDefs.resize(typeCount);\n\t\t_aotTypeIndex2TypeDefs.resize(typeCount);\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitNestedClass(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos)\n\t{\n\t\tconst Table& nestedClassTb = _rawImage->GetTable(TableType::NESTEDCLASS);\n\t\tfor (uint32_t i = 0; i < nestedClassTb.rowNum; i++)\n\t\t{\n\t\t\tTbNestedClass data = _rawImage->ReadNestedClass(i + 1);\n\t\t\tSuperSetTypeIntermediateInfo& nestedType = typeIntermediateInfos[data.nestedClass - 1];\n\t\t\tnestedType.homoParentRowIndex = data.enclosingClass;\n\t\t}\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitType(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos, SuperSetTypeIntermediateInfo& type)\n\t{\n\t\tif (type.inited)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\ttype.inited = true;\n\t\tuint32_t rowIndex = (uint32_t)(&type - &typeIntermediateInfos[0] + 1);\n\t\tTbTypeDef data = _rawImage->ReadTypeDef(rowIndex);\n\n\t\ttype.homoMethodStartIndex = data.methodList;\n\t\ttype.homoFieldStartIndex = data.fieldList;\n\n\t\tconst char* name = _rawImage->GetStringFromRawIndex(data.typeName);\n\t\tconst char* namespaze = _rawImage->GetStringFromRawIndex(data.typeNamespace);\n\t\tif (type.homoParentRowIndex)\n\t\t{\n\t\t\tSuperSetTypeIntermediateInfo& parent = typeIntermediateInfos[type.homoParentRowIndex - 1];\n\t\t\tInitType(typeIntermediateInfos, parent);\n\t\t\tconst Il2CppTypeDefinition* parentTypeDef = parent.aotTypeDef;\n\t\t\tif (parentTypeDef == nullptr)\n\t\t\t{\n\t\t\t\tgoto labelInitDefault;\n\t\t\t}\n\n\t\t\tvoid* iter = nullptr;\n\t\t\tfor (const Il2CppTypeDefinition* nextTypeDef; (nextTypeDef = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetNestedTypes((Il2CppMetadataTypeHandle)parentTypeDef, &iter));)\n\t\t\t{\n\t\t\t\tconst char* nestedTypeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(nextTypeDef->nameIndex);\n\t\t\t\tIL2CPP_ASSERT(nestedTypeName);\n\t\t\t\tif (!std::strcmp(name, nestedTypeName))\n\t\t\t\t{\n\t\t\t\t\ttype.aotTypeDef = nextTypeDef;\n\t\t\t\t\t//type.aotTypeIndex = nextTypeDef->byvalTypeIndex;\n\t\t\t\t\ttype.aotIl2CppType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(nextTypeDef->byvalTypeIndex);\n\t\t\t\t\t//type.aotKlass = il2cpp::vm::GlobalMetadata::GetTypeInfoFromHandle((Il2CppMetadataTypeHandle)nextTypeDef);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst Il2CppTypeDefinition* aotTypeDef = (const Il2CppTypeDefinition*)il2cpp::vm::Image::TypeHandleFromName(_targetAssembly->image, namespaze, name);\n\t\t\tif (aotTypeDef)\n\t\t\t{\n\t\t\t\ttype.aotTypeDef = aotTypeDef;\n\t\t\t\ttype.aotIl2CppType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(aotTypeDef->byvalTypeIndex);\n\t\t\t\t//type.aotTypeIndex = type.aotTypeDef->byvalTypeIndex;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tlabelInitDefault:\n\t\ttype.aotIl2CppType = _defaultIl2CppType;\n\t\t//TEMP_FORMAT(msg, \"type: %s::%s can't find homologous type in assembly:%s\", type.namespaze, type.name, _targetAssembly->aname.name);\n\t\t//RaiseExecutionEngineException(msg);\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitTypes1(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos)\n\t{\n\t\tfor (SuperSetTypeIntermediateInfo& td : typeIntermediateInfos)\n\t\t{\n\t\t\t//uint32_t rowIndex = ++index;\n\t\t\t//TbTypeDef data = _rawImage->ReadTypeDef(rowIndex);\n\n\t\t\t//td.inited = false;\n\t\t\t//td.homoParentRowIndex = 0;\n\t\t\t//td.homoRowIndex = rowIndex;\n\t\t\t//td.homoMethodStartIndex = data.methodList;\n\t\t\t//td.homoFieldStartIndex = data.fieldList;\n\n\t\t\t//td.name = _rawImage->GetStringFromRawIndex(data.typeName);\n\t\t\t//td.namespaze = _rawImage->GetStringFromRawIndex(data.typeNamespace);\n\t\t\tInitType(typeIntermediateInfos, td);\n\t\t}\n\n\t\tuint32_t index = 0;\n\t\tfor (SuperSetTypeIntermediateInfo& td : typeIntermediateInfos)\n\t\t{\n\t\t\tSuperSetTypeDefDetail& type = _typeDefs[index++];\n\t\t\ttype.aotIl2CppType = td.aotIl2CppType;\n\t\t\tif (td.aotTypeDef)\n\t\t\t{\n\t\t\t\t_aotTypeIndex2TypeDefs[il2cpp::vm::GlobalMetadata::GetIndexForTypeDefinition(td.aotTypeDef)] = &type;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitMethods(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos)\n\t{\n\t\tconst Table& methodTb = _rawImage->GetTable(TableType::METHOD);\n\t\tuint32_t methodCount = methodTb.rowNum;\n\t\t_methodDefs.resize(methodCount);\n\t\t//_token2MethodDefs.resize(methodCount * 2);\n\t\tuint32_t typeCount = (uint32_t)typeIntermediateInfos.size();\n\t\tfor (SuperSetTypeIntermediateInfo& type : typeIntermediateInfos)\n\t\t{\n\t\t\tuint32_t nextTypeIndex = (uint32_t)(&type - &typeIntermediateInfos[0] + 1);\n\t\t\tuint32_t nextTypeMethodStartIndex = nextTypeIndex < typeCount ? typeIntermediateInfos[nextTypeIndex].homoMethodStartIndex : methodCount + 1;\n\n\n\t\t\tfor (uint32_t i = type.homoMethodStartIndex; i < nextTypeMethodStartIndex ; i++)\n\t\t\t{\n\t\t\t\tSuperSetMethodDefDetail& method = _methodDefs[i - 1];\n\t\t\t\tTbMethod data = _rawImage->ReadMethod(i);\n\t\t\t\t//method.declaringTypeDef = type.aotTypeDef;\n\t\t\t\t//method.name = _rawImage->GetStringFromRawIndex(data.name);\n\t\t\t\tif (type.aotTypeDef == nullptr)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tMethodRefSig signature = {};\n\t\t\t\tsignature.flags = data.flags;\n\t\t\t\tBlobReader methodSigReader = _rawImage->GetBlobReaderByRawIndex(data.signature);\n\t\t\t\tReadMethodDefSig(methodSigReader, signature);\n\t\t\t\tconst char* methodName = _rawImage->GetStringFromRawIndex(data.name);\n\t\t\t\tmethod.aotMethodDef = FindMatchMethod(type.aotTypeDef, method, methodName, signature);\n\t\t\t\tif (method.aotMethodDef &&\n\t\t\t\t\t(type.aotTypeDef->genericContainerIndex != kGenericContainerIndexInvalid\n\t\t\t\t\t\t|| method.aotMethodDef->genericContainerIndex != kGenericContainerIndexInvalid))\n\t\t\t\t{\n\t\t\t\t\t_token2MethodDefs[method.aotMethodDef->token] = &method;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid SuperSetAOTHomologousImage::ReadMethodDefSig(BlobReader& reader, MethodRefSig& method)\n\t{\n\t\tuint8_t rawSigFlags = reader.ReadByte();\n\n\t\tif (rawSigFlags & (uint8_t)MethodSigFlags::GENERIC)\n\t\t{\n\t\t\t//IL2CPP_ASSERT(false);\n\t\t\tmethod.genericParamCount = reader.ReadCompressedUint32();\n\t\t\tIL2CPP_ASSERT(method.genericParamCount > 0);\n\t\t}\n\t\tuint32_t paramCount = reader.ReadCompressedUint32();\n\t\t//IL2CPP_ASSERT(paramCount >= methodDef.parameterCount);\n\n\t\tmethod.returnType = ReadType(reader, nullptr, nullptr);\n\n\t\tint readParamNum = 0;\n\t\tfor (; reader.NonEmpty(); )\n\t\t{\n\t\t\tconst Il2CppType* paramType = ReadType(reader, nullptr, nullptr);\n\t\t\tmethod.params.push_back(paramType);\n\t\t\t++readParamNum;\n\t\t}\n\t\tIL2CPP_ASSERT(readParamNum == (int)paramCount);\n\t}\n\n\tvoid SuperSetAOTHomologousImage::InitFields(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos)\n\t{\n\t\tconst Table& fieldTb = _rawImage->GetTable(TableType::FIELD);\n\t\tuint32_t fieldCount = fieldTb.rowNum;\n\t\t_fields.resize(fieldTb.rowNum);\n\n\t\tuint32_t typeCount = (uint32_t)typeIntermediateInfos.size();\n\t\tfor (SuperSetTypeIntermediateInfo& type : typeIntermediateInfos)\n\t\t{\n\t\t\tuint32_t nextTypeIndex = (uint32_t)(&type - &typeIntermediateInfos[0] + 1);\n\t\t\tuint32_t nextTypeFieldStartIndex = nextTypeIndex < typeCount ? typeIntermediateInfos[nextTypeIndex].homoFieldStartIndex : fieldCount + 1;\n\t\t\tfor (uint32_t i = type.homoFieldStartIndex; i < nextTypeFieldStartIndex; i++)\n\t\t\t{\n\t\t\t\tSuperSetFieldDefDetail& field = _fields[i - 1];\n\t\t\t\t//field.homoRowIndex = i;\n\t\t\t\tTbField data = _rawImage->ReadField(i);\n\t\t\t\t//field.name = _rawImage->GetStringFromRawIndex(data.name);\n\n\t\t\t\t//field.declaringTypeDef = type.aotTypeDef;\n\t\t\t\tfield.declaringIl2CppType = type.aotIl2CppType;\n\t\t\t\tif (type.aotTypeDef == nullptr)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tBlobReader br = _rawImage->GetBlobReaderByRawIndex(data.signature);\n\t\t\t\tFieldRefSig frs;\n\t\t\t\tReadFieldRefSig(br, nullptr, frs);\n\t\t\t\tif (data.flags)\n\t\t\t\t{\n\t\t\t\t\tIl2CppType* newType = MetadataPool::ShallowCloneIl2CppType(frs.type);\n\t\t\t\t\tnewType->attrs = data.flags;\n\t\t\t\t\tfrs.type = newType;\n\t\t\t\t}\n\n\t\t\t\tconst char* fieldName = _rawImage->GetStringFromRawIndex(data.name);\n\t\t\t\tfield.aotFieldDef = FindMatchField(type.aotTypeDef, field, fieldName, frs.type);\n\t\t\t}\n\t\t}\n\t}\n\n\tMethodBody* SuperSetAOTHomologousImage::GetMethodBody(uint32_t token)\n\t{\n\t\tauto it = _token2MethodDefs.find(token);\n\t\tif (it == _token2MethodDefs.end())\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tSuperSetMethodDefDetail* method = it->second;\n\t\tuint32_t rowIndex = (uint32_t)(method - &_methodDefs[0] + 1);\n\t\tTbMethod methodData = _rawImage->ReadMethod(rowIndex);\n\t\tMethodBody* body = new (HYBRIDCLR_MALLOC_ZERO(sizeof(MethodBody))) MethodBody();\n\t\tReadMethodBody(*method->aotMethodDef, methodData, *body);\n\t\treturn body;\n\t}\n\n\tconst Il2CppType* SuperSetAOTHomologousImage::GetIl2CppTypeFromRawTypeDefIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT((size_t)index < _typeDefs.size());\n\t\treturn _typeDefs[index].aotIl2CppType;\n\t}\n\n\tIl2CppGenericContainer* SuperSetAOTHomologousImage::GetGenericContainerByRawIndex(uint32_t index)\n\t{\n\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(index);\n\t}\n\n\tIl2CppGenericContainer* SuperSetAOTHomologousImage::GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex)\n\t{\n\t\tauto it = _aotTypeIndex2TypeDefs.find(typeDefIndex);\n\t\tif (it == _aotTypeIndex2TypeDefs.end())\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tconst Il2CppType* type = it->second->aotIl2CppType;\n\t\tif (type == nullptr)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\tconst Il2CppTypeDefinition* typeDef = (const Il2CppTypeDefinition*)(type->data.typeHandle);\n\t\treturn (Il2CppGenericContainer*)il2cpp::vm::GlobalMetadata::GetGenericContainerFromIndex(typeDef->genericContainerIndex);\n\t}\n\n\tconst Il2CppMethodDefinition* SuperSetAOTHomologousImage::GetMethodDefinitionFromRawIndex(uint32_t index)\n\t{\n\t\tIL2CPP_ASSERT((size_t)index < _methodDefs.size());\n\t\tSuperSetMethodDefDetail& method = _methodDefs[index];\n\t\tconst Il2CppMethodDefinition* methodDef = method.aotMethodDef;\n\t\tif (!methodDef)\n\t\t{\n\t\t\tTEMP_FORMAT(errMsg, \"method not exist. rowIndex:%d\", index);\n\t\t\tRaiseExecutionEngineException(errMsg);\n\t\t}\n\t\treturn methodDef;\n\t}\n\n\tvoid SuperSetAOTHomologousImage::ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret)\n\t{\n\t\tIL2CPP_ASSERT(rowIndex > 0);\n\t\tSuperSetFieldDefDetail& fd = _fields[rowIndex - 1];\n\t\tret.containerType = fd.declaringIl2CppType;\n\t\tret.field = fd.aotFieldDef;\n\t}\n\n\tconst Il2CppType* SuperSetAOTHomologousImage::ReadTypeFromResolutionScope(uint32_t scope, uint32_t typeNamespace, uint32_t typeName)\n\t{\n\t\tTableType tokenType;\n\t\tuint32_t rawIndex;\n\t\tDecodeResolutionScopeCodedIndex(scope, tokenType, rawIndex);\n\t\tswitch (tokenType)\n\t\t{\n\t\tcase TableType::MODULE:\n\t\t{\n\t\t\tconst Il2CppType* retType = GetModuleIl2CppType(rawIndex, typeNamespace, typeName, false);\n\t\t\treturn retType ? retType : _defaultIl2CppType;\n\t\t}\n\t\tcase TableType::MODULEREF:\n\t\t{\n\t\t\tRaiseNotSupportedException(\"Image::ReadTypeFromResolutionScope not support ResolutionScore.MODULEREF\");\n\t\t\treturn nullptr;\n\t\t}\n\t\tcase TableType::ASSEMBLYREF:\n\t\t{\n\t\t\tconst Il2CppType* refType = GetIl2CppType(rawIndex, typeNamespace, typeName, false);\n\t\t\treturn refType ? refType : _defaultIl2CppType;\n\t\t}\n\t\tcase TableType::TYPEREF:\n\t\t{\n\t\t\tconst Il2CppType* enClosingType = ReadTypeFromTypeRef(rawIndex);\n\t\t\tIL2CPP_ASSERT(typeNamespace == 0);\n\t\t\tconst char* name = _rawImage->GetStringFromRawIndex(typeName);\n\n\t\t\tvoid* iter = nullptr;\n\t\t\tIl2CppMetadataTypeHandle enclosingTypeDef = enClosingType->data.typeHandle;\n\t\t\tif (!enclosingTypeDef)\n\t\t\t{\n\t\t\t\t//TEMP_FORMAT(errMsg, \"Image::ReadTypeFromResolutionScope ReadTypeFromResolutionScope.TYPEREF enclosingType:%s\", name);\n\t\t\t\t//RaiseExecutionEngineException(errMsg);\n\t\t\t\treturn _defaultIl2CppType;\n\t\t\t}\n\t\t\tfor (const Il2CppTypeDefinition* nextTypeDef; (nextTypeDef = (const Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetNestedTypes(enclosingTypeDef, &iter));)\n\t\t\t{\n\t\t\t\tconst char* nestedTypeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(nextTypeDef->nameIndex);\n\t\t\t\tIL2CPP_ASSERT(nestedTypeName);\n\t\t\t\tif (!std::strcmp(name, nestedTypeName))\n\t\t\t\t{\n\t\t\t\t\treturn GetIl2CppTypeFromTypeDefinition(nextTypeDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _defaultIl2CppType;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseBadImageException(\"Image::ReadTypeFromResolutionScope invaild TableType\");\n\t\t\treturn nullptr;\n\t\t}\n\t\t}\n\t}\n}\n}\n\n"
  },
  {
    "path": "hybridclr/metadata/SuperSetAOTHomologousImage.h",
    "content": "#pragma once\n\n#include \"AOTHomologousImage.h\"\n#include \"utils/Il2CppHashMap.h\"\n#include \"utils/HashUtils.h\"\n\nnamespace hybridclr\n{\n\tnamespace metadata\n\t{\n\n\t\tstruct SuperSetTypeIntermediateInfo\n\t\t{\n\t\t\tbool inited;\n\t\t\t//uint32_t homoRowIndex;\n\t\t\tuint32_t homoParentRowIndex;\n\t\t\tuint32_t homoMethodStartIndex; // start from 1\n\t\t\tuint32_t homoFieldStartIndex; // start from 1\n\t\t\t//const char* name;\n\t\t\t//const char* namespaze;\n\t\t\t//int32_t aotTypeIndex; // il2cpp type index\n\t\t\tconst Il2CppType* aotIl2CppType;\n\t\t\tconst Il2CppTypeDefinition* aotTypeDef;\n\t\t\t//const Il2CppClass* aotKlass;\n\t\t};\n\n\t\tstruct SuperSetTypeDefDetail\n\t\t{\n\t\t\t//bool inited;\n\t\t\t//uint32_t homoRowIndex;\n\t\t\t//uint32_t homoParentRowIndex;\n\t\t\t//uint32_t homoMethodStartIndex; // start from 1\n\t\t\t//uint32_t homoFieldStartIndex; // start from 1\n\t\t\t//const char* name;\n\t\t\t//const char* namespaze;\n\t\t\t//int32_t aotTypeIndex; // il2cpp type index\n\t\t\tconst Il2CppType* aotIl2CppType;\n\t\t\t//const Il2CppTypeDefinition* aotTypeDef;\n\t\t\t//const Il2CppClass* aotKlass;\n\t\t};\n\n\t\tstruct SuperSetMethodDefDetail\n\t\t{\n\t\t\t//uint32_t homoRowIndex; \n\t\t\t//MethodRefSig signature;\n\t\t\t//const Il2CppTypeDefinition* declaringTypeDef;\n\t\t\t//const Il2CppClass* declaringKlass;\n\t\t\t//const char* name;\n\t\t\tconst Il2CppMethodDefinition* aotMethodDef;\n\t\t};\n\n\t\tstruct SuperSetFieldDefDetail\n\t\t{\n\t\t\t//uint32_t homoRowIndex;\n\t\t\t//const char* name;\n\t\t\t//Il2CppType type;\n\t\t\t//const Il2CppTypeDefinition* declaringTypeDef;\n\t\t\tconst Il2CppType* declaringIl2CppType;\n\t\t\tconst Il2CppFieldDefinition* aotFieldDef;\n\t\t};\n\n\t\tclass SuperSetAOTHomologousImage : public AOTHomologousImage\n\t\t{\n\t\tpublic:\n\t\t\tSuperSetAOTHomologousImage() : AOTHomologousImage() {}\n\n\t\t\tvoid InitRuntimeMetadatas() override;\n\n\t\t\tconst Il2CppType* ReadTypeFromResolutionScope(uint32_t scope, uint32_t typeNamespace, uint32_t typeName) override;\n\t\t\tMethodBody* GetMethodBody(uint32_t token) override;\n\t\t\tconst Il2CppType* GetIl2CppTypeFromRawTypeDefIndex(uint32_t index) override;\n\t\t\tIl2CppGenericContainer* GetGenericContainerByRawIndex(uint32_t index) override;\n\t\t\tIl2CppGenericContainer* GetGenericContainerByTypeDefRawIndex(int32_t typeDefIndex) override;\n\t\t\tconst Il2CppMethodDefinition* GetMethodDefinitionFromRawIndex(uint32_t index) override;\n\t\t\tvoid ReadFieldRefInfoFromFieldDefToken(uint32_t rowIndex, FieldRefInfo& ret) override;\n\t\tprivate:\n\n\t\t\tvoid InitTypes0(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos);\n\t\t\tvoid InitNestedClass(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos);\n\t\t\tvoid InitType(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos, SuperSetTypeIntermediateInfo& type);\n\t\t\tvoid InitTypes1(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos);\n\t\t\tvoid ReadMethodDefSig(BlobReader& reader, MethodRefSig& method);\n\t\t\tvoid InitMethods(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos);\n\t\t\tvoid InitFields(std::vector<SuperSetTypeIntermediateInfo>& typeIntermediateInfos);\n\n\t\t\tconst Il2CppType* _defaultIl2CppType;\n\n\t\t\tstd::vector<SuperSetTypeDefDetail> _typeDefs;\n\t\t\tIl2CppHashMap<int32_t, SuperSetTypeDefDetail*, il2cpp::utils::PassThroughHash<int32_t>> _aotTypeIndex2TypeDefs;\n\n\t\t\tIl2CppHashMap<uint32_t, SuperSetMethodDefDetail*, il2cpp::utils::PassThroughHash<uint32_t>> _token2MethodDefs;\n\t\t\tstd::vector<SuperSetMethodDefDetail> _methodDefs;\n\n\t\t\tstd::vector<SuperSetFieldDefDetail> _fields;\n\t\t};\n\t}\n}"
  },
  {
    "path": "hybridclr/metadata/Tables.h",
    "content": "#pragma once\n#include <stdint.h>\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\n    enum class TableType\n    {\n        MODULE,\n        TYPEREF,\n        TYPEDEF,\n        FIELDPTR,\n        FIELD,\n        METHODPTR,\n        METHOD,\n        PARAMPTR,\n        PARAM,\n        INTERFACEIMPL,\n        MEMBERREF, /* 0xa */\n        CONSTANT,\n        CUSTOMATTRIBUTE,\n        FIELDMARSHAL,\n        DECLSECURITY,\n        CLASSLAYOUT,\n        FIELDLAYOUT, /* 0x10 */\n        STANDALONESIG,\n        EVENTMAP,\n        EVENTPTR,\n        EVENT,\n        PROPERTYMAP,\n        PROPERTYPTR,\n        PROPERTY,\n        METHODSEMANTICS,\n        METHODIMPL,\n        MODULEREF, /* 0x1a */\n        TYPESPEC,\n        IMPLMAP,\n        FIELDRVA,\n        ENCLOG,\n        ENCMAP,\n        ASSEMBLY, /* 0x20 */\n        ASSEMBLYPROCESSOR,\n        ASSEMBLYOS,\n        ASSEMBLYREF,\n        ASSEMBLYREFPROCESSOR,\n        ASSEMBLYREFOS,\n        FILE,\n        EXPORTEDTYPE,\n        MANIFESTRESOURCE,\n        NESTEDCLASS,\n        GENERICPARAM, /* 0x2a */\n        METHODSPEC,\n        GENERICPARAMCONSTRAINT,\n        UNUSED8,\n        UNUSED9,\n        UNUSED10,\n        /* Portable PDB tables */\n        DOCUMENT, /* 0x30 */\n        METHODDEBUGINFORMATION,\n        LOCALSCOPE,\n        LOCALVARIABLE,\n        LOCALCONSTANT,\n        IMPORTSCOPE,\n        STATEMACHINEMETHOD,\n        CUSTOMDEBUGINFORMATION,\n    };\n\n\n    // 0\n    struct TbModule\n    {\n        uint16_t generation;\n        uint32_t name;\n        uint32_t mvid;\n        uint32_t encid;\n        uint32_t encBaseId;\n    };\n\n    // 1\n    struct TbTypeRef\n    {\n        uint32_t resolutionScope;\n        uint32_t typeName;\n        uint32_t typeNamespace;\n    };\n\n    // 2\n    struct TbTypeDef\n    {\n        uint32_t flags;\n        uint32_t typeName;\n        uint32_t typeNamespace;\n        uint32_t extends;\n        uint32_t fieldList;\n        uint32_t methodList;\n    };\n\n    // 3 FIELDPTR\n\n    struct TbFieldPtr\n    {\n        uint32_t field;\n    };\n\n    // 4\n    struct TbField\n    {\n        uint32_t flags;\n        uint32_t name;\n        uint32_t signature;\n    };\n\n    // 5 METHODPTR\n\n    struct TbMethodPtr\n    {\n        uint32_t method;\n    };\n        \n    // 6\n    struct TbMethod\n    {\n        uint32_t rva;\n        uint16_t implFlags;\n        uint16_t flags;\n        uint32_t name;\n        uint32_t signature;\n        uint32_t paramList;\n    };\n\n    // 7 PARAMPTR\n    struct TbParamPtr\n    {\n        uint32_t param;\n    };\n\n    // 8\n    struct TbParam\n    {\n        uint16_t flags;\n        uint16_t sequence;\n        uint32_t name;\n    };\n\n    // 9\n    struct TbInterfaceImpl\n    {\n        uint32_t classIdx;\n        uint32_t interfaceIdx;\n    };\n\n    // 0xa\n    struct TbMemberRef\n    {\n        uint32_t classIdx;\n        uint32_t name;\n        uint32_t signature;\n    };\n\n    struct TbConstant\n    {\n        uint8_t type;\n        uint8_t padding;\n        uint32_t parent;\n        uint32_t value;\n    };\n\n    struct TbCustomAttribute\n    {\n        uint32_t parent;\n        uint32_t type;\n        uint32_t value;\n    };\n\n    struct TbFieldMarshal\n    {\n        uint32_t parent;\n        uint32_t nativeType;\n    };\n\n    struct TbDeclSecurity\n    {\n        uint16_t action;\n        uint32_t parent;\n        uint32_t permissionSet;\n    };\n\n    struct TbClassLayout\n    {\n        uint16_t packingSize;\n        uint32_t classSize;\n        uint32_t parent;\n    };\n\n    // 0x10\n    struct TbFieldLayout\n    {\n        uint32_t offset;\n        uint32_t field;\n    };\n\n    struct TbStandAloneSig\n    {\n        uint32_t signature;\n    };\n\n    struct TbEventMap\n    {\n        uint32_t parent;\n        uint32_t eventList;\n    };\n\n    // 0x13 EVENTPTR\n    struct TbEventPtr\n    {\n        uint32_t event;\n    };\n\n    // 0x14\n    struct TbEvent\n    {\n        uint16_t eventFlags;\n        uint32_t name;\n        uint32_t eventType;\n    };\n\n    struct TbPropertyMap\n    {\n        uint32_t parent;\n        uint32_t propertyList;\n    };\n\n    // PROPERTYPTR\n    struct TbPropertyPtr\n    {\n        uint32_t property;\n    };\n\n    struct TbProperty\n    {\n        uint16_t flags;\n        uint32_t name;\n        uint32_t type;\n    };\n\n    struct TbMethodSemantics\n    {\n        uint16_t semantics;\n        uint32_t method;\n        uint32_t association;\n    };\n\n    struct TbMethodImpl\n    {\n        uint32_t classIdx;\n        uint32_t methodBody;\n        uint32_t methodDeclaration;\n    };\n\n    struct TbModuleRef\n    {\n        uint32_t name;\n    };\n\n    struct TbTypeSpec\n    {\n        uint32_t signature;\n    };\n\n    struct TbImplMap\n    {\n        uint16_t mappingFlags;\n        uint32_t memberForwarded;\n        uint32_t importName;\n        uint32_t importScope;\n    };\n\n    struct TbFieldRVA\n    {\n        uint32_t rva;\n        uint32_t field;\n    };\n\n    struct TbEncLog\n    {\n        uint32_t token;\n        uint32_t funcCode;\n    };\n\n    struct TbEncMap\n    {\n        uint32_t token;\n    };\n\n    struct TbAssembly\n    {\n        uint32_t hashAlgId;\n        uint16_t majorVersion;\n        uint16_t minorVersion;\n        uint16_t buildNumber;\n        uint16_t revisionNumber;\n        uint32_t flags;\n        uint32_t publicKey;\n        uint32_t name;\n        uint32_t locale;\n    };\n\n    struct TbAssemblyProcessor\n    {\n        uint32_t processor;\n    };\n\n    struct TbAssemblyOS\n    {\n        uint32_t osPlatformId;\n        uint32_t osMajorVersion;\n        uint32_t osMinorVersion;\n    };\n\n    struct TbAssemblyRef\n    {\n        uint16_t majorVersion;\n        uint16_t minorVersion;\n        uint16_t buildNumber;\n        uint16_t revisionNumber;\n        uint32_t flags;\n        uint32_t publicKeyOrToken;\n        uint32_t name;\n        uint32_t locale;\n        uint32_t hashValue;\n    };\n\n    struct TbAssemblyRefProcessor\n    {\n        uint32_t processor;\n        uint32_t assemblyRef;\n    };\n\n    struct TbAssemblyRefOS\n    {\n        uint32_t osPlatformId;\n        uint32_t osMajorVersion;\n        uint32_t osMinorVersion;\n        uint32_t assemblyRef;\n    };\n\n    struct TbFile\n    {\n        uint32_t flags;\n        uint32_t name;\n        uint32_t hashValue;\n    };\n\n    struct TbExportedType\n    {\n        uint32_t flags;\n        uint32_t typeDefId;\n        uint32_t typeName;\n        uint32_t typeNamespace;\n        uint32_t implementation;\n    };\n\n    struct TbManifestResource\n    {\n        uint32_t offset;\n        uint32_t flags;\n        uint32_t name;\n        uint32_t implementation;\n    };\n\n    struct TbNestedClass\n    {\n        uint32_t nestedClass;\n        uint32_t enclosingClass;\n    };\n\n    struct TbGenericParam\n    {\n        uint16_t number;\n        uint16_t flags;\n        uint32_t owner;\n        uint32_t name;\n    };\n\n    struct TbMethodSpec\n    {\n        uint32_t method;\n        uint32_t instantiation;\n    };\n\n    struct TbGenericParamConstraint\n    {\n        uint32_t owner;\n        uint32_t constraint;\n    };\n\n    struct TbDocument\n    {\n        uint32_t name;\n        uint32_t hashAlgorithm;\n        uint32_t hash;\n        uint32_t language;\n    };\n\n    struct TbMethodDebugInformation\n    {\n        uint32_t document;\n        uint32_t sequencePoints;\n    };\n\n    struct TbLocalScope\n    {\n        uint32_t method;\n        uint32_t importScope;\n        uint32_t variables;\n        uint32_t constants;\n        uint32_t startOffset;\n        uint32_t length;\n    };\n\n    struct TbLocalVariable\n    {\n        uint16_t attributes;\n        uint16_t index;\n        uint32_t name;\n    };\n\n    struct TbLocalConstant\n    {\n        uint32_t name;\n        uint32_t signature;\n    };\n\n    struct TbImportScope\n    {\n        uint32_t parent;\n        uint32_t imports;\n    };\n\n\n    struct TbStateMachineMethod\n    {\n        uint32_t moveNextMethod;\n        uint32_t kickoffMethod;\n    };\n\n    struct TbCustomDebugInformation\n    {\n        uint32_t parent;\n\t\tuint32_t kind;\n\t\tuint32_t value;\n\t};\n\n}\n\n}"
  },
  {
    "path": "hybridclr/metadata/VTableSetup.cpp",
    "content": "#include \"VTableSetup.h\"\n\n#include <algorithm>\n\n#include \"vm/GlobalMetadata.h\"\n#include \"metadata/GenericMetadata.h\"\n\n#include \"MetadataModule.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tconst Il2CppType* TryInflateIfNeed(const Il2CppType* containerType, const Il2CppType* genericType, const Il2CppType* selfType)\n\t{\n\t\tif (selfType->type == IL2CPP_TYPE_CLASS || selfType->type == IL2CPP_TYPE_VALUETYPE)\n\t\t{\n\t\t\tif (genericType->data.typeHandle == selfType->data.typeHandle)\n\t\t\t{\n\t\t\t\treturn containerType;\n\t\t\t}\n\t\t}\n\t\treturn TryInflateIfNeed(containerType, selfType);\n\t}\n\n\tVTableSetUp* VTableSetUp::InflateVts(Il2CppType2TypeDeclaringTreeMap& cache, VTableSetUp* genericType, const Il2CppType* type)\n\t{\n\t\tIL2CPP_ASSERT(genericType->_type->data.typeHandle == type->data.generic_class->type->data.typeHandle);\n\t\tVTableSetUp* tdt = new (HYBRIDCLR_MALLOC_ZERO(sizeof(VTableSetUp))) VTableSetUp();\n\t\ttdt->_type = type;\n\t\ttdt->_typeDef = genericType->_typeDef;\n\t\ttdt->_parent = genericType->_parent ? BuildByType(cache, TryInflateIfNeed(type, genericType->_parent->_type)) : nullptr;\n\t\ttdt->_name = genericType->_name;\n\n\t\tfor (VTableSetUp* gintf : genericType->_interfaces)\n\t\t{\n\t\t\tconst Il2CppType* intType = TryInflateIfNeed(type, gintf->_type);\n\t\t\tVTableSetUp* intf = BuildByType(cache, intType);\n\t\t\ttdt->_interfaces.push_back(intf);\n\t\t}\n\n\t\tfor (GenericClassMethod& gcm : genericType->_virtualMethods)\n\t\t{\n\t\t\ttdt->_virtualMethods.push_back({ TryInflateIfNeed(type, genericType->_type, gcm.type), gcm.method, gcm.name });\n\t\t}\n\n\t\tfor (RawInterfaceOffsetInfo& roi : genericType->_interfaceOffsetInfos)\n\t\t{\n\t\t\tconst Il2CppType* intType = TryInflateIfNeed(type, genericType->_type, roi.type);\n\t\t\tVTableSetUp* intf = BuildByType(cache, intType);\n\t\t\ttdt->_interfaceOffsetInfos.push_back({ intType, intf, roi.offset });\n\t\t}\n\n\t\tfor (VirtualMethodImpl& vmi : genericType->_methodImpls)\n\t\t{\n\t\t\tconst Il2CppType* declaringType = vmi.type ? TryInflateIfNeed(type, genericType->_type, vmi.type) : nullptr;\n\t\t\ttdt->_methodImpls.push_back({ vmi.method, declaringType, vmi.slot /*, vmi.name*/});\n\t\t}\n\n\t\treturn tdt;\n\t}\n\n\tVTableSetUp* VTableSetUp::BuildByType(Il2CppType2TypeDeclaringTreeMap& cache, const Il2CppType* type)\n\t{\n\t\tauto it = cache.find(type);\n\t\tif (it != cache.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\t\tif (type->type == IL2CPP_TYPE_GENERICINST)\n\t\t{\n\t\t\tconst Il2CppType* genericType = type->data.generic_class->type;\n\t\t\tIL2CPP_ASSERT(genericType);\n\t\t\tVTableSetUp* gdt = BuildByType(cache, genericType);\n\t\t\tVTableSetUp* gidt = InflateVts(cache, gdt, type);\n\t\t\treturn cache[type] = gidt;\n\t\t}\n\t\tVTableSetUp* tdt = new (HYBRIDCLR_MALLOC_ZERO(sizeof(VTableSetUp))) VTableSetUp();\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n\t\tconst char* ns = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->namespaceIndex);\n\t\tconst char* name = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n\t\tconst Il2CppType* parentType = nullptr;\n\t\tif (typeDef->parentIndex != kInvalidIndex)\n\t\t{\n\t\t\tparentType = il2cpp::vm::GlobalMetadata::GetIl2CppTypeFromIndex(typeDef->parentIndex);\n\t\t}\n\t\ttdt->_type = type;\n\t\ttdt->_typeDef = typeDef;\n\t\ttdt->_parent = parentType ? BuildByType(cache, parentType) : nullptr;\n\t\ttdt->_name = name;\n\n\t\tfor (uint32_t i = 0; i < typeDef->interfaces_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* intType = il2cpp::vm::GlobalMetadata::GetInterfaceFromOffset(typeDef, i);\n\t\t\tVTableSetUp* intf = BuildByType(cache, intType);\n\t\t\ttdt->_interfaces.push_back(intf);\n\t\t}\n\n\t\tfor (uint32_t i = 0; i < typeDef->method_count; i++)\n\t\t{\n\t\t\tconst Il2CppMethodDefinition* methodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromIndex(typeDef->methodStart + i);\n\t\t\tconst char* methodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex);\n\t\t\tif (hybridclr::metadata::IsVirtualMethod(methodDef->flags))\n\t\t\t{\n\t\t\t\ttdt->_virtualMethods.push_back({ type, methodDef, methodName });\n\t\t\t}\n\t\t}\n\t\tif (hybridclr::metadata::IsInterface(typeDef->flags))\n\t\t{\n\t\t\ttdt->ComputeInterfaceVtables(cache);\n\t\t}\n\t\telse\n\t\t{\n\t\t\ttdt->ComputeVtables(cache);\n\t\t}\n\t\tcache[type] = tdt;\n\t\treturn tdt;\n\t}\n\n\n\tinline bool IsOverrideMethod(const GenericClassMethod& m1, const GenericClassMethod& m2)\n\t{\n\t\treturn hybridclr::metadata::IsOverrideMethod(m1.type, m1.method, m2.type, m2.method);\n\t}\n\n\n\tuint16_t FindLastSameMethod(std::vector<GenericClassMethod>& methods, uint32_t maxIdx, const GenericClassMethod& find, bool notSealed)\n\t{\n\t\tfor (uint32_t i = std::min(maxIdx, (uint32_t)methods.size()); i > 0; i--)\n\t\t{\n\t\t\tuint32_t idx = i - 1;\n\t\t\tif (methods[idx].method == nullptr)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (IsOverrideMethod(methods[idx], find))\n\t\t\t{\n\t\t\t\treturn idx;\n\t\t\t}\n\t\t}\n\t\treturn kInvalidIl2CppMethodSlot;\n\t}\n\n\n\tbool containeTdt(const std::vector<VTableSetUp*>& trees, VTableSetUp* findTree)\n\t{\n\t\tfor (VTableSetUp* add : trees)\n\t\t{\n\t\t\tif (il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(add->GetType(), findTree->GetType()))\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\n\tbool FindType(const std::vector<RawInterfaceOffsetInfo>& interfaceOffsetInfos, const Il2CppType* type, uint16_t& resultIdx)\n\t{\n\t\tuint16_t idx = 0;\n\t\tfor (auto& ioi : interfaceOffsetInfos)\n\t\t{\n\t\t\tif (il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(type, ioi.type))\n\t\t\t{\n\t\t\t\tresultIdx = idx;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t++idx;\n\t\t}\n\t\tresultIdx = (uint16_t)-1;\n\t\treturn false;\n\t}\n\n\tvoid VTableSetUp::ComputeInterfaceVtables(Il2CppType2TypeDeclaringTreeMap& cache)\n\t{\n\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInterface(_typeDef->flags));\n\n\t\tif (IsInterType())\n\t\t{\n\t\t\tuint16_t slotIdx = 0;\n\t\t\tfor (auto& vm : _virtualMethods)\n\t\t\t{\n\t\t\t\tIl2CppMethodDefinition* methodDef = const_cast<Il2CppMethodDefinition*>(vm.method);\n\t\t\t\tIL2CPP_ASSERT(methodDef->slot == slotIdx);\n\t\t\t\tslotIdx++;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ComputeVtables(Il2CppType2TypeDeclaringTreeMap& cache)\n\t{\n\t\tif (IsInterType())\n\t\t{\n\t\t\tComputeInterpTypeVtables(cache);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tComputAotTypeVtables(cache);\n\t\t}\n\n\t\tuint16_t idx = 0;\n\t\tfor (auto& vmi : _methodImpls)\n\t\t{\n\t\t\tIL2CPP_ASSERT(vmi.slot == idx);\n\t\t\t++idx;\n\t\t}\n\t}\n\n\tconst Il2CppType* VTableSetUp::FindImplType(const Il2CppMethodDefinition* methodDef)\n\t{\n\t\tIl2CppTypeDefinition* declarType = (Il2CppTypeDefinition*)il2cpp::vm::GlobalMetadata::GetTypeHandleFromIndex(methodDef->declaringType);\n\t\tfor (VTableSetUp* cur = this; cur; cur = cur->_parent)\n\t\t{\n\t\t\tif (declarType == cur->_typeDef)\n\t\t\t{\n\t\t\t\treturn cur->_type;\n\t\t\t}\n\t\t\tfor(VTableSetUp* itf : cur->_interfaces)\n\t\t\t{\n\t\t\t\tif (declarType == itf->_typeDef)\n\t\t\t\t{\n\t\t\t\t\treturn itf->_type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tTEMP_FORMAT(errMsg, \"VTableSetUp::FindImplType can't find impl type for method:%s.%s::%s\",\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(declarType->namespaceIndex),\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(declarType->nameIndex),\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex)\n\t\t\t);\n\t\tRaiseExecutionEngineException(errMsg);\n\t\treturn nullptr;\n\t}\n\n\tconst VTableSetUp* VTableSetUp::FindAncestorTypeTree(const Il2CppType* implType)\n\t{\n\t\tfor (VTableSetUp* cur = this; cur; cur = cur->_parent)\n\t\t{\n\t\t\tif (il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(cur->_type, implType))\n\t\t\t{\n\t\t\t\treturn cur;\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tstatic void RaiseParentOverridedMethodNotFindException(const Il2CppType* type, const char* methodName)\n\t{\n\t\tif (!type)\n\t\t{\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetTypeLoadException(\"type not exists\"));\n\t\t}\n\n\t\tconst Il2CppTypeDefinition* typeDefinition = GetUnderlyingTypeDefinition(type);\n\n\t\tTEMP_FORMAT(errMsg, \"VTableSetUp fail. virtual method: %s::%s::%s can't be find in declaring type or parent. It may be stripped by il2cpp\",\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDefinition->namespaceIndex), \n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDefinition->nameIndex),\n\t\t\tmethodName);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetMissingMethodException(errMsg));\n\t}\n\n\tconst GenericClassMethod* VTableSetUp::FindImplMethod(const Il2CppType* containerType, const Il2CppMethodDefinition* methodDef, bool throwExceptionIfNotFind)\n\t{\n\t\tfor (VTableSetUp* curTdt = this; curTdt; curTdt = curTdt->_parent)\n\t\t{\n\t\t\tfor (int idx = (int)curTdt->_virtualMethods.size() - 1; idx >= 0; idx--)\n\t\t\t{\n\t\t\t\tGenericClassMethod& pvm = curTdt->_virtualMethods[idx];\n\t\t\t\tif (hybridclr::metadata::IsOverrideMethod(containerType, methodDef, pvm.type, pvm.method))\n\t\t\t\t{\n\t\t\t\t\treturn &pvm;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (throwExceptionIfNotFind)\n\t\t{\n\t\t\tRaiseParentOverridedMethodNotFindException(this->_type, il2cpp::vm::GlobalMetadata::GetStringFromIndex(methodDef->nameIndex));\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tvoid VTableSetUp::ComputAotTypeVtables(Il2CppType2TypeDeclaringTreeMap& cache)\n\t{\n\t\tfor (uint16_t i = 0; i < _typeDef->interface_offsets_count; i++)\n\t\t{\n\t\t\tIl2CppInterfaceOffsetInfo ioi = il2cpp::vm::GlobalMetadata::GetInterfaceOffsetInfo(_typeDef, i);\n\t\t\t_interfaceOffsetInfos.push_back({ ioi.interfaceType, BuildByType(cache, ioi.interfaceType), (uint16_t)ioi.offset });\n\t\t}\n\n\t\tint nullVtableSlotCount = 0;\n\t\tfor (uint16_t i = 0; i < _typeDef->vtable_count; i++)\n\t\t{\n\t\t\tconst Il2CppMethodDefinition* overideMethodDef = il2cpp::vm::GlobalMetadata::GetMethodDefinitionFromVTableSlot(_typeDef, i);\n\t\t\tif (overideMethodDef == nullptr)\n\t\t\t{\n\t\t\t\tif (_parent && i < _parent->_typeDef->vtable_count)\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(_parent->_methodImpls[i].method);\n\t\t\t\t\t_methodImpls.push_back(_parent->_methodImpls[i]);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_methodImpls.push_back({ nullptr, nullptr, i /*, nullptr*/});\n\t\t\t\t\t++nullVtableSlotCount;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst Il2CppType* implType = FindImplType(overideMethodDef);\n\t\t\tconst char* methodName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(overideMethodDef->nameIndex);\n\t\t\tuint16_t slot = i;\n\t\t\t_methodImpls.push_back({ overideMethodDef, implType, slot /*, methodName*/});\n\t\t}\n\n\t\t// il2cpp set vtable slot to nullptr if method is abstract, so we fill correct type and method\n\t\tif (nullVtableSlotCount > 0)\n\t\t{\n\t\t\tfor (GenericClassMethod& gcm : _virtualMethods)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(gcm.method->slot != kInvalidIl2CppMethodSlot);\n\t\t\t\tVirtualMethodImpl& vmi = _methodImpls[gcm.method->slot];\n\t\t\t\tif (vmi.method == nullptr)\n\t\t\t\t{\n\t\t\t\t\tvmi.type = _type;\n\t\t\t\t\tvmi.method = gcm.method;\n\t\t\t\t\t//vmi.name = gcm.name;\n\t\t\t\t\t--nullVtableSlotCount;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (VTableSetUp* interf : _interfaces)\n\t\t\t{\n\t\t\t\tbool findInterf = false;\n\t\t\t\tfor (RawInterfaceOffsetInfo& rioi : _interfaceOffsetInfos)\n\t\t\t\t{\n\t\t\t\t\tif (IsTypeEqual(interf->_type, rioi.type))\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (size_t i = 0; i < interf->_virtualMethods.size(); i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tVirtualMethodImpl& vmi = _methodImpls[rioi.offset + i];\n\t\t\t\t\t\t\tif (vmi.method == nullptr)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tGenericClassMethod& igcm = interf->_virtualMethods[i];\n\t\t\t\t\t\t\t\tconst GenericClassMethod* implVirtualMethod = FindImplMethod(interf->_type, igcm.method);\n\t\t\t\t\t\t\t\tIL2CPP_ASSERT(implVirtualMethod);\n\t\t\t\t\t\t\t\t//vmi.name = igcm.name;\n\t\t\t\t\t\t\t\tvmi.type = implVirtualMethod->type;\n\t\t\t\t\t\t\t\tvmi.method = implVirtualMethod->method;\n\t\t\t\t\t\t\t\t--nullVtableSlotCount;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfindInterf = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tIL2CPP_ASSERT(findInterf);\n\t\t\t}\n\t\t\tIL2CPP_ASSERT(nullVtableSlotCount == 0);\n\t\t}\n\n\t\tIL2CPP_ASSERT(_typeDef->vtable_count == (uint16_t)_methodImpls.size());\n\t}\n\n\tvoid VTableSetUp::ApplyOverrideMethod(const GenericClassMethod* overrideParentMethod, const Il2CppMethodDefinition* overrideMethodDef, uint16_t checkOverrideMaxIdx)\n\t{\n\t\tIL2CPP_ASSERT(overrideParentMethod);\n\t\tif (overrideParentMethod)\n\t\t{\n\t\t\tIL2CPP_ASSERT(overrideParentMethod->method->slot != kInvalidIl2CppMethodSlot);\n\t\t\t//const_cast<Il2CppMethodDefinition*>(vm.method)->slot = overrideParentMethod->method->slot;\n\t\t\tuint16_t slotIdx = overrideParentMethod->method->slot;\n\t\t\tconst Il2CppMethodDefinition* overrideAncestorMethod = _parent->_methodImpls[slotIdx].method;\n\t\t\tIL2CPP_ASSERT(overrideAncestorMethod);\n\n\t\t\tVirtualMethodImpl& curImpl = _methodImpls[slotIdx];\n\t\t\tcurImpl.type = _type;\n\t\t\tcurImpl.method = overrideMethodDef;\n\t\t\t// search hierarchy methods, find match method. \n\n\t\t\t// check override parent virtual methods and\n\t\t\tfor (uint16_t idx = 0; idx < checkOverrideMaxIdx; idx++)\n\t\t\t{\n\t\t\t\tVirtualMethodImpl& vmi = _methodImpls[idx];\n\t\t\t\tif (vmi.method == overrideAncestorMethod)\n\t\t\t\t{\n\t\t\t\t\tvmi.type = _type;\n\t\t\t\t\tvmi.method = overrideMethodDef;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tuint16_t VTableSetUp::FindDefaultOverrideExplicitInterfaceSlot(GenericClassMethod& gcm, const Uin16Set& explicitImplSlots, const std::vector<uint16_t>& implInterfaceOffsetIdxs)\n\t{\n\t\tuint16_t slot = kInvalidIl2CppMethodSlot;\n\t\tfor (uint16_t interfaceIdx : implInterfaceOffsetIdxs)\n\t\t{\n\t\t\tRawInterfaceOffsetInfo& rioi = _interfaceOffsetInfos[interfaceIdx];\n\t\t\tfor (uint16_t idx = rioi.offset, end = rioi.offset + (uint16_t)rioi.tree->_virtualMethods.size(); idx < end; idx++)\n\t\t\t{\n\t\t\t\tif (explicitImplSlots.find(idx) != explicitImplSlots.end())\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tVirtualMethodImpl& vmi = _methodImpls[idx];\n\t\t\t\tif (IsOverrideMethod(_type, gcm.method, vmi.type, vmi.method))\n\t\t\t\t{\n\t\t\t\t\t//IL2CPP_ASSERT(impl.body.methodDef->slot == kInvalidIl2CppMethodSlot);\n\t\t\t\t\tvmi.type = _type;\n\t\t\t\t\tvmi.method = gcm.method;\n\t\t\t\t\tslot = idx;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn slot;\n\t}\n\n\tuint16_t VTableSetUp::FindExplicitOverrideInterfaceSlot(GenericClassMethod& gcm, const Int32ToUin16Map& explicitImplSlots)\n\t{\n\t\tauto it = explicitImplSlots.find(gcm.method->token);\n\t\treturn it != explicitImplSlots.end() ? it->second : kInvalidIl2CppMethodSlot;\n\t}\n\n\tvoid VTableSetUp::InitInterfaceVTable(uint16_t& curOffset, std::vector<uint16_t>& implInterfaceOffsetIdxs)\n\t{\n\t\tfor (VTableSetUp* intTree : _interfaces)\n\t\t{\n\t\t\tconst Il2CppType* intType = intTree->_type;\n\t\t\tuint16_t overrideIntIdx;\n\t\t\tif (!FindType(_parent->_interfaceOffsetInfos, intType, overrideIntIdx))\n\t\t\t{\n\t\t\t\timplInterfaceOffsetIdxs.push_back((uint16_t)_interfaceOffsetInfos.size());\n\t\t\t\t_interfaceOffsetInfos.push_back({ intType, intTree, curOffset });\n\t\t\t\t// curOffset += (uint32_t)intTree->_virtualMethods.size();\n\t\t\t\tfor (auto& vm : intTree->_virtualMethods)\n\t\t\t\t{\n\t\t\t\t\t_methodImpls.push_back({ vm.method, intType, curOffset++ /*, vm.name*/});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\timplInterfaceOffsetIdxs.push_back(overrideIntIdx);\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic bool IsExpliciteMethodNameMatch(const char* implMethodName, const Il2CppType* targetDeclaringType, const char* targetMethodName)\n\t{\n\t\t// end with .<methodName>\n\t\tstd::string fullName;\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(targetDeclaringType);\n\t\tif (typeDef->namespaceIndex != kStringLiteralIndexInvalid)\n\t\t{\n\t\t\tfullName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->namespaceIndex);\n\t\t\tfullName += \".\";\n\t\t}\n\t\tconst char* typeName = il2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDef->nameIndex);\n\t\tconst char* genericQualifier = strchr(typeName, '`');\n\t\tif (genericQualifier)\n\t\t{\n\t\t\tfullName.append(typeName, genericQualifier);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfullName += typeName;\n\t\t}\n\n\t\tif (!std::strstr(implMethodName, fullName.c_str()))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tsize_t len1 = std::strlen(implMethodName);\n\t\tsize_t len2 = std::strlen(targetMethodName);\n\t\tif (len1 < len2 + 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (implMethodName[len1 - len2 - 1] != '.')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn strcmp(implMethodName + len1 - len2, targetMethodName) == 0;\n\t}\n\n\tvoid VTableSetUp::ApplyAOTInterfaceExplicitOverride(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots,\n\t\tconst Il2CppType* intfType, const Il2CppType* implType, const Il2CppMethodDefinition* implMethod)\n\t{\n\t\tconst char* name1 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(implMethod->nameIndex);\n\t\tfor (uint16_t interfaceIdx : implInterfaceOffsetIdxs)\n\t\t{\n\t\t\tRawInterfaceOffsetInfo& rioi = _interfaceOffsetInfos[interfaceIdx];\n\t\t\tif (!il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(rioi.type, intfType))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (uint16_t idx = 0, end = (uint16_t)rioi.tree->_virtualMethods.size(); idx < end; idx++)\n\t\t\t{\n\t\t\t\tGenericClassMethod& rvm = rioi.tree->_virtualMethods[idx];\n\t\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(rvm.method->nameIndex);\n\t\t\t\tif (!IsExpliciteMethodNameMatch(name1, intfType, name2))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (IsOverrideMethodIgnoreName(implType, implMethod, rvm.type, rvm.method))\n\t\t\t\t{\n\t\t\t\t\tuint16_t slot = (uint16_t)(idx + rioi.offset);\n\t\t\t\t\tVirtualMethodImpl& ivmi = _methodImpls[slot];\n\t\t\t\t\t_explicitImplSlots.insert(slot);\n\t\t\t\t\texplicitImplToken2Slots.insert({ implMethod->token, slot });\n\t\t\t\t\tivmi.type = implType;\n\t\t\t\t\tivmi.method = implMethod;\n\t\t\t\t\t//ivmi.name = name1;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ApplyExplicitOverride(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots,\n\t\tconst Il2CppType* declaringType, const Il2CppMethodDefinition* decalringMethod, const Il2CppType* implType, const Il2CppMethodDefinition* implMethod)\n\t{\n\t\tconst char* name1 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(decalringMethod->nameIndex);\n\t\tfor (uint16_t interfaceIdx : implInterfaceOffsetIdxs)\n\t\t{\n\t\t\tRawInterfaceOffsetInfo& rioi = _interfaceOffsetInfos[interfaceIdx];\n\t\t\tif (!il2cpp::metadata::Il2CppTypeEqualityComparer::AreEqual(rioi.type, declaringType))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (uint16_t idx = 0, end = (uint16_t)rioi.tree->_virtualMethods.size(); idx < end; idx++)\n\t\t\t{\n\t\t\t\tGenericClassMethod& rvm = rioi.tree->_virtualMethods[idx];\n\t\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(rvm.method->nameIndex);\n\t\t\t\tif (std::strcmp(name1, name2))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (IsOverrideMethodIgnoreName(declaringType, decalringMethod, rvm.type, rvm.method))\n\t\t\t\t{\n\t\t\t\t\tuint16_t slot = (uint16_t)(idx + rioi.offset);\n\t\t\t\t\tVirtualMethodImpl& ivmi = _methodImpls[slot];\n\t\t\t\t\t_explicitImplSlots.insert(slot);\n\t\t\t\t\texplicitImplToken2Slots.insert({ implMethod->token, slot});\n\t\t\t\t\tivmi.type = implType;\n\t\t\t\t\tivmi.method = implMethod;\n\t\t\t\t\t//ivmi.name = il2cpp::vm::GlobalMetadata::GetStringFromIndex(implMethod->nameIndex);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst VTableSetUp* containerTs = FindAncestorTypeTree(declaringType);\n\t\tif (containerTs)\n\t\t{\n\t\t\tfor (int idx = (int)containerTs->_virtualMethods.size() - 1; idx >= 0; idx--)\n\t\t\t{\n\t\t\t\tconst GenericClassMethod& rvm = containerTs->_virtualMethods[idx];\n\t\t\t\tconst char* name2 = il2cpp::vm::GlobalMetadata::GetStringFromIndex(rvm.method->nameIndex);\n\t\t\t\tif (std::strcmp(name1, name2) != 0)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (IsOverrideMethodIgnoreName(declaringType, decalringMethod, rvm.type, rvm.method))\n\t\t\t\t{\n\t\t\t\t\tVirtualMethodImpl& ivmi = _methodImpls[rvm.method->slot];\n\t\t\t\t\t_explicitImplSlots.insert(rvm.method->slot);\n\t\t\t\t\texplicitImplToken2Slots.insert({ implMethod->token, rvm.method->slot });\n\t\t\t\t\tivmi.type = implType;\n\t\t\t\t\tivmi.method = implMethod;\n\t\t\t\t\t//ivmi.name = il2cpp::vm::GlobalMetadata::GetStringFromIndex(implMethod->nameIndex);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst Il2CppTypeDefinition* typeDefinition = GetUnderlyingTypeDefinition(declaringType);\n\n\t\tTEMP_FORMAT(errMsg, \"VTableSetUp fail. explicit implemented method: %s::%s::%s can't be find in parent or any interface.\",\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDefinition->namespaceIndex),\n\t\t\til2cpp::vm::GlobalMetadata::GetStringFromIndex(typeDefinition->nameIndex),\n\t\t\tname1);\n\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t}\n\n\tvoid VTableSetUp::ApplyTypeExplicitImpls(const Il2CppType* type, const VTableSetUp* tree, const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots)\n\t{\n\t\tconst Il2CppTypeDefinition* typeDef = GetUnderlyingTypeDefinition(type);\n\t\tif (IsInterpreterType(typeDef))\n\t\t{\n\t\t\tconst il2cpp::utils::dynamic_array<MethodImpl> explicitImpls = MetadataModule::GetImage(typeDef)->GetTypeMethodImplByTypeDefinition(typeDef);\n\t\t\tif (type->type != IL2CPP_TYPE_GENERICINST)\n\t\t\t{\n\t\t\t\tfor (const MethodImpl& mi : explicitImpls)\n\t\t\t\t{\n\t\t\t\t\tApplyExplicitOverride(implInterfaceOffsetIdxs, explicitImplToken2Slots, mi.declaration.containerType,\n\t\t\t\t\t\tmi.declaration.methodDef, mi.body.containerType, mi.body.methodDef);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst Il2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\t\tfor (const MethodImpl& mi : explicitImpls)\n\t\t\t\t{\n\t\t\t\t\tconst Il2CppType* containerType = il2cpp::metadata::GenericMetadata::InflateIfNeeded(mi.declaration.containerType, &genericClass->context, true);\n\t\t\t\t\tconst Il2CppType* implType = TryInflateIfNeed(type, type->data.generic_class->type, mi.body.containerType);\n\t\t\t\t\tApplyExplicitOverride(implInterfaceOffsetIdxs, explicitImplToken2Slots, containerType,\n\t\t\t\t\t\tmi.declaration.methodDef, implType, mi.body.methodDef);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (IsInterface(typeDef->flags))\n\t\t{\n\t\t\t// we only need process explicit impls in interface.\n\t\t\t// il2cpp doesn't provider any ways to get explicit impls in class.\n\t\t\t// so we can only try to find explicit impls by name matching.\n\t\t\tfor (const GenericClassMethod& gcm : tree->_virtualMethods)\n\t\t\t{\n\t\t\t\t// only try to find explicit impls in private methods\n\t\t\t\tuint32_t flags = gcm.method->flags;\n\t\t\t\tif (!IsPrivateMethod(flags) || IsAbstractMethod(flags))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (VTableSetUp* subIntf : tree->_interfaces)\n\t\t\t\t{\n\t\t\t\t\tApplyAOTInterfaceExplicitOverride(implInterfaceOffsetIdxs, explicitImplToken2Slots, subIntf->_type,\ttree->_type, gcm.method);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ComputeExplicitImpls(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots)\n\t{\n\t\tApplyTypeExplicitImpls(_type, this, implInterfaceOffsetIdxs, explicitImplToken2Slots);\n\t\t\n\t\tfor (uint16_t interfaceIdx : implInterfaceOffsetIdxs)\n\t\t{\n\t\t\tRawInterfaceOffsetInfo& rioi = _interfaceOffsetInfos[interfaceIdx];\n\t\t\tApplyTypeExplicitImpls(rioi.type, rioi.tree, implInterfaceOffsetIdxs, explicitImplToken2Slots);\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ComputeOverrideParentVirtualMethod(uint16_t& curOffset, const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots)\n\t{\n\t\tconst uint16_t startOffset = curOffset;\n\t\t// override parent virtual methods and interfaces\n\t\tfor (auto& vm : _virtualMethods)\n\t\t{\n\t\t\tIL2CPP_ASSERT(vm.type == _type);\n\t\t\tuint16_t mflags = vm.method->flags;\n\t\t\tif (hybridclr::metadata::IsNewSlot(mflags))\n\t\t\t{\n\t\t\t\tuint16_t overrideSlotIdx = kInvalidIl2CppMethodSlot;\n\t\t\t\tif (IsSealed(mflags))\n\t\t\t\t{\n\t\t\t\t\toverrideSlotIdx = FindExplicitOverrideInterfaceSlot(vm, explicitImplToken2Slots);\n\t\t\t\t\tif (overrideSlotIdx == kInvalidIl2CppMethodSlot && IsPublicMethod(mflags))\n\t\t\t\t\t{\n\t\t\t\t\t\toverrideSlotIdx = FindDefaultOverrideExplicitInterfaceSlot(vm, _explicitImplSlots, implInterfaceOffsetIdxs);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (overrideSlotIdx != kInvalidIl2CppMethodSlot)\n\t\t\t\t{\n\t\t\t\t\tconst_cast<Il2CppMethodDefinition*>(vm.method)->slot = overrideSlotIdx;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_methodImpls.push_back({ vm.method, _type, curOffset /*, vm.name*/});\n\t\t\t\t\tIL2CPP_ASSERT(vm.method->slot == kInvalidIl2CppMethodSlot || vm.method->slot == curOffset);\n\t\t\t\t\tconst_cast<Il2CppMethodDefinition*>(vm.method)->slot = curOffset;\n\t\t\t\t\t++curOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// It's impossible to define private virtual method in c#，but it's possible in cli.\n\t\t\t\t// so sometime can't find override in parent\n\t\t\t\tconst GenericClassMethod* overrideParentMethod = _parent->FindImplMethod(_type, vm.method, false);\n\t\t\t\tif (overrideParentMethod)\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(overrideParentMethod->method->slot != kInvalidIl2CppMethodSlot);\n\t\t\t\t\tconst_cast<Il2CppMethodDefinition*>(vm.method)->slot = overrideParentMethod->method->slot;\n\t\t\t\t\tApplyOverrideMethod(overrideParentMethod, vm.method, startOffset);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(metadata::IsPrivateMethod(mflags));\n\t\t\t\t\t_methodImpls.push_back({ vm.method, _type, curOffset /*, vm.name*/});\n\t\t\t\t\tIL2CPP_ASSERT(vm.method->slot == kInvalidIl2CppMethodSlot || vm.method->slot == curOffset);\n\t\t\t\t\tconst_cast<Il2CppMethodDefinition*>(vm.method)->slot = curOffset;\n\t\t\t\t\t++curOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ComputeInterfaceOverrideByParentVirtualMethod(const std::vector<uint16_t>& implInterfaceOffsetIdxs)\n\t{\n\t\tfor (uint16_t interfaceIdx : implInterfaceOffsetIdxs)\n\t\t{\n\t\t\tRawInterfaceOffsetInfo& rioi = _interfaceOffsetInfos[interfaceIdx];\n\t\t\tauto& interfaceVirtualMethods = rioi.tree->_virtualMethods;\n\t\t\tfor (uint16_t idx = 0, end = (uint16_t)interfaceVirtualMethods.size(); idx < end; idx++)\n\t\t\t{\n\t\t\t\tuint16_t slotIdx = (uint16_t)(rioi.offset + idx);\n\t\t\t\tif (isExplicitImplInterfaceSlot(slotIdx))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tVirtualMethodImpl& vmi = _methodImpls[slotIdx];\n\t\t\t\t// override by virtual method\n\t\t\t\tconst GenericClassMethod* implVm = FindImplMethod(rioi.type, interfaceVirtualMethods[idx].method, false);\n\t\t\t\tif (implVm)\n\t\t\t\t{\n\t\t\t\t\tvmi.type = implVm->type;\n\t\t\t\t\tvmi.method = implVm->method;\n\t\t\t\t\t//vmi.name = implVm->name;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid VTableSetUp::ComputeInterpTypeVtables(Il2CppType2TypeDeclaringTreeMap& cache)\n\t{\n\t\tuint16_t curOffset = 0;\n\t\tif (_parent)\n\t\t{\n\t\t\tcurOffset = (uint16_t)_parent->_methodImpls.size();\n\t\t\t_methodImpls = _parent->_methodImpls;\n\t\t\t_interfaceOffsetInfos = _parent->_interfaceOffsetInfos;\n\t\t}\n\n\t\tstd::vector<uint16_t> implInterfaceOffsetIdxs;\n\t\tInitInterfaceVTable(curOffset, implInterfaceOffsetIdxs);\n\t\tInt32ToUin16Map explicitImplToken2Slots;\n\t\tComputeExplicitImpls(implInterfaceOffsetIdxs, explicitImplToken2Slots);\n\t\tComputeOverrideParentVirtualMethod(curOffset, implInterfaceOffsetIdxs, explicitImplToken2Slots);\n\t\tComputeInterfaceOverrideByParentVirtualMethod(implInterfaceOffsetIdxs);\n\t}\n\n}\n}\n"
  },
  {
    "path": "hybridclr/metadata/VTableSetup.h",
    "content": "#pragma once\n\n#include <vector>\n\n#include \"metadata/Il2CppTypeHash.h\"\n#include \"metadata/Il2CppTypeCompare.h\"\n\n#include \"../CommonDef.h\"\n#include \"MetadataUtil.h\"\n\nnamespace hybridclr\n{\nnamespace metadata\n{\n\tstruct GenericClassMethod\n\t{\n\t\tconst Il2CppType* type;\n\t\tconst Il2CppMethodDefinition* method;\n\t\tconst char* name; // TODO remove\n\t};\n\n\tstruct VirtualMethodImpl\n\t{\n\t\tconst Il2CppMethodDefinition* method;\n\t\tconst Il2CppType* type;\n\t\tuint16_t slot;\n\t\t//const char* name; //  TODO for debug\n\t};\n\n\tclass VTableSetUp;\n\n\tstruct RawInterfaceOffsetInfo\n\t{\n\t\tconst Il2CppType* type;\n\t\tVTableSetUp* tree;\n\t\tuint32_t offset;\n\t};\n\n\ttypedef Il2CppHashMap<const Il2CppType*, VTableSetUp*, il2cpp::metadata::Il2CppTypeHash, il2cpp::metadata::Il2CppTypeEqualityComparer> Il2CppType2TypeDeclaringTreeMap;\n\n\tclass VTableSetUp\n\t{\n\tpublic:\n\t\ttypedef Il2CppHashMap<int32_t, uint16_t, il2cpp::utils::PassThroughHash<int32_t>> Int32ToUin16Map;\n\t\ttypedef Il2CppHashSet<uint16_t, il2cpp::utils::PassThroughHash<uint16_t>> Uin16Set;\n\n\t\tstatic VTableSetUp* BuildByType(Il2CppType2TypeDeclaringTreeMap& cache, const Il2CppType* type);\n\t\tstatic VTableSetUp* InflateVts(Il2CppType2TypeDeclaringTreeMap& cache, VTableSetUp* genericType, const Il2CppType* type);\n\n\t\tVTableSetUp()\n\t\t{\n\n\t\t}\n\n\t\tconst VTableSetUp* GetParent() const { return _parent; }\n\t\tconst Il2CppType* FindImplType(const Il2CppMethodDefinition* methodDef);\n\t\tconst VTableSetUp* FindAncestorTypeTree(const Il2CppType* implType);\n\t\tconst GenericClassMethod* FindImplMethod(const Il2CppType* containerType, const Il2CppMethodDefinition* methodDef, bool throwExceptionIfNotFind = true);\n\t\tconst std::vector<RawInterfaceOffsetInfo>& GetInterfaceOffsetInfos() const { return _interfaceOffsetInfos; }\n\t\tconst std::vector<VirtualMethodImpl>& GetVirtualMethodImpls() const { return _methodImpls; }\n\t\tconst Il2CppType* GetType() const { return _type; }\n\t\tuint32_t GetTypeIndex() const { return _typeDef->byvalTypeIndex; }\n\t\tbool IsInterType() const { return hybridclr::metadata::IsInterpreterType(_typeDef); }\n\tprivate:\n\n\t\tvoid ComputeVtables(Il2CppType2TypeDeclaringTreeMap& cache);\n\t\tvoid ComputAotTypeVtables(Il2CppType2TypeDeclaringTreeMap& cache);\n\t\tvoid InitInterfaceVTable(uint16_t& curOffset, std::vector<uint16_t>& implInterfaceOffsetIdxs);\n\t\tvoid ComputeExplicitImpls(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots);\n\t\tvoid ApplyTypeExplicitImpls(const Il2CppType* type, const VTableSetUp* tree, const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots);\n\t\tvoid ComputeOverrideParentVirtualMethod(uint16_t& curOffset, const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots);\n\t\tvoid ComputeInterfaceOverrideByParentVirtualMethod(const std::vector<uint16_t>& implInterfaceOffsetIdxs);\n\t\tvoid ComputeInterpTypeVtables(Il2CppType2TypeDeclaringTreeMap& cache);\n\t\tvoid ComputeInterfaceVtables(Il2CppType2TypeDeclaringTreeMap& cache);\n\n\t\tbool isExplicitImplInterfaceSlot(uint16_t slot) const { return _explicitImplSlots.find(slot) != _explicitImplSlots.end(); }\n\t\tuint16_t FindDefaultOverrideExplicitInterfaceSlot(GenericClassMethod& gcm, const Uin16Set& explicitImplSlots, const std::vector<uint16_t>& implInterfaceOffsetIdxs);\n\t\tuint16_t FindExplicitOverrideInterfaceSlot(GenericClassMethod& gcm, const Int32ToUin16Map& explicitImplSlots);\n\t\tvoid ApplyOverrideMethod(const GenericClassMethod* beOverrideParentMethod, const Il2CppMethodDefinition* overrideMethodDef, uint16_t checkOverrideMaxIdx);\n\t\tvoid ApplyExplicitOverride(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots, const Il2CppType* declaringType,\n\t\t\tconst Il2CppMethodDefinition* decalringMethod, const Il2CppType* implType, const Il2CppMethodDefinition* implMethod);\n\t\tvoid ApplyAOTInterfaceExplicitOverride(const std::vector<uint16_t>& implInterfaceOffsetIdxs, Int32ToUin16Map& explicitImplToken2Slots, const Il2CppType* intfType,\n\t\t\tconst Il2CppType* implType, const Il2CppMethodDefinition* implMethod);\n\t\t\n\t\tVTableSetUp* _parent;\n\t\tstd::vector<VTableSetUp*> _interfaces;\n\t\tstd::vector<RawInterfaceOffsetInfo> _interfaceOffsetInfos;\n\n\t\tconst Il2CppType* _type;\n\t\tconst Il2CppTypeDefinition* _typeDef;\n\t\tconst char* _name; // TODO remove\n\n\t\tstd::vector<GenericClassMethod> _virtualMethods;\n\t\tstd::vector<VirtualMethodImpl> _methodImpls;\n\n\t\tUin16Set _explicitImplSlots;;\n\t};\n}\n}\n"
  },
  {
    "path": "hybridclr/transform/BasicBlockSpliter.cpp",
    "content": "#include \"BasicBlockSpliter.h\"\n\n#include \"../metadata/Opcodes.h\"\n#include \"../metadata/MetadataUtil.h\"\n\nusing namespace hybridclr::metadata;\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\n\tvoid BasicBlockSpliter::SplitNormal(const byte* ilcodeStart, uint32_t codeSize, Uin32Set& ilOffsets)\n\t{\n\t\tconst byte* codeEnd = ilcodeStart + codeSize;\n\t\tconst byte* ip = ilcodeStart;\n\n\t\twhile (ip < codeEnd)\n\t\t{\n\t\t\tilOffsets.insert((uint32_t)(ip - ilcodeStart));\n\t\t\tconst OpCodeInfo* oc = DecodeOpCodeInfo(ip, codeEnd);\n\t\t\tIL2CPP_ASSERT(oc);\n\t\t\tint32_t opCodeSize = GetOpCodeSize(ip, oc);\n\t\t\tconst byte* nextIp = ip + opCodeSize;\n\t\t\tint32_t nextOffset = (int32_t)(nextIp - ilcodeStart);\n\t\t\tIL2CPP_ASSERT(nextOffset >= 0 && nextOffset <= (int32_t)codeSize);\n\n\t\t\tswitch (oc->inlineType)\n\t\t\t{\n\t\t\tcase ArgType::None:\n\t\t\tcase ArgType::Data:\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgType::StaticBranch:\n\t\t\t{\n\t\t\t\t_splitOffsets.insert(nextOffset);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgType::BranchTarget:\n\t\t\t{\n\t\t\t\tint32_t offset;\n\t\t\t\tswitch (oc->inlineParam)\n\t\t\t\t{\n\t\t\t\tcase 1:\n\t\t\t\t{\n\t\t\t\t\toffset = GetI1(ip + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 4:\n\t\t\t\t{\n\t\t\t\t\toffset = GetI4LittleEndian(ip + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"invalid BranchTarget param\");\n\t\t\t\t\toffset = -1;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// don't split 0 offset br\n\t\t\t\tif (offset != 0 || (oc->baseOpValue == OpcodeValue::LEAVE || oc->baseOpValue == OpcodeValue::LEAVE_S))\n\t\t\t\t{\n\t\t\t\t\t_splitOffsets.insert(nextOffset);\n\t\t\t\t\t_splitOffsets.insert(nextOffset + offset);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgType::Switch:\n\t\t\t{\n\t\t\t\tuint32_t caseNum = GetI4LittleEndian(ip + 1);\n\t\t\t\tbool splitAny = false;\n\t\t\t\tfor (uint32_t caseIdx = 0; caseIdx < caseNum; caseIdx++)\n\t\t\t\t{\n\t\t\t\t\tint32_t caseOffset = GetI4LittleEndian(ip + 5 + caseIdx * 4);\n\t\t\t\t\tif (caseOffset != 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t_splitOffsets.insert(nextOffset + caseOffset);\n\t\t\t\t\t\tsplitAny = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (splitAny)\n\t\t\t\t{\n\t\t\t\t\t_splitOffsets.insert(nextOffset);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"unknown inline type\");\n\t\t\t\tnextOffset = -1;\n\t\t\t}\n\t\t\t}\n\t\t\tip = nextIp;\n\t\t}\n\t\tIL2CPP_ASSERT(ip == codeEnd);\n\t}\n\n\tvoid BasicBlockSpliter::SplitExceptionHandles(const byte* ilcodeStart, uint32_t codeSize, const std::vector<metadata::ExceptionClause>& exceptionClauses)\n\t{\n\t\tfor (auto& eh : exceptionClauses)\n\t\t{\n\t\t\t_splitOffsets.insert(eh.tryOffset);\n\t\t\t_splitOffsets.insert(eh.tryOffset + eh.tryLength);\n\t\t\t_splitOffsets.insert(eh.handlerOffsets);\n\t\t\t_splitOffsets.insert(eh.handlerOffsets + eh.handlerLength);\n\t\t\tif (eh.flags == CorILExceptionClauseType::Filter)\n\t\t\t{\n\t\t\t\t_splitOffsets.insert(eh.classTokenOrFilterOffset);\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid BasicBlockSpliter::SplitBasicBlocks()\n\t{\n\t\tconst byte* ilcodeStart = _body.ilcodes;\n\n\t\tuint32_t codeSize = _body.codeSize;\n\n\t\tUin32Set ilOffsets(codeSize);\n\t\tilOffsets.insert(codeSize);\n\n\t\tSplitNormal(ilcodeStart, codeSize, ilOffsets);\n\t\tSplitExceptionHandles(ilcodeStart, codeSize, _body.exceptionClauses);\n\n\t\t/*if (_splitOffsets.find(0) != _splitOffsets.end())\n\t\t{\n\t\t\t_splitOffsets.erase(0);\n\t\t}*/\n#if DEBUG\n\t\tfor (uint32_t offset : _splitOffsets)\n\t\t{\n\t\t\tIL2CPP_ASSERT(ilOffsets.find(offset) != ilOffsets.end());\n\t\t}\n\t\tIL2CPP_ASSERT(_splitOffsets.find(codeSize) != _splitOffsets.end());\n#endif\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/transform/BasicBlockSpliter.h",
    "content": "#pragma once\n\n#include <set>\n\n#include \"../CommonDef.h\"\n#include \"../metadata/MetadataDef.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tclass BasicBlockSpliter\n\t{\n\tpublic:\n\t\ttypedef Il2CppHashSet<uint32_t, il2cpp::utils::PassThroughHash<uint32_t>> Uin32Set;\n\n\t\tBasicBlockSpliter(const metadata::MethodBody& body) : _body(body) { }\n\n\t\tvoid SplitBasicBlocks();\n\n\t\tconst std::set<uint32_t>& GetSplitOffsets() const { return _splitOffsets; }\n\tprivate:\n\t\tconst metadata::MethodBody& _body;\n\t\tstd::set<uint32_t> _splitOffsets;\n\n\t\tvoid SplitNormal(const byte* ilcodeStart, uint32_t codeSize, Uin32Set& ilOffsets);\n\t\tvoid SplitExceptionHandles(const byte* ilcodeStart, uint32_t codeSize, const std::vector<metadata::ExceptionClause>& exceptionClauses);\n\t};\n}\n}\n"
  },
  {
    "path": "hybridclr/transform/TemporaryMemoryArena.cpp",
    "content": "#include \"TemporaryMemoryArena.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\n\tTemporaryMemoryArena::Block TemporaryMemoryArena::AllocBlock(size_t size)\n\t{\n\t\tvoid* data = HYBRIDCLR_MALLOC(size);\n\t\treturn { data, size };\n\t}\n\n\tvoid TemporaryMemoryArena::Begin()\n\t{\n\t\tIL2CPP_ASSERT(_buf == nullptr);\n\t\tIL2CPP_ASSERT(_size == 0);\n\t\tIL2CPP_ASSERT(_pos == 0);\n\t\tRequireSize(kMinBlockSize);\n\t}\n\n\tvoid TemporaryMemoryArena::End()\n\t{\n\t\tif (_buf)\n\t\t{\n\t\t\tHYBRIDCLR_FREE(_buf);\n\t\t\t//_buf = nullptr;\n\t\t\t//_size = _pos = 0;\n\t\t}\n\t\tfor (auto& block : _useOuts)\n\t\t{\n\t\t\tHYBRIDCLR_FREE(block.data);\n\t\t}\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/transform/TemporaryMemoryArena.h",
    "content": "#pragma once\n\n#include <stack>\n#include <cmath>\n#include <vector>\n\n#include \"../CommonDef.h\"\n\nnamespace hybridclr\n{\n\tnamespace transform\n\t{\n\t\tconst size_t kMinBlockSize = 8 * 1024;\n\n\t\tclass TemporaryMemoryArena\n\t\t{\n\t\tpublic:\n\n\t\t\tTemporaryMemoryArena() : _buf(nullptr), _size(0), _pos(0)\n\t\t\t{\n\t\t\t\tBegin();\n\t\t\t}\n\t\t\t~TemporaryMemoryArena()\n\t\t\t{\n\t\t\t\tEnd();\n\t\t\t}\n\n\t\t\tstatic size_t AligndSize(size_t size)\n\t\t\t{\n\t\t\t\treturn (size + 7) & ~7;\n\t\t\t}\n\n\t\t\ttemplate<typename T>\n\t\t\tT* AllocIR()\n\t\t\t{\n\t\t\t\tconst size_t aligndSize = AligndSize(sizeof(T));\n\t\t\t\tif (_pos + aligndSize <= _size)\n\t\t\t\t{\n\t\t\t\t\tT* ir = (T*)(_buf + _pos);\n\t\t\t\t\t*ir = {};\n\t\t\t\t\t_pos += aligndSize;\n\t\t\t\t\treturn ir;\n\t\t\t\t}\n\n\t\t\t\tRequireSize(aligndSize);\n\n\t\t\t\tT* ir = (T*)(_buf + _pos);\n\t\t\t\t*ir = {};\n\t\t\t\t_pos += aligndSize;\n\t\t\t\treturn ir;\n\t\t\t}\n\n\t\t\ttemplate<typename T>\n\t\t\tT* NewAny()\n\t\t\t{\n\t\t\t\tconst size_t needSize = AligndSize(sizeof(T));\n\t\t\t\tif (_pos + needSize <= _size)\n\t\t\t\t{\n\t\t\t\t\tT* ir = new (_buf + _pos) T();\n\t\t\t\t\t*ir = {};\n\t\t\t\t\t_pos += needSize;\n\t\t\t\t\treturn ir;\n\t\t\t\t}\n\n\t\t\t\tRequireSize(needSize);\n\n\t\t\t\tT* ir = new (_buf + _pos) T();\n\t\t\t\t*ir = {};\n\t\t\t\t_pos += needSize;\n\t\t\t\treturn ir;\n\t\t\t}\n\n\t\t\ttemplate<typename T>\n\t\t\tT* NewNAny(int n)\n\t\t\t{\n\t\t\t\tif (n > 0)\n\t\t\t\t{\n\t\t\t\t\tsize_t bytes = AligndSize(sizeof(T) * n);\n\t\t\t\t\tif (_pos + bytes > _size)\n\t\t\t\t\t{\n\t\t\t\t\t\tRequireSize(bytes);\n\t\t\t\t\t}\n\t\t\t\t\tT* ret = new (_buf + _pos) T[n];\n\t\t\t\t\t_pos += bytes;\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn nullptr;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvoid Begin();\n\n\t\t\tvoid End();\n\n\t\tprivate:\n\t\t\tstruct Block\n\t\t\t{\n\t\t\t\tvoid* data;\n\t\t\t\tsize_t size;\n\t\t\t};\n\n\t\t\tvoid RequireSize(size_t size)\n\t\t\t{\n\t\t\t\tif (_buf)\n\t\t\t\t{\n\t\t\t\t\t_useOuts.push_back({ (void*)_buf, _size});\n\t\t\t\t}\n\n\t\t\t\tBlock newBlock = AllocBlock(std::max(size, kMinBlockSize));\n\t\t\t\t_buf = (byte*)newBlock.data;\n\t\t\t\t_size = newBlock.size;\n\t\t\t\t_pos = 0;\n\t\t\t}\n\n\t\t\tstatic Block AllocBlock(size_t size);\n\n\t\t\tstd::vector<Block> _useOuts;\n\n\t\t\tbyte* _buf;\n\t\t\tsize_t _size;\n\t\t\tsize_t _pos;\n\t\t};\n\t}\n}"
  },
  {
    "path": "hybridclr/transform/Transform.cpp",
    "content": "\n#include \"Transform.h\"\n\n#include <unordered_set>\n\n#include \"TransformContext.h\"\n\n#include \"../metadata/MethodBodyCache.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\n\tInterpMethodInfo* HiTransform::Transform(const MethodInfo* methodInfo)\n\t{\n\t\tTemporaryMemoryArena pool;\n\n\t\tmetadata::Image* image = metadata::MetadataModule::GetUnderlyingInterpreterImage(methodInfo);\n\t\tIL2CPP_ASSERT(image);\n\n\t\tmetadata::MethodBodyCache::EnableShrinkMethodBodyCache(false);\n\t\tmetadata::MethodBody* methodBody = metadata::MethodBodyCache::GetMethodBody(image, methodInfo->token);\n\t\tif (methodBody == nullptr || methodBody->ilcodes == nullptr)\n\t\t{\n\t\t\tTEMP_FORMAT(errMsg, \"Method body is null. %s.%s::%s\", methodInfo->klass->namespaze, methodInfo->klass->name, methodInfo->name);\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t\t}\n\t\tInterpMethodInfo* result = new (HYBRIDCLR_METADATA_MALLOC(sizeof(InterpMethodInfo))) InterpMethodInfo;\n\t\til2cpp::utils::dynamic_array<uint64_t> resolveDatas;\n\t\tTransformContext ctx(image, methodInfo, *methodBody, pool, resolveDatas);\n\n\t\tctx.TransformBody(0, 0, *result);\n\t\tmetadata::MethodBodyCache::EnableShrinkMethodBodyCache(true);\n\t\treturn result;\n\t}\n}\n\n}\n"
  },
  {
    "path": "hybridclr/transform/Transform.h",
    "content": "#pragma once\n\n#include \"BasicBlockSpliter.h\"\n\n#include \"../metadata/Image.h\"\n#include \"../interpreter/Instruction.h\"\n#include \"../interpreter/Engine.h\"\n#include \"../interpreter/InterpreterDefs.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tclass HiTransform\n\t{\n\tpublic:\n\t\tstatic interpreter::InterpMethodInfo* Transform(const MethodInfo* methodInfo);\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformContext.cpp",
    "content": "#include \"TransformContext.h\"\n\n#include \"metadata/GenericMetadata.h\"\n#include \"vm/Class.h\"\n#include \"vm/Exception.h\"\n#include \"vm/String.h\"\n#include \"vm/Field.h\"\n#include \"vm/PlatformInvoke.h\"\n#include \"vm/Reflection.h\"\n#include \"vm/Image.h\"\n#include \"vm/Type.h\"\n#include \"vm/GenericClass.h\"\n#include \"utils/StringUtils.h\"\n#include \"utils/StringView.h\"\n\n#include \"../metadata/MethodBodyCache.h\"\n#include \"../interpreter/InterpreterUtil.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tconstexpr int32_t MAX_STACK_SIZE = (2 << 16) - 1;\n\tconstexpr int32_t MAX_VALUE_TYPE_SIZE = (2 << 16) - 1;\n\n\ttemplate<typename T>\n\tvoid AllocResolvedData(il2cpp::utils::dynamic_array<uint64_t>& resolvedDatas, int32_t size, int32_t& index, T*& buf)\n\t{\n\t\tif (size > 0)\n\t\t{\n\t\t\tint32_t oldSize = index = (int32_t)resolvedDatas.size();\n\t\t\tresolvedDatas.resize_initialized(oldSize + size);\n\t\t\tbuf = (T*)&resolvedDatas[oldSize];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tindex = 0;\n\t\t\tbuf = nullptr;\n\t\t}\n\t}\n\n\tIRCommon* CreateInitLocals(TemporaryMemoryArena& pool, uint32_t size, int32_t offset)\n\t{\n\t\tif (size > 32)\n\t\t{\n\t\t\tif (offset == 0)\n\t\t\t{\n\t\t\t\tCreateIR(ir, InitLocals_n_4);\n\t\t\t\tir->size = size;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tCreateIR(ir, InitInlineLocals_n_4);\n\t\t\t\tir->size = size;\n\t\t\t\tir->offset = offset;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t}\n\t\tif (offset == 0)\n\t\t{\n\t\t\tCreateIR(ir, InitLocals_size_8);\n\t\t\tif (size <= 8)\n\t\t\t{\n\t\t\t}\n\t\t\telse if (size <= 16)\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::InitLocals_size_16;\n\t\t\t}\n\t\t\telse if (size <= 24)\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::InitLocals_size_24;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(size <= 32);\n\t\t\t\tir->type = HiOpcodeEnum::InitLocals_size_32;\n\t\t\t}\n\t\t\treturn ir;\n\t\t}\n\t\telse\n\t\t{\n\n\t\t\tCreateIR(ir, InitInlineLocals_size_8);\n\t\t\tir->offset = offset;\n\t\t\tif (size <= 8)\n\t\t\t{\n\n\t\t\t}\n\t\t\telse if (size <= 16)\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::InitInlineLocals_size_16;\n\t\t\t}\n\t\t\telse if (size <= 24)\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::InitInlineLocals_size_24;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(size <= 32);\n\t\t\t\tir->type = HiOpcodeEnum::InitInlineLocals_size_32;\n\t\t\t}\n\t\t\treturn ir;\n\t\t}\n\t}\n\n\tIRCommon* CreateLoadExpandDataToStackVarVar(TemporaryMemoryArena& pool, int32_t dstOffset, int32_t srcOffset, const Il2CppType* type, int32_t size);\n\tIRCommon* CreateAssignVarVar(TemporaryMemoryArena& pool, int32_t dstOffset, int32_t srcOffset, int32_t size);\n\n\tinterpreter::IRCommon* CreateClassLdfld(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, const FieldInfo* fieldInfo);\n\n\tinterpreter::IRCommon* CreateValueTypeLdfld(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, const FieldInfo* fieldInfo);\n\tinterpreter::IRCommon* CreateStfld(TemporaryMemoryArena& pool, int32_t objIdx, const FieldInfo* fieldInfo, int32_t dataIdx);\n\n\tinterpreter::IRCommon* CreateLdsfld(TemporaryMemoryArena& pool, int32_t dstIdx, const FieldInfo* fieldInfo, uint32_t parent);\n\tinterpreter::IRCommon* CreateStsfld(TemporaryMemoryArena& pool, const FieldInfo* fieldInfo, uint32_t parent, int32_t dataIdx);\n\tinterpreter::IRCommon* CreateLdthreadlocal(TemporaryMemoryArena& pool, int32_t dstIdx, const FieldInfo* fieldInfo, uint32_t parent);\n\tinterpreter::IRCommon* CreateStthreadlocal(TemporaryMemoryArena& pool, const FieldInfo* fieldInfo, uint32_t parent, int32_t dataIdx);\n\n\tEvalStackReduceDataType GetEvalStackReduceDataType(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn NATIVE_INT_REDUCE_TYPE;\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t\treturn EvalStackReduceDataType::I4;\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\treturn EvalStackReduceDataType::R4;\n\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t\treturn EvalStackReduceDataType::I8;\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\treturn EvalStackReduceDataType::R8;\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_BYREF:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\t\treturn NATIVE_INT_REDUCE_TYPE;\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t\treturn EvalStackReduceDataType::Other;\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\treturn klass->enumtype ? GetEvalStackReduceDataType(&klass->element_class->byval_arg) : EvalStackReduceDataType::Other;\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\tif (genericClass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\treturn NATIVE_INT_REDUCE_TYPE;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\treturn klass->enumtype ? GetEvalStackReduceDataType(&klass->element_class->byval_arg) : EvalStackReduceDataType::Other;\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetEvalStackReduceDataType invalid type\");\n\t\t\treturn EvalStackReduceDataType::Other;\n\t\t}\n\t\t}\n\t}\n\n\tint32_t GetSizeByReduceType(EvalStackReduceDataType type)\n\t{\n\t\tswitch (type)\n\t\t{\n\t\tcase hybridclr::transform::EvalStackReduceDataType::I4:\n\t\tcase hybridclr::transform::EvalStackReduceDataType::R4:\n\t\t\treturn 4;\n\t\tcase hybridclr::transform::EvalStackReduceDataType::I8:\n\t\tcase hybridclr::transform::EvalStackReduceDataType::R8:\n\t\t\treturn 8;\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"GetSizeByReduceType not support type\");\n\t\t\treturn PTR_SIZE;\n\t\t}\n\t\t}\n\t}\n\n\tLocationDescInfo ComputValueTypeDescInfo(int32_t size, bool hasReference)\n\t{\n#if HYBRIDCLR_ENABLE_WRITE_BARRIERS\n\t\tif (hasReference)\n\t\t{\n\t\t\treturn { LocationDescType::StructContainsRef, size };\n\t\t}\n#endif\n\t\tswitch (size)\n\t\t{\n\t\tcase 1: return { LocationDescType::U1, 0 };\n\t\tcase 2: return { LocationDescType::U2, 0 };\n\t\tcase 4: return { LocationDescType::I4, 0 };\n\t\tcase 8: return { LocationDescType::I8, 0 };\n\t\tdefault: return { LocationDescType::S, size };\n\t\t}\n\t}\n\n\tLocationDescInfo ComputLocationDescInfo(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn { NATIVE_INT_DESC_TYPE, 0 };\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t\treturn{ LocationDescType::U1, 0 };\n\t\tcase IL2CPP_TYPE_I1:\n\t\t\treturn{ LocationDescType::I1, 0 };\n\t\tcase IL2CPP_TYPE_I2:\n\t\t\treturn{ LocationDescType::I2, 0 };\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t\treturn{ LocationDescType::U2, 0 };\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\treturn{ LocationDescType::I4, 0 };\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\treturn{ LocationDescType::I8, 0 };\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_BYREF:\n\t\t\treturn{ NATIVE_INT_DESC_TYPE, 0 };\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn{ LocationDescType::Ref, 0 };\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t\treturn { LocationDescType::S, sizeof(Il2CppTypedRef) };\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\tif (klass->enumtype)\n\t\t\t{\n\t\t\t\treturn ComputLocationDescInfo(&klass->castClass->byval_arg);\n\t\t\t}\n\t\t\treturn ComputValueTypeDescInfo(il2cpp::vm::Class::GetValueSize(klass, nullptr), klass->has_references);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\tif (genericClass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\t\treturn{ LocationDescType::Ref, 0 };\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\t\tif (klass->enumtype)\n\t\t\t\t{\n\t\t\t\t\treturn ComputLocationDescInfo(&klass->castClass->byval_arg);\n\t\t\t\t}\n\t\t\t\treturn ComputValueTypeDescInfo(il2cpp::vm::Class::GetValueSize(klass, nullptr), klass->has_references);\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support arg type\");\n\t\t\treturn{ NATIVE_INT_DESC_TYPE, 0 };\n\t\t}\n\t\t}\n\t}\n\n\tIRCommon* CreateLoadExpandDataToStackVarVar(TemporaryMemoryArena& pool, int32_t dstOffset, int32_t srcOffset, const Il2CppType* type, int32_t size)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\tCreateIR(ir, LdlocVarVar);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase Il2CppTypeEnum::IL2CPP_TYPE_I1:\n\t\t{\n\t\t\tCreateIR(ir, LdlocExpandVarVar_i1);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\tcase Il2CppTypeEnum::IL2CPP_TYPE_BOOLEAN:\n\t\tcase Il2CppTypeEnum::IL2CPP_TYPE_U1:\n\t\t{\n\t\t\tCreateIR(ir, LdlocExpandVarVar_u1);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\tcase Il2CppTypeEnum::IL2CPP_TYPE_I2:\n\t\t{\n\t\t\tCreateIR(ir, LdlocExpandVarVar_i2);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t{\n\t\t\tCreateIR(ir, LdlocExpandVarVar_u2);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tif (klass->enumtype)\n\t\t\t{\n\t\t\t\treturn CreateLoadExpandDataToStackVarVar(pool, dstOffset, srcOffset, &klass->element_class->byval_arg, size);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: break;\n\t\t}\n\t\tif (size <= 8)\n\t\t{\n\t\t\tCreateIR(ir, LdlocVarVar);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tIL2CPP_ASSERT(size <= MAX_VALUE_TYPE_SIZE);\n\t\t\tCreateIR(ir, LdlocVarVarSize);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\tir->size = size;\n\t\t\treturn ir;\n\t\t}\n\t}\n\n\tIRCommon* CreateAssignVarVar(TemporaryMemoryArena& pool, int32_t dstOffset, int32_t srcOffset, int32_t size)\n\t{\n\t\tIL2CPP_ASSERT(dstOffset >= 0 && dstOffset < 0x10000);\n\t\tIL2CPP_ASSERT(srcOffset >= 0 && srcOffset < 0x10000);\n\t\tif (size <= 8)\n\t\t{\n\t\t\tCreateIR(ir, LdlocVarVar);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\treturn ir;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tIL2CPP_ASSERT(size <= MAX_VALUE_TYPE_SIZE);\n\t\t\tCreateIR(ir, LdlocVarVarSize);\n\t\t\tir->dst = dstOffset;\n\t\t\tir->src = srcOffset;\n\t\t\tir->size = size;\n\t\t\treturn ir;\n\t\t}\n\t}\n\n    constexpr uint32_t kMaxShortFieldOffset = 0xFFFF;\n\n\tinterpreter::IRCommon* CreateClassLdfldSmall(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, uint16_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, LdfldVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdfldVarVar_i4, HiOpcodeEnum::LdfldVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdfldVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateClassLdfldLarge(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, uint32_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, LdfldLargeVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdfldLargeVarVar_i4, HiOpcodeEnum::LdfldLargeVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldLargeVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdfldLargeVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\n\tinterpreter::IRCommon* CreateClassLdfld(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, const FieldInfo* fieldInfo)\n\t{\n\t\tuint32_t offset = GetFieldOffset(fieldInfo);\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\t\tif (offset <= kMaxShortFieldOffset)\n\t\t{\n\t\t\treturn CreateClassLdfldSmall(pool, dstIdx, objIdx, (uint16_t)offset, desc);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn CreateClassLdfldLarge(pool, dstIdx, objIdx, offset, desc);\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateValueTypeLdfldSmall(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, uint16_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, LdfldValueTypeVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdfldValueTypeVarVar_i4, HiOpcodeEnum::LdfldValueTypeVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdfldValueTypeVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateValueTypeLdfldLarge(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, uint32_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, LdfldValueTypeLargeVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdfldValueTypeLargeVarVar_i4, HiOpcodeEnum::LdfldValueTypeLargeVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdfldValueTypeLargeVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdfldValueTypeLargeVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateValueTypeLdfld(TemporaryMemoryArena& pool, int32_t dstIdx, int32_t objIdx, const FieldInfo* fieldInfo)\n\t{\n\t\tuint32_t offset = GetFieldOffset(fieldInfo);\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\t\tif (offset <= kMaxShortFieldOffset)\n\t\t{\n\t\t\treturn CreateValueTypeLdfldSmall(pool, dstIdx, objIdx, (uint16_t)offset, desc);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn CreateValueTypeLdfldLarge(pool, dstIdx, objIdx, offset, desc);\n        }\n\t}\n\n\tinterpreter::IRCommon* CreateStfldSmall(TemporaryMemoryArena& pool, int32_t objIdx, const FieldInfo* fieldInfo, int32_t dataIdx, uint16_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, StfldVarVar_i1);\n\t\tir->data = dataIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldVarVar_ref;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, StfldVarVar_n_4);\n\t\t\t\tirn->data = dataIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tCreateIR(irn, StfldVarVar_WriteBarrier_n_4);\n\t\t\tirn->data = dataIdx;\n\t\t\tirn->obj = objIdx;\n\t\t\tirn->offset = offset;\n\t\t\tirn->size = desc.size;\n\t\t\treturn irn;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateStfldLarge(TemporaryMemoryArena& pool, int32_t objIdx, const FieldInfo* fieldInfo, int32_t dataIdx, uint32_t offset, LocationDescInfo desc)\n\t{\n\t\tCreateIR(ir, StfldLargeVarVar_i1);\n\t\tir->data = dataIdx;\n\t\tir->obj = objIdx;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_ref;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StfldLargeVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, StfldLargeVarVar_n_4);\n\t\t\t\tirn->data = dataIdx;\n\t\t\t\tirn->obj = objIdx;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tCreateIR(irn, StfldLargeVarVar_WriteBarrier_n_4);\n\t\t\tirn->data = dataIdx;\n\t\t\tirn->obj = objIdx;\n\t\t\tirn->offset = offset;\n\t\t\tirn->size = desc.size;\n\t\t\treturn irn;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateStfld(TemporaryMemoryArena& pool, int32_t objIdx, const FieldInfo* fieldInfo, int32_t dataIdx)\n\t{\n\t\tuint32_t offset = GetFieldOffset(fieldInfo);\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\t\tif (offset <= kMaxShortFieldOffset)\n\t\t{\n\t\t\treturn CreateStfldSmall(pool, objIdx, fieldInfo, dataIdx, (uint16_t)offset, desc);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn CreateStfldLarge(pool, objIdx, fieldInfo, dataIdx, offset,  desc);\n        }\n\t}\n\n\tinterpreter::IRCommon* CreateLdsfld(TemporaryMemoryArena& pool, int32_t dstIdx, const FieldInfo* fieldInfo, uint32_t parent)\n\t{\n\t\tuint32_t offset = fieldInfo->offset;\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\n\t\tCreateIR(ir, LdsfldVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->klass = parent;\n\t\tir->offset = offset;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdsfldVarVar_i4, HiOpcodeEnum::LdsfldVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdsfldVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdsfldVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->klass = parent;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateStsfld(TemporaryMemoryArena& pool, const FieldInfo* fieldInfo, uint32_t parent, int32_t dataIdx)\n\t{\n\t\tuint32_t offset = fieldInfo->offset;\n\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\n\t\tCreateIR(ir, StsfldVarVar_i1);\n\t\tir->klass = parent;\n\t\tir->offset = offset;\n\t\tir->data = dataIdx;\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_ref;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StsfldVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, StsfldVarVar_n_4);\n\t\t\t\tirn->klass = parent;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->data = dataIdx;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tCreateIR(irn, StsfldVarVar_WriteBarrier_n_4);\n\t\t\tirn->klass = parent;\n\t\t\tirn->offset = offset;\n\t\t\tirn->data = dataIdx;\n\t\t\tirn->size = desc.size;\n\t\t\treturn irn;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateLdthreadlocal(TemporaryMemoryArena& pool, int32_t dstIdx, const FieldInfo* fieldInfo, uint32_t parent)\n\t{\n\t\tIL2CPP_ASSERT(fieldInfo->offset == THREAD_STATIC_FIELD_OFFSET);\n\t\tint32_t offset = GetThreadStaticFieldOffset(fieldInfo);\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\n\t\tCreateIR(ir, LdthreadlocalVarVar_i1);\n\t\tir->dst = dstIdx;\n\t\tir->klass = parent;\n\t\tir->offset = offset;\n\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdthreadlocalVarVar_i4, HiOpcodeEnum::LdthreadlocalVarVar_i8);\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::LdthreadlocalVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, LdthreadlocalVarVar_n_4);\n\t\t\t\tirn->dst = dstIdx;\n\t\t\t\tirn->klass = parent;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\tinterpreter::IRCommon* CreateStthreadlocal(TemporaryMemoryArena& pool, const FieldInfo* fieldInfo, uint32_t parent, int32_t dataIdx)\n\t{\n\t\tIL2CPP_ASSERT(fieldInfo->offset == THREAD_STATIC_FIELD_OFFSET);\n\t\tint32_t offset = GetThreadStaticFieldOffset(fieldInfo);\n\n\t\tconst Il2CppType* type = fieldInfo->type;\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\n\t\tCreateIR(ir, StthreadlocalVarVar_i1);\n\t\tir->klass = parent;\n\t\tir->offset = offset;\n\t\tir->data = dataIdx;\n\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_i1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U1:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_u1;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_i2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::U2:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_u2;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I4:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_i4;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::I8:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_i8;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::Ref:\n\t\t{\n\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_ref;\n\t\t\treturn ir;\n\t\t}\n\t\tcase LocationDescType::S:\n\t\t{\n\t\t\tswitch (desc.size)\n\t\t\t{\n\t\t\tcase 12:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_12;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 16:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_16;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 20: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_20;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 24: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_24;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 28: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_28;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tcase 32: \n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::StthreadlocalVarVar_size_32;\n\t\t\t\treturn ir;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tCreateIR(irn, StthreadlocalVarVar_n_4);\n\t\t\t\tirn->klass = parent;\n\t\t\t\tirn->offset = offset;\n\t\t\t\tirn->data = dataIdx;\n\t\t\t\tirn->size = desc.size;\n\t\t\t\treturn irn;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcase LocationDescType::StructContainsRef:\n\t\t{\n\t\t\tCreateIR(irn, StthreadlocalVarVar_WriteBarrier_n_4);\n\t\t\tirn->klass = parent;\n\t\t\tirn->offset = offset;\n\t\t\tirn->data = dataIdx;\n\t\t\tirn->size = desc.size;\n\t\t\treturn irn;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\treturn ir;\n\t\t}\n\t\t}\n\t}\n\n\t// TransformContext implements\n\n\n\tHiOpcodeEnum TransformContext::CalcGetMdArrElementVarVarOpcode(const Il2CppType* type)\n\t{\n\t\tLocationDescInfo desc = ComputLocationDescInfo(type);\n\t\tswitch (desc.type)\n\t\t{\n\t\tcase LocationDescType::I1: return HiOpcodeEnum::GetMdArrElementVarVar_i1;\n\t\tcase LocationDescType::U1: return HiOpcodeEnum::GetMdArrElementVarVar_u1;\n\t\tcase LocationDescType::I2: return HiOpcodeEnum::GetMdArrElementVarVar_i2;\n\t\tcase LocationDescType::U2: return HiOpcodeEnum::GetMdArrElementVarVar_u2;\n\t\tcase LocationDescType::I4: return HiOpcodeEnum::GetMdArrElementVarVar_i4;\n\t\tcase LocationDescType::I8: return HiOpcodeEnum::GetMdArrElementVarVar_i8;\n\t\tcase LocationDescType::Ref: return ARCH_ARGUMENT(HiOpcodeEnum::GetMdArrElementVarVar_i4, HiOpcodeEnum::GetMdArrElementVarVar_i8);\n\t\tcase LocationDescType::S:\n\t\tcase LocationDescType::StructContainsRef: return HiOpcodeEnum::GetMdArrElementVarVar_n;\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"CalcGetMdArrElementVarVarOpcode\");\n\t\t\treturn (HiOpcodeEnum)0;\n\t\t}\n\t\t}\n\t}\n\n\tTransformContext::TransformContext(hybridclr::metadata::Image* image, const MethodInfo* methodInfo, metadata::MethodBody& body, TemporaryMemoryArena& pool, il2cpp::utils::dynamic_array<uint64_t>& resolveDatas)\n\t\t: image(image), methodInfo(methodInfo), body(body), pool(pool), resolveDatas(resolveDatas),\n\t\tactualParamCount(0), ip2bb(nullptr), curbb(nullptr), args(nullptr), locals(nullptr), evalStack(nullptr),\n\t\tevalStackTop(0), evalStackBaseOffset(0), curStackSize(0), maxStackSize(0),\n\t\tnextFlowIdx(0), ipBase(nullptr), ip(nullptr), ipOffset(0), ir2offsetMap(nullptr),\n\t\tprefixFlags(0), shareMethod(nullptr), totalIRSize(0), totalArgSize(0), totalArgLocalSize(0), initLocals(false)\n\t{\n\n\t}\n\n\tTransformContext::~TransformContext()\n\t{\n\t\tfor (IRBasicBlock* bb : irbbs)\n\t\t{\n\t\t\tbb->~IRBasicBlock();\n\t\t}\n\t\tif (ir2offsetMap)\n\t\t{\n\t\t\tdelete ir2offsetMap;\n\t\t}\n\t}\n\n\tuint32_t TransformContext::GetOrAddResolveDataIndex(const void* ptr)\n\t{\n\t\tauto it = ptr2DataIdxs.find(ptr);\n\t\tif (it != ptr2DataIdxs.end())\n\t\t{\n\t\t\treturn it->second;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tuint32_t newIndex = (uint32_t)resolveDatas.size();\n\t\t\tresolveDatas.push_back((uint64_t)ptr);\n\t\t\tptr2DataIdxs.insert({ ptr, newIndex });\n\t\t\treturn newIndex;\n\t\t}\n\t}\n\n\tvoid TransformContext::PushStackByType(const Il2CppType* type)\n\t{\n\t\tint32_t byteSize = GetTypeValueSize(type);\n\t\tint32_t stackSize = GetStackSizeByByteSize(byteSize);\n\t\tevalStack[evalStackTop].reduceType = GetEvalStackReduceDataType(type);\n\t\tevalStack[evalStackTop].byteSize = byteSize;\n\t\tevalStack[evalStackTop].locOffset = GetEvalStackNewTopOffset();\n\t\tevalStackTop++;\n\t\tcurStackSize += stackSize;\n\t\tmaxStackSize = std::max(curStackSize, maxStackSize);\n\t\tIL2CPP_ASSERT(maxStackSize < MAX_STACK_SIZE);\n\t}\n\n\tvoid TransformContext::PushStackByReduceType(EvalStackReduceDataType t)\n\t{\n\t\tint32_t byteSize = GetSizeByReduceType(t);\n\t\tint32_t stackSize = GetStackSizeByByteSize(byteSize);\n\t\tevalStack[evalStackTop].reduceType = t;\n\t\tevalStack[evalStackTop].byteSize = byteSize;\n\t\tevalStack[evalStackTop].locOffset = GetEvalStackNewTopOffset();\n\t\tevalStackTop++; curStackSize += stackSize;\n\t\tmaxStackSize = std::max(curStackSize, maxStackSize);\n\t\tIL2CPP_ASSERT(maxStackSize < MAX_STACK_SIZE);\n\t}\n\n\tvoid TransformContext::DuplicateStack()\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\tEvalStackVarInfo& oldTop = evalStack[evalStackTop - 1];\n\t\tint32_t stackSize = GetStackSizeByByteSize(oldTop.byteSize);\n\t\tEvalStackVarInfo& newTop = evalStack[evalStackTop++];\n\t\tnewTop.reduceType = oldTop.reduceType;\n\t\tnewTop.byteSize = oldTop.byteSize;\n\t\tnewTop.locOffset = curStackSize;\n\t\tcurStackSize += stackSize;\n\t\tmaxStackSize = std::max(curStackSize, maxStackSize);\n\t\tIL2CPP_ASSERT(maxStackSize < MAX_STACK_SIZE);\n\t}\n\n\tvoid TransformContext::PopStack()\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t--evalStackTop;\n\t\tcurStackSize = evalStack[evalStackTop].locOffset;\n\t}\n\n\tvoid TransformContext::PopStackN(int32_t n)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= n && n >= 0);\n\t\tif (n > 0)\n\t\t{\n\t\t\tevalStackTop -= n;\n\t\t\tcurStackSize = evalStack[evalStackTop].locOffset;\n\t\t}\n\t}\n\n\tvoid TransformContext::PopAllStack()\n\t{\n\t\tif (evalStackTop > 0)\n\t\t{\n\t\t\tevalStackTop = 0;\n\t\t\tcurStackSize = evalStackBaseOffset;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tIL2CPP_ASSERT(curStackSize == evalStackBaseOffset);\n\t\t}\n\t}\n\n\tvoid TransformContext::InsertMemoryBarrier()\n\t{\n\t\tif (prefixFlags & (int32_t)PrefixFlags::Volatile)\n\t\t{\n\t\t\tCreateAddIR(_mb, MemoryBarrier);\n\t\t}\n\t}\n\n\tvoid TransformContext::ResetPrefixFlags()\n\t{\n\t\tprefixFlags = 0;\n\t}\n\n\tvoid TransformContext::Add_ldind(HiOpcodeEnum opCode, EvalStackReduceDataType dataType)\n\t{\n\t\tCreateAddIR(ir, LdindVarVar_i1);\n\t\tir->type = opCode;\n\t\tir->dst = ir->src = GetEvalStackTopOffset();\n\t\tPopStack();\n\t\tPushStackByReduceType(dataType);\n\t\tInsertMemoryBarrier();\n\t\tResetPrefixFlags();\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_stind(HiOpcodeEnum opCode)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\tInsertMemoryBarrier();\n\t\tResetPrefixFlags();\n\t\tCreateAddIR(ir, StindVarVar_i1);\n\t\tir->type = opCode;\n\t\tir->dst = evalStack[evalStackTop - 2].locOffset;\n\t\tir->src = evalStack[evalStackTop - 1].locOffset;\n\t\tPopStackN(2);\n\t\tip++;\n\t}\n\n\tvoid TransformContext::PushOffset(int32_t* offsetPtr)\n\t{\n\t\tIL2CPP_ASSERT(splitOffsets.find(*(offsetPtr)) != splitOffsets.end());\n\t\trelocationOffsets.push_back(offsetPtr);\n\t}\n\n\tvoid TransformContext::PushBranch(int32_t targetOffset)\n\t{\n\t\tIL2CPP_ASSERT(splitOffsets.find(targetOffset) != splitOffsets.end());\n\t\tIRBasicBlock* targetBb = ip2bb[targetOffset];\n\t\tif (!targetBb->inPending)\n\t\t{\n\t\t\ttargetBb->inPending = true;\n\t\t\tFlowInfo* fi = pool.NewAny<FlowInfo>();\n\t\t\tfi->offset = targetOffset;\n\t\t\tfi->curStackSize = curStackSize;\n\t\t\tif (evalStackTop > 0)\n\t\t\t{\n\t\t\t\tfi->evalStack.insert(fi->evalStack.end(), evalStack, evalStack + evalStackTop);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(curStackSize == evalStackBaseOffset);\n\t\t\t}\n\t\t\tpendingFlows.push_back(fi);\n\t\t}\n\t}\n\n\tbool TransformContext::FindNextFlow()\n\t{\n\t\tfor (; nextFlowIdx < (int32_t)pendingFlows.size(); )\n\t\t{\n\t\t\tFlowInfo* fi = pendingFlows[nextFlowIdx++];\n\t\t\tIRBasicBlock* nextBb = ip2bb[fi->offset];\n\t\t\tif (!nextBb->visited)\n\t\t\t{\n\t\t\t\tip = ipBase + fi->offset;\n\t\t\t\tif (!fi->evalStack.empty()) {\n\n\t\t\t\t\tstd::memcpy(evalStack, &fi->evalStack[0], sizeof(EvalStackVarInfo) * fi->evalStack.size());\n\t\t\t\t}\n\t\t\t\tcurStackSize = fi->curStackSize;\n\t\t\t\tIL2CPP_ASSERT(curStackSize >= evalStackBaseOffset);\n\t\t\t\tevalStackTop = (int32_t)fi->evalStack.size();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tvoid TransformContext::AddInst(IRCommon* ir)\n\t{\n\t\tIL2CPP_ASSERT(ir->type != HiOpcodeEnum::None);\n\t\tcurbb->insts.push_back(ir);\n\t\tif (ir2offsetMap)\n\t\t{\n\t\t\tir2offsetMap->insert({ ir, ipOffset });\n\t\t}\n\t}\n\n\tvoid TransformContext::AddInst_ldarg(int32_t argIdx)\n\t{\n\t\tArgVarInfo& __arg = args[argIdx];\n\t\tIRCommon* ir = CreateLoadExpandDataToStackVarVar(pool, GetEvalStackNewTopOffset(), __arg.argLocOffset, __arg.type, GetTypeValueSize(__arg.type));\n\t\tAddInst(ir);\n\t\tPushStackByType(__arg.type);\n\t}\n\n\tbool TransformContext::IsCreateNotNullObjectInstrument(IRCommon* ir)\n\t{\n\t\tswitch (ir->type)\n\t\t{\n\t\tcase HiOpcodeEnum::BoxVarVar:\n\t\t{\n\t\t\tIRBoxVarVar* irBox = (IRBoxVarVar*)ir;\n\t\t\tIl2CppClass* klass = ((Il2CppClass*)resolveDatas[irBox->klass]);\n\t\t\treturn IS_CLASS_VALUE_TYPE(klass) && !il2cpp::vm::Class::IsNullable(klass);\n\t\t}\n\t\tcase HiOpcodeEnum::NewSystemObjectVar:\n\t\tcase HiOpcodeEnum::NewString:\n\t\tcase HiOpcodeEnum::NewString_2:\n\t\tcase HiOpcodeEnum::NewString_3:\n\t\tcase HiOpcodeEnum::CtorDelegate:\n\t\tcase HiOpcodeEnum::NewDelegate:\n\t\t\t//case HiOpcodeEnum::NewClassInterpVar_Ctor_0:\n\t\t\t//case HiOpcodeEnum::NewClassInterpVar:\n\t\t\t//case HiOpcodeEnum::NewClassVar:\n\t\t\t//case HiOpcodeEnum::NewClassVar_Ctor_0:\n\t\t\t//case HiOpcodeEnum::NewClassVar_NotCtor:\n\t\tcase HiOpcodeEnum::NewMdArrVarVar_length:\n\t\tcase HiOpcodeEnum::NewMdArrVarVar_length_bound:\n\t\tcase HiOpcodeEnum::NewArrVarVar:\n\t\tcase HiOpcodeEnum::LdsfldaFromFieldDataVarVar:\n\t\tcase HiOpcodeEnum::LdsfldaVarVar:\n\t\tcase HiOpcodeEnum::LdthreadlocalaVarVar:\n\t\tcase HiOpcodeEnum::LdlocVarAddress:\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tvoid TransformContext::RemoveLastInstrument()\n\t{\n\t\tIL2CPP_ASSERT(!curbb->insts.empty());\n\t\tcurbb->insts.pop_back();\n\t}\n\n\tvoid TransformContext::AddInst_ldarga(int32_t argIdx)\n\t{\n\t\tIL2CPP_ASSERT(argIdx < actualParamCount);\n\t\tArgVarInfo& argInfo = args[argIdx];\n\t\tCreateAddIR(ir, LdlocVarAddress);\n\t\tir->dst = GetEvalStackNewTopOffset();\n\t\tir->src = argInfo.argLocOffset;\n\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t}\n\n\tvoid TransformContext::AddInst_starg(int32_t argIdx)\n\t{\n\t\tIL2CPP_ASSERT(argIdx < actualParamCount);\n\t\tArgVarInfo& __arg = args[argIdx];\n\t\tIRCommon* ir = CreateAssignVarVar(pool, __arg.argLocOffset, GetEvalStackTopOffset(), GetTypeValueSize(__arg.type));\n\t\tAddInst(ir);\n\t\tPopStack();\n\t}\n\n\tvoid TransformContext::CreateAddInst_ldloc(int32_t locIdx)\n\t{\n\t\tLocVarInfo& __loc = locals[locIdx];\n\t\tIRCommon* ir = CreateLoadExpandDataToStackVarVar(pool, GetEvalStackNewTopOffset(), __loc.locOffset, __loc.type, GetTypeValueSize(__loc.type));\n\t\tAddInst(ir);\n\t\tPushStackByType(__loc.type);\n\t}\n\n\tvoid TransformContext::CreateAddInst_stloc(int32_t locIdx)\n\t{\n\t\tLocVarInfo& __loc = locals[locIdx];\n\t\tIRCommon* ir = CreateAssignVarVar(pool, __loc.locOffset, GetEvalStackTopOffset(), GetTypeValueSize(__loc.type));\n\t\tAddInst(ir);\n\t\tPopStack();\n\t}\n\n\tvoid TransformContext::CreateAddInst_ldloca(int32_t locIdx)\n\t{\n\t\tCreateAddIR(ir, LdlocVarAddress);\n\t\tLocVarInfo& __loc = locals[locIdx];\n\t\tir->dst = GetEvalStackNewTopOffset();\n\t\tir->src = __loc.locOffset;\n\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t}\n\n\tvoid TransformContext::CreateAddInst_ldc4(int32_t c, EvalStackReduceDataType rtype)\n\t{\n\t\tCreateAddIR(ir, LdcVarConst_4);\n\t\tir->dst = GetEvalStackNewTopOffset();\n\t\tir->src = c;\n\t\tPushStackByReduceType(rtype);\n\t}\n\n\tvoid TransformContext::CreateAddInst_ldc8(int64_t c, EvalStackReduceDataType rtype)\n\t{\n\t\tCreateAddIR(ir, LdcVarConst_8);\n\t\tir->dst = GetEvalStackNewTopOffset();\n\t\tir->src = c;\n\t\tPushStackByReduceType(rtype);\n\t}\n\n\tvoid TransformContext::Add_brtruefalse(bool c, int32_t targetOffset)\n\t{\n\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\t\tIRCommon* lastIR = GetLastInstrument();\n\t\tif (lastIR == nullptr || !IsCreateNotNullObjectInstrument(lastIR))\n\t\t{\n\t\t\tif (top.byteSize <= 4)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, BranchTrueVar_i4);\n\t\t\t\tir->type = c ? HiOpcodeEnum::BranchTrueVar_i4 : HiOpcodeEnum::BranchFalseVar_i4;\n\t\t\t\tir->op = top.locOffset;\n\t\t\t\tir->offset = targetOffset;\n\t\t\t\tPushOffset(&ir->offset);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, BranchTrueVar_i8);\n\t\t\t\tir->type = c ? HiOpcodeEnum::BranchTrueVar_i8 : HiOpcodeEnum::BranchFalseVar_i8;\n\t\t\t\tir->op = top.locOffset;\n\t\t\t\tir->offset = targetOffset;\n\t\t\t\tPushOffset(&ir->offset);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// optimize instrument sequence like` box T!; brtrue`\n\t\t\t// this optimization is not semanticly equals to origin instrument because may ommit `Class::InitRuntime`.\n\t\t\t// but it's ok in most occasions.\n\t\t\tRemoveLastInstrument();\n\t\t\tif (c)\n\t\t\t{\n\t\t\t\t// brtrue always true, replace with br\n\t\t\t\tCreateAddIR(ir, BranchUncondition_4);\n\t\t\t\tir->offset = targetOffset;\n\t\t\t\tPushOffset(&ir->offset);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// brfalse always false, run throughtly.\n\t\t\t}\n\t\t}\n\t\tPopStack();\n\t\tPushBranch(targetOffset);\n\t}\n\n\tvoid TransformContext::Add_bc(int32_t ipOffset, int32_t brOffset, int32_t opSize, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8)\n\t{\n\t\tint32_t targetOffset = ipOffset + brOffset + opSize;\n\t\tEvalStackVarInfo& op1 = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& op2 = evalStack[evalStackTop - 1];\n\t\tIRBranchVarVar_Ceq_i4* ir = pool.AllocIR<IRBranchVarVar_Ceq_i4>();\n\t\tir->type = (HiOpcodeEnum)0;\n\t\tir->op1 = op1.locOffset;\n\t\tir->op2 = op2.locOffset;\n\t\tir->offset = targetOffset;\n\t\tPushOffset(&ir->offset);\n\t\tswitch (op1.reduceType)\n\t\t{\n\t\tcase EvalStackReduceDataType::I4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tCreateAddIR(irConv, ConvertVarVar_i4_i8);\n\t\t\t\tirConv->dst = irConv->src = op1.locOffset;\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(false && \"I4 not match\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::I8:\n\t\t{\n\t\t\tIL2CPP_ASSERT(op2.reduceType == EvalStackReduceDataType::I8);\n\t\t\tir->type = opI8;\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t{\n\t\t\t\tir->type = opR4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(false && \"R4 not match\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R8:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t{\n\t\t\t\tir->type = opR8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(false && \"R8 not match\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tIL2CPP_ASSERT(false && \"nothing match\");\n\t\t}\n\t\t}\n\t\tAddInst(ir);\n\t\tPopStackN(2);\n\t\tPushBranch(targetOffset);\n\t}\n\n\tvoid TransformContext::Add_conv(int32_t dstTypeSize, EvalStackReduceDataType dstReduceType, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\t\t//if (top.reduceType != dstReduceType)\n\t\t{\n\t\t\tCreateIR(ir, ConvertVarVar_i4_u4);\n\t\t\tir->type = (HiOpcodeEnum)0;\n\t\t\tir->dst = ir->src = GetEvalStackTopOffset();\n\t\t\tswitch (top.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI4;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tir->type = opI8;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t{\n\t\t\t\tir->type = opR4;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t{\n\t\t\t\tir->type = opR8;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"conv\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttop.reduceType = dstReduceType;\n\t\ttop.byteSize = dstTypeSize;\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_conv_ovf(int32_t dstTypeSize, EvalStackReduceDataType dstReduceType, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\t\t//if (top.reduceType != dstReduceType)\n\t\t{\n\t\t\tCreateIR(ir, ConvertOverflowVarVar_i4_u4);\n\t\t\tir->type = (HiOpcodeEnum)0;\n\t\t\tir->dst = ir->src = GetEvalStackTopOffset();\n\t\t\tswitch (top.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI4;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tir->type = opI8;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t{\n\t\t\t\tir->type = opR4;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t{\n\t\t\t\tir->type = opR8;\n\t\t\t\tAddInst(ir);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"conv_ovf\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttop.reduceType = dstReduceType;\n\t\ttop.byteSize = dstTypeSize;\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_binop(HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\tEvalStackVarInfo& op1 = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& op2 = evalStack[evalStackTop - 1];\n\t\tCreateIR(ir, BinOpVarVarVar_Add_i4);\n\t\tir->op1 = op1.locOffset;\n\t\tir->op2 = op2.locOffset;\n\t\tir->ret = op1.locOffset;\n\t\tEvalStackReduceDataType resultType;\n\t\tswitch (op1.reduceType)\n\t\t{\n\t\tcase EvalStackReduceDataType::I4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tresultType = EvalStackReduceDataType::I4;\n\t\t\t\tir->type = opI4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tCreateAddIR(irConv, ConvertVarVar_i4_i8);\n\t\t\t\tirConv->dst = irConv->src = op1.locOffset;\n\t\t\t\tir->type = opI8;\n\t\t\t\tresultType = EvalStackReduceDataType::I8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"Add_bin_op I4 op unknown\");\n\t\t\t\tresultType = (EvalStackReduceDataType)-1;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::I8:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tCreateAddIR(irConv, ConvertVarVar_i4_i8);\n\t\t\t\tirConv->dst = irConv->src = op2.locOffset;\n\t\t\t\tresultType = EvalStackReduceDataType::I8;\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tresultType = EvalStackReduceDataType::I8;\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"Add_bin_op I8 op unknown\");\n\t\t\t\tresultType = (EvalStackReduceDataType)-1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t{\n\t\t\t\tresultType = EvalStackReduceDataType::R4;\n\t\t\t\tir->type = opR4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"Add_bin_op R4 op unknown\");\n\t\t\t\tresultType = (EvalStackReduceDataType)-1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R8:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t{\n\t\t\t\tresultType = EvalStackReduceDataType::R8;\n\t\t\t\tir->type = opR8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"Add_bin_op R8 op unknown\");\n\t\t\t\tresultType = (EvalStackReduceDataType)-1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"Add_bin_op unknown\");\n\t\t\tresultType = (EvalStackReduceDataType)-1;\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t\tPopStack();\n\t\top1.reduceType = resultType;\n\t\top1.byteSize = GetSizeByReduceType(resultType);\n\t\tAddInst(ir);\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_shiftop(HiOpcodeEnum opI4I4, HiOpcodeEnum opI4I8, HiOpcodeEnum opI8I4, HiOpcodeEnum opI8I8)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\tEvalStackVarInfo& op1 = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& op2 = evalStack[evalStackTop - 1];\n\t\tCreateAddIR(ir, BitShiftBinOpVarVarVar_Shr_i4_i4);\n\t\tir->ret = op1.locOffset;\n\t\tir->value = op1.locOffset;\n\t\tir->shiftAmount = op2.locOffset;\n\t\tswitch (op1.reduceType)\n\t\t{\n\t\tcase EvalStackReduceDataType::I4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI4I4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tir->type = opI4I8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"shitf i4\");\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::I8:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI8I4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\n\t\t\t\tir->type = opI8I8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"shitf i8\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"shitf i\");\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t\tPopStack();\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_compare(HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\tEvalStackVarInfo& op1 = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& op2 = evalStack[evalStackTop - 1];\n\t\tCreateIR(ir, CompOpVarVarVar_Ceq_i4);\n\t\tir->c1 = op1.locOffset;\n\t\tir->c2 = op2.locOffset;\n\t\tir->ret = op1.locOffset;\n\t\tswitch (op1.reduceType)\n\t\t{\n\t\tcase EvalStackReduceDataType::I4:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tir->type = opI4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tCreateAddIR(irConv, ConvertVarVar_i4_i8);\n\t\t\t\tirConv->dst = irConv->src = op1.locOffset;\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"compare i4\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::I8:\n\t\t{\n\t\t\tswitch (op2.reduceType)\n\t\t\t{\n\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t{\n\t\t\t\tCreateAddIR(irConv, ConvertVarVar_i4_i8);\n\t\t\t\tirConv->dst = irConv->src = op2.locOffset;\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t{\n\t\t\t\tir->type = opI8;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"compare i8\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R4:\n\t\t{\n\t\t\tif (op2.reduceType == EvalStackReduceDataType::R4)\n\t\t\t{\n\t\t\t\tir->type = opR4;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"compare r4\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase EvalStackReduceDataType::R8:\n\t\t{\n\t\t\tif (op2.reduceType == EvalStackReduceDataType::R8)\n\t\t\t{\n\t\t\t\tir->type = opR8;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"compare r8\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"compare\");\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t\tPopStackN(2);\n\t\tAddInst(ir);\n\t\tPushStackByReduceType(EvalStackReduceDataType::I4);\n\t}\n\n\tvoid TransformContext::Add_ldelem(EvalStackReduceDataType resultType, HiOpcodeEnum opI4)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\tEvalStackVarInfo& arr = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& index = evalStack[evalStackTop - 1];\n\n\t\tCreateAddIR(ir, GetArrayElementVarVar_i1);\n\t\tir->type = opI4;\n\t\tir->arr = arr.locOffset;\n\t\tir->index = index.locOffset;\n\t\tir->dst = arr.locOffset;\n\n\t\tPopStackN(2);\n\t\tPushStackByReduceType(resultType);\n\t\tip++;\n\t}\n\n\tvoid TransformContext::Add_stelem(HiOpcodeEnum opI4)\n\t{\n\t\tIL2CPP_ASSERT(evalStackTop >= 3);\n\t\tEvalStackVarInfo& arr = evalStack[evalStackTop - 3];\n\t\tEvalStackVarInfo& index = evalStack[evalStackTop - 2];\n\t\tEvalStackVarInfo& ele = evalStack[evalStackTop - 1];\n\n\t\tCreateAddIR(ir, SetArrayElementVarVar_i1);\n\t\tir->type = opI4;\n\t\tir->arr = arr.locOffset;\n\t\tir->index = index.locOffset;\n\t\tir->ele = ele.locOffset;\n\n\t\tPopStackN(3);\n\t\tip++;\n\t}\n\n\tstatic int GetTypeSize(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn PTR_SIZE;\n\t\t}\n\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_I1:\n\t\tcase IL2CPP_TYPE_U1:\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\t\treturn 1;\n\t\tcase IL2CPP_TYPE_I2:\n\t\tcase IL2CPP_TYPE_U2:\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\t\treturn 2;\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t\treturn 4;\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t\treturn 8;\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\t\treturn PTR_SIZE;\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\treturn 4;\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\treturn 8;\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\tcase IL2CPP_TYPE_VAR:\n\t\tcase IL2CPP_TYPE_MVAR:\n\t\t\treturn PTR_SIZE;\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t\tif (il2cpp::vm::Type::IsEnum(type))\n\t\t\t{\n\t\t\t\treturn GetTypeSize(il2cpp::vm::Class::GetEnumBaseType(il2cpp::vm::Type::GetClass(type)));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Type::GetClass(type);\n\t\t\t\treturn il2cpp::vm::Class::GetValueSize(klass, nullptr);\n\t\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* gclass = type->data.generic_class;\n\n\t\t\tif (gclass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\t\treturn PTR_SIZE;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\t\tif (klass->enumtype)\n\t\t\t\t{\n\t\t\t\t\treturn GetTypeSize(il2cpp::vm::Class::GetEnumBaseType(klass));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\treturn il2cpp::vm::Class::GetValueSize(il2cpp::vm::Class::FromIl2CppType(type), nullptr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t\tIL2CPP_ASSERT(0);\n\t\t\tbreak;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tstatic int CalculateParameterSize(const MethodInfo* methodInfo)\n\t{\n\t\tint totalParameterSize = 0;\n\t\tfor (uint8_t i = 0; i < methodInfo->parameters_count; i++)\n\t\t{\n\t\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(methodInfo->parameters[i]);\n\t\t\ttotalParameterSize += GetTypeSize(paramType);\n\t\t}\n\t\treturn totalParameterSize;\n\t}\n\n\tstatic Il2CppMethodPointer ResolvePInvokeMethod(const MethodInfo* methodInfo, Il2CppCallConvention& callingConvention)\n\t{\n\t\tmetadata::InterpreterImage* interpImage = metadata::MetadataModule::GetImage(methodInfo);\n\t\tif (!interpImage)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\t\thybridclr::metadata::ImplMapInfo* implMap = interpImage->GetImplMapInfo(methodInfo->token);\n\t\tif (!implMap)\n\t\t{\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tuint32_t mappingFlags = implMap->mappingFlags;\n\t\tbool isNotMangle = hybridclr::metadata::IsDllImportNoMangle(mappingFlags);\n\t\tIl2CppCharSet charSet = hybridclr::metadata::GetDllImportCharSet(mappingFlags);\n\t\tcallingConvention = hybridclr::metadata::GetDllImportCallConvention(mappingFlags);\n\n\t\tIl2CppNativeString nativeModuleName = il2cpp::utils::StringUtils::Utf8ToNativeString(implMap->moduleName);\n\t\tint parameterSize = CalculateParameterSize(methodInfo);\n\n\t\tconst PInvokeArguments pinvokeArgs =\n\t\t{\n\t\t\til2cpp::utils::StringView<Il2CppNativeChar>(nativeModuleName.c_str(), nativeModuleName.length()),\n\t\t\til2cpp::utils::StringView<char>(implMap->importName, std::strlen(implMap->importName)),\n\t\t\tcallingConvention,\n\t\t\tcharSet,\n\t\t\tparameterSize,\n\t\t\tisNotMangle,\n\t\t};\n\t\tIl2CppMethodPointer methodPointer = il2cpp::vm::PlatformInvoke::Resolve(pinvokeArgs);\n\t\treturn methodPointer;\n\t}\n\n\tbool TransformContext::FindFirstLeaveHandlerIndex(const std::vector<ExceptionClause>& exceptionClauses, uint32_t leaveOffset, uint32_t targetOffset, uint16_t& index)\n\t{\n\t\tindex = 0;\n\t\tfor (const ExceptionClause& ec : exceptionClauses)\n\t\t{\n\t\t\tif (ec.flags == CorILExceptionClauseType::Finally)\n\t\t\t{\n\t\t\t\tif (ec.tryOffset <= leaveOffset && leaveOffset < ec.tryOffset + ec.tryLength)\n\t\t\t\t\treturn !(ec.tryOffset <= targetOffset && targetOffset < ec.tryOffset + ec.tryLength);\n\t\t\t}\n\t\t\t++index;\n\t\t}\n\t\treturn false;\n\t}\n\n\tbool TransformContext::IsLeaveInTryBlock(const std::vector<ExceptionClause>& exceptionClauses, uint32_t leaveOffset)\n\t{\n\t\tfor (const ExceptionClause& ec : exceptionClauses)\n\t\t{\n\t\t\tif (ec.tryOffset <= leaveOffset && leaveOffset < ec.tryOffset + ec.tryLength)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (ec.handlerOffsets <= leaveOffset && leaveOffset < ec.handlerOffsets + ec.handlerLength)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tvoid TransformContext::Add_leave(uint32_t targetOffset)\n\t{\n\t\tuint32_t leaveOffset = (uint32_t)(ip - ipBase);\n\t\tuint16_t firstHandlerIndex;\n\t\tif (FindFirstLeaveHandlerIndex(body.exceptionClauses, leaveOffset, targetOffset, firstHandlerIndex))\n\t\t{\n\t\t\tCreateAddIR(ir, LeaveEx);\n\t\t\tir->target = targetOffset;\n\t\t\tir->firstHandlerIndex = firstHandlerIndex;\n\t\t\tPushOffset(&ir->target);\n\t\t}\n\t\telse if (!IsLeaveInTryBlock(body.exceptionClauses, leaveOffset))\n\t\t{\n\t\t\tCreateAddIR(ir, LeaveEx_Directly);\n\t\t\tir->target = targetOffset;\n\t\t\tPushOffset(&ir->target);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tCreateAddIR(ir, BranchUncondition_4);\n\t\t\tir->offset = targetOffset;\n\t\t\tPushOffset(&ir->offset);\n\t\t}\n\t\tPopAllStack();\n\t\tPushBranch(targetOffset);\n\t}\n\n\tuint16_t TransformContext::FindFirstThrowHandlerIndex(const std::vector<ExceptionClause>& exceptionClauses, uint32_t throwOffset)\n\t{\n\t\tuint16_t index = 0;\n\t\tfor (const ExceptionClause& ec : exceptionClauses)\n\t\t{\n\t\t\tif (ec.flags == CorILExceptionClauseType::Finally || ec.flags == CorILExceptionClauseType::Exception || ec.flags == CorILExceptionClauseType::Filter)\n\t\t\t{\n\t\t\t\tif (ec.tryOffset <= throwOffset && throwOffset < ec.tryOffset + ec.tryLength)\n\t\t\t\t\treturn index;\n\t\t\t}\n\t\t\t++index;\n\t\t}\n\t\treturn index;\n\t}\n\n\tinline const Il2CppType* InflateIfNeeded(const Il2CppType* type, const Il2CppGenericContext* context, bool inflateMethodVars)\n\t{\n\t\tif (context == nullptr)\n\t\t{\n\t\t\treturn type;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn il2cpp::metadata::GenericMetadata::InflateIfNeeded(type, context, inflateMethodVars);\n\t\t}\n\t}\n\n#pragma region conv\n\n#define CI_conv(dstTypeName, dstReduceType, dstTypeSize)   \\\n\tAdd_conv(dstTypeSize, EvalStackReduceDataType::dstReduceType, \\\n\t\tHiOpcodeEnum::ConvertVarVar_i4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_i8_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_f4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_f8_##dstTypeName);\n\n#define CI_conv_un(dstTypeName, dstReduceType, dstTypeSize)   \\\n\tAdd_conv(dstTypeSize, EvalStackReduceDataType::dstReduceType, \\\n\t\tHiOpcodeEnum::ConvertVarVar_u4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_u8_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_f4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertVarVar_f8_##dstTypeName);\n\n#define CI_conv_ovf(dstTypeName, dstReduceType, dstTypeSize)   \\\n\tAdd_conv_ovf(dstTypeSize, EvalStackReduceDataType::dstReduceType, \\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_i4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_i8_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_f4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_f8_##dstTypeName);\n\n#define CI_conv_un_ovf(dstTypeName, dstReduceType, dstTypeSize)   \\\n\tAdd_conv_ovf(dstTypeSize, EvalStackReduceDataType::dstReduceType, \\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_u4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_u8_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_f4_##dstTypeName,\\\n\t\tHiOpcodeEnum::ConvertOverflowVarVar_f8_##dstTypeName);\n\n\n#pragma endregion\n\n#pragma region branch\n\n#define CI_branch1(opName) IL2CPP_ASSERT(evalStackTop >= 2); \\\nbrOffset = GetI1(ip+1); \\\nif (brOffset != 0) \\\n{\\\n\tAdd_bc(ipOffset, brOffset, 2, HiOpcodeEnum::BranchVarVar_##opName##_i4, HiOpcodeEnum::BranchVarVar_##opName##_i8, HiOpcodeEnum::BranchVarVar_##opName##_f4, HiOpcodeEnum::BranchVarVar_##opName##_f8); \\\n}\\\nelse\\\n{\\\n\tPopStackN(2);\\\n}\\\nip += 2;\n\n#define CI_branch4(opName) IL2CPP_ASSERT(evalStackTop >= 2); \\\nbrOffset = GetI4LittleEndian(ip + 1); \\\nif (brOffset != 0) \\\n{ \\\n\tAdd_bc(ipOffset, brOffset, 5, HiOpcodeEnum::BranchVarVar_##opName##_i4, HiOpcodeEnum::BranchVarVar_##opName##_i8, HiOpcodeEnum::BranchVarVar_##opName##_f4, HiOpcodeEnum::BranchVarVar_##opName##_f8); \\\n}\\\nelse \\\n{\\\n\tPopStackN(2);\\\n}\\\nip += 5;\n\n#define PopBranch() { \\\nif (FindNextFlow()) \\\n{ \\\n    continue; \\\n} \\\nelse \\\n{ \\\n    goto finish_transform; \\\n} \\\n}\n\n#pragma endregion\n\n#pragma region binop\n#define CI_binOp(op) Add_binop(HiOpcodeEnum::BinOpVarVarVar_##op##_i4, HiOpcodeEnum::BinOpVarVarVar_##op##_i8, HiOpcodeEnum::BinOpVarVarVar_##op##_f4, HiOpcodeEnum::BinOpVarVarVar_##op##_f8);\n#define CI_binOpUn(op) Add_binop(HiOpcodeEnum::BinOpVarVarVar_##op##_i4, HiOpcodeEnum::BinOpVarVarVar_##op##_i8, (HiOpcodeEnum)0, (HiOpcodeEnum)0);\n#define CI_binOpOvf(op) Add_binop(HiOpcodeEnum::BinOpOverflowVarVarVar_##op##_i4, HiOpcodeEnum::BinOpOverflowVarVarVar_##op##_i8, (HiOpcodeEnum)0, (HiOpcodeEnum)0);\n#define CI_binOpUnOvf(op) Add_binop(HiOpcodeEnum::BinOpOverflowVarVarVar_##op##_u4, HiOpcodeEnum::BinOpOverflowVarVarVar_##op##_u8, (HiOpcodeEnum)0, (HiOpcodeEnum)0);\n#pragma endregion\n\n#pragma region shiftop\n#define\tCI_binOpShift(op) Add_shiftop(HiOpcodeEnum::BitShiftBinOpVarVarVar_##op##_i4_i4, HiOpcodeEnum::BitShiftBinOpVarVarVar_##op##_i4_i8, HiOpcodeEnum::BitShiftBinOpVarVarVar_##op##_i8_i4, HiOpcodeEnum::BitShiftBinOpVarVarVar_##op##_i8_i8);\n#pragma endregion\n\n#define CI_compare(op) Add_compare(HiOpcodeEnum::CompOpVarVarVar_##op##_i4, HiOpcodeEnum::CompOpVarVarVar_##op##_i8, HiOpcodeEnum::CompOpVarVarVar_##op##_f4, HiOpcodeEnum::CompOpVarVarVar_##op##_f8);\n\n#define CI_ldele(eleType, resultType) Add_ldelem(EvalStackReduceDataType::resultType, HiOpcodeEnum::GetArrayElementVarVar_##eleType);\n#define CI_stele(eleType) Add_stelem(HiOpcodeEnum::SetArrayElementVarVar_##eleType);\n\n\tstatic const MethodInfo* FindRedirectCreateString(const MethodInfo* shareMethod)\n\t{\n\t\tint32_t paramCount = shareMethod->parameters_count;\n\t\tvoid* iter = nullptr;\n\t\tfor (const MethodInfo* searchMethod; (searchMethod = il2cpp::vm::Class::GetMethods(il2cpp_defaults.string_class, &iter)) != nullptr;)\n\t\t{\n\t\t\tif (searchMethod->parameters_count != paramCount || std::strcmp(searchMethod->name, \"CreateString\"))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbool sigMatch = true;\n\t\t\tfor (uint8_t i = 0; i < paramCount; i++)\n\t\t\t{\n\t\t\t\tif (!IsTypeEqual(GET_METHOD_PARAMETER_TYPE(searchMethod->parameters[i]), GET_METHOD_PARAMETER_TYPE(shareMethod->parameters[i])))\n\t\t\t\t{\n\t\t\t\t\tsigMatch = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (sigMatch)\n\t\t\t{\n\t\t\t\treturn searchMethod;\n\t\t\t}\n\t\t}\n\t\treturn nullptr;\n\t}\n\n\tstatic bool ShouldBeInlined(const MethodInfo* method, int32_t depth)\n\t{\n\t\tif (depth >= RuntimeConfig::GetMaxMethodInlineDepth())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn metadata::MethodBodyCache::IsInlineable(method);\n\t}\n\n\n\tvoid TransformContext::TransformBody(int32_t depth, int32_t localVarOffset, interpreter::InterpMethodInfo& result)\n\t{\n\t\tTransformBodyImpl(depth, localVarOffset);\n\t\tBuildInterpMethodInfo(result);\n\t}\n\n\tvoid TransformContext::TransformBodyImpl(int32_t depth, int32_t localVarOffset)\n\t{\n#pragma region header\n\n\t\tconst Il2CppGenericContext* genericContext = methodInfo->is_inflated ? &methodInfo->genericMethod->context : nullptr;\n\t\tconst Il2CppGenericContainer* klassContainer = GetGenericContainerFromIl2CppType(&methodInfo->klass->byval_arg);\n\t\tconst Il2CppGenericContainer* methodContainer = methodInfo->is_inflated ?\n\t\t\t(const Il2CppGenericContainer*)methodInfo->genericMethod->methodDefinition->genericContainerHandle :\n\t\t\t(const Il2CppGenericContainer*)methodInfo->genericContainerHandle;\n\n\t\tBasicBlockSpliter bbc(body);\n\t\tbbc.SplitBasicBlocks();\n\n\n\t\tsplitOffsets = bbc.GetSplitOffsets();\n\n\t\tip2bb = pool.NewNAny<IRBasicBlock*>(body.codeSize + 1);\n\t\tuint32_t lastSplitBegin = 0;\n\n\t\tfor (uint32_t offset : splitOffsets)\n\t\t{\n\t\t\tIRBasicBlock* bb = pool.NewAny<IRBasicBlock>();\n\t\t\tbb->visited = false;\n\t\t\tbb->ilOffset = lastSplitBegin;\n\t\t\tirbbs.push_back(bb);\n\t\t\tfor (uint32_t idx = lastSplitBegin; idx < offset; idx++)\n\t\t\t{\n\t\t\t\tip2bb[idx] = bb;\n\t\t\t}\n\t\t\tlastSplitBegin = offset;\n\t\t}\n\t\tIRBasicBlock* endBb = pool.NewAny<IRBasicBlock>();\n\t\t*endBb = { true, false, body.codeSize, 0 };\n\t\tip2bb[body.codeSize] = endBb;\n\t\tirbbs.push_back(endBb);\n\n\t\tcurbb = irbbs[0];\n\n\t\tIL2CPP_ASSERT(lastSplitBegin == body.codeSize);\n\n\t\tbool instanceCall = IsInstanceMethod(methodInfo);\n\t\tactualParamCount = methodInfo->parameters_count + instanceCall;\n\n\t\targs = pool.NewNAny<ArgVarInfo>(actualParamCount);\n\t\tlocals = pool.NewNAny<LocVarInfo>((int)body.localVars.size());\n\t\tevalStack = pool.NewNAny<EvalStackVarInfo>(body.maxStack + 100);\n\n\t\tnextFlowIdx = 0;\n\n\t\ttotalArgSize = 0;\n\t\t{\n\t\t\tint32_t idx = 0;\n\t\t\tif (instanceCall)\n\t\t\t{\n\t\t\t\tArgVarInfo& self = args[0];\n\t\t\t\tself.klass = methodInfo->klass;\n\t\t\t\tself.type = IS_CLASS_VALUE_TYPE(self.klass) ? &self.klass->this_arg : &self.klass->byval_arg;\n\t\t\t\tself.argOffset = idx;\n\t\t\t\tself.argLocOffset = localVarOffset + totalArgSize;\n\t\t\t\ttotalArgSize += GetTypeValueStackObjectCount(self.type);\n\t\t\t\tidx = 1;\n\t\t\t}\n\n\t\t\tfor (uint32_t i = 0; i < methodInfo->parameters_count; i++)\n\t\t\t{\n\t\t\t\tArgVarInfo& arg = args[idx + i];\n\t\t\t\targ.type = GET_METHOD_PARAMETER_TYPE(methodInfo->parameters[i]);\n\t\t\t\targ.klass = il2cpp::vm::Class::FromIl2CppType(arg.type);\n\t\t\t\targ.argOffset = idx + i;\n\t\t\t\targ.argLocOffset = localVarOffset + totalArgSize;\n\t\t\t\til2cpp::vm::Class::SetupFields(arg.klass);\n\t\t\t\ttotalArgSize += GetTypeValueStackObjectCount(arg.type);\n\t\t\t}\n\t\t}\n\n\t\ttotalArgLocalSize = totalArgSize;\n\t\tfor (size_t i = 0; i < body.localVars.size(); i++)\n\t\t{\n\t\t\tLocVarInfo& local = locals[i];\n\t\t\tlocal.type = InflateIfNeeded(body.localVars[i], genericContext, true);\n\t\t\tlocal.klass = il2cpp::vm::Class::FromIl2CppType(local.type);\n\t\t\til2cpp::vm::Class::SetupFields(local.klass);\n\t\t\tlocal.locOffset = localVarOffset + totalArgLocalSize;\n\t\t\ttotalArgLocalSize += GetTypeValueStackObjectCount(local.type);\n\t\t}\n\n\t\tevalStackBaseOffset = localVarOffset + totalArgLocalSize;\n\t\tint32_t totalLocalSize = totalArgLocalSize - totalArgSize;\n\n\t\tmaxStackSize = evalStackBaseOffset;\n\t\tcurStackSize = evalStackBaseOffset;\n\n\n\n\t\tipBase = body.ilcodes;\n\t\tip = body.ilcodes;\n\t\tipOffset = 0;\n\n\t\tevalStackTop = 0;\n\t\tprefixFlags = 0;\n\n\t\tint32_t argIdx = 0;\n\t\tint32_t varKst = 0;\n\t\tint64_t varKst8 = 0;\n\t\tint32_t brOffset = 0;\n\n\t\tshareMethod = nullptr;\n\n\t\tToken2RuntimeHandleMap tokenCache(64);\n\n\t\tbool inMethodInlining = depth > 0;\n\n\t\thybridclr::metadata::PDBImage* pdbImage = image->GetPDBImage();\n\t\tir2offsetMap = pdbImage && !inMethodInlining ? new IR2OffsetMap(body.codeSize) : nullptr;\n\n\t\tif (inMethodInlining)\n\t\t{\n\t\t\tif (instanceCall)\n\t\t\t{\n\t\t\t\tif (std::strcmp(methodInfo->name, \".ctor\"))\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(irCheckNull, CheckThrowIfNullVar);\n\t\t\t\t\tirCheckNull->obj = args[0].argLocOffset;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!IS_CCTOR_FINISH_OR_NO_CCTOR(methodInfo->klass))\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(irInitStaticCtor, InitClassStaticCtor);\n\t\t\t\t\tirInitStaticCtor->klass = (uint64_t)methodInfo->klass;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinitLocals = (body.flags & (uint32_t)CorILMethodFormat::InitLocals) != 0;\n\t\t// init local vars\n\t\tif (initLocals && totalLocalSize > 0)\n\t\t{\n\t\t\tAddInst(CreateInitLocals(pool, totalLocalSize * sizeof(StackObject), locals[0].locOffset));\n\t\t}\n\n\t\texClauses.resize_initialized(body.exceptionClauses.size());\n\t\tint clauseIdx = 0;\n\t\tfor (ExceptionClause& ec : body.exceptionClauses)\n\t\t{\n\t\t\tInterpExceptionClause* iec = &exClauses[clauseIdx++];\n\t\t\tiec->flags = ec.flags;\n\t\t\tiec->tryBeginOffset = ec.tryOffset;\n\t\t\tiec->tryEndOffset = ec.tryOffset + ec.tryLength;\n\t\t\tiec->handlerBeginOffset = ec.handlerOffsets;\n\t\t\tiec->handlerEndOffset = ec.handlerOffsets + ec.handlerLength;\n\t\t\tPushOffset(&iec->tryBeginOffset);\n\t\t\tPushOffset(&iec->tryEndOffset);\n\t\t\tPushOffset(&iec->handlerBeginOffset);\n\t\t\tPushOffset(&iec->handlerEndOffset);\n\t\t\tif (ec.flags == CorILExceptionClauseType::Exception)\n\t\t\t{\n\t\t\t\tiec->filterBeginOffset = 0;\n\t\t\t\tiec->exKlass = image->GetClassFromToken(tokenCache, ec.classTokenOrFilterOffset, klassContainer, methodContainer, genericContext);\n\t\t\t}\n\t\t\telse if (ec.flags == CorILExceptionClauseType::Filter)\n\t\t\t{\n\t\t\t\tiec->filterBeginOffset = ec.classTokenOrFilterOffset;\n\t\t\t\tPushOffset(&iec->filterBeginOffset);\n\t\t\t\tiec->exKlass = nullptr;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(ec.classTokenOrFilterOffset == 0);\n\t\t\t\tiec->filterBeginOffset = 0;\n\t\t\t\tiec->exKlass = nullptr;\n\t\t\t}\n\n\t\t\tswitch (ec.flags)\n\t\t\t{\n\t\t\tcase CorILExceptionClauseType::Exception:\n\t\t\t{\n\t\t\t\tIRBasicBlock* bb = ip2bb[iec->handlerBeginOffset];\n\t\t\t\tIL2CPP_ASSERT(!bb->inPending);\n\t\t\t\tbb->inPending = true;\n\t\t\t\tFlowInfo* fi = pool.NewAny<FlowInfo>();\n\t\t\t\tfi->offset = ec.handlerOffsets;\n\t\t\t\tfi->curStackSize = evalStackBaseOffset + 1;\n\t\t\t\tfi->evalStack.push_back({ NATIVE_INT_REDUCE_TYPE, PTR_SIZE, evalStackBaseOffset });\n\t\t\t\tpendingFlows.push_back(fi);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CorILExceptionClauseType::Filter:\n\t\t\t{\n\t\t\t\tIRBasicBlock* bb = ip2bb[iec->filterBeginOffset];\n\t\t\t\tIL2CPP_ASSERT(!bb->inPending);\n\t\t\t\tbb->inPending = true;\n\t\t\t\t{\n\t\t\t\t\tFlowInfo* fi = pool.NewAny<FlowInfo>();\n\t\t\t\t\tIL2CPP_ASSERT(ec.classTokenOrFilterOffset);\n\t\t\t\t\tfi->offset = ec.classTokenOrFilterOffset;\n\t\t\t\t\tfi->curStackSize = evalStackBaseOffset + 1;\n\t\t\t\t\tfi->evalStack.push_back({ NATIVE_INT_REDUCE_TYPE, PTR_SIZE, evalStackBaseOffset });\n\t\t\t\t\tpendingFlows.push_back(fi);\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tFlowInfo* fi = pool.NewAny<FlowInfo>();\n\t\t\t\t\tIL2CPP_ASSERT(ec.handlerOffsets);\n\t\t\t\t\tfi->offset = ec.handlerOffsets;\n\t\t\t\t\tfi->curStackSize = evalStackBaseOffset + 1;\n\t\t\t\t\tfi->evalStack.push_back({ NATIVE_INT_REDUCE_TYPE, PTR_SIZE, evalStackBaseOffset });\n\t\t\t\t\tpendingFlows.push_back(fi);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CorILExceptionClauseType::Fault:\n\t\t\tcase CorILExceptionClauseType::Finally:\n\t\t\t{\n\t\t\t\tIRBasicBlock* bb = ip2bb[iec->handlerBeginOffset];\n\t\t\t\tIL2CPP_ASSERT(!bb->inPending);\n\t\t\t\tbb->inPending = true;\n\t\t\t\tFlowInfo* fi = pool.NewAny<FlowInfo>();\n\t\t\t\tfi->offset = ec.handlerOffsets;\n\t\t\t\tfi->curStackSize = evalStackBaseOffset;\n\t\t\t\tpendingFlows.push_back(fi);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"\");\n\t\t\t}\n\t\t\t}\n\t\t}\n\n#pragma endregion\n\n\t\tIRBasicBlock* lastBb = nullptr;\n\t\tfor (;;)\n\t\t{\n\t\t\tipOffset = (uint32_t)(ip - ipBase);\n\t\t\tcurbb = ip2bb[ipOffset];\n\t\t\tif (curbb != lastBb)\n\t\t\t{\n\t\t\t\tif (curbb && !curbb->visited)\n\t\t\t\t{\n\t\t\t\t\tcurbb->visited = true;\n\t\t\t\t\tlastBb = curbb;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tPopBranch();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch ((OpcodeValue)*ip)\n\t\t\t{\n\t\t\tcase OpcodeValue::NOP:\n\t\t\t{\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BREAK:\n\t\t\t{\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARG_0:\n\t\t\t{\n\t\t\t\tAddInst_ldarg(0);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARG_1:\n\t\t\t{\n\t\t\t\tAddInst_ldarg(1);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARG_2:\n\t\t\t{\n\t\t\t\tAddInst_ldarg(2);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARG_3:\n\t\t\t{\n\t\t\t\tAddInst_ldarg(3);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase OpcodeValue::LDLOC_0:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldloc(0);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLOC_1:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldloc(1);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLOC_2:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldloc(2);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLOC_3:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldloc(3);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STLOC_0:\n\t\t\t{\n\t\t\t\tCreateAddInst_stloc(0);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STLOC_1:\n\t\t\t{\n\t\t\t\tCreateAddInst_stloc(1);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STLOC_2:\n\t\t\t{\n\t\t\t\tCreateAddInst_stloc(2);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STLOC_3:\n\t\t\t{\n\t\t\t\tCreateAddInst_stloc(3);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARG_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tAddInst_ldarg(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDARGA_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tAddInst_ldarga(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STARG_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tAddInst_starg(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLOC_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tCreateAddInst_ldloc(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLOCA_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tCreateAddInst_ldloca(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STLOC_S:\n\t\t\t{\n\t\t\t\targIdx = ip[1];\n\t\t\t\tCreateAddInst_stloc(argIdx);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDNULL:\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, LdnullVar);\n\t\t\t\tir->dst = curStackSize;\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_M1:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(-1, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_0:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(0, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_1:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(1, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_2:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(2, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_3:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(3, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_4:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(4, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_5:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(5, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_6:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(6, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_7:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(7, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_8:\n\t\t\t{\n\t\t\t\tCreateAddInst_ldc4(8, EvalStackReduceDataType::I4);\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4_S:\n\t\t\t{\n\t\t\t\tvarKst = GetI1(ip + 1);\n\t\t\t\tCreateAddInst_ldc4(varKst, EvalStackReduceDataType::I4);\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I4:\n\t\t\t{\n\t\t\t\tvarKst = GetI4LittleEndian(ip + 1);\n\t\t\t\tCreateAddInst_ldc4(varKst, EvalStackReduceDataType::I4);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_I8:\n\t\t\t{\n\t\t\t\tvarKst8 = GetI8LittleEndian(ip + 1);\n\t\t\t\tCreateAddInst_ldc8(varKst8, EvalStackReduceDataType::I8);\n\t\t\t\tip += 9;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_R4:\n\t\t\t{\n\t\t\t\tvarKst = GetI4LittleEndian(ip + 1);\n\t\t\t\tCreateAddInst_ldc4(varKst, EvalStackReduceDataType::R4);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDC_R8:\n\t\t\t{\n\t\t\t\tvarKst8 = GetI8LittleEndian(ip + 1);\n\t\t\t\tCreateAddInst_ldc8(varKst8, EvalStackReduceDataType::R8);\n\t\t\t\tip += 9;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::DUP:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& __eval = evalStack[evalStackTop - 1];\n\t\t\t\tIRCommon* ir = CreateAssignVarVar(pool, GetEvalStackNewTopOffset(), __eval.locOffset, __eval.byteSize);\n\t\t\t\tAddInst(ir);\n\t\t\t\tDuplicateStack();\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::POP:\n\t\t\t{\n\t\t\t\tPopStack();\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::JMP:\n\t\t\t{\n\t\t\t\t/*  auto& x = ir.jump;\n\t\t\t\t\tx.type = IRType::Jmp;\n\t\t\t\t\tx.methodToken = GetI4LittleEndian(ip + 1);\n\t\t\t\t\tirs.push_back(ir);\n\t\t\t\t\tip += 5;*/\n\t\t\t\tRaiseNotSupportedException(\"not support jmp\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CALL:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tip += 5;\n\t\t\t\tshareMethod = const_cast<MethodInfo*>(image->GetMethodInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(shareMethod);\n\t\t\t}\n\n\t\tLabelCall:\n\t\t\t{\n\t\t\t\tif (TryAddInstinctInstruments(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\tif (!shareMethod->has_full_generic_sharing_signature)\n#endif\n\t\t\t\t{\n\t\t\t\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(shareMethod))\n\t\t\t\t\t{\n\t\t\t\t\t\tRaiseAOTGenericMethodNotInstantiatedException(shareMethod);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbool resolvedIsInstanceMethod = IsInstanceMethod(shareMethod);\n\t\t\t\tint32_t resolvedTotalArgNum = shareMethod->parameters_count + resolvedIsInstanceMethod;\n\t\t\t\tint32_t needDataSlotNum = (resolvedTotalArgNum + 3) / 4;\n\t\t\t\tint32_t callArgEvalStackIdxBase = evalStackTop - resolvedTotalArgNum;\n\t\t\t\tuint32_t methodDataIndex = GetOrAddResolveDataIndex(shareMethod);\n\n\t\t\t\tif (hybridclr::metadata::IsInterpreterImplement(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tuint16_t argBaseOffset = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\n\n\t\t\t\t\tif (hybridclr::metadata::IsPInvokeMethod(shareMethod->flags))\n\t\t\t\t\t{\n\t\t\t\t\t\tIl2CppCallConvention callingConvention;\n\t\t\t\t\t\tIl2CppMethodPointer pinvokeMethodPointer = ResolvePInvokeMethod(shareMethod, callingConvention);\n\t\t\t\t\t\tif (!pinvokeMethodPointer)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tTEMP_FORMAT(errMsg, \"resolve PInvoke method fail. %s.%s::%s\", methodInfo->klass->namespaze, methodInfo->klass->name, methodInfo->name);\n\t\t\t\t\t\t\tRaiseExecutionEngineException(errMsg);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tManaged2NativeFunctionPointerCallMethod managed2NativeFunctionPointerMethod = InterpreterModule::GetManaged2NativeFunctionPointerMethodPointer(shareMethod, callingConvention);\n\t\t\t\t\t\tuint32_t pinvokeMethodPointerIdx = GetOrAddResolveDataIndex((void*)pinvokeMethodPointer);\n\t\t\t\t\t\tuint32_t managed2NativeFunctionPointerMethodIdx = GetOrAddResolveDataIndex((void*)managed2NativeFunctionPointerMethod);\n\n\t\t\t\t\t\tint32_t argIdxDataIndex;\n\t\t\t\t\t\tuint16_t* __argIdxs;\n\t\t\t\t\t\tAllocResolvedData(resolveDatas, needDataSlotNum, argIdxDataIndex, __argIdxs);\n\n\t\t\t\t\t\tIL2CPP_ASSERT(!resolvedIsInstanceMethod);\n\n\t\t\t\t\t\tfor (uint8_t i = 0; i < shareMethod->parameters_count; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint32_t curArgIdx = i;\n\t\t\t\t\t\t\t__argIdxs[curArgIdx] = evalStack[callArgEvalStackIdxBase + curArgIdx].locOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (IsReturnVoidMethod(shareMethod))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CallPInvoke_void);\n\t\t\t\t\t\t\tir->pinvokeMethodPointer = pinvokeMethodPointerIdx;\n\t\t\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodIdx;\n\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinterpreter::LocationDataType locDataType = GetLocationDataTypeByType(shareMethod->return_type);\n\t\t\t\t\t\t\tif (interpreter::IsNeedExpandLocationType(locDataType))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallPInvoke_ret_expand);\n\t\t\t\t\t\t\t\tir->pinvokeMethodPointer = pinvokeMethodPointerIdx;\n\t\t\t\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodIdx;\n\t\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\t\tir->ret = argBaseOffset;\n\t\t\t\t\t\t\t\tir->retLocationType = (uint8_t)locDataType;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallPInvoke_ret);\n\t\t\t\t\t\t\t\tir->pinvokeMethodPointer = pinvokeMethodPointerIdx;\n\t\t\t\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodIdx;\n\t\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\t\tir->ret = argBaseOffset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (ShouldBeInlined(shareMethod, depth) && TransformSubMethodBody(*this, shareMethod, depth + 1, argBaseOffset))\n\t\t\t\t\t{\n\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (IsReturnVoidMethod(shareMethod))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CallInterp_void);\n\t\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\t\tir->argBase = argBaseOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CallInterp_ret);\n\t\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\t\tir->argBase = argBaseOffset;\n\t\t\t\t\t\t\tir->ret = argBaseOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tPopStackN(resolvedTotalArgNum);\n\t\t\t\t\tif (!IsReturnVoidMethod(shareMethod))\n\t\t\t\t\t{\n\t\t\t\t\t\tPushStackByType(shareMethod->return_type);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\t\t\tif (!shareMethod->has_full_generic_sharing_signature)\n#endif\n\t\t\t\t{\n\t\t\t\t\tif (TryAddCallCommonInstruments(shareMethod, methodDataIndex))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\n\t\t\t\tManaged2NativeCallMethod managed2NativeMethod = InterpreterModule::GetManaged2NativeMethodPointer(shareMethod, false);\n\t\t\t\tIL2CPP_ASSERT(managed2NativeMethod);\n\t\t\t\tuint32_t managed2NativeMethodDataIdx = GetOrAddResolveDataIndex((void*)managed2NativeMethod);\n\n\t\t\t\tint32_t argIdxDataIndex;\n\t\t\t\tuint16_t* __argIdxs;\n\t\t\t\tAllocResolvedData(resolveDatas, needDataSlotNum, argIdxDataIndex, __argIdxs);\n\n\t\t\t\tif (resolvedIsInstanceMethod)\n\t\t\t\t{\n\t\t\t\t\t__argIdxs[0] = GetEvalStackOffset(callArgEvalStackIdxBase);\n\t\t\t\t}\n\n\t\t\t\tfor (uint8_t i = 0; i < shareMethod->parameters_count; i++)\n\t\t\t\t{\n\t\t\t\t\tint32_t curArgIdx = i + resolvedIsInstanceMethod;\n\t\t\t\t\t__argIdxs[curArgIdx] = evalStack[callArgEvalStackIdxBase + curArgIdx].locOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStackN(resolvedTotalArgNum);\n\n\t\t\t\tif (!IsReturnVoidMethod(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tPushStackByType(shareMethod->return_type);\n\t\t\t\t\tinterpreter::LocationDataType locDataType = GetLocationDataTypeByType(shareMethod->return_type);\n\t\t\t\t\tif (interpreter::IsNeedExpandLocationType(locDataType))\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallNativeInstance_ret_expand);\n\t\t\t\t\t\tir->type = resolvedIsInstanceMethod ? HiOpcodeEnum::CallNativeInstance_ret_expand : HiOpcodeEnum::CallNativeStatic_ret_expand;\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tir->retLocationType = (uint8_t)locDataType;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallNativeInstance_ret);\n\t\t\t\t\t\tir->type = resolvedIsInstanceMethod ? HiOpcodeEnum::CallNativeInstance_ret : HiOpcodeEnum::CallNativeStatic_ret;\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CallNativeInstance_void);\n\t\t\t\t\tir->type = resolvedIsInstanceMethod ? HiOpcodeEnum::CallNativeInstance_void : HiOpcodeEnum::CallNativeStatic_void;\n\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CALLVIRT:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tip += 5;\n\t\t\t\tshareMethod = image->GetMethodInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t}\n\t\tLabelCallVir:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(shareMethod);\n\t\t\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInstanceMethod(shareMethod));\n\t\t\t\tif ((!metadata::IsVirtualMethod(shareMethod->flags)) || metadata::IsSealed(shareMethod->flags))\n\t\t\t\t{\n\t\t\t\t\tgoto LabelCall;\n\t\t\t\t}\n\n\t\t\t\tint32_t resolvedTotalArgNum = shareMethod->parameters_count + 1;\n\t\t\t\tint32_t callArgEvalStackIdxBase = evalStackTop - resolvedTotalArgNum;\n\t\t\t\tuint32_t methodDataIndex = GetOrAddResolveDataIndex(shareMethod);\n\n\t\t\t\tbool isMultiDelegate = IsChildTypeOfMulticastDelegate(shareMethod->klass);\n\t\t\t\tif (!isMultiDelegate && IsInterpreterMethod(shareMethod) && !IsInterface(shareMethod->klass->flags))\n\t\t\t\t{\n\t\t\t\t\tPopStackN(resolvedTotalArgNum);\n\n\t\t\t\t\tuint16_t argBaseOffset = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\n\t\t\t\t\tif (IsReturnVoidMethod(shareMethod))\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallInterpVirtual_void);\n\t\t\t\t\t\tir->method = methodDataIndex;\n\t\t\t\t\t\tir->argBase = argBaseOffset;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallInterpVirtual_ret);\n\t\t\t\t\t\tir->method = methodDataIndex;\n\t\t\t\t\t\tir->argBase = argBaseOffset;\n\t\t\t\t\t\tir->ret = argBaseOffset;\n\t\t\t\t\t\tPushStackByType(shareMethod->return_type);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tManaged2NativeCallMethod managed2NativeMethod = InterpreterModule::GetManaged2NativeMethodPointer(shareMethod, false);\n\t\t\t\tIL2CPP_ASSERT(managed2NativeMethod);\n\t\t\t\tuint32_t managed2NativeMethodDataIdx = GetOrAddResolveDataIndex((void*)managed2NativeMethod);\n\n\n\t\t\t\tint32_t needDataSlotNum = (resolvedTotalArgNum + 3) / 4;\n\t\t\t\tint32_t argIdxDataIndex;\n\t\t\t\tuint16_t* __argIdxs;\n\t\t\t\tAllocResolvedData(resolveDatas, needDataSlotNum, argIdxDataIndex, __argIdxs);\n\n\t\t\t\t__argIdxs[0] = GetEvalStackOffset(callArgEvalStackIdxBase);\n\t\t\t\tfor (uint8_t i = 0; i < shareMethod->parameters_count; i++)\n\t\t\t\t{\n\t\t\t\t\tint32_t curArgIdx = i + 1;\n\t\t\t\t\t__argIdxs[curArgIdx] = evalStack[callArgEvalStackIdxBase + curArgIdx].locOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStackN(resolvedTotalArgNum);\n\n\t\t\t\tconst Il2CppType* returnType = shareMethod->return_type;\n\t\t\t\tint32_t retIdx;\n\n\t\t\t\tif (returnType->type != IL2CPP_TYPE_VOID)\n\t\t\t\t{\n\t\t\t\t\tPushStackByType(returnType);\n\t\t\t\t\tretIdx = GetEvalStackTopOffset();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tretIdx = -1;\n\t\t\t\t}\n\t\t\t\tif (isMultiDelegate)\n\t\t\t\t{\n\t\t\t\t\tif (std::strcmp(shareMethod->name, \"Invoke\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tManaged2NativeCallMethod staticManaged2NativeMethod = InterpreterModule::GetManaged2NativeMethodPointer(shareMethod, true);\n\t\t\t\t\t\tIL2CPP_ASSERT(staticManaged2NativeMethod);\n\t\t\t\t\t\tuint32_t staticManaged2NativeMethodDataIdx = GetOrAddResolveDataIndex((void*)staticManaged2NativeMethod);\n\t\t\t\t\t\tif (retIdx < 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateInvoke_void);\n\t\t\t\t\t\t\tir->managed2NativeStaticMethod = staticManaged2NativeMethodDataIdx;\n\t\t\t\t\t\t\tir->managed2NativeInstanceMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\tir->invokeParamCount = shareMethod->parameters_count;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinterpreter::TypeDesc retDesc = GetTypeArgDesc(returnType);\n\t\t\t\t\t\t\tif (IsNeedExpandLocationType(retDesc.type))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateInvoke_ret_expand);\n\t\t\t\t\t\t\t\tir->managed2NativeStaticMethod = staticManaged2NativeMethodDataIdx;\n\t\t\t\t\t\t\t\tir->managed2NativeInstanceMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\t\tir->ret = retIdx;\n\t\t\t\t\t\t\t\tir->invokeParamCount = shareMethod->parameters_count;\n\t\t\t\t\t\t\t\tir->retLocationType = (uint8_t)retDesc.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateInvoke_ret);\n\t\t\t\t\t\t\t\tir->managed2NativeStaticMethod = staticManaged2NativeMethodDataIdx;\n\t\t\t\t\t\t\t\tir->managed2NativeInstanceMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\t\tir->ret = retIdx;\n\t\t\t\t\t\t\t\tir->retTypeStackObjectSize = retDesc.stackObjectSize;\n\t\t\t\t\t\t\t\tir->invokeParamCount = shareMethod->parameters_count;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tIl2CppMethodPointer directlyCallMethodPointer = InitAndGetInterpreterDirectlyCallMethodPointer(shareMethod);\n\t\t\t\t\tif (std::strcmp(shareMethod->name, \"BeginInvoke\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (IsInterpreterMethod(shareMethod) || directlyCallMethodPointer == nullptr)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateBeginInvoke);\n\t\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\t\tir->result = retIdx;\n\t\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (std::strcmp(shareMethod->name, \"EndInvoke\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (IsInterpreterMethod(shareMethod) || directlyCallMethodPointer == nullptr)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (retIdx < 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateEndInvoke_void);\n\t\t\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\t\t\tir->asyncResult = __argIdxs[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, CallDelegateEndInvoke_ret);\n\t\t\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\t\t\tir->asyncResult = __argIdxs[1];\n\t\t\t\t\t\t\t\tir->ret = retIdx;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (retIdx < 0)\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CallVirtual_void);\n\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tinterpreter::LocationDataType locDataType = GetLocationDataTypeByType(returnType);\n\t\t\t\t\tif (IsNeedExpandLocationType(locDataType))\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallVirtual_ret_expand);\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = retIdx;\n\t\t\t\t\t\tir->retLocationType = (uint8_t)locDataType;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallVirtual_ret);\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodDataIndex;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = retIdx;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CALLI:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\n\t\t\t\tResolveStandAloneMethodSig methodSig;\n\t\t\t\timage->GetStandAloneMethodSigFromToken(token, klassContainer, methodContainer, genericContext, methodSig);\n\t\t\t\tif (IsPrologExplicitThis(methodSig.flags))\n\t\t\t\t{\n\t\t\t\t\tRaiseNotSupportedException(\"not support StandAloneMethodSig flags:EXPLICITTHIS\");\n\t\t\t\t}\n\n\t\t\t\tint32_t methodIdx = GetEvalStackTopOffset();\n\t\t\t\t//uint32_t methodDataIndex = GetOrAddResolveDataIndex(shareMethod);\n\t\t\t\tManaged2NativeCallMethod managed2NativeMethod = InterpreterModule::GetManaged2NativeMethodPointer(methodSig);\n\t\t\t\tManaged2NativeFunctionPointerCallMethod managed2NativeFunctionPointerMethod = InterpreterModule::GetManaged2NativeFunctionPointerMethodPointer(methodSig);\n\t\t\t\tIL2CPP_ASSERT(managed2NativeMethod);\n\t\t\t\tuint32_t managed2NativeMethodDataIdx = GetOrAddResolveDataIndex((void*)managed2NativeMethod);\n\t\t\t\tuint32_t managed2NativeFunctionPointerMethodDataIdx = GetOrAddResolveDataIndex((void*)managed2NativeFunctionPointerMethod);\n\t\t\t\tbool hasThis = metadata::IsPrologHasThis(methodSig.flags);\n\n\t\t\t\tint32_t resolvedTotalArgNum = (int32_t)methodSig.params.size() + hasThis;\n\t\t\t\tint32_t needDataSlotNum = (resolvedTotalArgNum + 3) / 4;\n\t\t\t\tint32_t argIdxDataIndex;\n\t\t\t\tuint16_t* __argIdxs;\n\n\t\t\t\t// we need at least one slot for argBasePtr when resolvedTotalArgNum == 0\n\t\t\t\tAllocResolvedData(resolveDatas, std::max(needDataSlotNum, 1), argIdxDataIndex, __argIdxs);\n\n\t\t\t\tint32_t callArgEvalStackIdxBase = evalStackTop - resolvedTotalArgNum - 1 /*funtion ptr*/;\n\n\t\t\t\t// CallInd need know the argBasePtr when resolvedTotalArgNum == 0\n\t\t\t\tif (needDataSlotNum == 0)\n\t\t\t\t{\n\t\t\t\t\t__argIdxs[0] = evalStack[callArgEvalStackIdxBase].locOffset;\n\t\t\t\t}\n\n\t\t\t\tif (hasThis)\n\t\t\t\t{\n\t\t\t\t\t__argIdxs[0] = evalStack[callArgEvalStackIdxBase].locOffset;\n\t\t\t\t}\n\n\t\t\t\tfor (size_t i = 0; i < methodSig.params.size(); i++)\n\t\t\t\t{\n\t\t\t\t\tsize_t curArgIdx = i + hasThis;\n\t\t\t\t\t__argIdxs[curArgIdx] = evalStack[callArgEvalStackIdxBase + curArgIdx].locOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStackN(resolvedTotalArgNum + 1);\n\n\t\t\t\tif (!IsVoidType(methodSig.returnType))\n\t\t\t\t{\n\t\t\t\t\tPushStackByType(methodSig.returnType);\n\t\t\t\t\tinterpreter::LocationDataType locDataType = GetLocationDataTypeByType(methodSig.returnType);\n\t\t\t\t\tif (interpreter::IsNeedExpandLocationType(locDataType))\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallInd_ret_expand);\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodIdx;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tir->retLocationType = (uint8_t)locDataType;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CallInd_ret);\n\t\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodDataIdx;\n\t\t\t\t\t\tir->methodInfo = methodIdx;\n\t\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CallInd_void);\n\t\t\t\t\tir->managed2NativeMethod = managed2NativeMethodDataIdx;\n\t\t\t\t\tir->managed2NativeFunctionPointerMethod = managed2NativeFunctionPointerMethodDataIdx;\n\t\t\t\t\tir->methodInfo = methodIdx;\n\t\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\t}\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::RET:\n\t\t\t{\n\t\t\t\tbool isVoidReturnType = methodInfo->return_type->type == IL2CPP_TYPE_VOID;\n\t\t\t\tif (inMethodInlining)\n\t\t\t\t{\n\t\t\t\t\tif (!isVoidReturnType)\n\t\t\t\t\t{\n\t\t\t\t\t\tuint16_t retVarIdx = GetEvalStackTopOffset();\n\t\t\t\t\t\tif (retVarIdx != localVarOffset)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tIRCommon* ir = CreateAssignVarVar(pool, localVarOffset, retVarIdx, GetTypeValueSize(methodInfo->return_type));\n\t\t\t\t\t\t\tAddInst(ir);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (isVoidReturnType)\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, RetVar_void);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// ms.ret = nullptr;\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop == 1);\n\t\t\t\t\tint32_t size = GetTypeValueSize(methodInfo->return_type);\n\t\t\t\t\tswitch (size)\n\t\t\t\t\t{\n\t\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_1);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 2:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_2);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 4:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_4);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 8:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_8);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 12:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_12);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 16:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_16);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 20:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_20);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 24:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_24);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 28:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_28);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 32:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_32);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, RetVar_ret_n);\n\t\t\t\t\t\tir->ret = GetEvalStackTopOffset();\n\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tip++;\n\t\t\t\tPopBranch();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BR_S:\n\t\t\t{\n\t\t\t\tbrOffset = GetI1(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 2;\n\t\t\t\t\tCreateAddIR(ir, BranchUncondition_4);\n\t\t\t\t\tir->offset = targetOffset;\n\t\t\t\t\tPushOffset(&ir->offset);\n\n\t\t\t\t\tPushBranch(targetOffset);\n\t\t\t\t\tPopBranch();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tip += 2;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LEAVE_S:\n\t\t\t{\n\t\t\t\tbrOffset = GetI1(ip + 1);\n\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 2;\n\t\t\t\tAdd_leave((uint32_t)targetOffset);\n\t\t\t\tPopBranch();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BRFALSE_S:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tbrOffset = GetI1(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 2;\n\t\t\t\t\tAdd_brtruefalse(false, targetOffset);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tPopStack();\n\t\t\t\t}\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BRTRUE_S:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tbrOffset = GetI1(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 2;\n\t\t\t\t\tAdd_brtruefalse(true, targetOffset);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tPopStack();\n\t\t\t\t}\n\t\t\t\tip += 2;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BEQ_S:\n\t\t\t{\n\t\t\t\tCI_branch1(Ceq);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGE_S:\n\t\t\t{\n\t\t\t\tCI_branch1(Cge);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGT_S:\n\t\t\t{\n\t\t\t\tCI_branch1(Cgt);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLE_S:\n\t\t\t{\n\t\t\t\tCI_branch1(Cle);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLT_S:\n\t\t\t{\n\t\t\t\tCI_branch1(Clt);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BNE_UN_S:\n\t\t\t{\n\t\t\t\tCI_branch1(CneUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGE_UN_S:\n\t\t\t{\n\t\t\t\tCI_branch1(CgeUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGT_UN_S:\n\t\t\t{\n\t\t\t\tCI_branch1(CgtUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLE_UN_S:\n\t\t\t{\n\t\t\t\tCI_branch1(CleUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLT_UN_S:\n\t\t\t{\n\t\t\t\tCI_branch1(CltUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BR:\n\t\t\t{\n\t\t\t\tbrOffset = GetI4LittleEndian(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 5;\n\t\t\t\t\tCreateAddIR(ir, BranchUncondition_4);\n\t\t\t\t\tir->offset = targetOffset;\n\t\t\t\t\tPushOffset(&ir->offset);\n\n\t\t\t\t\tPushBranch(targetOffset);\n\t\t\t\t\tPopBranch();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tip += 5;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LEAVE:\n\t\t\t{\n\t\t\t\tbrOffset = GetI4LittleEndian(ip + 1);\n\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 5;\n\t\t\t\tAdd_leave((uint32_t)targetOffset);\n\t\t\t\tPopBranch();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BRFALSE:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tbrOffset = GetI4LittleEndian(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 5;\n\t\t\t\t\tAdd_brtruefalse(false, targetOffset);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tPopStack();\n\t\t\t\t}\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BRTRUE:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tbrOffset = GetI4LittleEndian(ip + 1);\n\t\t\t\tif (brOffset != 0)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = ipOffset + brOffset + 5;\n\t\t\t\t\tAdd_brtruefalse(true, targetOffset);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tPopStack();\n\t\t\t\t}\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcase OpcodeValue::BEQ:\n\t\t\t{\n\t\t\t\tCI_branch4(Ceq);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGE:\n\t\t\t{\n\t\t\t\tCI_branch4(Cge);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGT:\n\t\t\t{\n\t\t\t\tCI_branch4(Cgt);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLE:\n\t\t\t{\n\t\t\t\tCI_branch4(Cle);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLT:\n\t\t\t{\n\t\t\t\tCI_branch4(Clt);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BNE_UN:\n\t\t\t{\n\t\t\t\tCI_branch4(CneUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGE_UN:\n\t\t\t{\n\t\t\t\tCI_branch4(CgeUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BGT_UN:\n\t\t\t{\n\t\t\t\tCI_branch4(CgtUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLE_UN:\n\t\t\t{\n\t\t\t\tCI_branch4(CleUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BLT_UN:\n\t\t\t{\n\t\t\t\tCI_branch4(CltUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SWITCH:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tCreateIR(ir, BranchSwitch);\n\n\t\t\t\tuint32_t switchValue = GetEvalStackTopOffset();\n\t\t\t\tuint32_t n = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tir->value = GetEvalStackTopOffset();\n\t\t\t\tir->caseNum = n;\n\n\t\t\t\tint32_t* caseOffsets;\n\t\t\t\tAllocResolvedData(resolveDatas, (n + 1) / 2, *(int32_t*)&ir->caseOffsets, caseOffsets);\n\t\t\t\tPopStack();\n\n\t\t\t\tuint32_t instrSize = 1 + (n + 1) * 4;\n\t\t\t\tconst byte* caseOffsetIp = ip + 5;\n\n\t\t\t\t// remove this instrument if all target is same to default.\n\t\t\t\tuint32_t nextInstrumentOffset = ipOffset + instrSize;\n\t\t\t\tbool anyNotDefaultCase = false;\n\t\t\t\tfor (uint32_t caseIdx = 0; caseIdx < n; caseIdx++)\n\t\t\t\t{\n\t\t\t\t\tint32_t targetOffset = (int32_t)(nextInstrumentOffset + GetI4LittleEndian(caseOffsetIp + caseIdx * 4));\n\t\t\t\t\tcaseOffsets[caseIdx] = targetOffset;\n\t\t\t\t\t//PushOffset(caseOffsets + caseIdx);\n\t\t\t\t\tif (targetOffset != nextInstrumentOffset)\n\t\t\t\t\t{\n\t\t\t\t\t\tanyNotDefaultCase = true;\n\t\t\t\t\t\tPushBranch(targetOffset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (anyNotDefaultCase)\n\t\t\t\t{\n\t\t\t\t\tswitchOffsetsInResolveData.push_back({ ir->caseOffsets, n });\n\t\t\t\t\tAddInst(ir);\n\t\t\t\t}\n\t\t\t\tip += instrSize;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_I1:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_i1, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_U1:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_u1, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_I2:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_i2, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_U2:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_u2, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_I4:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_i4, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_U4:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_u4, EvalStackReduceDataType::I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_I8:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_i8, EvalStackReduceDataType::I8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_I:\n\t\t\t{\n\t\t\t\tAdd_ldind(ARCH_ARGUMENT(HiOpcodeEnum::LdindVarVar_i4, HiOpcodeEnum::LdindVarVar_i8), NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_R4:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_f4, EvalStackReduceDataType::R4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_R8:\n\t\t\t{\n\t\t\t\tAdd_ldind(HiOpcodeEnum::LdindVarVar_f8, EvalStackReduceDataType::R8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDIND_REF:\n\t\t\t{\n\t\t\t\tAdd_ldind(ARCH_ARGUMENT(HiOpcodeEnum::LdindVarVar_i4, HiOpcodeEnum::LdindVarVar_i8), NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_REF:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_ref);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_I1:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_i1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_I2:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_i2);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_I4:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_i4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_I8:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_i8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_R4:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_f4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_R8:\n\t\t\t{\n\t\t\t\tAdd_stind(HiOpcodeEnum::StindVarVar_f8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::ADD:\n\t\t\t{\n\t\t\t\tCI_binOp(Add);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SUB:\n\t\t\t{\n\t\t\t\tCI_binOp(Sub);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::MUL:\n\t\t\t{\n\t\t\t\tCI_binOp(Mul);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::DIV:\n\t\t\t{\n\t\t\t\tCI_binOp(Div);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::DIV_UN:\n\t\t\t{\n\t\t\t\tCI_binOpUn(DivUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::REM:\n\t\t\t{\n\t\t\t\tCI_binOp(Rem);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::REM_UN:\n\t\t\t{\n\t\t\t\tCI_binOpUn(RemUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::AND:\n\t\t\t{\n\t\t\t\tCI_binOpUn(And);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::OR:\n\t\t\t{\n\t\t\t\tCI_binOpUn(Or);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::XOR:\n\t\t\t{\n\t\t\t\tCI_binOpUn(Xor);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SHL:\n\t\t\t{\n\t\t\t\tCI_binOpShift(Shl);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SHR:\n\t\t\t{\n\t\t\t\tCI_binOpShift(Shr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SHR_UN:\n\t\t\t{\n\t\t\t\tCI_binOpShift(ShrUn);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::NEG:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& op = evalStack[evalStackTop - 1];\n\t\t\t\tCreateAddIR(ir, UnaryOpVarVar_Neg_i4);\n\t\t\t\tir->dst = ir->src = op.locOffset;\n\n\t\t\t\tswitch (op.reduceType)\n\t\t\t\t{\n\t\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Neg_i4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Neg_i8;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Neg_f4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Neg_f8;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"NEG not suppport type\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::NOT:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& op = evalStack[evalStackTop - 1];\n\t\t\t\tCreateAddIR(ir, UnaryOpVarVar_Not_i4);\n\t\t\t\tir->dst = ir->src = op.locOffset;\n\n\t\t\t\tswitch (op.reduceType)\n\t\t\t\t{\n\t\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Not_i4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::UnaryOpVarVar_Not_i8;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"NOT not suppport type\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_I1:\n\t\t\t{\n\t\t\t\tCI_conv(i1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_I2:\n\t\t\t{\n\t\t\t\tCI_conv(i2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_I4:\n\t\t\t{\n\t\t\t\tCI_conv(i4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_I8:\n\t\t\t{\n\t\t\t\tCI_conv(i8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_R4:\n\t\t\t{\n\t\t\t\tCI_conv(f4, R4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_R8:\n\t\t\t{\n\t\t\t\tCI_conv(f8, R8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_U4:\n\t\t\t{\n\t\t\t\tCI_conv(u4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_U8:\n\t\t\t{\n\t\t\t\tCI_conv(u8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CPOBJ:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\t\t\tEvalStackVarInfo& dst = evalStack[evalStackTop - 2];\n\t\t\t\tEvalStackVarInfo& src = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\t\t\t\tif (IS_CLASS_VALUE_TYPE(objKlass))\n\t\t\t\t{\n\t\t\t\t\tuint32_t size = GetTypeValueSize(objKlass);\n\t\t\t\t\tif (!HYBRIDCLR_ENABLE_WRITE_BARRIERS || !objKlass->has_references)\n\t\t\t\t\t{\n\t\t\t\t\t\tswitch (size)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_1);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_2);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_4);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_8);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_12);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 16:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_16);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_n_4);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_WriteBarrier_n_4);\n\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CpobjVarVar_ref);\n\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStackN(2);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDOBJ:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 1);\n\t\t\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\t\t\t\tLocationDescInfo desc = ComputLocationDescInfo(&objKlass->byval_arg);\n\n\t\t\t\tswitch (desc.type)\n\t\t\t\t{\n\t\t\t\tcase LocationDescType::I1:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i1);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::U1:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_u1);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::I2:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i2);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::U2:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_u2);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::I4:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i4);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::I8:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i8);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::Ref:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_ref);\n\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::S:\n\t\t\t\tcase LocationDescType::StructContainsRef:\n\t\t\t\t{\n\t\t\t\t\tuint32_t size = GetTypeValueSize(objKlass);\n\t\t\t\t\tswitch (size)\n\t\t\t\t\t{\n\t\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_1);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 2:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_2);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 4:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_4);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 8:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_8);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 12:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_12);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 16:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_16);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdobjVarVar_n_4);\n\t\t\t\t\t\tir->dst = ir->src = top.locOffset;\n\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"field\");\n\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByType(&objKlass->byval_arg);\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDSTR:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppString* str = image->GetIl2CppUserStringFromRawIndex(DecodeTokenRowIndex(token));\n\t\t\t\tuint32_t dataIdx = GetOrAddResolveDataIndex(str);\n\n\t\t\t\tCreateAddIR(ir, LdstrVar);\n\t\t\t\tir->dst = GetEvalStackNewTopOffset();\n\t\t\t\tir->str = dataIdx;\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::NEWOBJ:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tip += 5;\n\t\t\t\t// TODO token cache optimistic\n\t\t\t\tshareMethod = const_cast<MethodInfo*>(image->GetMethodInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(shareMethod);\n\t\t\t\tIL2CPP_ASSERT(!std::strcmp(shareMethod->name, \".ctor\"));\n\t\t\t\tIL2CPP_ASSERT(hybridclr::metadata::IsInstanceMethod(shareMethod));\n\t\t\t\tif (TryAddInstinctCtorInstruments(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tIl2CppClass* klass = shareMethod->klass;\n\t\t\t\tuint8_t paramCount = shareMethod->parameters_count;\n\t\t\t\tif (klass == il2cpp_defaults.string_class)\n\t\t\t\t{\n\t\t\t\t\tconst MethodInfo* searchMethod = FindRedirectCreateString(shareMethod);\n\t\t\t\t\tif (searchMethod)\n\t\t\t\t\t{\n\t\t\t\t\t\t// insert nullptr to eval stack\n\t\t\t\t\t\tint32_t thisIdx = evalStackTop - paramCount;\n\t\t\t\t\t\tfor (int32_t i = evalStackTop; i > thisIdx; i--)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tevalStack[i] = evalStack[i - 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// locOffset of this is not important. You only need make sure the value is not equal to nullptr.\n\t\t\t\t\t\tevalStack[thisIdx] = { NATIVE_INT_REDUCE_TYPE, PTR_SIZE, GetEvalStackOffset(thisIdx) };\n\t\t\t\t\t\t++evalStackTop;\n\t\t\t\t\t\tshareMethod = searchMethod;\n\t\t\t\t\t\tgoto LabelCall;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tRaiseAOTGenericMethodNotInstantiatedException(shareMethod);\n\t\t\t\t}\n\n\t\t\t\tint32_t callArgEvalStackIdxBase = evalStackTop - shareMethod->parameters_count;\n\t\t\t\tIL2CPP_ASSERT(callArgEvalStackIdxBase >= 0);\n\t\t\t\tuint16_t objIdx = GetEvalStackOffset(callArgEvalStackIdxBase);\n\n\t\t\t\tint32_t resolvedTotalArgNum = shareMethod->parameters_count + 1;\n\n\t\t\t\tuint32_t methodDataIndex = GetOrAddResolveDataIndex(shareMethod);\n\n\t\t\t\tif (IsInterpreterImplement(shareMethod))\n\t\t\t\t{\n\t\t\t\t\tif (IS_CLASS_VALUE_TYPE(klass))\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, NewValueTypeInterpVar);\n\t\t\t\t\t\tir->obj = GetEvalStackOffset(callArgEvalStackIdxBase);\n\t\t\t\t\t\tir->method = methodDataIndex;\n\t\t\t\t\t\tir->argBase = ir->obj;\n\t\t\t\t\t\tir->argStackObjectNum = curStackSize - ir->argBase;\n\t\t\t\t\t\t// IL2CPP_ASSERT(ir->argStackObjectNum > 0); may 0\n\t\t\t\t\t\tPopStackN(shareMethod->parameters_count);\n\t\t\t\t\t\tPushStackByType(&klass->byval_arg);\n\t\t\t\t\t\tir->ctorFrameBase = GetEvalStackNewTopOffset();\n\t\t\t\t\t\tmaxStackSize = std::max(maxStackSize, curStackSize + ir->argStackObjectNum + 1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (shareMethod->parameters_count == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, NewClassInterpVar_Ctor_0);\n\t\t\t\t\t\t\tir->obj = GetEvalStackNewTopOffset();\n\t\t\t\t\t\t\tir->method = methodDataIndex;\n\t\t\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\t\t\t\tir->ctorFrameBase = GetEvalStackNewTopOffset();\n\t\t\t\t\t\t\tmaxStackSize = std::max(maxStackSize, curStackSize + 1); // 1 for __this\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, NewClassInterpVar);\n\t\t\t\t\t\t\tir->obj = GetEvalStackOffset(callArgEvalStackIdxBase);\n\t\t\t\t\t\t\tir->method = methodDataIndex;\n\t\t\t\t\t\t\tir->argBase = ir->obj;\n\t\t\t\t\t\t\tir->argStackObjectNum = curStackSize - ir->argBase;\n\t\t\t\t\t\t\tIL2CPP_ASSERT(ir->argStackObjectNum > 0);\n\t\t\t\t\t\t\tPopStackN(shareMethod->parameters_count);\n\t\t\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\t\t\t\tir->ctorFrameBase = GetEvalStackNewTopOffset();\n\t\t\t\t\t\t\tmaxStackSize = std::max(maxStackSize, curStackSize + ir->argStackObjectNum + 1); // 1 for __this\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tIL2CPP_ASSERT(maxStackSize < MAX_STACK_SIZE);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tint32_t needDataSlotNum = (resolvedTotalArgNum + 3) / 4;\n\t\t\t\tManaged2NativeCallMethod managed2NativeMethod = InterpreterModule::GetManaged2NativeMethodPointer(shareMethod, false);\n\t\t\t\tIL2CPP_ASSERT((void*)managed2NativeMethod);\n\t\t\t\t//uint32_t managed2NativeMethodDataIdx = GetOrAddResolveDataIndex(managed2NativeMethod);\n\n\n\n\t\t\t\tint32_t argIdxDataIndex;\n\t\t\t\tuint16_t* __argIdxs;\n\t\t\t\tAllocResolvedData(resolveDatas, needDataSlotNum, argIdxDataIndex, __argIdxs);\n\t\t\t\t//\n\t\t\t\t// arg1, arg2, arg3 ..., argN, obj or valuetype, __this(= obj or ref valuetype)\n\t\t\t\t// obj on new top\n\t\t\t\tPushStackByType(&klass->byval_arg);\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\t__argIdxs[0] = GetEvalStackTopOffset(); // this\n\n\t\t\t\tfor (uint8_t i = 0; i < shareMethod->parameters_count; i++)\n\t\t\t\t{\n\t\t\t\t\tint32_t curArgIdx = i + 1;\n\t\t\t\t\t__argIdxs[curArgIdx] = evalStack[callArgEvalStackIdxBase + i].locOffset;\n\t\t\t\t}\n\t\t\t\tPopStackN(resolvedTotalArgNum + 1); // args + obj + this\n\t\t\t\tPushStackByType(&klass->byval_arg);\n\t\t\t\tCreateAddIR(ir, NewClassVar);\n\t\t\t\tir->type = IS_CLASS_VALUE_TYPE(shareMethod->klass) ? HiOpcodeEnum::NewValueTypeVar : HiOpcodeEnum::NewClassVar;\n\t\t\t\tir->managed2NativeMethod = GetOrAddResolveDataIndex((void*)managed2NativeMethod);\n\t\t\t\tir->method = methodDataIndex;\n\t\t\t\tir->argIdxs = argIdxDataIndex;\n\t\t\t\tir->obj = objIdx;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CASTCLASS:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\n\t\t\t\tif (il2cpp::vm::Class::IsNullable(objKlass))\n\t\t\t\t{\n\t\t\t\t\tobjKlass = il2cpp::vm::Class::GetNullableArgument(objKlass);\n\t\t\t\t}\n\t\t\t\tuint32_t klassDataIdx = GetOrAddResolveDataIndex(objKlass);\n\n\t\t\t\tCreateAddIR(ir, CastclassVar);\n\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\tir->klass = klassDataIdx;\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::ISINST:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\n\t\t\t\tif (il2cpp::vm::Class::IsNullable(objKlass))\n\t\t\t\t{\n\t\t\t\t\tobjKlass = il2cpp::vm::Class::GetNullableArgument(objKlass);\n\t\t\t\t}\n\t\t\t\tuint32_t klassDataIdx = GetOrAddResolveDataIndex(objKlass);\n\n\t\t\t\tCreateAddIR(ir, IsInstVar);\n\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\tir->klass = klassDataIdx;\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_R_UN:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\t\t\t\tswitch (top.reduceType)\n\t\t\t\t{\n\t\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, ConvertVarVar_u4_f8);\n\t\t\t\t\tir->dst = ir->src = GetEvalStackTopOffset();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::I8:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, ConvertVarVar_u8_f8);\n\t\t\t\t\tir->dst = ir->src = GetEvalStackTopOffset();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttop.reduceType = EvalStackReduceDataType::R8;\n\t\t\t\ttop.byteSize = 8;\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::UNBOX:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\t//if (il2cpp::vm::Class::IsNullable(objKlass))\n\t\t\t\t//{\n\t\t\t\t//    objKlass = il2cpp::vm::Class::GetNullableArgument(objKlass);\n\t\t\t\t//}\n\t\t\t\tCreateAddIR(ir, UnBoxVarVar);\n\t\t\t\tir->addr = ir->obj = GetEvalStackTopOffset();\n\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::THROW:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tCreateAddIR(ir, ThrowEx);\n\t\t\t\tir->exceptionObj = GetEvalStackTopOffset();\n\t\t\t\tir->firstHandlerIndex = FindFirstThrowHandlerIndex(body.exceptionClauses, ipOffset);\n\t\t\t\tPopAllStack();\n\t\t\t\tPopBranch();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDFLD:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\t\t\t\t// ldfld obj may be obj or or valuetype or ref valuetype....\n\t\t\t\tEvalStackVarInfo& obj = evalStack[evalStackTop - 1];\n\t\t\t\tuint16_t topIdx = GetEvalStackTopOffset();\n\t\t\t\tIRCommon* ir = obj.reduceType != NATIVE_INT_REDUCE_TYPE && IS_CLASS_VALUE_TYPE(fieldInfo->parent) ? CreateValueTypeLdfld(pool, topIdx, topIdx, fieldInfo) : CreateClassLdfld(pool, topIdx, topIdx, fieldInfo);\n\t\t\t\tAddInst(ir);\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByType(fieldInfo->type);\n\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDFLDA:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\n\t\t\t\tuint16_t topIdx = GetEvalStackTopOffset();\n\t\t\t\tuint32_t fieldOffset = GetFieldOffset(fieldInfo);\n\t\t\t\tif (fieldOffset <= kMaxShortFieldOffset)\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdfldaVarVar);\n\t\t\t\t\tir->dst = topIdx;\n\t\t\t\t\tir->obj = topIdx;\n\t\t\t\t\tir->offset = (uint16_t)fieldOffset;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdfldaLargeVarVar);\n\t\t\t\t\tir->dst = topIdx;\n\t\t\t\t\tir->obj = topIdx;\n\t\t\t\t\tir->offset = fieldOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STFLD:\n\t\t\t{\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\n\t\t\t\tIRCommon* ir = CreateStfld(pool, GetEvalStackOffset_2(), fieldInfo, GetEvalStackOffset_1());\n\t\t\t\tAddInst(ir);\n\t\t\t\tPopStackN(2);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDSFLD:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\t\t\t\tuint32_t parentIndex = GetOrAddResolveDataIndex(fieldInfo->parent);\n\t\t\t\tuint16_t dstIdx = GetEvalStackNewTopOffset();\n\t\t\t\tIRCommon* ir = fieldInfo->offset != THREAD_STATIC_FIELD_OFFSET ?\n\t\t\t\t\tCreateLdsfld(pool, dstIdx, fieldInfo, parentIndex)\n\t\t\t\t\t: CreateLdthreadlocal(pool, dstIdx, fieldInfo, parentIndex);\n\t\t\t\tAddInst(ir);\n\t\t\t\tPushStackByType(fieldInfo->type);\n\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDSFLDA:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\n\t\t\t\tuint16_t dstIdx = GetEvalStackNewTopOffset();\n\t\t\t\tif (fieldInfo->offset != THREAD_STATIC_FIELD_OFFSET)\n\t\t\t\t{\n\t\t\t\t\tbool ldfldFromFieldData = false;\n\t\t\t\t\tif (hybridclr::metadata::IsInterpreterType(fieldInfo->parent))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst FieldDetail& fieldDet = hybridclr::metadata::MetadataModule::GetImage(fieldInfo->parent)\n\t\t\t\t\t\t\t->GetFieldDetailFromRawIndex(hybridclr::metadata::DecodeTokenRowIndex(fieldInfo->token - 1));\n\t\t\t\t\t\tif (fieldDet.defaultValueIndex != kDefaultValueIndexNull)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tldfldFromFieldData = true;\n\t\t\t\t\t\t\tCreateAddIR(ir, LdsfldaFromFieldDataVarVar);\n\t\t\t\t\t\t\tir->dst = dstIdx;\n\t\t\t\t\t\t\tir->src = GetOrAddResolveDataIndex(il2cpp::vm::Field::GetData(fieldInfo));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!ldfldFromFieldData)\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LdsfldaVarVar);\n\t\t\t\t\t\tir->dst = dstIdx;\n\t\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(fieldInfo->parent);\n\t\t\t\t\t\tir->offset = fieldInfo->offset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, LdthreadlocalaVarVar);\n\t\t\t\t\tir->dst = dstIdx;\n\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(fieldInfo->parent);\n\t\t\t\t\tir->offset = GetThreadStaticFieldOffset(fieldInfo);\n\t\t\t\t}\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STSFLD:\n\t\t\t{\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 1);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tFieldInfo* fieldInfo = const_cast<FieldInfo*>(image->GetFieldInfoFromToken(tokenCache, token, klassContainer, methodContainer, genericContext));\n\t\t\t\tIL2CPP_ASSERT(fieldInfo);\n\n\t\t\t\tuint32_t klassIndex = GetOrAddResolveDataIndex(fieldInfo->parent);\n\t\t\t\tuint16_t dataIdx = GetEvalStackTopOffset();\n\t\t\t\tIRCommon* ir = fieldInfo->offset != THREAD_STATIC_FIELD_OFFSET ?\n\t\t\t\t\tCreateStsfld(pool, fieldInfo, klassIndex, dataIdx)\n\t\t\t\t\t: CreateStthreadlocal(pool, fieldInfo, klassIndex, dataIdx);\n\t\t\t\tAddInst(ir);\n\n\t\t\t\tPopStack();\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STOBJ:\n\t\t\t{\n\t\t\t\tInsertMemoryBarrier();\n\t\t\t\tResetPrefixFlags();\n\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\t\t\tEvalStackVarInfo& dst = evalStack[evalStackTop - 2];\n\t\t\t\tEvalStackVarInfo& src = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\t\t\t\tif (IS_CLASS_VALUE_TYPE(objKlass))\n\t\t\t\t{\n\t\t\t\t\tuint32_t size = GetTypeValueSize(objKlass);\n\t\t\t\t\tif (!HYBRIDCLR_ENABLE_WRITE_BARRIERS || !objKlass->has_references)\n\t\t\t\t\t{\n\t\t\t\t\t\tswitch (size)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_1);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_2);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_4);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_8);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_12);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 16:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_16);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_n_4);\n\t\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, StobjVarVar_WriteBarrier_n_4);\n\t\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t\t\tir->size = size;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, StobjVarVar_ref);\n\t\t\t\t\tir->dst = dst.locOffset;\n\t\t\t\t\tir->src = src.locOffset;\n\t\t\t\t}\n\n\t\t\t\tPopStackN(2);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I1_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(i1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I2_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(i2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I4_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(i4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I8_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(i8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U1_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(u1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U2_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(u2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U4_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(u4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U8_UN:\n\t\t\t{\n\t\t\t\tCI_conv_un_ovf(u8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I_UN:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv_un_ovf(i8, I8, 8);\n#else\n\t\t\t\tCI_conv_un_ovf(i4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U_UN:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv_un_ovf(u8, I8, 8);\n#else\n\t\t\t\tCI_conv_un_ovf(u4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::BOX:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\t/*\tif (il2cpp::vm::Class::IsNullable(objKlass))\n\t\t\t\t\t{\n\t\t\t\t\t\tobjKlass = il2cpp::vm::Class::GetNullableArgument(objKlass);\n\t\t\t\t\t}*/\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tif (IS_CLASS_VALUE_TYPE(objKlass))\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, BoxVarVar);\n\t\t\t\t\tir->dst = ir->data = GetEvalStackTopOffset();\n\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// ignore class\n\t\t\t\t}\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::NEWARR:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& varSize = evalStack[evalStackTop - 1];\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* eleKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(eleKlass);\n\t\t\t\tIl2CppClass* arrKlass = il2cpp::vm::Class::GetArrayClass(eleKlass, 1);\n\t\t\t\tuint32_t arrKlassIndex = GetOrAddResolveDataIndex(arrKlass);\n\n\t\t\t\tCreateAddIR(ir, NewArrVarVar);\n\t\t\t\tir->arr = ir->size = varSize.locOffset;\n\t\t\t\tir->klass = arrKlassIndex;\n\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDLEN:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tCreateAddIR(ir, GetArrayLengthVarVar);\n\t\t\t\tir->arr = ir->len = GetEvalStackTopOffset();\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEMA:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\t\t\tEvalStackVarInfo& arr = evalStack[evalStackTop - 2];\n\t\t\t\tEvalStackVarInfo& index = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* eleKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tuint32_t eleKlassIndex = GetOrAddResolveDataIndex(eleKlass);\n\n\t\t\t\tif ((prefixFlags & (int32_t)PrefixFlags::ReadOnly) || IS_CLASS_VALUE_TYPE(eleKlass))\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, GetArrayElementAddressAddrVarVar);\n\t\t\t\t\tir->arr = ir->addr = arr.locOffset;\n\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, GetArrayElementAddressCheckAddrVarVar);\n\t\t\t\t\tir->arr = ir->addr = arr.locOffset;\n\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\tir->eleKlass = eleKlassIndex;\n\t\t\t\t}\n\t\t\t\tResetPrefixFlags();\n\t\t\t\tPopStackN(2);\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_I1:\n\t\t\t{\n\t\t\t\tCI_ldele(i1, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_U1:\n\t\t\t{\n\t\t\t\tCI_ldele(u1, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_I2:\n\t\t\t{\n\t\t\t\tCI_ldele(i2, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_U2:\n\t\t\t{\n\t\t\t\tCI_ldele(u2, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_I4:\n\t\t\t{\n\t\t\t\tCI_ldele(i4, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_U4:\n\t\t\t{\n\t\t\t\tCI_ldele(u4, I4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_I8:\n\t\t\t{\n\t\t\t\tCI_ldele(i8, I8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_I:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_ldele(i8, I8);\n#else\n\t\t\t\tCI_ldele(i4, I4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_R4:\n\t\t\t{\n\t\t\t\tCI_ldele(i4, R4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_R8:\n\t\t\t{\n\t\t\t\tCI_ldele(i8, R8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDELEM_REF:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_ldele(i8, I8);\n#else\n\t\t\t\tCI_ldele(i4, I4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_I:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_stele(i8)\n#else\n\t\t\t\tCI_stele(i4)\n#endif\n\t\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_I1:\n\t\t\t{\n\t\t\t\tCI_stele(i1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_I2:\n\t\t\t{\n\t\t\t\tCI_stele(i2);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_I4:\n\t\t\t{\n\t\t\t\tCI_stele(i4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_I8:\n\t\t\t{\n\t\t\t\tCI_stele(i8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_R4:\n\t\t\t{\n\t\t\t\tCI_stele(i4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_R8:\n\t\t\t{\n\t\t\t\tCI_stele(i8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STELEM_REF:\n\t\t\t{\n\t\t\t\tCI_stele(ref);\n\t\t\t\tcontinue;\n\t\t\t}\n\n#define CI_ldele0(eleType) \\\nCreateAddIR(ir,  GetArrayElementVarVar_##eleType); \\\nir->arr = arr.locOffset; \\\nir->index = index.locOffset; \\\nir->dst = arr.locOffset;\n\n\n\t\t\tcase OpcodeValue::LDELEM:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 2);\n\t\t\t\tEvalStackVarInfo& arr = evalStack[evalStackTop - 2];\n\t\t\t\tEvalStackVarInfo& index = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tconst Il2CppType* eleType = &objKlass->byval_arg;\n\n\t\t\t\tIL2CPP_ASSERT(index.reduceType == EvalStackReduceDataType::I4 || index.reduceType == EvalStackReduceDataType::I8);\n\t\t\t\tbool isIndexInt32Type = index.reduceType == EvalStackReduceDataType::I4;\n\t\t\t\tLocationDescInfo desc = ComputLocationDescInfo(eleType);\n\t\t\t\tswitch (desc.type)\n\t\t\t\t{\n\t\t\t\tcase LocationDescType::I1: { CI_ldele0(i1); break; }\n\t\t\t\tcase LocationDescType::U1: { CI_ldele0(u1); break; }\n\t\t\t\tcase LocationDescType::I2: { CI_ldele0(i2); break; }\n\t\t\t\tcase LocationDescType::U2: { CI_ldele0(u2); break; }\n\t\t\t\tcase LocationDescType::I4: { CI_ldele0(i4); break; }\n\t\t\t\tcase LocationDescType::I8: { CI_ldele0(i8); break; }\n\t\t\t\tcase LocationDescType::Ref:\n\t\t\t\t{\n\t\t\t\t\tif (HYBRIDCLR_ARCH_64)\n\t\t\t\t\t{\n\t\t\t\t\t\tCI_ldele0(i8);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCI_ldele0(i4);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::S:\n\t\t\t\tcase LocationDescType::StructContainsRef:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, GetArrayElementVarVar_size_1);\n\t\t\t\t\tir->arr = arr.locOffset;\n\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\tir->dst = arr.locOffset;\n\t\t\t\t\tuint32_t size = il2cpp::vm::Class::GetValueSize(objKlass, nullptr);\n\t\t\t\t\tswitch (size)\n\t\t\t\t\t{\n\t\t\t\t\tcase 1:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 2:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 4:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 8:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_8;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 12:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_12;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 16:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_16;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 20:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_20;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 24:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 28:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_28;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 32:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_size_32;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tir->type = HiOpcodeEnum::GetArrayElementVarVar_n;\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"ldelem not support type\");\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tPopStackN(2);\n\t\t\t\tPushStackByType(eleType);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\n#define CI_stele0(eleType) \\\nCreateAddIR(ir, SetArrayElementVarVar_##eleType); \\\nir->arr = arr.locOffset; \\\nir->index = index.locOffset; \\\nir->ele = ele.locOffset; \n\n\t\t\tcase OpcodeValue::STELEM:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 3);\n\t\t\t\tEvalStackVarInfo& arr = evalStack[evalStackTop - 3];\n\t\t\t\tEvalStackVarInfo& index = evalStack[evalStackTop - 2];\n\t\t\t\tEvalStackVarInfo& ele = evalStack[evalStackTop - 1];\n\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tconst Il2CppType* eleType = &objKlass->byval_arg;\n\n\t\t\t\tIL2CPP_ASSERT(index.reduceType == EvalStackReduceDataType::I4 || index.reduceType == EvalStackReduceDataType::I8);\n\t\t\t\tbool isIndexInt32Type = index.reduceType == EvalStackReduceDataType::I4;\n\t\t\t\tLocationDescInfo desc = ComputLocationDescInfo(eleType);\n\t\t\t\tswitch (desc.type)\n\t\t\t\t{\n\t\t\t\tcase LocationDescType::I1: { CI_stele0(i1); break; }\n\t\t\t\tcase LocationDescType::U1: { CI_stele0(u1); break; }\n\t\t\t\tcase LocationDescType::I2: { CI_stele0(i2); break; }\n\t\t\t\tcase LocationDescType::U2: { CI_stele0(u2); break; }\n\t\t\t\tcase LocationDescType::I4: { CI_stele0(i4); break; }\n\t\t\t\tcase LocationDescType::I8: { CI_stele0(i8); break; }\n\t\t\t\tcase LocationDescType::Ref: { CI_stele0(ref); break; }\n\t\t\t\tcase LocationDescType::S:\n\t\t\t\t{\n\t\t\t\t\tuint32_t size = il2cpp::vm::Class::GetValueSize(objKlass, nullptr);\n\t\t\t\t\tswitch (size)\n\t\t\t\t\t{\n\t\t\t\t\tcase 12:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, SetArrayElementVarVar_size_12);\n\t\t\t\t\t\tir->arr = arr.locOffset;\n\t\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\t\tir->ele = ele.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 16:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, SetArrayElementVarVar_size_16);\n\t\t\t\t\t\tir->arr = arr.locOffset;\n\t\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\t\tir->ele = ele.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, SetArrayElementVarVar_n);\n\t\t\t\t\t\tir->arr = arr.locOffset;\n\t\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\t\tir->ele = ele.locOffset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase LocationDescType::StructContainsRef:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, SetArrayElementVarVar_WriteBarrier_n);\n\t\t\t\t\tir->arr = arr.locOffset;\n\t\t\t\t\tir->index = index.locOffset;\n\t\t\t\t\tir->ele = ele.locOffset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"stelem not support type\");\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tPopStackN(3);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::UNBOX_ANY:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\n\t\t\t\tif (IS_CLASS_VALUE_TYPE(objKlass))\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, UnBoxAnyVarVar);\n\t\t\t\t\tir->dst = ir->obj = GetEvalStackTopOffset();\n\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\n\t\t\t\t\tPopStack();\n\t\t\t\t\tPushStackByType(&objKlass->byval_arg);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CastclassVar);\n\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\t\t\t\t}\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I1:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(i1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U1:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(u1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I2:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(i2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U2:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(u2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I4:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(i4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U4:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(u4, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I8:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(i8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U8:\n\t\t\t{\n\t\t\t\tCI_conv_ovf(u8, I8, 8);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::REFANYVAL:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tCreateAddIR(ir, RefAnyValueVarVar);\n\t\t\t\tir->addr = ir->typedRef = GetEvalStackTopOffset();\n\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\t\t\t\tPopStack();\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CKFINITE:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\t\t\t\tswitch (top.reduceType)\n\t\t\t\t{\n\t\t\t\tcase EvalStackReduceDataType::R4:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CheckFiniteVar_f4);\n\t\t\t\t\tir->src = GetEvalStackTopOffset();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase EvalStackReduceDataType::R8:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, CheckFiniteVar_f8);\n\t\t\t\t\tir->src = GetEvalStackTopOffset();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"CKFINITE invalid reduceType\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::MKREFANY:\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\tIL2CPP_ASSERT(objKlass);\n\t\t\t\tCreateAddIR(ir, MakeRefVarVar);\n\t\t\t\tir->dst = ir->data = GetEvalStackTopOffset();\n\t\t\t\tir->klass = GetOrAddResolveDataIndex(objKlass);\n\t\t\t\tPopStack();\n\n\t\t\t\tIl2CppType typedRef = {};\n\t\t\t\ttypedRef.type = IL2CPP_TYPE_TYPEDBYREF;\n\t\t\t\tPushStackByType(&typedRef);\n\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::LDTOKEN:\n\t\t\t{\n\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\tvoid* runtimeHandle = (void*)image->GetRuntimeHandleFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\n\t\t\t\tCreateAddIR(ir, LdtokenVar);\n\t\t\t\tir->runtimeHandle = GetEvalStackNewTopOffset();\n\t\t\t\tir->token = GetOrAddResolveDataIndex(runtimeHandle);\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tip += 5;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_U2:\n\t\t\t{\n\t\t\t\tCI_conv(u2, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_U1:\n\t\t\t{\n\t\t\t\tCI_conv(u1, I4, 4);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_I:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv(i8, I8, 8);\n#else\n\t\t\t\tCI_conv(i4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_I:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv_ovf(i8, I8, 8);\n#else\n\t\t\t\tCI_conv_ovf(i4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_OVF_U:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv_ovf(u8, I8, 8);\n#else\n\t\t\t\tCI_conv_ovf(u4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::ADD_OVF:\n\t\t\t{\n\t\t\t\tCI_binOpOvf(Add);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::ADD_OVF_UN:\n\t\t\t{\n\t\t\t\tCI_binOpUnOvf(Add);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::MUL_OVF:\n\t\t\t{\n\t\t\t\tCI_binOpOvf(Mul);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::MUL_OVF_UN:\n\t\t\t{\n\t\t\t\tCI_binOpUnOvf(Mul);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SUB_OVF:\n\t\t\t{\n\t\t\t\tCI_binOpOvf(Sub);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::SUB_OVF_UN:\n\t\t\t{\n\t\t\t\tCI_binOpUnOvf(Sub);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::ENDFINALLY:\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, EndFinallyEx);\n\t\t\t\tPopBranch();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::STIND_I:\n\t\t\t{\n\t\t\t\tAdd_stind(ARCH_ARGUMENT(HiOpcodeEnum::StindVarVar_i4, HiOpcodeEnum::StindVarVar_i8));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::CONV_U:\n\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\tCI_conv(u8, I8, 8);\n#else\n\t\t\t\tCI_conv(u4, I4, 4);\n#endif\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::PREFIX7:\n\t\t\tcase OpcodeValue::PREFIX6:\n\t\t\tcase OpcodeValue::PREFIX5:\n\t\t\tcase OpcodeValue::PREFIX4:\n\t\t\tcase OpcodeValue::PREFIX3:\n\t\t\tcase OpcodeValue::PREFIX2:\n\t\t\t{\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::PREFIX1:\n\t\t\t{\n\t\t\t\t// This is the prefix for all the 2-byte opcodes.\n\t\t\t\t// Figure out the second byte of the 2-byte opcode.\n\t\t\t\tbyte ops = *(ip + 1);\n\n\t\t\t\tswitch ((OpcodeValue)ops)\n\t\t\t\t{\n\n\t\t\t\tcase OpcodeValue::ARGLIST:\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"\");\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CEQ:\n\t\t\t\t{\n\t\t\t\t\tCI_compare(Ceq);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CGT:\n\t\t\t\t{\n\t\t\t\t\tCI_compare(Cgt);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CGT_UN:\n\t\t\t\t{\n\t\t\t\t\tCI_compare(CgtUn);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CLT:\n\t\t\t\t{\n\t\t\t\t\tCI_compare(Clt);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CLT_UN:\n\t\t\t\t{\n\t\t\t\t\tCI_compare(CltUn);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDFTN:\n\t\t\t\t{\n\t\t\t\t\tuint32_t methodToken = (uint32_t)GetI4LittleEndian(ip + 2);\n\t\t\t\t\tMethodInfo* methodInfo = const_cast<MethodInfo*>(image->GetMethodInfoFromToken(tokenCache, methodToken, klassContainer, methodContainer, genericContext));\n\t\t\t\t\tIL2CPP_ASSERT(methodInfo);\n\t\t\t\t\tCreateAddIR(ir, LdcVarConst_8);\n\t\t\t\t\tir->dst = GetEvalStackNewTopOffset();\n\t\t\t\t\tir->src = (uint64_t)methodInfo;\n\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\t\tip += 6;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDVIRTFTN:\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\t\tuint32_t methodToken = (uint32_t)GetI4LittleEndian(ip + 2);\n\t\t\t\t\tMethodInfo* methodInfo = const_cast<MethodInfo*>(image->GetMethodInfoFromToken(tokenCache, methodToken, klassContainer, methodContainer, genericContext));\n\t\t\t\t\tIL2CPP_ASSERT(methodInfo);\n\n\t\t\t\t\tCreateAddIR(ir, LdvirftnVarVar);\n\t\t\t\t\tir->resultMethod = ir->obj = GetEvalStackTopOffset();\n\t\t\t\t\tir->virtualMethod = GetOrAddResolveDataIndex(methodInfo);\n\n\t\t\t\t\tPopStack();\n\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\t\tip += 6;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::UNUSED56:\n\t\t\t\t{\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDARG:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tAddInst_ldarg(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDARGA:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tAddInst_ldarga(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::STARG:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tAddInst_starg(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDLOC:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tCreateAddInst_ldloc(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LDLOCA:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tCreateAddInst_ldloca(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::STLOC:\n\t\t\t\t{\n\t\t\t\t\targIdx = GetU2LittleEndian(ip + 2);\n\t\t\t\t\tCreateAddInst_stloc(argIdx);\n\t\t\t\t\tip += 4;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::LOCALLOC:\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\t\tEvalStackVarInfo& top = evalStack[evalStackTop - 1];\n\n\t\t\t\t\tswitch (top.reduceType)\n\t\t\t\t\t{\n\t\t\t\t\tcase EvalStackReduceDataType::I4:\n\t\t\t\t\tcase EvalStackReduceDataType::I8: // FIXE ME\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, LocalAllocVarVar_n_4);\n\t\t\t\t\t\tir->dst = ir->size = GetEvalStackTopOffset();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\tRaiseExecutionEngineException(\"LOCALLOC invalid reduceType\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tPopStack();\n\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::UNUSED57:\n\t\t\t\t{\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::ENDFILTER:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, EndFilterEx);\n\t\t\t\t\tir->value = GetEvalStackTopOffset();\n\t\t\t\t\tPopAllStack();\n\n\t\t\t\t\tPopBranch();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::UNALIGNED_:\n\t\t\t\t{\n\t\t\t\t\t// Nothing to do here.\n\t\t\t\t\tprefixFlags |= (int32_t)PrefixFlags::Unaligned;\n\t\t\t\t\tuint8_t alignment = ip[2];\n\t\t\t\t\tIL2CPP_ASSERT(alignment == 1 || alignment == 2 || alignment == 4);\n\t\t\t\t\tip += 3;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::VOLATILE_:\n\t\t\t\t{\n\t\t\t\t\t// Set a flag that causes a memory barrier to be associated with the next load or store.\n\t\t\t\t\t//CI_volatileFlag = true;\n\t\t\t\t\tprefixFlags |= (int32_t)PrefixFlags::Volatile;\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::TAIL_:\n\t\t\t\t{\n\t\t\t\t\tprefixFlags |= (int32_t)PrefixFlags::Tail;\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::INITOBJ:\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 2);\n\t\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\t\tif (IS_CLASS_VALUE_TYPE(objKlass))\n\t\t\t\t\t{\n\t\t\t\t\t\tuint32_t objSize = GetTypeValueSize(objKlass);\n\t\t\t\t\t\tif ((HYBRIDCLR_ENABLE_WRITE_BARRIERS && objKlass->has_references))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_WriteBarrier_n_4);\n\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\tir->size = objSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbool convert = false;\n\t\t\t\t\t\t\tswitch (objSize)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_1);\n\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 2)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_2);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 4)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_4);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 8)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_8);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 4)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_12);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 16:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 8)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_16);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 20:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 4)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_20);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 24:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 8)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_24);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 28:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 4)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_28);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (SUPPORT_MEMORY_NOT_ALIGMENT_ACCESS || objKlass->minimumAlignment >= 8)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_32);\n\t\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\t\tconvert = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!convert)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_n_4);\n\t\t\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t\t\t\tir->size = objSize;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tCreateAddIR(ir, InitobjVar_ref);\n\t\t\t\t\t\tir->obj = GetEvalStackTopOffset();\n\t\t\t\t\t}\n\t\t\t\t\tPopStack();\n\n\t\t\t\t\tip += 6;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CONSTRAINED_:\n\t\t\t\t{\n\t\t\t\t\tuint32_t typeToken = (uint32_t)GetI4LittleEndian(ip + 2);\n\t\t\t\t\tIl2CppClass* conKlass = image->GetClassFromToken(tokenCache, typeToken, klassContainer, methodContainer, genericContext);\n\t\t\t\t\tIL2CPP_ASSERT(conKlass);\n\t\t\t\t\tip += 6;\n\n\t\t\t\t\tIL2CPP_ASSERT(*ip == (uint8_t)OpcodeValue::CALLVIRT);\n\t\t\t\t\tuint32_t methodToken = (uint32_t)GetI4LittleEndian(ip + 1);\n\t\t\t\t\tip += 5;\n\n\t\t\t\t\t// TODO token cache optimistic\n\t\t\t\t\tshareMethod = const_cast<MethodInfo*>(image->GetMethodInfoFromToken(tokenCache, methodToken, klassContainer, methodContainer, genericContext));\n\t\t\t\t\tIL2CPP_ASSERT(shareMethod);\n\n\n\t\t\t\t\tint32_t resolvedTotalArgNum = shareMethod->parameters_count + 1;\n\n\t\t\t\t\tint32_t selfIdx = evalStackTop - resolvedTotalArgNum;\n\t\t\t\t\tEvalStackVarInfo& self = evalStack[selfIdx];\n\t\t\t\t\tif (IS_CLASS_VALUE_TYPE(conKlass))\n\t\t\t\t\t{\n\t\t\t\t\t\t// impl in self\n\t\t\t\t\t\tconst MethodInfo* implMethod = image->FindImplMethod(conKlass, shareMethod);\n\t\t\t\t\t\tif (implMethod->klass == conKlass)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshareMethod = implMethod;\n\t\t\t\t\t\t\tgoto LabelCall;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (conKlass->enumtype && !std::strcmp(shareMethod->name, \"GetHashCode\"))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tIl2CppTypeEnum typeEnum = conKlass->element_class->byval_arg.type;\n\t\t\t\t\t\t\tself.reduceType = EvalStackReduceDataType::I4;\n\t\t\t\t\t\t\tif (typeEnum == IL2CPP_TYPE_I8 || typeEnum == IL2CPP_TYPE_U8)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, GetEnumHashCode);\n\t\t\t\t\t\t\t\tir->dst = ir->src = self.locOffset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i1);\n\t\t\t\t\t\t\t\tir->dst = ir->src = self.locOffset;\n\t\t\t\t\t\t\t\tswitch (conKlass->element_class->byval_arg.type)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_U1: ir->type = HiOpcodeEnum::LdindVarVar_u1; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_I1: ir->type = HiOpcodeEnum::LdindVarVar_i1; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_U2: ir->type = HiOpcodeEnum::LdindVarVar_u2; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_I2: ir->type = HiOpcodeEnum::LdindVarVar_u2; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_U4: ir->type = HiOpcodeEnum::LdindVarVar_u4; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_I4: ir->type = HiOpcodeEnum::LdindVarVar_i4; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_CHAR: ir->type = HiOpcodeEnum::LdindVarVar_u2; break;\n\t\t\t\t\t\t\t\tcase IL2CPP_TYPE_BOOLEAN: ir->type = HiOpcodeEnum::LdindVarVar_i1; break;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tIL2CPP_ASSERT(false && \"GetHashCode\");\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tCreateAddIR(ir, BoxRefVarVar);\n\t\t\t\t\t\t\tir->dst = ir->src = self.locOffset;\n\t\t\t\t\t\t\tir->klass = GetOrAddResolveDataIndex(conKlass);\n\n\t\t\t\t\t\t\tself.reduceType = NATIVE_INT_REDUCE_TYPE;\n\t\t\t\t\t\t\tself.byteSize = GetSizeByReduceType(self.reduceType);\n\t\t\t\t\t\t\tgoto LabelCallVir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n#if HYBRIDCLR_ARCH_64\n\t\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i8);\n#else\n\t\t\t\t\t\tCreateAddIR(ir, LdindVarVar_i4);\n#endif\n\t\t\t\t\t\tir->dst = ir->src = self.locOffset;\n\t\t\t\t\t\tself.reduceType = NATIVE_INT_REDUCE_TYPE;\n\t\t\t\t\t\tself.byteSize = GetSizeByReduceType(self.reduceType);\n\t\t\t\t\t\tgoto LabelCallVir;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::CPBLK:\n\t\t\t\t{\n\t\t\t\t\t// we don't sure dst or src is volatile. so insert memory barrier ahead and end.\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 3);\n\t\t\t\t\tInsertMemoryBarrier();\n\t\t\t\t\tResetPrefixFlags();\n\t\t\t\t\tCreateAddIR(ir, CpblkVarVar);\n\t\t\t\t\tir->dst = GetEvalStackOffset_3();\n\t\t\t\t\tir->src = GetEvalStackOffset_2();\n\t\t\t\t\tir->size = GetEvalStackOffset_1();\n\t\t\t\t\tPopStackN(3);\n\t\t\t\t\tInsertMemoryBarrier();\n\t\t\t\t\tResetPrefixFlags();\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::INITBLK:\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop >= 3);\n\t\t\t\t\tInsertMemoryBarrier();\n\t\t\t\t\tResetPrefixFlags();\n\t\t\t\t\tCreateAddIR(ir, InitblkVarVarVar);\n\t\t\t\t\tir->addr = GetEvalStackOffset_3();\n\t\t\t\t\tir->value = GetEvalStackOffset_2();\n\t\t\t\t\tir->size = GetEvalStackOffset_1();\n\t\t\t\t\tPopStackN(3);\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::NO_:\n\t\t\t\t{\n\t\t\t\t\tuint8_t checkType = ip[2];\n\t\t\t\t\t// {typecheck:0x1} | {rangecheck:0x2} | {nullcheck:0x4}\n\t\t\t\t\tIL2CPP_ASSERT(checkType < 8);\n\t\t\t\t\tip += 3;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::RETHROW:\n\t\t\t\t{\n\t\t\t\t\tCreateAddIR(ir, RethrowEx);\n\t\t\t\t\tAddInst(ir);\n\t\t\t\t\tPopAllStack();\n\t\t\t\t\tPopBranch();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::UNUSED:\n\t\t\t\t{\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::SIZEOF:\n\t\t\t\t{\n\t\t\t\t\tuint32_t token = (uint32_t)GetI4LittleEndian(ip + 2);\n\t\t\t\t\tIl2CppClass* objKlass = image->GetClassFromToken(tokenCache, token, klassContainer, methodContainer, genericContext);\n\t\t\t\t\tIL2CPP_ASSERT(objKlass);\n\t\t\t\t\tint32_t typeSize = GetTypeValueSize(&objKlass->byval_arg);\n\t\t\t\t\tCreateAddInst_ldc4(typeSize, EvalStackReduceDataType::I4);\n\t\t\t\t\tip += 6;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::REFANYTYPE:\n\t\t\t\t{\n\t\t\t\t\tIL2CPP_ASSERT(evalStackTop > 0);\n\t\t\t\t\tCreateAddIR(ir, RefAnyTypeVarVar);\n\t\t\t\t\tir->dst = ir->typedRef = GetEvalStackOffset_1();\n\t\t\t\t\tPopStack();\n\t\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::READONLY_:\n\t\t\t\t{\n\t\t\t\t\tprefixFlags |= (int32_t)PrefixFlags::ReadOnly;\n\t\t\t\t\tip += 2;\n\t\t\t\t\t// generic md array also can follow readonly\n\t\t\t\t\t//IL2CPP_ASSERT(*ip == (byte)OpcodeValue::LDELEMA && \"According to the ECMA spec, READONLY may only precede LDELEMA\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase OpcodeValue::UNUSED53:\n\t\t\t\tcase OpcodeValue::UNUSED54:\n\t\t\t\tcase OpcodeValue::UNUSED55:\n\t\t\t\tcase OpcodeValue::UNUSED70:\n\t\t\t\t{\n\t\t\t\t\tip += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t{\n\t\t\t\t\t//UNREACHABLE();\n\t\t\t\t\tRaiseExecutionEngineException(\"not support instruction\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcase OpcodeValue::PREFIXREF:\n\t\t\t{\n\t\t\t\tip++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"not support instruction\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t}\n\t\t\tip++;\n\t\t}\n\tfinish_transform:\n\n\n\t\ttotalIRSize = 0;\n\t\tfor (IRBasicBlock* bb : irbbs)\n\t\t{\n\t\t\tbb->codeOffset = totalIRSize;\n\t\t\tfor (IRCommon* ir : bb->insts)\n\t\t\t{\n\t\t\t\ttotalIRSize += g_instructionSizes[(int)ir->type];\n\t\t\t}\n\t\t}\n\t\tendBb->codeOffset = totalIRSize;\n\n\t\tfor (int32_t* relocOffsetPtr : relocationOffsets)\n\t\t{\n\t\t\tint32_t relocOffset = *relocOffsetPtr;\n\t\t\tIL2CPP_ASSERT(splitOffsets.find(relocOffset) != splitOffsets.end());\n\t\t\t*relocOffsetPtr = ip2bb[relocOffset]->codeOffset;\n\t\t}\n\n\t\tfor (auto switchOffsetPair : switchOffsetsInResolveData)\n\t\t{\n\t\t\tint32_t* offsetStartPtr = (int32_t*)&resolveDatas[switchOffsetPair.first];\n\t\t\tfor (int32_t i = 0; i < switchOffsetPair.second; i++)\n\t\t\t{\n\t\t\t\tint32_t relocOffset = offsetStartPtr[i];\n\t\t\t\tIL2CPP_ASSERT(splitOffsets.find(relocOffset) != splitOffsets.end());\n\t\t\t\toffsetStartPtr[i] = ip2bb[relocOffset]->codeOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\tvoid TransformContext::BuildInterpMethodInfo(interpreter::InterpMethodInfo& result)\n\t{\n\t\til2cpp::utils::dynamic_array<hybridclr::metadata::ILMapper>* ilMappers;\n\t\tif (ir2offsetMap)\n\t\t{\n\t\t\tilMappers = new il2cpp::utils::dynamic_array<hybridclr::metadata::ILMapper>();\n\t\t\tilMappers->reserve(ir2offsetMap->size());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tilMappers = nullptr;\n\t\t}\n\t\tbyte* tranCodes = (byte*)HYBRIDCLR_METADATA_MALLOC(totalIRSize);\n\n\t\tuint32_t tranOffset = 0;\n\t\tfor (IRBasicBlock* bb : irbbs)\n\t\t{\n\t\t\t//bb->codeOffset = tranOffset;\n\t\t\tfor (IRCommon* ir : bb->insts)\n\t\t\t{\n\t\t\t\tif (ilMappers)\n\t\t\t\t{\n\t\t\t\t\tauto it = ir2offsetMap->find(ir);\n\t\t\t\t\tif (it != ir2offsetMap->end())\n\t\t\t\t\t{\n\t\t\t\t\t\thybridclr::metadata::ILMapper ilMapper;\n\t\t\t\t\t\tilMapper.irOffset = tranOffset;\n\t\t\t\t\t\tilMapper.ilOffset = it->second;\n\t\t\t\t\t\tilMappers->push_back(ilMapper);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tuint32_t irSize = g_instructionSizes[(int)ir->type];\n\t\t\t\tstd::memcpy(tranCodes + tranOffset, &ir->type, irSize);\n\t\t\t\ttranOffset += irSize;\n\t\t\t}\n\t\t}\n\t\tIL2CPP_ASSERT(tranOffset == totalIRSize);\n\n\t\tfor (FlowInfo* fi : pendingFlows)\n\t\t{\n\t\t\tfi->~FlowInfo();\n\t\t}\n\n\t\tMethodArgDesc* argDescs;\n\t\tif (actualParamCount > 0)\n\t\t{\n\t\t\targDescs = (MethodArgDesc*)HYBRIDCLR_METADATA_CALLOC(actualParamCount, sizeof(MethodArgDesc));\n\t\t\tfor (int32_t i = 0; i < actualParamCount; i++)\n\t\t\t{\n\t\t\t\tconst Il2CppType* argType = args[i].type;\n\t\t\t\tTypeDesc typeDesc = GetTypeArgDesc(argType);\n\t\t\t\tMethodArgDesc& argDesc = argDescs[i];\n\t\t\t\targDesc.type = typeDesc.type;\n\t\t\t\tIL2CPP_ASSERT(typeDesc.stackObjectSize < 0x10000);\n\t\t\t\targDesc.stackObjectSize = (uint16_t)typeDesc.stackObjectSize;\n\t\t\t\targDesc.passbyValWhenInvoke = argType->byref || !IsValueType(argType);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\targDescs = nullptr;\n\t\t}\n\n\t\tresult.args = argDescs;\n\t\tresult.argCount = actualParamCount;\n\t\tresult.argStackObjectSize = totalArgSize;\n\t\tresult.retStackObjectSize = IsVoidType(methodInfo->return_type) ? 0 : GetTypeArgDesc(methodInfo->return_type).stackObjectSize;\n\t\tresult.codes = tranCodes;\n\t\tresult.codeLength = totalIRSize;\n\t\tresult.evalStackBaseOffset = evalStackBaseOffset;\n\t\tresult.localVarBaseOffset = totalArgSize;\n\t\tresult.localStackSize = totalArgLocalSize;\n\t\tresult.maxStackSize = maxStackSize;\n\t\tresult.initLocals = initLocals;\n\n\t\tif (resolveDatas.empty())\n\t\t{\n\t\t\tresult.resolveDatas = nullptr;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//result.resolveData = (uint8_t*)HYBRIDCLR_MALLOC(resolveDatas.size() * sizeof(uint8_t));\n\t\t\tsize_t dataSize = resolveDatas.size() * sizeof(uint64_t);\n\t\t\tuint64_t* data = (uint64_t*)HYBRIDCLR_METADATA_MALLOC(dataSize);\n\t\t\tstd::memcpy(data, resolveDatas.data(), dataSize);\n\t\t\tresult.resolveDatas = data;\n\t\t}\n\t\tif (exClauses.empty())\n\t\t{\n\t\t\tresult.exClauses = nullptr;\n\t\t\tresult.exClauseCount = 0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsize_t dataSize = exClauses.size() * sizeof(InterpExceptionClause);\n\t\t\tInterpExceptionClause* data = (InterpExceptionClause*)HYBRIDCLR_METADATA_MALLOC(dataSize);\n\t\t\tstd::memcpy(data, exClauses.data(), dataSize);\n\t\t\tresult.exClauses = data;\n\t\t\tresult.exClauseCount = (uint32_t)exClauses.size();\n\t\t}\n\n\t\tif (ilMappers)\n\t\t{\n\t\t\timage->GetPDBImage()->SetMethodDebugInfo(methodInfo, *ilMappers);\n\t\t}\n\t}\n\n\tbool TransformContext::TransformSubMethodBody(TransformContext& callingCtx, const MethodInfo* methodInfo, int32_t depth, int32_t localVarOffset)\n\t{\n\t\tmetadata::Image* image = metadata::MetadataModule::GetUnderlyingInterpreterImage(methodInfo);\n\t\tIL2CPP_ASSERT(image);\n\n\t\tmetadata::MethodBody* methodBody = metadata::MethodBodyCache::GetMethodBody(image, methodInfo->token);\n\t\tif (methodBody == nullptr || methodBody->ilcodes == nullptr)\n\t\t{\n\t\t\tTEMP_FORMAT(errMsg, \"Method body is null. %s.%s::%s\", methodInfo->klass->namespaze, methodInfo->klass->name, methodInfo->name);\n\t\t\til2cpp::vm::Exception::Raise(il2cpp::vm::Exception::GetExecutionEngineException(errMsg));\n\t\t}\n\n\t\tTransformContext ctx(image, methodInfo, *methodBody, callingCtx.pool, callingCtx.resolveDatas);\n\n\t\ttry\n\t\t{\n\t\t\tctx.TransformBodyImpl(depth, localVarOffset);\n\t\t\tcallingCtx.maxStackSize = std::max(callingCtx.maxStackSize, ctx.maxStackSize);\n\t\t\tcallingCtx.curbb->insts.insert(callingCtx.curbb->insts.end(), ctx.curbb->insts.begin(), ctx.curbb->insts.end());\n\t\t\treturn true;\n\t\t}\n\t\tcatch (Il2CppExceptionWrapper&)\n\t\t{\n\t\t\t//LOG_ERROR(\"TransformSubMethodBody failed: %s\", ex.what());\n\t\t\tmetadata::MethodBodyCache::DisableInline(methodInfo);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t}\n\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformContext.h",
    "content": "#pragma once\n\n#include <unordered_set>\n#include <set>\n\n#include \"TemporaryMemoryArena.h\"\n\n#include \"../metadata/Image.h\"\n#include \"../interpreter/Instruction.h\"\n#include \"../interpreter/Engine.h\"\n#include \"../metadata/MetadataUtil.h\"\n#include \"../metadata/Opcodes.h\"\n#include \"../metadata/MetadataModule.h\"\n#include \"../interpreter/Instruction.h\"\n#include \"../interpreter/Interpreter.h\"\n#include \"../interpreter/InterpreterModule.h\"\n\n#include \"Transform.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tusing namespace hybridclr::metadata;\n\tusing namespace hybridclr::interpreter;\n\n\tstruct IRBasicBlock\n\t{\n\t\tbool visited;\n\t\tbool inPending;\n\t\tuint32_t ilOffset;\n\t\tuint32_t codeOffset;\n\t\tstd::vector<interpreter::IRCommon*> insts;\n\t};\n\n\tstruct ArgVarInfo\n\t{\n\t\tconst Il2CppType* type;\n\t\tIl2CppClass* klass;\n\t\tint32_t argOffset; // StackObject index\n\t\tint32_t argLocOffset;\n\t};\n\n\tstruct LocVarInfo\n\t{\n\t\tconst Il2CppType* type;\n\t\tIl2CppClass* klass;\n\t\tint32_t locOffset;\n\t};\n\n\tenum class EvalStackReduceDataType\n\t{\n\t\tI4,\n\t\tI8,\n\t\tR4,\n\t\tR8,\n\t\tOther,\n\t};\n\n\tstruct EvalStackVarInfo\n\t{\n\t\tEvalStackReduceDataType reduceType;\n\t\tint32_t byteSize;\n\t\tint32_t locOffset;\n\t};\n\n#if HYBRIDCLR_ARCH_64\n#define NATIVE_INT_OP opI8\n\tconstexpr EvalStackReduceDataType NATIVE_INT_REDUCE_TYPE = EvalStackReduceDataType::I8;\n#else\n#define NATIVE_INT_OP opI4\n\tconstexpr EvalStackReduceDataType NATIVE_INT_REDUCE_TYPE = EvalStackReduceDataType::I4;\n#endif\n\n#define CreateIR(varName, typeName) IR##typeName* varName = pool.AllocIR<IR##typeName>(); varName->type = HiOpcodeEnum::typeName;\n#define CreateAddIR(varName, typeName) IR##typeName* varName = pool.AllocIR<IR##typeName>(); varName->type = HiOpcodeEnum::typeName; curbb->insts.push_back(varName); if (ir2offsetMap) { ir2offsetMap->add(varName, ipOffset); }\n\n\tenum class LocationDescType\n\t{\n\t\tI1,\n\t\tU1,\n\t\tI2,\n\t\tU2,\n\t\tI4,\n\t\tI8,\n\t\tRef,\n\t\tS,\n\t\tStructContainsRef,\n\t};\n\n#if HYBRIDCLR_ARCH_64\n#define NATIVE_INT_DESC_TYPE LocationDescType::I8\n#define ARCH_ARGUMENT(x32, x64) x64\n#else\n#define NATIVE_INT_DESC_TYPE LocationDescType::I4\n#define ARCH_ARGUMENT(x32, x64) x32\n#endif\n\n\tstruct LocationDescInfo\n\t{\n\t\tLocationDescType type;\n\t\tint32_t size;\n\t};\n\n\tstruct FlowInfo\n\t{\n\t\tuint32_t curStackSize;\n\t\tuint32_t offset;\n\t\til2cpp::utils::dynamic_array<EvalStackVarInfo> evalStack;\n\t};\n\n\ttypedef Il2CppHashMap<IRCommon*, uint32_t, il2cpp::utils::PointerHash<IRCommon>> IR2OffsetMap;\n\n\tLocationDescInfo ComputLocationDescInfo(const Il2CppType* type);\n\n\tclass TransformContext\n\t{\n\tprivate:\n\t\tmetadata::Image* image;\n\t\tconst MethodInfo* methodInfo;\n\t\tmetadata::MethodBody& body;\n\n\n\t\tTemporaryMemoryArena& pool;\n\n\t\tint32_t actualParamCount;\n\n\t\tstd::set<uint32_t> splitOffsets;\n\t\tIRBasicBlock** ip2bb;\n\t\tIRBasicBlock* curbb;\n\n\t\tArgVarInfo* args;\n\t\tLocVarInfo* locals;\n\t\tEvalStackVarInfo* evalStack;\n\t\tint32_t evalStackTop;\n\t\tint32_t evalStackBaseOffset;\n\t\tint32_t maxStackSize;\n\t\tint32_t curStackSize;\n\n\t\til2cpp::utils::dynamic_array<uint64_t>& resolveDatas;\n\t\tIl2CppHashMap<uint32_t, uint32_t, il2cpp::utils::PassThroughHash<uint32_t>> token2DataIdxs;\n\t\tIl2CppHashMap<const void*, uint32_t, il2cpp::utils::PassThroughHash<const void*>> ptr2DataIdxs;\n\t\tstd::vector<int32_t*> relocationOffsets;\n\t\tstd::vector<std::pair<int32_t, int32_t>> switchOffsetsInResolveData;\n\t\tstd::vector<FlowInfo*> pendingFlows;\n\t\tint32_t nextFlowIdx;\n\n\t\tconst byte* ipBase;\n\t\tconst byte* ip;\n\t\tuint32_t ipOffset;\n\t\tIR2OffsetMap* ir2offsetMap;\n\n\t\tint32_t prefixFlags;\n\n\t\tconst MethodInfo* shareMethod;\n\n\t\tstd::vector<IRBasicBlock*> irbbs;\n\t\til2cpp::utils::dynamic_array<InterpExceptionClause> exClauses;\n\n\t\tuint32_t totalIRSize;\n\t\tint32_t totalArgSize;\n\t\tint32_t totalArgLocalSize;\n\t\tbool initLocals;\n\n\tpublic:\n\n\t\tTransformContext(hybridclr::metadata::Image* image, const MethodInfo* methodInfo, metadata::MethodBody& body, TemporaryMemoryArena& pool, il2cpp::utils::dynamic_array<uint64_t>& resolveDatas);\n\t\t~TransformContext();\n\n\t\tstatic void InitializeInstinctHandlers();\n\n\t\tuint32_t GetOrAddResolveDataIndex(const void* ptr);\n\n\t\tTemporaryMemoryArena& GetPool() const\n\t\t{\n\t\t\treturn pool;\n\t\t}\n\n\t\tint32_t GetEvalStackTop() const\n\t\t{\n\t\t\treturn evalStackTop;\n\t\t}\n\n\t\tIRBasicBlock* GetCurbb() const\n\t\t{\n\t\t\treturn curbb;\n\t\t}\n\n\t\tuint32_t GetIpOffset() const\n\t\t{\n\t\t\treturn ipOffset;\n\t\t}\n\n\t\tIR2OffsetMap* GetIr2offsetMap() const\n\t\t{\n\t\t\treturn ir2offsetMap;\n\t\t}\n\n\t\tint32_t GetArgOffset(int32_t idx) const\n\t\t{\n\t\t\treturn args[idx].argOffset;\n\t\t}\n\n\t\tint32_t GetArgLocOffset(int32_t idx) const\n\t\t{\n\t\t\treturn args[idx].argLocOffset;\n\t\t}\n\n\t\tint32_t GetLocOffset(int32_t idx) const\n\t\t{\n\t\t\treturn locals[idx].locOffset;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset(int32_t idx) const\n\t\t{\n\t\t\treturn idx < evalStackTop ? evalStack[idx].locOffset : curStackSize;\n\t\t}\n\n\t\tint32_t GetEvalStackTopOffset() const\n\t\t{\n\t\t\treturn evalStackTop > 0 ? evalStack[evalStackTop - 1].locOffset : curStackSize;\n\t\t}\n\n\t\tint32_t GetEvalStackNewTopOffset() const\n\t\t{\n\t\t\treturn curStackSize;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset_5() const\n\t\t{\n\t\t\treturn evalStack[evalStackTop - 5].locOffset;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset_4() const\n\t\t{\n\t\t\treturn evalStack[evalStackTop - 4].locOffset;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset_3() const\n\t\t{\n\t\t\treturn evalStack[evalStackTop - 3].locOffset;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset_2() const\n\t\t{\n\t\t\treturn evalStack[evalStackTop - 2].locOffset;\n\t\t}\n\n\t\tint32_t GetEvalStackOffset_1() const\n\t\t{\n\t\t\treturn evalStack[evalStackTop - 1].locOffset;\n\t\t}\n\n\t\tvoid PushStackByType(const Il2CppType* type);\n\n\t\tvoid PushStackByReduceType(EvalStackReduceDataType t);\n\n\t\tvoid DuplicateStack();\n\n\t\tvoid PopStack();\n\n\t\tvoid PopStackN(int32_t n);\n\n\t\tvoid PopAllStack();\n\n\t\tvoid InsertMemoryBarrier();\n\n\t\tvoid ResetPrefixFlags();\n\n\t\tvoid Add_ldind(HiOpcodeEnum opCode, EvalStackReduceDataType dataType);\n\n\t\tvoid Add_stind(HiOpcodeEnum opCode);\n\n\t\tvoid PushOffset(int32_t* offsetPtr);\n\n\t\tvoid PushBranch(int32_t targetOffset);\n\n\t\tbool FindNextFlow();\n\n\t\tvoid AddInst(IRCommon* ir);\n\n\t\tvoid AddInst_ldarg(int32_t argIdx);\n\n\t\tbool IsCreateNotNullObjectInstrument(IRCommon* ir);\n\n\t\tIRCommon* GetLastInstrument()\n\t\t{\n\t\t\treturn curbb->insts.empty() ? nullptr : curbb->insts.back();\n\t\t}\n\n\t\tvoid RemoveLastInstrument();\n\n\t\tvoid AddInst_ldarga(int32_t argIdx);\n\n\t\tvoid AddInst_starg(int32_t argIdx);\n\n\t\tvoid CreateAddInst_ldloc(int32_t locIdx);\n\n\t\tvoid CreateAddInst_stloc(int32_t locIdx);\n\n\t\tvoid CreateAddInst_ldloca(int32_t locIdx);\n\n\t\tvoid CreateAddInst_ldc4(int32_t c, EvalStackReduceDataType rtype);\n\n\t\tvoid CreateAddInst_ldc8(int64_t c, EvalStackReduceDataType rtype);\n\n\t\tvoid Add_brtruefalse(bool c, int32_t targetOffset);\n\n\t\tvoid Add_bc(int32_t ipOffset, int32_t brOffset, int32_t opSize, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8);\n\n\t\tvoid Add_conv(int32_t dstTypeSize, EvalStackReduceDataType dstReduceType, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8);\n\n\t\tvoid Add_conv_ovf(int32_t dstTypeSize, EvalStackReduceDataType dstReduceType, HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8);\n\n\t\tvoid Add_binop(HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8);\n\n\t\tvoid Add_shiftop(HiOpcodeEnum opI4I4, HiOpcodeEnum opI4I8, HiOpcodeEnum opI8I4, HiOpcodeEnum opI8I8);\n\n\t\tvoid Add_compare(HiOpcodeEnum opI4, HiOpcodeEnum opI8, HiOpcodeEnum opR4, HiOpcodeEnum opR8);\n\n\t\tvoid Add_ldelem(EvalStackReduceDataType resultType, HiOpcodeEnum opI4);\n\t\tvoid Add_stelem(HiOpcodeEnum opI4);\n\n\t\tbool FindFirstLeaveHandlerIndex(const std::vector<ExceptionClause>& exceptionClauses, uint32_t leaveOffset, uint32_t targetOffset, uint16_t& index);\n\n\t\tbool IsLeaveInTryBlock(const std::vector<ExceptionClause>& exceptionClauses, uint32_t leaveOffset);\n\n\t\tvoid Add_leave(uint32_t targetOffset);\n\n\t\tuint16_t FindFirstThrowHandlerIndex(const std::vector<ExceptionClause>& exceptionClauses, uint32_t throwOffset);\n\n\t\tbool TryAddInstinctInstruments(const MethodInfo* method)\n\t\t{\n\t\t\treturn TryAddInstinctInstrumentsByName(method) || TryAddArrayInstinctInstruments(method);\n\t\t}\n\n\t\tbool TryAddInstinctInstrumentsByName(const MethodInfo* method);\n\t\tbool TryAddArrayInstinctInstruments(const MethodInfo* method);\n\n\t\tbool TryAddInstinctCtorInstruments(const MethodInfo* method);\n\n\t\tbool TryAddCallCommonInstruments(const MethodInfo* method, uint32_t methodDataIndex)\n\t\t{\n\t\t\tbool resolvedIsInstanceMethod = IsInstanceMethod(method);\n\t\t\tbool add = resolvedIsInstanceMethod ? TryAddCallCommonInstanceInstruments(method, methodDataIndex)\n\t\t\t\t: TryAddCallCommonStaticInstruments(method, methodDataIndex);\n\t\t\tif (add)\n\t\t\t{\n\t\t\t\tint32_t resolvedTotalArgNum = method->parameters_count + resolvedIsInstanceMethod;\n\t\t\t\tPopStackN(resolvedTotalArgNum);\n\t\t\t\tif (method->return_type->type != IL2CPP_TYPE_VOID)\n\t\t\t\t{\n\t\t\t\t\tPushStackByType(method->return_type);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tbool TryAddCallCommonInstanceInstruments(const MethodInfo* method, uint32_t methodDataIndex);\n\t\tbool TryAddCallCommonStaticInstruments(const MethodInfo* method, uint32_t methodDataIndex);\n\n\n\t\tHiOpcodeEnum CalcGetMdArrElementVarVarOpcode(const Il2CppType* type);\n\n\t\tvoid TransformBody(int32_t depth, int32_t localVarOffset, interpreter::InterpMethodInfo& result);\n\n\tprivate:\n\t\tvoid TransformBodyImpl(int32_t depth, int32_t localVarOffset);\n\t\tvoid BuildInterpMethodInfo(interpreter::InterpMethodInfo& result);\n\t\tstatic bool TransformSubMethodBody(TransformContext& callingCtx, const MethodInfo* subMethod, int32_t depth, int32_t localVarOffset);\n\t};\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformContext_CallCommon.cpp",
    "content": "#include \"TransformContext.h\"\n\n#include \"../interpreter/MethodBridge.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tenum class ArgCommonType\n\t{\n\t\tVOID,\n\t\tI1,\n\t\tU1,\n\t\tI2,\n\t\tU2,\n\t\tI4,\n\t\tI8,\n\t\tR4,\n\t\tR8,\n\t\tI,\n\t\tU,\n\t\tSTRUCT,\n\t\tNOT_SUPPORT,\n\t};\n\n#if HYBRIDCLR_ARCH_64\n#define NATIVE_INT_COMMON_TYPE ArgCommonType::I8\n#else\n#define NATIVE_INT_COMMON_TYPE ArgCommonType::I4\n#endif\n\n\n\tstatic ArgCommonType ComputValueTypeArgCommonType(const Il2CppClass* klass)\n\t{\n\t\treturn ArgCommonType::STRUCT;\n\t}\n\n\n\tstatic ArgCommonType ComputArgCommonType(const Il2CppType* type)\n\t{\n\t\tif (type->byref)\n\t\t{\n\t\t\treturn NATIVE_INT_COMMON_TYPE;\n\t\t}\n\t\tswitch (type->type)\n\t\t{\n\t\tcase IL2CPP_TYPE_VOID:\n\t\t\treturn ArgCommonType::VOID;\n\t\tcase IL2CPP_TYPE_BOOLEAN:\n\t\tcase IL2CPP_TYPE_U1:\n\t\t\treturn ArgCommonType::U1;\n\t\tcase IL2CPP_TYPE_I1:\n\t\t\treturn ArgCommonType::I1;\n\t\tcase IL2CPP_TYPE_I2:\n\t\t\treturn ArgCommonType::I2;\n\t\tcase IL2CPP_TYPE_CHAR:\n\t\tcase IL2CPP_TYPE_U2:\n\t\t\treturn ArgCommonType::U2;\n\t\tcase IL2CPP_TYPE_I4:\n\t\tcase IL2CPP_TYPE_U4:\n\t\t\treturn ArgCommonType::I4;\n\t\tcase IL2CPP_TYPE_R4:\n\t\t\treturn ArgCommonType::R4;\n\t\tcase IL2CPP_TYPE_I8:\n\t\tcase IL2CPP_TYPE_U8:\n\t\t\treturn ArgCommonType::I8;\n\t\tcase IL2CPP_TYPE_R8:\n\t\t\treturn ArgCommonType::R8;\n\t\tcase IL2CPP_TYPE_I:\n\t\tcase IL2CPP_TYPE_U:\n\t\tcase IL2CPP_TYPE_FNPTR:\n\t\tcase IL2CPP_TYPE_PTR:\n\t\tcase IL2CPP_TYPE_BYREF:\n\t\tcase IL2CPP_TYPE_STRING:\n\t\tcase IL2CPP_TYPE_ARRAY:\n\t\tcase IL2CPP_TYPE_SZARRAY:\n\t\tcase IL2CPP_TYPE_OBJECT:\n\t\tcase IL2CPP_TYPE_CLASS:\n\t\t\treturn NATIVE_INT_COMMON_TYPE;\n\t\tcase IL2CPP_TYPE_TYPEDBYREF:\n\t\t\treturn ArgCommonType::NOT_SUPPORT;\n\t\tcase IL2CPP_TYPE_VALUETYPE:\n\t\t{\n\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\tif (klass->enumtype)\n\t\t\t{\n\t\t\t\treturn ComputArgCommonType(&klass->castClass->byval_arg);\n\t\t\t}\n\t\t\treturn ComputValueTypeArgCommonType(klass);\n\t\t}\n\t\tcase IL2CPP_TYPE_GENERICINST:\n\t\t{\n\t\t\tIl2CppGenericClass* genericClass = type->data.generic_class;\n\t\t\tif (genericClass->type->type == IL2CPP_TYPE_CLASS)\n\t\t\t{\n\t\t\t\tIL2CPP_ASSERT(!IS_CLASS_VALUE_TYPE(il2cpp::vm::Class::FromIl2CppType(type)));\n\t\t\t\treturn NATIVE_INT_COMMON_TYPE;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tIl2CppClass* klass = il2cpp::vm::Class::FromIl2CppType(type);\n\t\t\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\t\t\tif (klass->enumtype)\n\t\t\t\t{\n\t\t\t\t\treturn ComputArgCommonType(&klass->castClass->byval_arg);\n\t\t\t\t}\n\t\t\t\treturn ComputValueTypeArgCommonType(klass);\n\t\t\t}\n\t\t}\n\t\tdefault:\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support arg type\");\n\t\t\treturn ArgCommonType::NOT_SUPPORT;\n\t\t}\n\t\t}\n\t}\n\n\tArgCommonType ComputMethodArgHomoType(const MethodInfo* method)\n\t{\n\t\tArgCommonType homoType = ComputArgCommonType(GET_METHOD_PARAMETER_TYPE(method->parameters[0]));\n\t\tif (homoType == ArgCommonType::NOT_SUPPORT)\n\t\t{\n\t\t\treturn homoType;\n\t\t}\n\t\tfor (uint8_t i = 1; i < method->parameters_count; i++)\n\t\t{\n\t\t\tArgCommonType pt = ComputArgCommonType(GET_METHOD_PARAMETER_TYPE(method->parameters[i]));\n\t\t\tif (pt != homoType)\n\t\t\t{\n\t\t\t\treturn ArgCommonType::NOT_SUPPORT;\n\t\t\t}\n\t\t}\n\t\treturn homoType;\n\t}\n\n\tconstexpr int MAX_COMMON_PARAM_NUM = 4;\n\n\tbool TransformContext::TryAddCallCommonInstanceInstruments(const MethodInfo* method, uint32_t methodDataIndex)\n\t{\n\t\tconst Il2CppType* returnType = method->return_type;\n\t\tint32_t paramCount = shareMethod->parameters_count;\n\t\tint32_t resolvedTotalArgdNum = paramCount + 1;\n\t\tint32_t callArgEvalStackIdxBase = evalStackTop - resolvedTotalArgdNum;\n\t\tuint16_t argBaseOffset = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\n\n\t\tArgCommonType actRet = ComputArgCommonType(returnType);\n\t\tif (actRet == ArgCommonType::NOT_SUPPORT || actRet == ArgCommonType::STRUCT)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (paramCount == 0)\n\t\t{\n\t\t\t// (void,u1,i1,i2,u2,i4, i8, f4, f8, v2, v3, v4} func(object x);\n\t\t\tif (actRet == ArgCommonType::VOID)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, CallCommonNativeInstance_v_0);\n\t\t\t\tir->method = methodDataIndex;\n\t\t\t\tir->self = argBaseOffset;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tCreateAddIR(ir, CallCommonNativeInstance_i1_0);\n\t\t\tir->method = methodDataIndex;\n\t\t\tir->self = argBaseOffset;\n\t\t\tir->ret = argBaseOffset;\n\t\t\tswitch (actRet)\n\t\t\t{\n\t\t\tcase ArgCommonType::I1:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_i1_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::U1:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_u1_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I2:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_i2_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::U2:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_u2_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I4:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_i4_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I8:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_i8_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::R4:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_f4_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::R8:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeInstance_f8_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tRaiseExecutionEngineException(\"TryAddCallCommonInstanceInstruments. unknown ArgCommonType \");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (paramCount > MAX_COMMON_PARAM_NUM)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tArgCommonType actParam = ComputMethodArgHomoType(method);\n\t\tif (actParam == ArgCommonType::NOT_SUPPORT)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n#define SWITCH_INSTANCE_VOID(argType, argNum) \\\nswitch (argNum) \\\n{\\\ncase 1:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_v_##argType##_1);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\treturn true;\\\n}\\\ncase 2:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_v_##argType##_2);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\treturn true;\\\n}\\\ncase 3:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_v_##argType##_3);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\treturn true;\\\n}\\\ncase 4:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_v_##argType##_4);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\tir->param3 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 4);\\\n\treturn true;\\\n}\\\ndefault: return false;\\\n}\n\n\t\t// (void, u1, i4, i8, f4, f8} func(object this, T x1, ,, T xN); T={i4,i8,f4,f8}, N =[1,4]\n\t\tif (actRet == ArgCommonType::VOID)\n\t\t{\n\t\t\tswitch (actParam)\n\t\t\t{\n\t\t\tcase hybridclr::transform::ArgCommonType::I4:\n\t\t\t{\n\t\t\t\tSWITCH_INSTANCE_VOID(i4, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::I8:\n\t\t\t{\n\t\t\t\tSWITCH_INSTANCE_VOID(i8, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::R4:\n\t\t\t{\n\t\t\t\tSWITCH_INSTANCE_VOID(f4, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::R8:\n\t\t\t{\n\t\t\t\tSWITCH_INSTANCE_VOID(f8, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n#define SWITCH_INSTANCE_RET(retType, argType, argNum) \\\nswitch (argNum) \\\n{\\\ncase 1:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_##retType##_##argType##_1);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->ret = argBaseOffset;\\\n\treturn true;\\\n}\\\ncase 2:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_##retType##_##argType##_2);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\tir->ret = argBaseOffset;\\\n\treturn true;\\\n}\\\ncase 3:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_##retType##_##argType##_3);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\tir->ret = argBaseOffset;\\\n\treturn true;\\\n}\\\ncase 4:\\\n{\\\n\tCreateAddIR(ir, CallCommonNativeInstance_##retType##_##argType##_4);\\\n\tir->method = methodDataIndex;\\\n\tir->self = argBaseOffset;\\\n\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\tir->param3 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 4);\\\n\tir->ret = argBaseOffset;\\\n\treturn true;\\\n}\\\ndefault: return false;\\\n}\n\n#define SWTCH_INSTANCE_RET2(retType) \\\nswitch (actParam)\\\n{\\\ncase hybridclr::transform::ArgCommonType::I4:\\\n{\\\n\tSWITCH_INSTANCE_RET(retType, i4, paramCount);\\\n\tbreak;\\\n}\\\ncase hybridclr::transform::ArgCommonType::I8:\\\n{\\\n\tSWITCH_INSTANCE_RET(retType, i8, paramCount);\\\n\tbreak;\\\n}\\\ncase hybridclr::transform::ArgCommonType::R4:\\\n{\\\n\tSWITCH_INSTANCE_RET(retType, f4, paramCount);\\\n\tbreak;\\\n}\\\ncase hybridclr::transform::ArgCommonType::R8:\\\n{\\\n\tSWITCH_INSTANCE_RET(retType, f8, paramCount);\\\n\tbreak;\\\n}\\\ndefault:\\\n\treturn false;\\\n}\n\n\t\tswitch (actRet)\n\t\t{\n\t\tcase ArgCommonType::U1:\n\t\t{\n\t\t\tSWTCH_INSTANCE_RET2(u1);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::I4:\n\t\t{\n\t\t\tSWTCH_INSTANCE_RET2(i4);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::I8:\n\t\t{\n\t\t\tSWTCH_INSTANCE_RET2(i8);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::R4:\n\t\t{\n\t\t\tSWTCH_INSTANCE_RET2(f4);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::R8:\n\t\t{\n\t\t\tSWTCH_INSTANCE_RET2(f8);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:break;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tbool TransformContext::TryAddCallCommonStaticInstruments(const MethodInfo* method, uint32_t methodDataIndex)\n\t{\n\t\tconst Il2CppType* returnType = method->return_type;\n\t\tint32_t paramCount = shareMethod->parameters_count;\n\t\tint32_t resolvedTotalArgdNum = paramCount;\n\t\tint32_t callArgEvalStackIdxBase = evalStackTop - resolvedTotalArgdNum;\n\t\tuint16_t argBaseOffset = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\n\n\t\tArgCommonType actRet = ComputArgCommonType(returnType);\n\t\tif (actRet == ArgCommonType::NOT_SUPPORT || actRet == ArgCommonType::STRUCT)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (paramCount == 0)\n\t\t{\n\t\t\t// (void,u1,i1,i2,u2,i4, i8, f4, f8, v2, v3, v4} func();\n\t\t\tif (actRet == ArgCommonType::VOID)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, CallCommonNativeStatic_v_0);\n\t\t\t\tir->method = methodDataIndex;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tCreateAddIR(ir, CallCommonNativeStatic_i1_0);\n\t\t\tir->method = methodDataIndex;\n\t\t\tir->ret = argBaseOffset;\n\t\t\tswitch (actRet)\n\t\t\t{\n\t\t\tcase ArgCommonType::I1:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_i1_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::U1:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_u1_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I2:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_i2_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::U2:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_u2_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I4:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_i4_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::I8:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_i8_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::R4:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_f4_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ArgCommonType::R8:\n\t\t\t{\n\t\t\t\tir->type = HiOpcodeEnum::CallCommonNativeStatic_f8_0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tRaiseExecutionEngineException(\"TryAddCallCommonStaticInstruments. unknown ArgCommonType \");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (paramCount > MAX_COMMON_PARAM_NUM)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tArgCommonType actParam = ComputMethodArgHomoType(method);\n\t\tif (actParam == ArgCommonType::NOT_SUPPORT)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n#define SWITCH_STATIC_VOID(argType, argNum) \\\n\tswitch (argNum) \\\n\t{\\\n\tcase 1:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_v_##argType##_1);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\treturn true;\\\n\t}\\\n\tcase 2:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_v_##argType##_2);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\treturn true;\\\n\t}\\\n\tcase 3:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_v_##argType##_3);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\t\treturn true;\\\n\t}\\\n\tcase 4:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_v_##argType##_4);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\t\tir->param3 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\t\treturn true;\\\n\t}\\\n\tdefault: return false;\\\n\t}\n\n\t\t// (void, u1, i4, i8, f4, f8} func(object this, T x1, ,, T xN); T={i4,i8,f4,f8}, N =[1,4]\n\t\tif (actRet == ArgCommonType::VOID)\n\t\t{\n\t\t\tswitch (actParam)\n\t\t\t{\n\t\t\tcase hybridclr::transform::ArgCommonType::I4:\n\t\t\t{\n\t\t\t\tSWITCH_STATIC_VOID(i4, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::I8:\n\t\t\t{\n\t\t\t\tSWITCH_STATIC_VOID(i8, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::R4:\n\t\t\t{\n\t\t\t\tSWITCH_STATIC_VOID(f4, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase hybridclr::transform::ArgCommonType::R8:\n\t\t\t{\n\t\t\t\tSWITCH_STATIC_VOID(f8, paramCount);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n#define SWITCH_STATIC_RET(retType, argType, argNum) \\\n\tswitch (argNum) \\\n\t{\\\n\tcase 1:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_##retType##_##argType##_1);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->ret = argBaseOffset;\\\n\t\treturn true;\\\n\t}\\\n\tcase 2:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_##retType##_##argType##_2);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\tir->ret = argBaseOffset;\\\n\t\treturn true;\\\n\t}\\\n\tcase 3:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_##retType##_##argType##_3);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\t\tir->ret = argBaseOffset;\\\n\t\treturn true;\\\n\t}\\\n\tcase 4:\\\n\t{\\\n\t\tCreateAddIR(ir, CallCommonNativeStatic_##retType##_##argType##_4);\\\n\t\tir->method = methodDataIndex;\\\n\t\tir->param0 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase);\\\n\t\tir->param1 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 1);\\\n\t\tir->param2 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 2);\\\n\t\tir->param3 = (uint16_t)GetEvalStackOffset(callArgEvalStackIdxBase + 3);\\\n\t\tir->ret = argBaseOffset;\\\n\t\treturn true;\\\n\t}\\\n\tdefault: return false;\\\n\t}\n\n#define SWTCH_STATIC_RET2(retType) \\\n\tswitch (actParam)\\\n\t{\\\n\tcase hybridclr::transform::ArgCommonType::I4:\\\n\t{\\\n\t\tSWITCH_STATIC_RET(retType, i4, paramCount);\\\n\t\tbreak;\\\n\t}\\\n\tcase hybridclr::transform::ArgCommonType::I8:\\\n\t{\\\n\t\tSWITCH_STATIC_RET(retType, i8, paramCount);\\\n\t\tbreak;\\\n\t}\\\n\tcase hybridclr::transform::ArgCommonType::R4:\\\n\t{\\\n\t\tSWITCH_STATIC_RET(retType, f4, paramCount);\\\n\t\tbreak;\\\n\t}\\\n\tcase hybridclr::transform::ArgCommonType::R8:\\\n\t{\\\n\t\tSWITCH_STATIC_RET(retType, f8, paramCount);\\\n\t\tbreak;\\\n\t}\\\n\tdefault:\\\n\t\treturn false;\\\n\t}\n\n\t\tswitch (actRet)\n\t\t{\n\t\tcase ArgCommonType::U1:\n\t\t{\n\t\t\tSWTCH_STATIC_RET2(u1);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::I4:\n\t\t{\n\t\t\tSWTCH_STATIC_RET2(i4);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::I8:\n\t\t{\n\t\t\tSWTCH_STATIC_RET2(i8);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::R4:\n\t\t{\n\t\t\tSWTCH_STATIC_RET2(f4);\n\t\t\tbreak;\n\t\t}\n\t\tcase ArgCommonType::R8:\n\t\t{\n\t\t\tSWTCH_STATIC_RET2(f8);\n\t\t\tbreak;\n\t\t}\n\t\tdefault: break;\n\t\t}\n\t\treturn false;\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformContext_Instinct.cpp",
    "content": "#include \"TransformContext.h\"\n\n#include \"utils/Il2CppHashMap.h\"\n#include \"utils/HashUtils.h\"\n#include \"utils/StringUtils.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tstruct NamespaceAndName\n\t{\n\t\tconst char* namespaze;\n\t\tconst char* name;\n\t};\n\n\tstruct NamespaceAndNameHash\n\t{\n\t\tsize_t operator()(const NamespaceAndName& pair) const\n\t\t{\n\t\t\tsize_t h = il2cpp::utils::StringUtils::Hash(pair.namespaze);\n\t\t\th = il2cpp::utils::HashUtils::Combine(h, il2cpp::utils::StringUtils::Hash(pair.name));\n\t\t\treturn h;\n\t\t}\n\t};\n\n\tstruct NamespaceAndNameEquals\n\t{\n\t\tbool operator()(const NamespaceAndName& p1, const NamespaceAndName& p2) const\n\t\t{\n\t\t\treturn !strcmp(p1.namespaze, p2.namespaze)\n\t\t\t\t&& !strcmp(p1.name, p2.name);\n\t\t}\n\t};\n\n\tstruct NamespaceAndNameAndMethod\n\t{\n\t\tconst char* namespaze;\n\t\tconst char* name;\n\t\tconst char* method;\n\t};\n\n\tstruct NamespaceAndNameAndMethodHash\n\t{\n\t\tsize_t operator()(const NamespaceAndNameAndMethod& pair) const\n\t\t{\n\t\t\tsize_t h = il2cpp::utils::StringUtils::Hash(pair.namespaze);\n\t\t\th = il2cpp::utils::HashUtils::Combine(h, il2cpp::utils::StringUtils::Hash(pair.name));\n\t\t\th = il2cpp::utils::HashUtils::Combine(h, il2cpp::utils::StringUtils::Hash(pair.method));\n\t\t\treturn h;\n\t\t}\n\t};\n\n\tstruct NamespaceAndNameAndMethodEquals\n\t{\n\t\tbool operator()(const NamespaceAndNameAndMethod& p1, const NamespaceAndNameAndMethod& p2) const\n\t\t{\n\t\t\treturn !strcmp(p1.namespaze, p2.namespaze)\n\t\t\t\t&& !strcmp(p1.name, p2.name)\n\t\t\t\t&& !strcmp(p1.method, p2.method);\n\t\t}\n\t};\n\n\ttypedef bool (*InstinctHandler)(TransformContext& ctx, const MethodInfo* method);\n\n\ttypedef Il2CppHashMap<NamespaceAndNameAndMethod, InstinctHandler, NamespaceAndNameAndMethodHash, NamespaceAndNameAndMethodEquals> InstinctHandlerMap;\n\n\tstatic InstinctHandlerMap s_instinctHandlerMap;\n\n\ttypedef Il2CppHashMap<NamespaceAndName, InstinctHandler, NamespaceAndNameHash, NamespaceAndNameEquals> CtorInstinctHandlerMap;\n\tstatic CtorInstinctHandlerMap s_ctorInstinctHandlerMap;\n\n#define IHCreateAddIR(varName, typeName) IR##typeName* varName = ctx.GetPool().AllocIR<IR##typeName>(); varName->type = HiOpcodeEnum::typeName; ctx.AddInst(varName);\n\n\n\tstatic bool IH_object_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tctx.PopStack();\n\t\tauto& insts = ctx.GetCurbb()->insts;\n\t\tif (!insts.empty())\n\t\t{\n\t\t\tIRCommon* last = insts.back();\n\t\t\tif (last->type != HiOpcodeEnum::LdlocVarVar)\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tIRLdlocVarVar* ldthis = (IRLdlocVarVar*)last;\n\t\t\tif (ldthis->dst == ctx.GetEvalStackNewTopOffset())\n\t\t\t{\n\t\t\t\t// pop ldthis\n\t\t\t\tinsts.pop_back();\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Nullable_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tif (method->parameters_count != 1)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tIl2CppClass* klass = method->klass;\n\t\til2cpp::vm::Class::SetupFields(klass);\n\t\til2cpp::vm::Class::SetupFields(klass->castClass);\n\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\tIHCreateAddIR(ir, NullableCtorVarVar);\n\t\tir->dst = ctx.GetEvalStackOffset_2();\n\t\tir->data = ctx.GetEvalStackOffset_1();\n\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\n\t\tctx.PopStackN(2);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Nullable_GetValueOrDefault(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\til2cpp::vm::Class::SetupFields(klass);\n\t\til2cpp::vm::Class::SetupFields(klass->castClass);\n\t\tuint32_t classIndirectIndex = ctx.GetOrAddResolveDataIndex(klass);\n\t\tuint16_t topOffset = ctx.GetEvalStackTopOffset();\n\t\tif (method->parameters_count == 0)\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\t\tIHCreateAddIR(ir, NullableGetValueOrDefaultVarVar);\n\t\t\tir->dst = topOffset;\n\t\t\tir->obj = topOffset;\n\t\t\tir->klass = classIndirectIndex;\n\n\t\t\t// pop this, push value\n\t\t\tctx.PopStack();\n\t\t\tctx.PushStackByType(&klass->castClass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\telse if (method->parameters_count == 1)\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\t\tIHCreateAddIR(ir, NullableGetValueOrDefaultVarVar_1);\n\t\t\tir->dst = ir->obj = ctx.GetEvalStackOffset_2();\n\t\t\tir->defaultValue = topOffset;\n\t\t\tir->klass = classIndirectIndex;\n\n\t\t\t// pop this, default value then push value\n\t\t\tctx.PopStackN(2);\n\t\t\tctx.PushStackByType(&klass->castClass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tstatic bool IH_Nullable_get_HasValue(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\tIl2CppClass* klass = method->klass;\n\t\til2cpp::vm::Class::SetupFields(klass);\n\t\til2cpp::vm::Class::SetupFields(klass->castClass);\n\t\tuint32_t classIndirectIndex = ctx.GetOrAddResolveDataIndex(klass);\n\t\tuint16_t topOffset = ctx.GetEvalStackTopOffset();\n\n\t\tIHCreateAddIR(ir, NullableHasValueVar);\n\t\tir->result = topOffset;\n\t\tir->obj = topOffset;\n\t\tir->klass = classIndirectIndex;\n\n\t\t// pop this, push value\n\t\tctx.PopStack();\n\t\tctx.PushStackByReduceType(EvalStackReduceDataType::I4);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Nullable_get_Value(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\tIl2CppClass* klass = method->klass;\n\t\til2cpp::vm::Class::SetupFields(klass);\n\t\til2cpp::vm::Class::SetupFields(klass->castClass);\n\t\tuint32_t classIndirectIndex = ctx.GetOrAddResolveDataIndex(klass);\n\t\tuint16_t topOffset = ctx.GetEvalStackTopOffset();\n\n\t\tIHCreateAddIR(ir, NullableGetValueVarVar);\n\t\tir->dst = topOffset;\n\t\tir->obj = topOffset;\n\t\tir->klass = classIndirectIndex;\n\n\t\t// pop this, push value\n\t\tctx.PopStack();\n\t\tctx.PushStackByType(&klass->castClass->byval_arg);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Array_GetGenericValueImpl(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\tuint16_t topOffset = ctx.GetEvalStackTopOffset();\n\t\tIHCreateAddIR(ir, ArrayGetGenericValueImpl);\n\t\tir->arr = ctx.GetEvalStackOffset_3();\n\t\tir->index = ctx.GetEvalStackOffset_2();\n\t\tir->value = ctx.GetEvalStackOffset_1();\n\t\tctx.PopStackN(3);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Array_SetGenericValueImpl(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\tuint16_t topOffset = ctx.GetEvalStackTopOffset();\n\t\tIHCreateAddIR(ir, ArraySetGenericValueImpl);\n\t\tir->arr = ctx.GetEvalStackOffset_3();\n\t\tir->index = ctx.GetEvalStackOffset_2();\n\t\tir->value = ctx.GetEvalStackOffset_1();\n\t\tctx.PopStackN(3);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Interlocked_CompareExchange(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\tuint16_t retIdx = ctx.GetEvalStackOffset_3();\n\t\tuint16_t locationIdx = retIdx;\n\t\tuint16_t valueIdx = ctx.GetEvalStackOffset_2();\n\t\tuint16_t comparandIdx = ctx.GetEvalStackOffset_1();\n\n\t\tIHCreateAddIR(ir, InterlockedCompareExchangeVarVarVarVar_pointer);\n\t\tir->ret = retIdx;\n\t\tir->location = locationIdx;\n\t\tir->value = valueIdx;\n\t\tir->comparand = comparandIdx;\n\n\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(method->parameters[1]);\n\t\tif (!paramType->byref)\n\t\t{\n\t\t\tIl2CppClass* paramKlass = il2cpp::vm::Class::FromIl2CppType(paramType);\n\t\t\tif (IS_CLASS_VALUE_TYPE(paramKlass))\n\t\t\t{\n\t\t\t\tuint32_t valueSize = GetTypeValueSize(paramKlass);\n\t\t\t\tif (valueSize == 4)\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::InterlockedCompareExchangeVarVarVarVar_i4;\n\t\t\t\t}\n\t\t\t\telse if (valueSize == 8)\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::InterlockedCompareExchangeVarVarVarVar_i8;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"not support System.Threading.Interlocked.CompareExchange\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.PopStackN(3);\n\t\tctx.PushStackByType(paramType);\n\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Interlocked_Exchange(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\tuint16_t retIdx = ctx.GetEvalStackOffset_2();\n\t\tuint16_t locationIdx = retIdx;\n\t\tuint16_t valueIdx = ctx.GetEvalStackOffset_1();\n\n\t\tIHCreateAddIR(ir, InterlockedExchangeVarVarVar_pointer);\n\t\tir->ret = retIdx;\n\t\tir->location = locationIdx;\n\t\tir->value = valueIdx;\n\n\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(method->parameters[1]);\n\t\tif (!paramType->byref)\n\t\t{\n\t\t\tIl2CppClass* paramKlass = il2cpp::vm::Class::FromIl2CppType(paramType);\n\t\t\tif (IS_CLASS_VALUE_TYPE(paramKlass))\n\t\t\t{\n\t\t\t\tuint32_t valueSize = GetTypeValueSize(paramKlass);\n\t\t\t\tif (valueSize == 4)\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::InterlockedExchangeVarVarVar_i4;\n\t\t\t\t}\n\t\t\t\telse if (valueSize == 8)\n\t\t\t\t{\n\t\t\t\t\tir->type = HiOpcodeEnum::InterlockedExchangeVarVarVar_i8;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tRaiseExecutionEngineException(\"not support System.Threading.Interlocked.Exchange\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tctx.PopStackN(2);\n\t\tctx.PushStackByType(paramType);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_JitHelpers_Array_UnsafeMov(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\tconst Il2CppType* dstType = method->genericMethod->context.method_inst->type_argv[1];\n\t\tctx.PopStack();\n\t\tctx.PushStackByType(dstType);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_JitHelpers_UnsafeEnumCast(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\tIHCreateAddIR(ir, UnsafeEnumCast);\n\t\tir->dst = ctx.GetEvalStackTopOffset();\n\t\tir->src = ctx.GetEvalStackTopOffset();\n\t\tconst Il2CppType* srcType = method->genericMethod->context.method_inst->type_argv[0];\n\t\tif (srcType->type == IL2CPP_TYPE_VALUETYPE || srcType->type == IL2CPP_TYPE_GENERICINST)\n\t\t{\n\t\t\tIl2CppClass* srcKlass = il2cpp::vm::Class::FromIl2CppType(srcType);\n\t\t\tif (!srcKlass->enumtype)\n\t\t\t{\n\t\t\t\tRaiseExecutionEngineException(\"not support UnsafeEnumCast src type\");\n\t\t\t}\n\t\t\tir->srcType = (uint16_t)srcKlass->castClass->byval_arg.type;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tir->srcType = (uint16_t)srcType->type;\n\t\t}\n\t\tctx.PopStack();\n\t\tctx.PushStackByReduceType(EvalStackReduceDataType::I4);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_JitHelpers_UnsafeCast(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tconst Il2CppType* dstType = method->genericMethod->context.method_inst->type_argv[0];\n\t\tctx.PopStack();\n\t\tctx.PushStackByType(dstType);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_JitHelpers_UnsafeEnumCastLong(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\t\tctx.PopStack();\n\t\tctx.PushStackByReduceType(EvalStackReduceDataType::I8);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_Assembly_GetExecutingAssembly(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 0);\n\t\tIHCreateAddIR(ir, AssemblyGetExecutingAssembly);\n\t\tir->ret = ctx.GetEvalStackNewTopOffset();\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_MethodBase_GetCurrentMethod(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 0);\n\t\tIHCreateAddIR(ir, MethodBaseGetCurrentMethod);\n\t\tir->ret = ctx.GetEvalStackNewTopOffset();\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_UnityEngine_Vector2_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tif (method->parameters_count != 2)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\tIHCreateAddIR(ir, CtorVector2);\n\t\tir->obj = ctx.GetEvalStackOffset_3();\n\t\tir->x = ctx.GetEvalStackOffset_2();\n\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\tctx.PopStackN(3);\n\t\treturn true;\n\t}\n\n\tstatic bool IH_UnityEngine_Vector3_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tswitch (method->parameters_count)\n\t\t{\n\t\tcase 2:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\t\tIHCreateAddIR(ir, CtorVector3_2);\n\t\t\tir->obj = ctx.GetEvalStackOffset_3();\n\t\t\tir->x = ctx.GetEvalStackOffset_2();\n\t\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(3);\n\t\t\treturn true;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 4);\n\t\t\tIHCreateAddIR(ir, CtorVector3_3);\n\t\t\tir->obj = ctx.GetEvalStackOffset_4();\n\t\t\tir->x = ctx.GetEvalStackOffset_3();\n\t\t\tir->y = ctx.GetEvalStackOffset_2();\n\t\t\tir->z = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(4);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tstatic bool IH_UnityEngine_Vector4_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tswitch (method->parameters_count)\n\t\t{\n\t\tcase 2:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\t\tIHCreateAddIR(ir, CtorVector4_2);\n\t\t\tir->obj = ctx.GetEvalStackOffset_3();\n\t\t\tir->x = ctx.GetEvalStackOffset_2();\n\t\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(3);\n\t\t\treturn true;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 4);\n\t\t\tIHCreateAddIR(ir, CtorVector4_3);\n\t\t\tir->obj = ctx.GetEvalStackOffset_4();\n\t\t\tir->x = ctx.GetEvalStackOffset_3();\n\t\t\tir->y = ctx.GetEvalStackOffset_2();\n\t\t\tir->z = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(4);\n\t\t\treturn true;\n\t\t}\n\t\tcase 4:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 5);\n\t\t\tIHCreateAddIR(ir, CtorVector4_4);\n\t\t\tir->obj = ctx.GetEvalStackOffset_5();\n\t\t\tir->x = ctx.GetEvalStackOffset_4();\n\t\t\tir->y = ctx.GetEvalStackOffset_3();\n\t\t\tir->z = ctx.GetEvalStackOffset_2();\n\t\t\tir->w = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(5);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tstatic bool IH_ByReference_get_Value(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\t// ByReference<T>.Value equals to *this\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 1);\n\n\t\tIHCreateAddIR(ir, LdindVarVar_i1);\n\t\tir->type = ARCH_ARGUMENT(HiOpcodeEnum::LdindVarVar_i4, HiOpcodeEnum::LdindVarVar_i8);\n\t\tir->dst = ir->src = ctx.GetEvalStackTopOffset();\n\t\tctx.PopStack();\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic const MethodInfo* FindZeroArgumentCtor(Il2CppClass* klass)\n\t{\n\t\til2cpp::vm::Class::Init(klass);\n\t\tfor (uint16_t i = 0; i < klass->method_count; i++)\n\t\t{\n            const MethodInfo* method = klass->methods[i];\n\t\t\tif (!std::strcmp(method->name, \".ctor\") && method->parameters_count == 0)\n\t\t\t{\n\t\t\t\treturn method;\n            }\n\t\t}\n\t\treturn nullptr;\n    }\n\n\tstatic bool IH_Activator_CreateInstance(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tif (!method->is_inflated || method->genericMethod->context.method_inst->type_argc != 1 || method->parameters_count != 0)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tconst Il2CppType* instType = method->genericMethod->context.method_inst->type_argv[0];\n\t\tIl2CppClass* instanceKlass = il2cpp::vm::Class::FromIl2CppType(instType);\n\t\tif (instanceKlass == nullptr)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tif (IS_CLASS_VALUE_TYPE(instanceKlass))\n\t\t{\n\t\t\tif (instanceKlass->castClass->byval_arg.type < IL2CPP_TYPE_I4)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tIHCreateAddIR(ir, NewValueTypeVar_Ctor_0);\n\t\t\tuint32_t objSize = GetTypeValueSize(instanceKlass);\n\t\t\tir->obj = ctx.GetEvalStackNewTopOffset();\n\t\t\tir->size = objSize;\n\t\t\tctx.PushStackByType(&instanceKlass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn false;\n\t\t\t/*\n\t\t\tconst MethodInfo* ctorMethod = FindZeroArgumentCtor(instanceKlass);\n\t\t\tif (ctorMethod == nullptr)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!InitAndGetInterpreterDirectlyCallMethodPointer(ctorMethod))\n\t\t\t{\n\t\t\t\tRaiseAOTGenericMethodNotInstantiatedException(ctorMethod);\n\t\t\t}\n\t\t\t//return false;\n\t\t\tIHCreateAddIR(ir, NewClassVar_Ctor_0);\n\t\t\tir->method = ctx.GetOrAddResolveDataIndex(ctorMethod);\n\t\t\tir->obj = ctx.GetEvalStackNewTopOffset();\n\t\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t*/\n\t\t}\n\t}\n\n\n\tstruct InstinctHandlerInfo\n\t{\n\t\tconst char* namespaze;\n\t\tconst char* name;\n\t\tconst char* method;\n\t\tInstinctHandler handler;\n\t};\n\n\tstatic InstinctHandlerInfo s_instinctHandlerInfos[] =\n\t{\n\t\t{\"System\", \"Object\", \".ctor\", IH_object_ctor},\n\t\t{\"System\", \"Nullable`1\", \".ctor\", IH_Nullable_ctor},\n\t\t{\"System\", \"Nullable`1\", \"GetValueOrDefault\", IH_Nullable_GetValueOrDefault},\n\t\t{\"System\", \"Nullable`1\", \"get_HasValue\", IH_Nullable_get_HasValue},\n\t\t{\"System\", \"Nullable`1\", \"get_Value\", IH_Nullable_get_Value},\n\t\t{\"System\", \"Array\", \"GetGenericValueImpl\", IH_Array_GetGenericValueImpl},\n\t\t{\"System\", \"Array\", \"SetGenericValueImpl\", IH_Array_SetGenericValueImpl},\n\t\t{\"System.Threading\", \"Interlocked\", \"CompareExchange\", IH_Interlocked_CompareExchange},\n\t\t{\"System.Threading\", \"Interlocked\", \"Exchange\", IH_Interlocked_Exchange},\n\t\t{\"System.Runtime.CompilerServices\", \"JitHelpers\", \"UnsafeEnumCast\", IH_JitHelpers_UnsafeEnumCast},\n\t\t{\"System.Runtime.CompilerServices\", \"JitHelpers\", \"UnsafeCast\", IH_JitHelpers_UnsafeCast},\n\t\t{\"System\", \"Array\", \"UnsafeMov\", IH_JitHelpers_Array_UnsafeMov},\n\t\t{\"System.Runtime.CompilerServices\", \"JitHelpers\", \"UnsafeEnumCastLong\", IH_JitHelpers_UnsafeEnumCastLong},\n\t\t{\"System.Reflection\", \"Assembly\", \"GetExecutingAssembly\", IH_Assembly_GetExecutingAssembly},\n\t\t{\"System.Reflection\", \"MethodBase\", \"GetCurrentMethod\", IH_MethodBase_GetCurrentMethod},\n\t\t{\"UnityEngine\", \"Vector2\", \".ctor\", IH_UnityEngine_Vector2_ctor},\n\t\t{\"UnityEngine\", \"Vector3\", \".ctor\", IH_UnityEngine_Vector3_ctor},\n\t\t{\"UnityEngine\", \"Vector4\", \".ctor\", IH_UnityEngine_Vector4_ctor},\n\t\t{\"System\", \"ByReference`1\", \"get_Value\", IH_ByReference_get_Value},\n\t\t{\"System\", \"Activator\", \"CreateInstance\", IH_Activator_CreateInstance},\n\t};\n\n\tstruct CtorInstinctHandlerInfo\n\t{\n\t\tconst char* namespaze;\n\t\tconst char* name;\n\t\tInstinctHandler handler;\n\t};\n\n\tstatic bool CIH_Object(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\tIHCreateAddIR(ir, NewSystemObjectVar);\n\t\tir->obj = ctx.GetEvalStackNewTopOffset();\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic bool CIH_String(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tswitch (method->parameters_count)\n\t\t{\n\t\tcase 1:\n\t\t{\n\t\t\tconst Il2CppType* paramType = GET_METHOD_PARAMETER_TYPE(method->parameters[0]);\n\t\t\tif (paramType->type == IL2CPP_TYPE_SZARRAY && paramType->data.type->type == IL2CPP_TYPE_CHAR)\n\t\t\t{\n\t\t\t\t// new string(char[])\n\t\t\t\tIHCreateAddIR(ir, NewString);\n\t\t\t\tir->str = ctx.GetEvalStackTopOffset();\n\t\t\t\tir->chars = ctx.GetEvalStackTopOffset();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tcase 2:\n\t\t{\n\t\t\tconst Il2CppType* paramType1 = GET_METHOD_PARAMETER_TYPE(method->parameters[0]);\n\t\t\tconst Il2CppType* paramType2 = GET_METHOD_PARAMETER_TYPE(method->parameters[1]);\n\t\t\tif (paramType1->type == IL2CPP_TYPE_CHAR && paramType2->type == IL2CPP_TYPE_I4)\n\t\t\t{\n\t\t\t\tIHCreateAddIR(ir, NewString_3);\n\t\t\t\tir->str = ctx.GetEvalStackOffset_2();\n\t\t\t\tir->c = ctx.GetEvalStackOffset_2();\n\t\t\t\tir->count = ctx.GetEvalStackOffset_1();\n\t\t\t\tctx.PopStack();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\t// new string(char[] chars, int startIndex, int length)\n\t\t\tconst Il2CppType* paramType1 = GET_METHOD_PARAMETER_TYPE(method->parameters[0]);\n\t\t\tconst Il2CppType* paramType2 = GET_METHOD_PARAMETER_TYPE(method->parameters[1]);\n\t\t\tconst Il2CppType* paramType3 = GET_METHOD_PARAMETER_TYPE(method->parameters[2]);\n\t\t\tif (paramType1->type == IL2CPP_TYPE_SZARRAY && paramType1->data.type->type == IL2CPP_TYPE_CHAR\n\t\t\t\t&& paramType2->type == IL2CPP_TYPE_I4 && paramType3->type == IL2CPP_TYPE_I4)\n\t\t\t{\n\t\t\t\tIHCreateAddIR(ir, NewString_2);\n\t\t\t\tir->str = ctx.GetEvalStackOffset_3();\n\t\t\t\tir->chars = ctx.GetEvalStackOffset_3();\n\t\t\t\tir->startIndex = ctx.GetEvalStackOffset_2();\n\t\t\t\tir->length = ctx.GetEvalStackOffset_1();\n\t\t\t\tctx.PopStackN(2);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tstatic bool CIH_Nullable(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\tIL2CPP_ASSERT(IS_CLASS_VALUE_TYPE(klass));\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() > 0);\n\t\til2cpp::vm::Class::SetupFields(klass);\n\t\til2cpp::vm::Class::SetupFields(klass->castClass);\n\t\tIHCreateAddIR(ir, NullableNewVarVar);\n\t\tir->dst = ir->data = ctx.GetEvalStackTopOffset();\n\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\t\tctx.PopStack();\n\t\tctx.PushStackByType(&klass->byval_arg);\n\t\treturn true;\n\t}\n\n\tstatic bool CIH_MdArray(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tuint8_t paramCount = method->parameters_count;\n\t\tIl2CppClass* klass = method->klass;\n\t\tif (klass->rank == paramCount)\n\t\t{\n\t\t\tIHCreateAddIR(ir, NewMdArrVarVar_length);\n\t\t\tir->lengthIdxs = ctx.GetEvalStackOffset(ctx.GetEvalStackTop() - paramCount);\n\t\t\tctx.PopStackN(paramCount);\n\t\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\tir->arr = ctx.GetEvalStackTopOffset();\n\t\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\t\t}\n\t\telse if (klass->rank * 2 == paramCount)\n\t\t{\n\t\t\tIHCreateAddIR(ir, NewMdArrVarVar_length_bound);\n\t\t\tir->lengthIdxs = ctx.GetEvalStackOffset(ctx.GetEvalStackTop() - paramCount);\n\t\t\tir->lowerBoundIdxs = ctx.GetEvalStackOffset(ctx.GetEvalStackTop() - klass->rank);\n\t\t\tctx.PopStackN(paramCount);\n\t\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\tir->arr = ctx.GetEvalStackTopOffset();\n\t\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tRaiseExecutionEngineException(\"not support array ctor\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tstatic bool CIH_Delegate(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n#if HYBRIDCLR_UNITY_2021_OR_NEW\n\t\tconst MethodInfo* ctor = il2cpp::vm::Class::GetMethodFromName(method->klass, \".ctor\", 2);\n\t\tif (ctor && ctor->methodPointer && !ctor->isInterpterImpl)\n\t\t{\n\t\t\tIHCreateAddIR(ir, CtorDelegate);\n\t\t\tir->dst = ir->obj = ctx.GetEvalStackOffset_2();\n\t\t\tir->ctor = ctx.GetOrAddResolveDataIndex(ctor);\n\t\t\tir->method = ctx.GetEvalStackOffset_1();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tIHCreateAddIR(ir, NewDelegate);\n\t\t\tir->dst = ir->obj = ctx.GetEvalStackOffset_2();\n\t\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\t\t\tir->method = ctx.GetEvalStackOffset_1();\n\t\t}\n#else\n\t\tIHCreateAddIR(ir, NewDelegate);\n\t\tir->dst = ir->obj = ctx.GetEvalStackOffset_2();\n\t\tir->klass = ctx.GetOrAddResolveDataIndex(klass);\n\t\tir->method = ctx.GetEvalStackOffset_1();\n#endif\n\t\tctx.PopStackN(2);\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic bool CIH_UnityEngine_Vector2_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tif (method->parameters_count != 2)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\tIHCreateAddIR(ir, NewVector2);\n\t\tir->obj = ir->x = ctx.GetEvalStackOffset_2();\n\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\tctx.PopStackN(2);\n\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\treturn true;\n\t}\n\n\tstatic bool CIH_UnityEngine_Vector3_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tswitch (method->parameters_count)\n\t\t{\n\t\tcase 2:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\t\tIHCreateAddIR(ir, NewVector3_2);\n\t\t\tir->obj = ir->x = ctx.GetEvalStackOffset_2();\n\t\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(2);\n\t\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\t\tIHCreateAddIR(ir, NewVector3_3);\n\t\t\tir->obj = ir->x = ctx.GetEvalStackOffset_3();\n\t\t\tir->y = ctx.GetEvalStackOffset_2();\n\t\t\tir->z = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(3);\n\t\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tstatic bool CIH_UnityEngine_Vector4_ctor(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\tswitch (method->parameters_count)\n\t\t{\n\t\tcase 2:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 2);\n\t\t\tIHCreateAddIR(ir, NewVector4_2);\n\t\t\tir->obj = ir->x = ctx.GetEvalStackOffset_2();\n\t\t\tir->y = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(2);\n\t\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\tcase 3:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 3);\n\t\t\tIHCreateAddIR(ir, NewVector4_3);\n\t\t\tir->obj = ir->x = ctx.GetEvalStackOffset_3();\n\t\t\tir->y = ctx.GetEvalStackOffset_2();\n\t\t\tir->z = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(3);\n\t\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\tcase 4:\n\t\t{\n\t\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() >= 4);\n\t\t\tIHCreateAddIR(ir, NewVector4_4);\n\t\t\tir->obj = ir->x = ctx.GetEvalStackOffset_4();\n\t\t\tir->y = ctx.GetEvalStackOffset_3();\n\t\t\tir->z = ctx.GetEvalStackOffset_2();\n\t\t\tir->w = ctx.GetEvalStackOffset_1();\n\t\t\tctx.PopStackN(4);\n\t\t\tctx.PushStackByType(&method->klass->byval_arg);\n\t\t\treturn true;\n\t\t}\n\t\tdefault: return false;\n\t\t}\n\t}\n\n\tstatic bool CIH_ByReference(TransformContext& ctx, const MethodInfo* method)\n\t{\n\t\t// new ByReference<T>(ref T value) don't need to do anything\n\t\tIl2CppClass* klass = method->klass;\n\t\tIL2CPP_ASSERT(ctx.GetEvalStackTop() > 0);\n\t\tctx.PopStack();\n\t\tctx.PushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\treturn true;\n\t}\n\n\tstatic CtorInstinctHandlerInfo s_ctorInstinctHandlerInfos[] =\n\t{\n\t\t{\"System\", \"Object\", CIH_Object},\n\t\t{\"System\", \"String\", CIH_String},\n\t\t{\"System\", \"Nullable`1\", CIH_Nullable},\n\n\t\t{\"UnityEngine\", \"Vector2\", CIH_UnityEngine_Vector2_ctor},\n\t\t{\"UnityEngine\", \"Vector3\", CIH_UnityEngine_Vector3_ctor},\n\t\t{\"UnityEngine\", \"Vector4\", CIH_UnityEngine_Vector4_ctor},\n\n\t\t{\"System\", \"ByReference`1\", CIH_ByReference},\n\t};\n\t\n\tvoid TransformContext::InitializeInstinctHandlers()\n\t{\n\t\tfor (InstinctHandlerInfo& handler : s_instinctHandlerInfos)\n\t\t{\n\t\t\tNamespaceAndNameAndMethod nnm = { handler.namespaze, handler.name, handler.method };\n\t\t\ts_instinctHandlerMap.add(nnm, handler.handler);\n\t\t}\n\t\tfor (CtorInstinctHandlerInfo& handler : s_ctorInstinctHandlerInfos)\n\t\t{\n\t\t\tNamespaceAndName nnm = { handler.namespaze, handler.name };\n\t\t\ts_ctorInstinctHandlerMap.add(nnm, handler.handler);\n\t\t}\n\t}\n\t\n\tbool TransformContext::TryAddInstinctCtorInstruments(const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\n\t\tif (klass->byval_arg.type == IL2CPP_TYPE_ARRAY)\n\t\t{\n\t\t\treturn CIH_MdArray(*this, method);\n\t\t}\n\n\t\tif (IsChildTypeOfMulticastDelegate(method->klass))\n\t\t{\n\t\t\treturn CIH_Delegate(*this, method);\n\t\t}\n\n\t\tNamespaceAndName key = { klass->namespaze, klass->name };\n\t\tauto it = s_ctorInstinctHandlerMap.find(key);\n\t\tif (it != s_ctorInstinctHandlerMap.end())\n\t\t{\n\t\t\treturn (it->second)(*this, method);\n\t\t}\n\t\treturn false;\n\t}\n\n\tbool TransformContext::TryAddInstinctInstrumentsByName(const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\t\tconst char* namespaceName = klass->namespaze;\n\t\tconst char* klassName = klass->name;\n\t\tconst char* methodName = method->name;\n\t\tuint32_t paramCount = method->parameters_count;\n\n\t\tNamespaceAndNameAndMethod key = { namespaceName, klassName, methodName };\n\t\tauto it = s_instinctHandlerMap.find(key);\n\t\tif (it == s_instinctHandlerMap.end())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\treturn (it->second)(*this, method);\n\t}\n\n\tbool TransformContext::TryAddArrayInstinctInstruments(const MethodInfo* method)\n\t{\n\t\tIl2CppClass* klass = method->klass;\n\n\t\t// warn! can't change to else if. because namespace == system\n\t\tif (klass->byval_arg.type == IL2CPP_TYPE_ARRAY)\n\t\t{\n\t\t\tconst char* methodName = method->name;\n\t\t\tint32_t paramCount = method->parameters_count + 1;\n\t\t\tconst Il2CppType* eleType = &klass->element_class->byval_arg;\n\t\t\tLocationDescInfo desc = ComputLocationDescInfo(eleType);\n\t\t\tif (strcmp(methodName, \"Get\") == 0)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, GetMdArrElementVarVar_n);\n\t\t\t\tir->type = CalcGetMdArrElementVarVarOpcode(eleType);\n\t\t\t\tir->arr = GetEvalStackOffset(evalStackTop - paramCount);\n\t\t\t\tir->lengthIdxs = ir->arr + 1;\n\t\t\t\tPopStackN(paramCount);\n\t\t\t\tPushStackByType(eleType);\n\t\t\t\tir->value = GetEvalStackTopOffset();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (strcmp(methodName, \"Address\") == 0)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, GetMdArrElementAddressVarVar);\n\t\t\t\tir->arr = GetEvalStackOffset(evalStackTop - paramCount);\n\t\t\t\tir->lengthIdxs = ir->arr + 1;\n\t\t\t\tPopStackN(paramCount);\n\t\t\t\tPushStackByReduceType(NATIVE_INT_REDUCE_TYPE);\n\t\t\t\tir->addr = GetEvalStackTopOffset();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (strcmp(methodName, \"Set\") == 0)\n\t\t\t{\n\t\t\t\tCreateAddIR(ir, SetMdArrElementVarVar_n);\n\t\t\t\tswitch (desc.type)\n\t\t\t\t{\n\t\t\t\tcase LocationDescType::I1: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_i1; break;\n\t\t\t\tcase LocationDescType::U1: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_u1; break;\n\t\t\t\tcase LocationDescType::I2: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_i2; break;\n\t\t\t\tcase LocationDescType::U2: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_u2; break;\n\t\t\t\tcase LocationDescType::I4: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_i4; break;\n\t\t\t\tcase LocationDescType::I8: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_i8; break;\n\t\t\t\tcase LocationDescType::Ref: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_ref; break;\n\t\t\t\tcase LocationDescType::S: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_n; break;\n\t\t\t\tcase LocationDescType::StructContainsRef: ir->type = HiOpcodeEnum::SetMdArrElementVarVar_WriteBarrier_n; break;\n\t\t\t\tdefault: RaiseExecutionEngineException(\"not support array element type\"); break;\n\t\t\t\t}\n\t\t\t\tir->arr = GetEvalStackOffset(evalStackTop - paramCount);\n\t\t\t\tir->lengthIdxs = ir->arr + 1;\n\t\t\t\tir->ele = GetEvalStackTopOffset();\n\t\t\t\tPopStackN(paramCount);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformModule.cpp",
    "content": "#include \"TransformModule.h\"\n#include \"TransformContext.h\"\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tvoid TransformModule::Initialize()\n\t{\n\t\tTransformContext::InitializeInstinctHandlers();\n\t}\n}\n}"
  },
  {
    "path": "hybridclr/transform/TransformModule.h",
    "content": "#pragma once\n\nnamespace hybridclr\n{\nnamespace transform\n{\n\tclass TransformModule\n\t{\n\tpublic:\n\t\tstatic void Initialize();\n\t};\n}\n}"
  }
]