@@ -4952,7 +4952,7 @@ template zeroCrossingTpl(Integer index1, Exp relation, Option<list<SimIterator>>
49524952 let &preExp = buffer ""
49534953 let &sub = buffer ""
49544954 let forHead = match iter
4955- case SOME(iter_) then (iter_ |> it as SIM_ITERATOR(__) =>
4955+ case SOME(iter_) then (iter_ |> it =>
49564956 forIterator(it, contextZeroCross, &preExp, &varDecls, &auxFunction, &sub)
49574957 ;separator="\n ";empty)
49584958 else ""
@@ -4963,7 +4963,7 @@ template zeroCrossingTpl(Integer index1, Exp relation, Option<list<SimIterator>>
49634963 else ""
49644964 let tmp_ = match iter case SOME(iter_) then "+tmp" else ""
49654965 let forTail = match iter
4966- case SOME(iter_) then (iter_ |> it as SIM_ITERATOR(__) => "}";separator="\n ";empty)
4966+ case SOME(iter_) then (iter_ |> it => "}";separator="\n ";empty)
49674967 else ""
49684968 match relation
49694969 case exp as RELATION(__) then
@@ -5124,7 +5124,7 @@ template relationTpl(Integer index1, Exp relation, Option<list<SimIterator>> ite
51245124let &preExp = buffer " "
51255125 let &sub = buffer " "
51265126 let forHead = match iter
5127- case SOME(iter_) then (iter_ |> it as SIM_ITERATOR(__) =>
5127+ case SOME(iter_) then (iter_ |> it =>
51285128 forIterator(it, contextZeroCross, &preExp, &varDecls, &auxFunction, &sub)
51295129 ;separator=" \n" ;empty)
51305130 else " "
@@ -5135,7 +5135,7 @@ let &preExp = buffer ""
51355135 else " "
51365136 let tmp_ = match iter case SOME(iter_) then " +tmp" else " "
51375137 let forTail = match iter
5138- case SOME(iter_) then (iter_ |> it as SIM_ITERATOR(__) => " } ";separator="\n";empty)
5138+ case SOME(iter_) then (iter_ |> it => " } ";separator="\n";empty)
51395139 else ""
51405140 match relation
51415141 case exp as RELATION(__) then
@@ -7438,33 +7438,53 @@ end genericBranch;
74387438
74397439template genericIterator(SimIterator iter, Context context, Text &preExp, Text &varDecls, Text &auxFunction, Text &sub)
74407440::= match iter
7441- case SIM_ITERATOR() then
7442- let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7443- <<
7444- int <%iter_%>_loc = tmp % <%size%>;
7445- int <%iter_%> = <%step%> * <%iter_%>_loc + <%start%>;
7446- tmp /= <%size%>;
7447- >>
7441+ case SIM_ITERATOR_RANGE() then
7442+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7443+ <<
7444+ int <%iter_%>_loc = tmp % <%size%>;
7445+ int <%iter_%> = <%step%> * <%iter_%>_loc + <%start%>;
7446+ tmp /= <%size%>;
7447+ >>
7448+ case SIM_ITERATOR_LIST() then
7449+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7450+ let arr = (lst |> elem => ' <% elem%> ' ; separator=", ")
7451+ <<
7452+ static const int <%iter_%>_lst[<%size%>] = {<%arr%>};
7453+ int <%iter_%>_loc = tmp % <%size%>;
7454+ int <%iter_%> = <%iter_%>_lst[<%iter_%>_loc];
7455+ tmp /= <%size%>;
7456+ >>
74487457end genericIterator;
74497458
74507459template forIterator(SimIterator iter, Context context, Text &preExp, Text &varDecls, Text &auxFunction, Text &sub)
74517460::= match iter
7452- case SIM_ITERATOR() then
7453- let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7454- let rel = if intGt(step, 0) then "<" else ">"
7455- let sign = if intGt(step, 0) then "+" else "-"
7456- <<
7457- for(int <%iter_%>=<%start%>; <%iter_%><%rel%><%start%><%sign%><%size%>; <%iter_%>+=<%step%>){
7458- >>
7461+ case SIM_ITERATOR_RANGE() then
7462+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7463+ let rel = if intGt(step, 0) then "<" else ">"
7464+ let sign = if intGt(step, 0) then "+" else "-"
7465+ <<
7466+ for(int <%iter_%>=<%start%>; <%iter_%><%rel%><%start%><%sign%><%size%>; <%iter_%>+=<%step%>){
7467+ >>
7468+ case SIM_ITERATOR_LIST() then
7469+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7470+ <<
7471+ for(int <%iter_%>_=0; <%iter_%>_<<%size%>; <%iter_%>_++){
7472+ <%iter_%> = <%iter_%>_lst[<%iter_%>_];
7473+ >>
74597474end forIterator;
74607475
74617476template forIteratorBody(SimIterator iter, Context context, Text &preExp, Text &varDecls, Text &auxFunction, Text &sub)
74627477::= match iter
7463- case SIM_ITERATOR() then
7464- let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7465- <<
7466- (<%iter_%>-<%start%>)/<%step%>+<%size%>*(
7467- >>
7478+ case SIM_ITERATOR_RANGE() then
7479+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7480+ <<
7481+ (<%iter_%>-<%start%>)/<%step%>+<%size%>*(
7482+ >>
7483+ case SIM_ITERATOR_LIST() then
7484+ let iter_ = contextCref(name, contextOther, &preExp, &varDecls, &auxFunction, &sub)
7485+ <<
7486+ <%iter_%>_+<%size%>*(
7487+ >>
74687488end forIteratorBody;
74697489
74707490template genericCallHeaders(list<SimGenericCall> genericCalls, Context context)
0 commit comments