@@ -4850,6 +4850,91 @@ bool of_PUTC_STR_V(vthread_t thr, vvp_code_t cp)
4850
4850
return true ;
4851
4851
}
4852
4852
4853
+ bool of_QPOP_B (vthread_t thr, vvp_code_t cp)
4854
+ {
4855
+ unsigned bit = cp->bit_idx [0 ];
4856
+ unsigned wid = cp->bit_idx [1 ];
4857
+
4858
+ vvp_net_t *net = cp->net ;
4859
+ vvp_fun_signal_object*obj = dynamic_cast <vvp_fun_signal_object*> (net->fun );
4860
+ assert (obj);
4861
+
4862
+ vvp_queue*dqueue = obj->get_object ().peek <vvp_queue>();
4863
+ assert (dqueue);
4864
+
4865
+ size_t size = dqueue->get_size ();
4866
+ assert (size > 0 );
4867
+
4868
+ vvp_vector4_t value;
4869
+ dqueue->get_word (size-1 , value);
4870
+ dqueue->pop_back ();
4871
+
4872
+ assert (value.size () == wid);
4873
+ thr->bits4 .set_vec (bit, value);
4874
+ return true ;
4875
+ }
4876
+
4877
+ bool of_QPOP_F (vthread_t thr, vvp_code_t cp)
4878
+ {
4879
+ unsigned bit = cp->bit_idx [0 ];
4880
+ unsigned wid = cp->bit_idx [1 ];
4881
+
4882
+ vvp_net_t *net = cp->net ;
4883
+ vvp_fun_signal_object*obj = dynamic_cast <vvp_fun_signal_object*> (net->fun );
4884
+ assert (obj);
4885
+
4886
+ vvp_queue*dqueue = obj->get_object ().peek <vvp_queue>();
4887
+ assert (dqueue);
4888
+
4889
+ size_t size = dqueue->get_size ();
4890
+ assert (size > 0 );
4891
+
4892
+ vvp_vector4_t value;
4893
+ dqueue->get_word (0 , value);
4894
+ dqueue->pop_front ();
4895
+
4896
+ assert (value.size () == wid);
4897
+ thr->bits4 .set_vec (bit, value);
4898
+ return true ;
4899
+ }
4900
+
4901
+ bool of_QPOP_B_STR (vthread_t thr, vvp_code_t cp)
4902
+ {
4903
+ vvp_net_t *net = cp->net ;
4904
+ vvp_fun_signal_object*obj = dynamic_cast <vvp_fun_signal_object*> (net->fun );
4905
+ assert (obj);
4906
+
4907
+ vvp_queue*dqueue = obj->get_object ().peek <vvp_queue>();
4908
+ assert (dqueue);
4909
+
4910
+ size_t size = dqueue->get_size ();
4911
+ assert (size > 0 );
4912
+
4913
+ string value;
4914
+ dqueue->get_word (size-1 , value);
4915
+ dqueue->pop_back ();
4916
+
4917
+ thr->push_str (value);
4918
+ return true ;
4919
+ }
4920
+
4921
+ bool of_QPOP_F_STR (vthread_t thr, vvp_code_t cp)
4922
+ {
4923
+ vvp_net_t *net = cp->net ;
4924
+ vvp_fun_signal_object*obj = dynamic_cast <vvp_fun_signal_object*> (net->fun );
4925
+ assert (obj);
4926
+
4927
+ vvp_queue*dqueue = obj->get_object ().peek <vvp_queue>();
4928
+ assert (dqueue);
4929
+
4930
+ string value;
4931
+ dqueue->get_word (0 , value);
4932
+ dqueue->pop_front ();
4933
+
4934
+ thr->push_str (value);
4935
+ return true ;
4936
+ }
4937
+
4853
4938
/*
4854
4939
* These implement the %release/net and %release/reg instructions. The
4855
4940
* %release/net instruction applies to a net kind of functor by
0 commit comments