@@ -420,7 +420,7 @@ class AstNodeCond VL_NOT_FINAL : public AstNodeTriop {
420
420
const V3Number& ths) override ;
421
421
string emitVerilog () override { return " %k(%l %f? %r %k: %t)" ; }
422
422
string emitC () override { return " VL_COND_%nq%lq%rq%tq(%nw, %P, %li, %ri, %ti)" ; }
423
- string emitSMT () const override { return " (ite %l %r %t)" ; }
423
+ string emitSMT () const override { return " (ite (= #b1 %l) %r %t)" ; }
424
424
bool cleanOut () const override { return false ; } // clean if e1 & e2 clean
425
425
bool cleanLhs () const override { return true ; }
426
426
bool cleanRhs () const override { return false ; }
@@ -2583,7 +2583,7 @@ class AstEqWild final : public AstNodeBiop {
2583
2583
}
2584
2584
string emitVerilog () override { return " %k(%l %f==? %r)" ; }
2585
2585
string emitC () override { return " VL_EQ_%lq(%lW, %P, %li, %ri)" ; }
2586
- string emitSMT () const override { return " (= %l %r)" ; }
2586
+ string emitSMT () const override { return " (ite ( = %l %r) #b1 #b0 )" ; }
2587
2587
string emitSimpleOperator () override { return " ==" ; }
2588
2588
bool cleanOut () const override { return true ; }
2589
2589
bool cleanLhs () const override { return true ; }
@@ -2706,7 +2706,7 @@ class AstGt final : public AstNodeBiop {
2706
2706
}
2707
2707
string emitVerilog () override { return " %k(%l %f> %r)" ; }
2708
2708
string emitC () override { return " VL_GT_%lq(%lW, %P, %li, %ri)" ; }
2709
- string emitSMT () const override { return " (bvugt %l %r)" ; }
2709
+ string emitSMT () const override { return " (ite ( bvugt %l %r) #b1 #b0 )" ; }
2710
2710
string emitSimpleOperator () override { return " >" ; }
2711
2711
bool cleanOut () const override { return true ; }
2712
2712
bool cleanLhs () const override { return true ; }
@@ -2777,7 +2777,7 @@ class AstGtS final : public AstNodeBiop {
2777
2777
}
2778
2778
string emitVerilog () override { return " %k(%l %f> %r)" ; }
2779
2779
string emitC () override { return " VL_GTS_%nq%lq%rq(%lw, %P, %li, %ri)" ; }
2780
- string emitSMT () const override { return " (bvsgt %l %r)" ; }
2780
+ string emitSMT () const override { return " (ite ( bvsgt %l %r) #b1 #b0 )" ; }
2781
2781
string emitSimpleOperator () override { return " " ; }
2782
2782
bool cleanOut () const override { return true ; }
2783
2783
bool cleanLhs () const override { return true ; }
@@ -2801,7 +2801,7 @@ class AstGte final : public AstNodeBiop {
2801
2801
}
2802
2802
string emitVerilog () override { return " %k(%l %f>= %r)" ; }
2803
2803
string emitC () override { return " VL_GTE_%lq(%lW, %P, %li, %ri)" ; }
2804
- string emitSMT () const override { return " (bvuge %l %r)" ; }
2804
+ string emitSMT () const override { return " (ite ( bvuge %l %r) #b1 #b0 )" ; }
2805
2805
string emitSimpleOperator () override { return " >=" ; }
2806
2806
bool cleanOut () const override { return true ; }
2807
2807
bool cleanLhs () const override { return true ; }
@@ -2872,7 +2872,7 @@ class AstGteS final : public AstNodeBiop {
2872
2872
}
2873
2873
string emitVerilog () override { return " %k(%l %f>= %r)" ; }
2874
2874
string emitC () override { return " VL_GTES_%nq%lq%rq(%lw, %P, %li, %ri)" ; }
2875
- string emitSMT () const override { return " (bvsge %l %r)" ; }
2875
+ string emitSMT () const override { return " (ite ( bvsge %l %r) #b1 #b0 )" ; }
2876
2876
string emitSimpleOperator () override { return " " ; }
2877
2877
bool cleanOut () const override { return true ; }
2878
2878
bool cleanLhs () const override { return true ; }
@@ -2896,7 +2896,7 @@ class AstLogAnd final : public AstNodeBiop {
2896
2896
}
2897
2897
string emitVerilog () override { return " %k(%l %f&& %r)" ; }
2898
2898
string emitC () override { return " VL_LOGAND_%nq%lq%rq(%nw,%lw,%rw, %P, %li, %ri)" ; }
2899
- string emitSMT () const override { return " (and %l %r)" ; }
2899
+ string emitSMT () const override { return " (bvand %l %r)" ; }
2900
2900
string emitSimpleOperator () override { return " &&" ; }
2901
2901
bool cleanOut () const override { return true ; }
2902
2902
bool cleanLhs () const override { return true ; }
@@ -2920,7 +2920,7 @@ class AstLogIf final : public AstNodeBiop {
2920
2920
}
2921
2921
string emitVerilog () override { return " %k(%l %f-> %r)" ; }
2922
2922
string emitC () override { return " VL_LOGIF_%nq%lq%rq(%nw,%lw,%rw, %P, %li, %ri)" ; }
2923
- string emitSMT () const override { return " (=> %l %r )" ; }
2923
+ string emitSMT () const override { return " (ite ( => (= #b1 %l) (= #b1 %r)) #b1 #b0 )" ; }
2924
2924
string emitSimpleOperator () override { return " ->" ; }
2925
2925
bool cleanOut () const override { return true ; }
2926
2926
bool cleanLhs () const override { return true ; }
@@ -2944,7 +2944,7 @@ class AstLogOr final : public AstNodeBiop {
2944
2944
}
2945
2945
string emitVerilog () override { return " %k(%l %f|| %r)" ; }
2946
2946
string emitC () override { return " VL_LOGOR_%nq%lq%rq(%nw,%lw,%rw, %P, %li, %ri)" ; }
2947
- string emitSMT () const override { return " (or %l %r)" ; }
2947
+ string emitSMT () const override { return " (bvor %l %r)" ; }
2948
2948
string emitSimpleOperator () override { return " ||" ; }
2949
2949
bool cleanOut () const override { return true ; }
2950
2950
bool cleanLhs () const override { return true ; }
@@ -2968,7 +2968,7 @@ class AstLt final : public AstNodeBiop {
2968
2968
}
2969
2969
string emitVerilog () override { return " %k(%l %f< %r)" ; }
2970
2970
string emitC () override { return " VL_LT_%lq(%lW, %P, %li, %ri)" ; }
2971
- string emitSMT () const override { return " (bvult %l %r)" ; }
2971
+ string emitSMT () const override { return " (ite ( bvult %l %r) #b1 #b0 )" ; }
2972
2972
string emitSimpleOperator () override { return " <" ; }
2973
2973
bool cleanOut () const override { return true ; }
2974
2974
bool cleanLhs () const override { return true ; }
@@ -3039,7 +3039,7 @@ class AstLtS final : public AstNodeBiop {
3039
3039
}
3040
3040
string emitVerilog () override { return " %k(%l %f< %r)" ; }
3041
3041
string emitC () override { return " VL_LTS_%nq%lq%rq(%lw, %P, %li, %ri)" ; }
3042
- string emitSMT () const override { return " (bvslt %l %r)" ; }
3042
+ string emitSMT () const override { return " (ite ( bvslt %l %r) #b1 #b0 )" ; }
3043
3043
string emitSimpleOperator () override { return " " ; }
3044
3044
bool cleanOut () const override { return true ; }
3045
3045
bool cleanLhs () const override { return true ; }
@@ -3063,7 +3063,7 @@ class AstLte final : public AstNodeBiop {
3063
3063
}
3064
3064
string emitVerilog () override { return " %k(%l %f<= %r)" ; }
3065
3065
string emitC () override { return " VL_LTE_%lq(%lW, %P, %li, %ri)" ; }
3066
- string emitSMT () const override { return " (bvule %l %r)" ; }
3066
+ string emitSMT () const override { return " (ite ( bvule %l %r) #b1 #b0 )" ; }
3067
3067
string emitSimpleOperator () override { return " <=" ; }
3068
3068
bool cleanOut () const override { return true ; }
3069
3069
bool cleanLhs () const override { return true ; }
@@ -3134,7 +3134,7 @@ class AstLteS final : public AstNodeBiop {
3134
3134
}
3135
3135
string emitVerilog () override { return " %k(%l %f<= %r)" ; }
3136
3136
string emitC () override { return " VL_LTES_%nq%lq%rq(%lw, %P, %li, %ri)" ; }
3137
- string emitSMT () const override { return " (bvsle %l %r)" ; }
3137
+ string emitSMT () const override { return " (ite ( bvsle %l %r) #b1 #b0 )" ; }
3138
3138
string emitSimpleOperator () override { return " " ; }
3139
3139
bool cleanOut () const override { return true ; }
3140
3140
bool cleanLhs () const override { return true ; }
@@ -3637,7 +3637,7 @@ class AstEq final : public AstNodeBiCom {
3637
3637
}
3638
3638
string emitVerilog () override { return " %k(%l %f== %r)" ; }
3639
3639
string emitC () override { return " VL_EQ_%lq(%lW, %P, %li, %ri)" ; }
3640
- string emitSMT () const override { return " (= %l %r)" ; }
3640
+ string emitSMT () const override { return " (ite ( = %l %r) #b1 #b0 )" ; }
3641
3641
string emitSimpleOperator () override { return " ==" ; }
3642
3642
bool cleanOut () const override { return true ; }
3643
3643
bool cleanLhs () const override { return true ; }
@@ -3779,7 +3779,7 @@ class AstNeq final : public AstNodeBiCom {
3779
3779
string emitVerilog () override { return " %k(%l %f!= %r)" ; }
3780
3780
string emitC () override { return " VL_NEQ_%lq(%lW, %P, %li, %ri)" ; }
3781
3781
string emitSimpleOperator () override { return " !=" ; }
3782
- string emitSMT () const override { return " (not (= %l %r))" ; }
3782
+ string emitSMT () const override { return " (ite ( not (= %l %r)) #b1 #b0 )" ; }
3783
3783
bool cleanOut () const override { return true ; }
3784
3784
bool cleanLhs () const override { return true ; }
3785
3785
bool cleanRhs () const override { return true ; }
@@ -5150,7 +5150,7 @@ class AstLogNot final : public AstNodeUniop {
5150
5150
void numberOperate (V3Number& out, const V3Number& lhs) override { out.opLogNot (lhs); }
5151
5151
string emitVerilog () override { return " %f(! %l)" ; }
5152
5152
string emitC () override { return " VL_LOGNOT_%nq%lq(%nw,%lw, %P, %li)" ; }
5153
- string emitSMT () const override { return " (not %l )" ; }
5153
+ string emitSMT () const override { return " (ite (= %l #b1) #b0 #b1 )" ; }
5154
5154
string emitSimpleOperator () override { return " !" ; }
5155
5155
bool cleanOut () const override { return true ; }
5156
5156
bool cleanLhs () const override { return true ; }
0 commit comments