+void make_call(struct treenode *bnode)
+{
+ int j;
+ /* vars pushen */
+ for(j = bnode->paramges; j < bnode->paramges + bnode->vars; j++) {
+ printf("\tpushq %%%s\n", param_reg(j));
+ }
+ printf("\tcall %s\n", bnode->name);
+
+ /* vars poppen */
+ for(j = bnode->paramges + bnode->vars - 1; j >= bnode->paramges; j--) {
+ printf("\tpopq %%%s\n", param_reg(j));
+ }
+
+ /* params poppen */
+ for(j = bnode->soffset - 1; j >= 0; j--) {
+ printf("\tpopq %%%s\n", param_reg(j));
+ }
+}
+
+void prep_arg(struct treenode *bnode, int moveit)
+{
+ printf("\t//args-nr.: %%%s to %%%s (moveit: %i)\n", BN_REG, param_reg(bnode->soffset), moveit);
+ printf("\tpushq %%%s\n", param_reg(bnode->soffset));
+ if(moveit) { /* expr */
+ move(BN_REG, param_reg(bnode->soffset));
+ } else { /* just O_ID */
+ KIDREG2PARM(0);
+ move(KID_REG(0), param_reg(bnode->soffset));
+ }
+}
+