Implement all missing instructions
This commit is contained in:
@@ -28,7 +28,7 @@ pub extern "C" fn entry() -> ! {
|
||||
let mut compute_array: ComputeArray<3> = ComputeArray([
|
||||
BankArray([f16::from_f32(0.1); 512]),
|
||||
BankArray([f16::from_f32(0.2); 512]),
|
||||
BankArray([f16::ZERO; 512]),
|
||||
BankArray([f16::from_f32(0.3); 512]),
|
||||
]);
|
||||
let dummy_array = BankArray::default();
|
||||
let mut uart = Uart0;
|
||||
@@ -40,12 +40,22 @@ pub extern "C" fn entry() -> ! {
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
writeln!(
|
||||
&mut uart,
|
||||
"BankArray0: [{:?}, ...]\nBankArray1: [{:?}, ...]\nBankArray2: [{:?}, ...]",
|
||||
compute_array.0[0].0[0], compute_array.0[1].0[0], compute_array.0[2].0[0]
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
writeln!(&mut uart, "MAC: BankArray2 += BankArray0 * BankArray1",).unwrap();
|
||||
|
||||
// Invalidate and flush array just in case
|
||||
compute_array.invalidate_flush();
|
||||
dummy_array.invalidate_flush();
|
||||
|
||||
pim_state.set_bank_mode(BankMode::PimAllBank);
|
||||
compute_array.0[0].execute_instruction_read();
|
||||
compute_array.0[2].execute_instruction_read();
|
||||
compute_array.0[1].execute_instruction_read();
|
||||
compute_array.0[2].execute_instruction_write();
|
||||
dummy_array.execute_instruction_read();
|
||||
@@ -55,8 +65,8 @@ pub extern "C" fn entry() -> ! {
|
||||
|
||||
writeln!(
|
||||
&mut uart,
|
||||
"BankArray 0: [{:?}, ...]\nBankArray 1: [{:?}, ...]\nBankArray 2: [{:?}, ...]",
|
||||
compute_array.0[0].0[0], compute_array.0[1].0[0], compute_array.0[2].0[0]
|
||||
"BankArray2: [{:?}, ...]",
|
||||
compute_array.0[2].0[0]
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ impl BankArray {
|
||||
|
||||
pub fn invalidate_single_bank(&self, idx: usize) {
|
||||
unsafe {
|
||||
// Invalidate and flush first bank
|
||||
// Invalidate first bank
|
||||
asm!("dc ivac, {val}", val = in(reg) &self.0[idx]);
|
||||
asm!("dsb sy");
|
||||
}
|
||||
|
||||
@@ -5,12 +5,20 @@ pub const TEST_KERNEL: Kernel = Kernel([
|
||||
src: File::Bank,
|
||||
dst: File::Grf { index: 0 },
|
||||
},
|
||||
Instruction::ADD {
|
||||
src0: File::Bank,
|
||||
src1: File::Grf { index: 0 },
|
||||
dst: File::Grf { index: 0 },
|
||||
Instruction::MOV {
|
||||
src: File::Bank,
|
||||
dst: File::Grf { index: 1 },
|
||||
},
|
||||
Instruction::MAC {
|
||||
src0: File::Grf { index: 0 },
|
||||
src1: File::Bank,
|
||||
src2: File::Grf { index: 1 },
|
||||
dst: File::Grf { index: 1 },
|
||||
},
|
||||
Instruction::FILL {
|
||||
src: File::Grf { index: 1 },
|
||||
dst: File::Bank,
|
||||
},
|
||||
Instruction::FILL { src: File::Grf { index: 0 }, dst: File::Bank },
|
||||
Instruction::EXIT,
|
||||
Instruction::NOP,
|
||||
Instruction::NOP,
|
||||
@@ -39,5 +47,4 @@ pub const TEST_KERNEL: Kernel = Kernel([
|
||||
Instruction::NOP,
|
||||
Instruction::NOP,
|
||||
Instruction::NOP,
|
||||
Instruction::NOP,
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user