https://github.com/omarandlorraine/strop
Stochastically generates machine code
https://github.com/omarandlorraine/strop
rust
Last synced: about 1 year ago
JSON representation
Stochastically generates machine code
- Host: GitHub
- URL: https://github.com/omarandlorraine/strop
- Owner: omarandlorraine
- License: mit
- Created: 2021-10-25T04:31:36.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-03-23T14:59:49.000Z (over 1 year ago)
- Last Synced: 2025-03-28T09:08:20.797Z (over 1 year ago)
- Topics: rust
- Language: Rust
- Homepage:
- Size: 674 KB
- Stars: 96
- Watchers: 2
- Forks: 1
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# strop
[](https://github.com/omarandlorraine/strop/actions?workflow=Checks)
[](https://crates.io/crates/strop)
strop, the *st*ochastic *op*timizer, written in *R*ust.
Like a compiler, strop generates assembly that computes a given function. But
unlike a compiler, it generates assembly-language subroutines by a random
search or a brute-force search.
### Ancillary documents:
* [LICENSE](LICENSE.md) It's just the MIT license.
* [Theory of operation](THEORY_OF_OPERATION.md) High-level documentation explaining how strop works.
### What it's for
To see what strop could be used for:
* [opt](examples/opt.rs) optimizes an existing machine code function
* [gen](examples/gen.rs) generates a Z80 function matching the Rust function, after a fashion compiling Rust to Z80.
* [peephole](examples/peephole.rs) discovers lacunae in the peephole optimizers and other constraints
### Supported instruction sets:
Strop currently has the following back-ends:
* **armv4t**, which targets the ARMv4T processors, such as the ARM7TDMI
* **m68000**, which targets the Motorola 68000
* NB. This back-end is gated by the `m68k` feature since it requires nightly Rust
* **m6502**, targets various models of the MOS 6502
* Supports the NMOS and CMOS variants and others, thanks to the
[mos6502](https://github.com/mre/mos6502) dependency.
* **m6809**, which targets the Motorola 6809
* **z80**, which targets the Zilog Z80