1 changed files with 29 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
// The following is a RISC-V program to test the functionality of the
|
|||
// dummy RoCC accelerator.
|
|||
// Compile with riscv-gcc dummy.c
|
|||
// Run with spike --extension=dummy pk a.out
|
|||
|
|||
#include <assert.h> |
|||
#include <stdio.h> |
|||
#include <stdint.h> |
|||
|
|||
int main() { |
|||
uint64_t x = 123, y = 456, z = 0; |
|||
// load x into accumulator 2 (funct=0)
|
|||
asm volatile ("custom0 x0, %0, 2, 0" : : "r"(x)); |
|||
// read it back into z (funct=1) to verify it
|
|||
asm volatile ("custom0 %0, x0, 2, 1" : "=r"(z)); |
|||
assert(z == x); |
|||
// accumulate 456 into it (funct=3)
|
|||
asm volatile ("custom0 x0, %0, 2, 3" : : "r"(y)); |
|||
// verify it
|
|||
asm volatile ("custom0 %0, x0, 2, 1" : "=r"(z)); |
|||
assert(z == x+y); |
|||
// do it all again, but initialize acc2 via memory this time (funct=2)
|
|||
asm volatile ("custom0 x0, %0, 2, 2" : : "r"(&x)); |
|||
asm volatile ("custom0 x0, %0, 2, 3" : : "r"(y)); |
|||
asm volatile ("custom0 %0, x0, 2, 1" : "=r"(z)); |
|||
assert(z == x+y); |
|||
|
|||
printf("success!\n"); |
|||
} |
|||
Loading…
Reference in new issue