Note to x86: x86 is not part of this list, because we can not generate all tables in C.
Refer to capstone-engine/llvm-capstone#13 for details.
Note about changes introduced with auto-sync:
For a preview what changes will come in v6, please take a look at the WIP release guide.
This issue tracks the auto-sync refactoring and implementation effort of architecture modules.
The table below lists the responsible developers for each architecture.
In progress
None
.td edits upstreamed
Most LLVM td files miss some information about instructions (memory read/writes, operands incorrectly assigned as in/out etc.). Since we rely on this we need to fix it. Those fixes should be upstreamed to LLVM.
Done
Arch extensions
Adding CPU extensions which are not part of upsteram LLVM is easier now.
Here are they tracked.
Effort level of not refactored/implemented archs
| Arch |
Number of operand groups |
Generates |
Note |
Implementation type |
Difficulty level |
| AVR |
~3 |
Yes |
None |
New |
Easy |
| CSKY |
~7 |
Yes |
None |
New |
Medium |
| DirectX |
~1 |
Yes |
Deviates from common design. |
New |
Medium-Hard |
| EVM |
~2 |
Not tested |
Very small module, llvm repo: https://github.com/etclabscore/evm_llvm |
New |
Easy |
| Hexagon |
~2 |
No |
Deviates from common design. |
New |
Hard |
| Lanai |
~10 |
Yes |
None |
New |
Easy |
| M68k |
~28 |
Yes |
None |
Refactor |
Medium |
| MSP430 |
~6 |
Yes |
None |
New |
Easy |
| SPIRV |
~9 |
No |
td files faulty |
New |
Medium |
| VE |
~8 |
Yes |
None |
New |
Medium |
| XCore |
~15 |
No |
td files faulty |
Refactor |
Medium |
Note to RISC-V: RISC-V will not be generated via LLVM because the LLVM architecture definitions are not precise enough for our use case. Instead, a SAIL based generator will be used (#2392). RiscV is now updated via Auto-Sync as well. See the table above.
Legend
Number of operand groups: Operand groups which have a distinct print functions. Indicates effort to implement the LLVM <-> CS mapping code (fill cs_detail and the like).
Generates: inc files generate with most recent backends.
Note: Worthy to note.
Implementation type: Refactor current implementation or implement new arch module.
Difficulty level: Guessed difficulty of this arch (base on points above and complexity like number of instructions etc.). Though "Easy" still means you have to familiarize yourself how LLVM definitions and the updater work. My guess is it will take at least a week of work.
Getting started
- If you like to refactor an architecture module or implement a new one, please comment here and we add you. Also we can give hints to important information.
- Please add a draft PR once you've done the first commit, so the progress is visible and there is a place for discussion.
- Please refer to the
auto-sync documentation to learn how to refactor or implement an architecture with auto-sync
TODO for refactored archs
List of missing things which should be done before v6 to get a nice round package.
Capstone
LLVM revisions
Auto-Sync
Backends
ARM
PPC
AArch64
Note to x86:
x86is not part of this list, because we can not generate all tables in C.Refer to capstone-engine/llvm-capstone#13 for details.
Note about changes introduced with
auto-sync:For a preview what changes will come in
v6, please take a look at the WIP release guide.This issue tracks the
auto-syncrefactoring and implementation effort of architecture modules.The table below lists the responsible developers for each architecture.
In progress
None
.td edits upstreamed
Most LLVM
tdfiles miss some information about instructions (memory read/writes, operands incorrectly assigned as in/out etc.). Since we rely on this we need to fix it. Those fixes should be upstreamed to LLVM.Alhpa(no longer maintained)Done
v6release v3.0)v6v6v6v6v5v6v6v6v6v6v6v6v6Arch extensions
Adding CPU extensions which are not part of upsteram LLVM is easier now.
Here are they tracked.
Effort level of not refactored/implemented archs
tdfiles faultytdfiles faultyNote to RISC-V: RISC-V will not be generated via LLVM because the LLVM architecture definitions are not precise enough for our use case. Instead, a SAIL based generator will be used (#2392).RiscV is now updated via Auto-Sync as well. See the table above.Legend
Number of operand groups: Operand groups which have a distinctprintfunctions. Indicates effort to implement the LLVM <-> CS mapping code (fillcs_detailand the like).Generates:incfiles generate with most recent backends.Note: Worthy to note.Implementation type: Refactor current implementation or implement new arch module.Difficulty level: Guessed difficulty of this arch (base on points above and complexity like number of instructions etc.). Though "Easy" still means you have to familiarize yourself how LLVM definitions and the updater work. My guess is it will take at least a week of work.Getting started
auto-syncdocumentation to learn how to refactor or implement an architecture withauto-syncTODO for refactored archs
List of missing things which should be done before
v6to get a nice round package.Capstone
ASUpdater.pyinstructions.assertversion and add the asserts to the LLVM files again.CAPSTONE_DIET.name2iddocs. Parametermaxshould be changed to table size and in the loop bemax - 1CAPSONE_DIET).PPCinstruction formats on the public interfaceLLVM revisions
popalias (d64f749)FeatureAllcheckpredicatesAuto-Sync
refactorsetting toauto-syncupdater.Backends
ARM
post_indexwhen base regsister is tied. Just to make sure to hit every case.Encoding infoPPC
Encoding infoAArch64
Encoding info