Commit f3c606256bb7ca7da8cadb232674498d9fdc324c
1 parent
ec6f4ebc
Exists in
master
layout handler for multi-AST-node code gen
Showing
2 changed files
with
14 additions
and
1 deletions
Show diff stats
fz/paccs/coverage.pl
@@ -2,7 +2,10 @@ | @@ -2,7 +2,10 @@ | ||
2 | 2 | ||
3 | % == Code coverage for PaCCS ================================================== | 3 | % == Code coverage for PaCCS ================================================== |
4 | 4 | ||
5 | -% ++ cv_basic(AST, CODE, ST) - - - - - - - - - - - - - - - - - - - - - - - - - | 5 | +% -- cv_basic(AST, ST) -------------------------------------------------------- |
6 | +% | ||
7 | +% AST single-node matches are implemented with the code generated by each | ||
8 | +% DCG rule. | ||
6 | 9 | ||
7 | cv_basic(int_lin_ne(COEF, VARS, CONST), _ST) --> | 10 | cv_basic(int_lin_ne(COEF, VARS, CONST), _ST) --> |
8 | int_vector(COEF, CC, NN), | 11 | int_vector(COEF, CC, NN), |
@@ -11,6 +14,15 @@ cv_basic(int_lin_ne(COEF, VARS, CONST), _ST) --> | @@ -11,6 +14,15 @@ cv_basic(int_lin_ne(COEF, VARS, CONST), _ST) --> | ||
11 | { name(CC, CCN), name(YY, YYN), name(KK, KKN), name(NN, NNN) }, | 14 | { name(CC, CCN), name(YY, YYN), name(KK, KKN), name(NN, NNN) }, |
12 | "fd_poly_ne_k(", CCN, ", ", YYN, ", ", NNN, ", ", KKN, ");\n". | 15 | "fd_poly_ne_k(", CCN, ", ", YYN, ", ", NNN, ", ", KKN, ");\n". |
13 | 16 | ||
17 | +% -- cv_multi(ASTI, ASTO, ST) ------------------------------------------------- | ||
18 | +% | ||
19 | +% AST multiple-node matches. For now this does nothing. | ||
20 | + | ||
21 | +cv_multi(_, _, _ST) --> { !, fail }. | ||
22 | + | ||
23 | + | ||
24 | +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
25 | + | ||
14 | int_vector(val(CC,array(int,1,NN),_,_), CC, NN) --> []. | 26 | int_vector(val(CC,array(int,1,NN),_,_), CC, NN) --> []. |
15 | 27 | ||
16 | var_vector(lit(VS, array(int(_LB,_UB))), VA) --> % array of FD variables | 28 | var_vector(lit(VS, array(int(_LB,_UB))), VA) --> % array of FD variables |
fz/paccs/output.pl
@@ -95,6 +95,7 @@ cg_constrs(CS, ST) --> cg_coverage(CS, CR, ST), cg_constrs(CR, ST). | @@ -95,6 +95,7 @@ cg_constrs(CS, ST) --> cg_coverage(CS, CR, ST), cg_constrs(CR, ST). | ||
95 | % emit an instruction which partly covers CI, leaving CO untreated | 95 | % emit an instruction which partly covers CI, leaving CO untreated |
96 | % FIXME: still need to search for an optimal solution... | 96 | % FIXME: still need to search for an optimal solution... |
97 | 97 | ||
98 | +cg_coverage(CI, CO, ST) --> cv_multi(CI, CO, ST), { ! }. | ||
98 | cg_coverage([constraint(CE, _A)|CS], CS, ST) --> cv_basic(CE, ST). | 99 | cg_coverage([constraint(CE, _A)|CS], CS, ST) --> cv_basic(CE, ST). |
99 | 100 | ||
100 | 101 |