Commits
Click on a commit to change the comparison rangedriver.py: support macro definitions that reference labels
Ex: `#define foo() bl edwards25519_decode_alt_mul_p25519`
Before this change, the generated rust macro didn't wire up the local label
reference properly:
```rust
macro_rules! foo { () => { Q!(
"bl " Label!("edwards25519_decode_alt_mul_p25519", 0, Before)
)} }
```
After this change:
```rust
macro_rules! foo { () => { Q!(
"bl " Label!("edwards25519_decode_alt_mul_p25519", 4, After)
)} }
```
To support this, we now track which macros reference labels. We then track
which blocks call these macros. As long as all macro callsites are uniformly
before or after the labels they reference, we can safely replace the local label
id and search direction in the original macro definition.
It was challenging to track macro callsites in the main `RustFormatter` and also
difficult to "pre-locate" callsites while dealing with hoisting, so the actual
macro fixing happens on the generated Rust code from the `RustFormatter` pass. fixup! ed25519: aarch64: `edwards25519_decode` codegen