@@ -94,6 +94,25 @@ void DifftestRef::get_regs(diff_context_t *ctx) {
9494 ctx->dscratch0 = state->csrmap [CSR_DSCRATCH0]->read ();
9595 ctx->dscratch1 = state->csrmap [CSR_DSCRATCH1]->read ();
9696#endif // DIFF_DEBUG_MODE
97+
98+ #ifdef CONFIG_DIFF_RVV
99+ auto & vstate = p->VU ;
100+ /* ******************************ONLY FOR VLEN=128,ELEN=64*******************************************/
101+ for (int i = 0 ; i < NVPR; i++){
102+ auto vReg_Val0 = vstate.elt <uint64_t >(i, 0 ,false );
103+ auto vReg_Val1 = vstate.elt <uint64_t >(i, 1 ,false );
104+ ctx->vr [i]._64 [0 ] = vReg_Val0;
105+ ctx->vr [i]._64 [1 ] = vReg_Val1;
106+ }
107+ /* **************************************************************************************************/
108+ ctx->vstart = vstate.vstart ->read ();
109+ ctx->vxsat = vstate.vxsat ->read ();
110+ ctx->vxrm = vstate.vxrm ->read ();
111+ ctx->vcsr = state->csrmap [CSR_VCSR]->read ();
112+ ctx->vl = vstate.vl ->read ();
113+ ctx->vtype = vstate.vtype ->read ();
114+ ctx->vlenb = vstate.vlenb ;
115+ #endif // CONFIG_DIFF_RVV
97116}
98117
99118void DifftestRef::set_regs (diff_context_t *ctx, bool on_demand) {
@@ -183,6 +202,45 @@ void DifftestRef::set_regs(diff_context_t *ctx, bool on_demand) {
183202 state->csrmap [CSR_DSCRATCH1]->write (ctx->dscratch1 );
184203 }
185204#endif // DIFF_DEBUG_MODE
205+
206+ #ifdef CONFIG_DIFF_RVV
207+ auto & vstate = p->VU ;
208+ /* *********************ONLY FOR VLEN=128,ELEN=64************************************/
209+ for (int i = 0 ; i < NVPR; i++) {
210+ auto &vReg_Val0 = p->VU .elt <uint64_t >(i, 0 , true );
211+ auto &vReg_Val1 = p->VU .elt <uint64_t >(i, 1 , true );
212+ if (!on_demand || vReg_Val0 != ctx->vr [i]._64 [0 ]) {
213+ vReg_Val0 = ctx->vr [i]._64 [0 ];
214+ }
215+ if (!on_demand || vReg_Val1 != ctx->vr [i]._64 [1 ]){
216+ vReg_Val1 = ctx->vr [i]._64 [1 ];
217+ }
218+ }
219+ /* **********************************************************************************/
220+ if (!on_demand || vstate.vstart ->read () != ctx->vstart ) {
221+ vstate.vstart ->write_raw (ctx->vstart );
222+ }
223+ /* *********************NEED TO ADD WRITE*********************************************/
224+ if (!on_demand || vstate.vxsat ->read () != ctx->vxsat ) {
225+ // vstate.vxsat->write(ctx->vxsat);
226+ }
227+ if (!on_demand || vstate.vxrm ->read () != ctx->vxrm ) {
228+ vstate.vxrm ->write_raw (ctx->vxrm );
229+ }
230+ /* *****************************Don't need write vcsr**********************************/
231+ // if (!on_demand || state->csrmap[CSR_VCSR]->read() !=ctx->vcsr) {
232+ // csrmap[CSR_VCSR]->write(ctx->vcsr);
233+ // }
234+ if (!on_demand || vstate.vl ->read () != ctx->vl ) {
235+ vstate.vl ->write_raw (ctx->vl );
236+ }
237+ if (!on_demand || vstate.vtype ->read () != ctx->vtype ) {
238+ vstate.vtype ->write_raw (ctx->vtype );
239+ }
240+ if (!on_demand || vstate.vlenb != ctx->vlenb ) {
241+ vstate.vlenb = ctx->vlenb ;
242+ }
243+ #endif // CONFIG_DIFF_RVV
186244}
187245
188246void DifftestRef::memcpy_from_dut (reg_t dest, void * src, size_t n) {
0 commit comments