diff options
Diffstat (limited to 'tnslc/compile/function.tnsl')
| -rw-r--r-- | tnslc/compile/function.tnsl | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tnslc/compile/function.tnsl b/tnslc/compile/function.tnsl index bf06f80..f0aac81 100644 --- a/tnslc/compile/function.tnsl +++ b/tnslc/compile/function.tnsl @@ -19,6 +19,8 @@ struct Function { /; _resolve_dlist (~Module parent, ~parse.Node dl) ~parse.Node tn = NULL ~parse.Node n + int reg = 1 + int stack_down = 0 /; loop (int i = 0; i < dl`.sub.count) [i++] n = dl`.sub.get(i) /; if (n`._type == parse.NTYPE_TYPE) @@ -31,6 +33,14 @@ struct Function { Var p p.init(tn, n) p._resolve_type(parent) + /; if (p.is_reg_passed() == true && reg < 7) + p.loc = reg + reg++ + ;; else + p.loc = 0 + p.loc = p.loc - stack_down + stack_down = stack_down - p.actual_size() + ;/ self.inputs.push(~p) ;/ ;/ @@ -96,6 +106,11 @@ struct Function { cb`.add_c(" push r15 ; scope init\n\n\0") # TODO: Add all params to the scope + ~Var in + /; loop (int i = 0; i < self.inputs.count) [i++] + in = self.inputs.get(i) + out.mk_set_var(in) + ;/ return out ;/ |