Crates.io | mlem |
lib.rs | mlem |
version | 0.1.0 |
source | src |
created_at | 2017-04-27 17:50:23.920729 |
updated_at | 2017-04-27 17:50:23.920729 |
description | A 64-bit Harvard The Machine Learning Machine is a 64-bit virtual Harvard-arch machine for evolutionary algorithms to program against. The machine has eight GPRs (`R0` through `R7`), a hardware stack with SP and BP, and hardware I/O with Input and Output. |
homepage | |
repository | https://github.com/SilverWingedSeraph/mlem |
max_upload_size | |
id | 12225 |
size | 31,094 |
The Machine Learning Machine is a 64-bit virtual Harvard-arch machine for evolutionary algorithms to program against.
The machine has eight GPRs (R0
through R7
), a hardware stack with SP and BP,
and hardware I/O with Input and Output.
These I/O instructions write out whole u64
s in big endian using byteorder
.
This example shows a simple program being executed by the MLeM managed execution routine.
use mlem::{execute, Instruction, Address, Register, Outcome};
let input = vec![2, 2, 2, 2];
let expected = vec![4, 0];
let program = vec![
// Get all input values
Instruction::Input(Address::RegAbs(Register::R0)),
Instruction::Input(Address::RegAbs(Register::R1)),
Instruction::Input(Address::RegAbs(Register::R2)),
Instruction::Input(Address::RegAbs(Register::R3)),
// Perform arithmetic
Instruction::Add(Address::RegAbs(Register::R0), Address::RegAbs(Register::R1)),
Instruction::Sub(Address::RegAbs(Register::R2), Address::RegAbs(Register::R3)),
// Output computed values
Instruction::Output(Address::RegAbs(Register::R0)),
Instruction::Output(Address::RegAbs(Register::R2)),
// Halt
Instruction::Halt
];
//!
let (outcome, _, output) = execute(program, input);
assert!(outcome == Outcome::Halt, "Program did not successfully halt! {:?}", outcome);
assert!(output == expected, "Program did not produce {:?} as expected, but rather {:?}.", expected, output);