blob: b031b7683549b29b57a549714aebbc1a19c7dd7d [file] [log] [blame]
#include "test_vector.h"
#include <springbok.h>
#define MSTATUS_VS 0x00000600
#define enable_vec() \
do { \
__asm__ volatile("csrs mstatus, %[bits];" ::[bits] "r"( \
MSTATUS_VS & (MSTATUS_VS >> 1))); \
} while (0);
uint32_t get_vtype(uint8_t vsew, uint8_t vlmul, bool tail_agnostic,
bool mask_agnostic) {
return (vlmul & 0x7) | (vsew & 0x7) << 3 | (tail_agnostic & 0x1) << 6 |
(mask_agnostic & 0x1) << 7;
}
uint32_t get_vtype_e8(uint8_t vlmul, bool tail_agnostic, bool mask_agnostic) {
uint8_t vsew = 0;
return get_vtype(vsew, vlmul, tail_agnostic, mask_agnostic);
}
uint32_t get_vtype_e16(uint8_t vlmul, bool tail_agnostic, bool mask_agnostic) {
uint8_t vsew = 1;
return get_vtype(vsew, vlmul, tail_agnostic, mask_agnostic);
}
uint32_t get_vtype_e32(uint8_t vlmul, bool tail_agnostic, bool mask_agnostic) {
uint8_t vsew = 2;
return get_vtype(vsew, vlmul, tail_agnostic, mask_agnostic);
}
uint32_t get_vtype_e64(uint8_t vlmul, bool tail_agnostic, bool mask_agnostic) {
uint8_t vsew = 3;
return get_vtype(vsew, vlmul, tail_agnostic, mask_agnostic);
}
int main(void) {
LOG_INFO("Hello test_vector.c");
LOG_INFO("Built at: " __DATE__ ", " __TIME__);
uint32_t misa;
__asm__ volatile("csrr %0, misa" : "=r"(misa));
LOG_INFO("MISA: 0x%08x", (unsigned int)misa);
uint32_t mstatus;
__asm__ volatile("csrr %0, mstatus" : "=r"(mstatus));
LOG_INFO("BEFORE MSTATUS: 0x%08x", (unsigned int)mstatus);
enable_vec();
__asm__ volatile("csrr %0, mstatus" : "=r"(mstatus));
LOG_INFO("AFTER MSTATUS: 0x%08x", (unsigned int)mstatus);
uint32_t vlenb;
__asm__ volatile("csrr %0, vlenb" : "=r"(vlenb));
LOG_INFO("VLENB: 0x%08x, VLEN: %u", (unsigned int)vlenb, vlenb << 3);
assert(test_vector());
LOG_INFO("test_main done.");
return 0;
}