19
19
#include < libasr/exception.h>
20
20
#include < libasr/asr_utils.h>
21
21
22
+ #define INCLUDE_RUNTIME_FUNC (fn ) \
23
+ if (m_rt_func_used_idx[fn] == -1 ) { \
24
+ m_rt_func_used_idx[fn] = no_of_types++; \
25
+ } \
26
+
22
27
// #define SHOW_ASR
23
28
24
29
#ifdef SHOW_ASR
@@ -1712,42 +1717,30 @@ class ASRToWASMVisitor : public ASR::BaseVisitor<ASRToWASMVisitor> {
1712
1717
switch (x.m_op ) {
1713
1718
case ASR::binopType::Add: {
1714
1719
if (a_kind == 4 ) {
1715
- if (m_rt_func_used_idx[add_c32] == -1 ) {
1716
- m_rt_func_used_idx[add_c32] = no_of_types++;
1717
- }
1720
+ INCLUDE_RUNTIME_FUNC (add_c32);
1718
1721
wia.emit_call (m_rt_func_used_idx[add_c32]);
1719
1722
} else {
1720
- if (m_rt_func_used_idx[add_c64] == -1 ) {
1721
- m_rt_func_used_idx[add_c64] = no_of_types++;
1722
- }
1723
+ INCLUDE_RUNTIME_FUNC (add_c64);
1723
1724
wia.emit_call (m_rt_func_used_idx[add_c64]);
1724
1725
}
1725
1726
break ;
1726
1727
};
1727
1728
case ASR::binopType::Sub: {
1728
1729
if (a_kind == 4 ) {
1729
- if (m_rt_func_used_idx[sub_c32] == -1 ) {
1730
- m_rt_func_used_idx[sub_c32] = no_of_types++;
1731
- }
1730
+ INCLUDE_RUNTIME_FUNC (sub_c32);
1732
1731
wia.emit_call (m_rt_func_used_idx[sub_c32]);
1733
1732
} else {
1734
- if (m_rt_func_used_idx[sub_c64] == -1 ) {
1735
- m_rt_func_used_idx[sub_c64] = no_of_types++;
1736
- }
1733
+ INCLUDE_RUNTIME_FUNC (sub_c64);
1737
1734
wia.emit_call (m_rt_func_used_idx[sub_c64]);
1738
1735
}
1739
1736
break ;
1740
1737
};
1741
1738
case ASR::binopType::Mul: {
1742
1739
if (a_kind == 4 ) {
1743
- if (m_rt_func_used_idx[mul_c32] == -1 ) {
1744
- m_rt_func_used_idx[mul_c32] = no_of_types++;
1745
- }
1740
+ INCLUDE_RUNTIME_FUNC (mul_c32);
1746
1741
wia.emit_call (m_rt_func_used_idx[mul_c32]);
1747
1742
} else {
1748
- if (m_rt_func_used_idx[mul_c64] == -1 ) {
1749
- m_rt_func_used_idx[mul_c64] = no_of_types++;
1750
- }
1743
+ INCLUDE_RUNTIME_FUNC (mul_c64);
1751
1744
wia.emit_call (m_rt_func_used_idx[mul_c64]);
1752
1745
}
1753
1746
break ;
@@ -2685,16 +2678,12 @@ class ASRToWASMVisitor : public ASR::BaseVisitor<ASRToWASMVisitor> {
2685
2678
int arg_kind = -1 , dest_kind = -1 ;
2686
2679
extract_kinds (x, arg_kind, dest_kind);
2687
2680
if (arg_kind == 4 ) {
2688
- if (m_rt_func_used_idx[abs_c32] == -1 ) {
2689
- m_rt_func_used_idx[abs_c32] = no_of_types++;
2690
- }
2681
+ INCLUDE_RUNTIME_FUNC (add_c32);
2691
2682
wia.emit_call (m_rt_func_used_idx[abs_c32]);
2692
2683
wia.emit_f32_const (0.0 );
2693
2684
wia.emit_f32_gt ();
2694
2685
} else if (arg_kind == 8 ) {
2695
- if (m_rt_func_used_idx[abs_c64] == -1 ) {
2696
- m_rt_func_used_idx[abs_c64] = no_of_types++;
2697
- }
2686
+ INCLUDE_RUNTIME_FUNC (abs_c64);
2698
2687
wia.emit_call (m_rt_func_used_idx[abs_c64]);
2699
2688
wia.emit_f64_const (0.0 );
2700
2689
wia.emit_f64_gt ();
@@ -2874,9 +2863,7 @@ class ASRToWASMVisitor : public ASR::BaseVisitor<ASRToWASMVisitor> {
2874
2863
int a_kind = ASRUtils::extract_kind_from_ttype_t (t);
2875
2864
2876
2865
if (ASRUtils::is_integer (*t) || ASRUtils::is_logical (*t)) {
2877
- if (m_rt_func_used_idx[print_i64] == -1 ) {
2878
- m_rt_func_used_idx[print_i64] = no_of_types++;
2879
- }
2866
+ INCLUDE_RUNTIME_FUNC (print_i64);
2880
2867
this ->visit_expr (*x.m_values [i]);
2881
2868
switch (a_kind) {
2882
2869
case 4 : {
@@ -2895,12 +2882,8 @@ class ASRToWASMVisitor : public ASR::BaseVisitor<ASRToWASMVisitor> {
2895
2882
}
2896
2883
}
2897
2884
} else if (ASRUtils::is_real (*t)) {
2898
- if (m_rt_func_used_idx[print_i64] == -1 ) {
2899
- m_rt_func_used_idx[print_i64] = no_of_types++;
2900
- }
2901
- if (m_rt_func_used_idx[print_f64] == -1 ) {
2902
- m_rt_func_used_idx[print_f64] = no_of_types++;
2903
- }
2885
+ INCLUDE_RUNTIME_FUNC (print_i64);
2886
+ INCLUDE_RUNTIME_FUNC (print_f64);
2904
2887
this ->visit_expr (*x.m_values [i]);
2905
2888
switch (a_kind) {
2906
2889
case 4 : {
@@ -2928,12 +2911,8 @@ class ASRToWASMVisitor : public ASR::BaseVisitor<ASRToWASMVisitor> {
2928
2911
wia.emit_call (m_import_func_idx_map[fd_write]);
2929
2912
wia.emit_drop ();
2930
2913
} else if (t->type == ASR::ttypeType::Complex) {
2931
- if (m_rt_func_used_idx[print_i64] == -1 ) {
2932
- m_rt_func_used_idx[print_i64] = no_of_types++;
2933
- }
2934
- if (m_rt_func_used_idx[print_f64] == -1 ) {
2935
- m_rt_func_used_idx[print_f64] = no_of_types++;
2936
- }
2914
+ INCLUDE_RUNTIME_FUNC (print_i64);
2915
+ INCLUDE_RUNTIME_FUNC (print_f64);
2937
2916
emit_call_fd_write (1 , " (" , 1 , 0 );
2938
2917
this ->visit_expr (*x.m_values [i]);
2939
2918
if (a_kind == 4 ) {
0 commit comments