diff --git a/vvp/schedule.cc b/vvp/schedule.cc index 1d4f497bd..c2546120d 100644 --- a/vvp/schedule.cc +++ b/vvp/schedule.cc @@ -118,7 +118,7 @@ void del_thr_event_s::run_run(void) struct assign_vector4_event_s : public event_s { /* The default constructor. */ - assign_vector4_event_s() { } + assign_vector4_event_s(const vvp_vector4_t&that) : val(that) { } /* A constructor that makes the val directly. */ assign_vector4_event_s(const vvp_vector4_t&that, unsigned adr, unsigned wid) : val(that,adr,wid) { } @@ -572,23 +572,10 @@ void schedule_assign_vector(vvp_net_ptr_t ptr, const vvp_vector4_t&bit, vvp_time64_t delay) { - struct assign_vector4_event_s*cur = new struct assign_vector4_event_s; + struct assign_vector4_event_s*cur = new struct assign_vector4_event_s(bit); cur->ptr = ptr; cur->base = base; cur->vwid = vwid; - cur->val = bit; - schedule_event_(cur, delay, SEQ_NBASSIGN); -} - -void schedule_assign_vector(vvp_net_ptr_t ptr, - const vvp_vector4_t&bit, - vvp_time64_t delay) -{ - struct assign_vector4_event_s*cur = new struct assign_vector4_event_s; - cur->ptr = ptr; - cur->val = bit; - cur->vwid = 0; - cur->base = 0; schedule_event_(cur, delay, SEQ_NBASSIGN); } @@ -619,11 +606,10 @@ void schedule_assign_array_word(vvp_array_t mem, schedule_event_(cur, delay, SEQ_NBASSIGN); } -void schedule_set_vector(vvp_net_ptr_t ptr, vvp_vector4_t bit) +void schedule_set_vector(vvp_net_ptr_t ptr, const vvp_vector4_t&bit) { - struct assign_vector4_event_s*cur = new struct assign_vector4_event_s; + struct assign_vector4_event_s*cur = new struct assign_vector4_event_s(bit); cur->ptr = ptr; - cur->val = bit; cur->base = 0; cur->vwid = 0; schedule_event_(cur, 0, SEQ_ACTIVE); @@ -647,9 +633,8 @@ void schedule_set_vector(vvp_net_ptr_t ptr, double bit) void schedule_init_vector(vvp_net_ptr_t ptr, vvp_vector4_t bit) { - struct assign_vector4_event_s*cur = new struct assign_vector4_event_s; + struct assign_vector4_event_s*cur = new struct assign_vector4_event_s(bit); cur->ptr = ptr; - cur->val = bit; cur->base = 0; cur->vwid = 0; cur->next = schedule_init_list; diff --git a/vvp/schedule.h b/vvp/schedule.h index d40813709..b0f7bea23 100644 --- a/vvp/schedule.h +++ b/vvp/schedule.h @@ -47,9 +47,6 @@ extern void schedule_assign_vector(vvp_net_ptr_t ptr, const vvp_vector4_t&val, vvp_time64_t delay); -extern void schedule_assign_vector(vvp_net_ptr_t ptr, - const vvp_vector4_t&val, - vvp_time64_t delay); extern void schedule_assign_plucked_vector(vvp_net_ptr_t ptr, vvp_time64_t delay, const vvp_vector4_t&val, @@ -66,7 +63,7 @@ extern void schedule_assign_array_word(vvp_array_t mem, * constant value (i.e. C4<...>) to the input of a functor. This * creates an event in the active queue. */ -extern void schedule_set_vector(vvp_net_ptr_t ptr, vvp_vector4_t val); +extern void schedule_set_vector(vvp_net_ptr_t ptr, const vvp_vector4_t&val); extern void schedule_set_vector(vvp_net_ptr_t ptr, vvp_vector8_t val); extern void schedule_set_vector(vvp_net_ptr_t ptr, double val); diff --git a/vvp/vthread.cc b/vvp/vthread.cc index 7f38809f0..f8a6d5b49 100644 --- a/vvp/vthread.cc +++ b/vvp/vthread.cc @@ -707,7 +707,7 @@ bool of_ASSIGN_V0(vthread_t thr, vvp_code_t cp) schedule_assign_plucked_vector(ptr, delay, thr->bits4, bit, wid); } else { vvp_vector4_t value = vthread_bits_to_vector(thr, bit, wid); - schedule_assign_vector(ptr, value, delay); + schedule_assign_plucked_vector(ptr, delay, value, 0, wid); } return true; @@ -732,7 +732,7 @@ bool of_ASSIGN_V0D(vthread_t thr, vvp_code_t cp) schedule_assign_plucked_vector(ptr, delay, thr->bits4, bit, wid); } else { vvp_vector4_t value = vthread_bits_to_vector(thr, bit, wid); - schedule_assign_vector(ptr, value, delay); + schedule_assign_plucked_vector(ptr, delay, value, 0, wid); } return true; diff --git a/vvp/vvp_net.cc b/vvp/vvp_net.cc index 01393d105..141ff1f33 100644 --- a/vvp/vvp_net.cc +++ b/vvp/vvp_net.cc @@ -2621,7 +2621,7 @@ void vvp_wide_fun_core::propagate_vec4(const vvp_vector4_t&bit, vvp_time64_t delay) { if (delay) - schedule_assign_vector(ptr_->out, bit, delay); + schedule_assign_plucked_vector(ptr_->out, delay, bit, 0, bit.size()); else vvp_send_vec4(ptr_->out, bit); }