2022-06-20 20:32:29 -07:00
|
|
|
//! Loads each kernel assembly file and concatenates them.
|
|
|
|
|
|
2022-07-08 08:56:46 -07:00
|
|
|
use std::collections::HashMap;
|
|
|
|
|
|
|
|
|
|
use ethereum_types::U256;
|
2022-06-20 20:32:29 -07:00
|
|
|
use itertools::Itertools;
|
|
|
|
|
|
|
|
|
|
use super::assembler::{assemble, Kernel};
|
|
|
|
|
use crate::cpu::kernel::parser::parse;
|
|
|
|
|
|
2022-07-08 08:56:46 -07:00
|
|
|
pub fn evm_constants() -> HashMap<String, U256> {
|
|
|
|
|
let mut c = HashMap::new();
|
|
|
|
|
c.insert("SEGMENT_ID_TXN_DATA".into(), 0.into()); // TODO: Replace with actual segment ID.
|
|
|
|
|
c
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-20 20:32:29 -07:00
|
|
|
#[allow(dead_code)] // TODO: Should be used once witness generation is done.
|
|
|
|
|
pub(crate) fn combined_kernel() -> Kernel {
|
|
|
|
|
let files = vec![
|
2022-06-25 23:10:08 -07:00
|
|
|
include_str!("asm/basic_macros.asm"),
|
2022-07-05 21:24:51 +02:00
|
|
|
include_str!("asm/exp.asm"),
|
2022-07-05 21:12:11 +02:00
|
|
|
include_str!("asm/curve_mul.asm"),
|
2022-07-01 18:28:22 +02:00
|
|
|
include_str!("asm/curve_add.asm"),
|
2022-07-05 15:01:40 +02:00
|
|
|
include_str!("asm/moddiv.asm"),
|
2022-07-13 18:48:25 +02:00
|
|
|
// include_str!("asm/secp256k1/curve_mul.asm"),
|
|
|
|
|
// include_str!("asm/secp256k1/curve_add.asm"),
|
|
|
|
|
// include_str!("asm/secp256k1/moddiv.asm"),
|
|
|
|
|
include_str!("asm/ecrecover.asm"),
|
2022-07-05 21:24:51 +02:00
|
|
|
include_str!("asm/storage_read.asm"),
|
|
|
|
|
include_str!("asm/storage_write.asm"),
|
2022-06-20 20:32:29 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
let parsed_files = files.iter().map(|f| parse(f)).collect_vec();
|
2022-07-08 08:56:46 -07:00
|
|
|
assemble(parsed_files, evm_constants())
|
2022-06-20 20:32:29 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
mod tests {
|
|
|
|
|
use crate::cpu::kernel::aggregator::combined_kernel;
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn make_kernel() {
|
|
|
|
|
// Make sure we can parse and assemble the entire kernel.
|
2022-07-07 08:59:53 -07:00
|
|
|
let kernel = combined_kernel();
|
|
|
|
|
println!("Kernel size: {} bytes", kernel.code.len());
|
2022-06-20 20:32:29 -07:00
|
|
|
}
|
|
|
|
|
}
|