|
|
|
@ -552,6 +552,9 @@ void processor_t::vectorUnit_t::reset(){ |
|
|
|
reg_file = malloc(NVPR * vlenb); |
|
|
|
memset(reg_file, 0, NVPR * vlenb); |
|
|
|
|
|
|
|
auto& csrmap = p->get_state()->csrmap; |
|
|
|
csrmap[CSR_VXSAT] = vxsat = std::make_shared<vector_csr_t>(p, CSR_VXSAT, /*mask*/ 0x1ul); |
|
|
|
|
|
|
|
vtype = 0; |
|
|
|
set_vl(0, 0, 0, -1); // default to illegal configuration
|
|
|
|
} |
|
|
|
@ -986,17 +989,13 @@ void processor_t::set_csr(int which, reg_t val) |
|
|
|
{ |
|
|
|
case CSR_VCSR: |
|
|
|
dirty_vs_state; |
|
|
|
VU.vxsat = (val & VCSR_VXSAT) >> VCSR_VXSAT_SHIFT; |
|
|
|
VU.vxsat->write((val & VCSR_VXSAT) >> VCSR_VXSAT_SHIFT); |
|
|
|
VU.vxrm = (val & VCSR_VXRM) >> VCSR_VXRM_SHIFT; |
|
|
|
break; |
|
|
|
case CSR_VSTART: |
|
|
|
dirty_vs_state; |
|
|
|
VU.vstart = val & (VU.get_vlen() - 1); |
|
|
|
break; |
|
|
|
case CSR_VXSAT: |
|
|
|
dirty_vs_state; |
|
|
|
VU.vxsat = val & 0x1ul; |
|
|
|
break; |
|
|
|
case CSR_VXRM: |
|
|
|
dirty_vs_state; |
|
|
|
VU.vxrm = val & 0x3ul; |
|
|
|
@ -1007,16 +1006,12 @@ void processor_t::set_csr(int which, reg_t val) |
|
|
|
switch (which) |
|
|
|
{ |
|
|
|
case CSR_VCSR: |
|
|
|
LOG_CSR(CSR_VXSAT); |
|
|
|
LOG_CSR(CSR_VXRM); |
|
|
|
break; |
|
|
|
|
|
|
|
case CSR_VSTART: |
|
|
|
LOG_CSR(CSR_VSTART); |
|
|
|
break; |
|
|
|
case CSR_VXSAT: |
|
|
|
LOG_CSR(CSR_VXSAT); |
|
|
|
break; |
|
|
|
case CSR_VXRM: |
|
|
|
LOG_CSR(CSR_VXRM); |
|
|
|
break; |
|
|
|
@ -1048,17 +1043,12 @@ reg_t processor_t::get_csr(int which, insn_t insn, bool write, bool peek) |
|
|
|
require_vector_vs; |
|
|
|
if (!extension_enabled('V')) |
|
|
|
break; |
|
|
|
ret((VU.vxsat << VCSR_VXSAT_SHIFT) | (VU.vxrm << VCSR_VXRM_SHIFT)); |
|
|
|
ret((VU.vxsat->read() << VCSR_VXSAT_SHIFT) | (VU.vxrm << VCSR_VXRM_SHIFT)); |
|
|
|
case CSR_VSTART: |
|
|
|
require_vector_vs; |
|
|
|
if (!extension_enabled('V')) |
|
|
|
break; |
|
|
|
ret(VU.vstart); |
|
|
|
case CSR_VXSAT: |
|
|
|
require_vector_vs; |
|
|
|
if (!extension_enabled('V')) |
|
|
|
break; |
|
|
|
ret(VU.vxsat); |
|
|
|
case CSR_VXRM: |
|
|
|
require_vector_vs; |
|
|
|
if (!extension_enabled('V')) |
|
|
|
|