You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Here we introduce AOT generation support for ia32.
The lack of AOT support for ia32 is primarily due to the fact that the x64 approach with the allocation of 2 CODE_REG and PP_REG registers did not scale to the ia32 architecture due to the fact that there were so few free registers that the implementation of many instructions and stubs became impossible or time-consuming. A different approach and custom implementation for ia32 were required. In the dart-sdk project such work was stopped at some point due to the fact that ia32 was no longer supported at the OS developer level. Nevertheless, there was a request for ia32 support in the community and we decided to try to implement it.
What this prototype is about
For AOT on ia32 we use the following approach:
x64 AOT implementation of flowgraph compiler, instructions and stubs was used as is for ia32
assembler work with objects was moved to a pool of objects, as is done in all platforms that support AOT. We take the code completely from the x64 implementation also
implementations that are very different on ia32 and x64, such as write barrier, are also used with x64 implementations
transfer the operation of registers to memory for: CODE_RED, PP_REG, ABI enums registers, which began to be used in ia32 from the x64 implementation
turn off intrinsify, because the assembly code requires significant edits, which is not the purpose of this prototype.
Stability issues
To verify the correctness of the dart sdk, we used tests on the x64 and ia32 platforms.
To do this, we completely transferred the work of x64 to memory instead of registers, and thus we had the opportunity to run tests on x64 and compare them with tests on ia32. The corresponding changes in the x64 code and tests are presented in the prototype. The changes in the x64 functionality serve as a demonstration of the approach and are not a demonstration of the final code.
Summary
Introduced prototype was integrated with flutter engine build and provided AOT work on ia32, still having support of JIT.
The text was updated successfully, but these errors were encountered:
ganenkokb-yandex
changed the title
Support AOT generation for ia32 implementation
Support AOT generation for ia32 implementation on 3.2.3
Feb 15, 2024
Unfortunately, at this point we are basically considering to completely delete X86 support from the VM so I would encourage you to not waste time on this - unless of course you just want to maintain your own fork of the Dart SDK and Flutter engine. Because we are on the path to deprecate and remove X86 it is highly unlikely that we will want to review and merge any significant changes to the IA32 backend.
ganenkokb-yandex#1
Introduction
Here we introduce AOT generation support for ia32.
The lack of AOT support for ia32 is primarily due to the fact that the x64 approach with the allocation of 2 CODE_REG and PP_REG registers did not scale to the ia32 architecture due to the fact that there were so few free registers that the implementation of many instructions and stubs became impossible or time-consuming. A different approach and custom implementation for ia32 were required. In the dart-sdk project such work was stopped at some point due to the fact that ia32 was no longer supported at the OS developer level. Nevertheless, there was a request for ia32 support in the community and we decided to try to implement it.
What this prototype is about
For AOT on ia32 we use the following approach:
Stability issues
To verify the correctness of the dart sdk, we used tests on the x64 and ia32 platforms.
To do this, we completely transferred the work of x64 to memory instead of registers, and thus we had the opportunity to run tests on x64 and compare them with tests on ia32. The corresponding changes in the x64 code and tests are presented in the prototype. The changes in the x64 functionality serve as a demonstration of the approach and are not a demonstration of the final code.
Summary
Introduced prototype was integrated with flutter engine build and provided AOT work on ia32, still having support of JIT.
The text was updated successfully, but these errors were encountered: