output_bracketed(sym->name);
newline();
} else {
- output_with_tab ("load r1 ");
+ output_with_tab ("(ggm)load r1 ");
output_bracketed(sym->name);
newline ();
}
newline();
return HL_REG;
} else {
- if (uflag && !(sym->identity == ARRAY)) {// ||
- //(sym->identity == VARIABLE && sym->type == STRUCT))) {
- output_with_tab("ldsi\t");
- output_number(sym->offset - stkp);
- newline ();
- return DE_REG;
- } else {
- gen_immediate();
- output_number(sym->offset - stkp);
- output_line ("+sp");
- return HL_REG;
- }
+ gen_immediate();
+ output_number(sym->offset - stkp);
+ output_string("+sp");
+ newline();
+ return HL_REG;
}
}
* @param num
*/
void output_number(int num) {
- output_byte('#');
output_decimal(num);
}
output_line("ld l,a");
output_line("ld h,0");
} else {
- output_with_tab ("ld hl,");
+ output_with_tab ("*ld hl,");
output_bracketed(sym->name);
newline ();
}
newline();
return HL_REG;
} else {
- if (uflag && !(sym->identity == ARRAY)) {// ||
- //(sym->identity == VARIABLE && sym->type == STRUCT))) {
- output_with_tab("ldsi\t");
- output_number(sym->offset - stkp);
- newline ();
- return DE_REG;
- } else {
- gen_immediate();
- output_number(sym->offset - stkp);
- newline ();
- output_line ("add hl, sp");
- return HL_REG;
- }
+ gen_immediate();
+ output_number(sym->offset - stkp);
+/* output_string(" ; ");
+ output_number(sym->offset + 2);*/
+ newline ();
+ output_line ("add hl,sp");
+ return HL_REG;
}
}
output_line("ld l,(hl)");
output_line("ld h,0");
} else { // int
- if (uflag) {
- if (reg & HL_REG) {
- gen_swap();
- }
- output_line("lhlx");
- } else {
- output_line("ld a,(hl)");
- output_line("inc hl");
- output_line("ld h,(hl)");
- output_line("ld l,a");
- }
+ output_line("ld a,(hl)");
+ output_line("inc hl");
+ output_line("ld h,(hl)");
+ output_line("ld l,a");
}
}
void declare_entry_point(char *symbol_name) {
output_string(symbol_name);
output_label_terminator();
- //newline();
+ newline();
+}
+
+void gen_prologue(void)
+{
+#if 0
+ output_line("push ix");
+ output_line("ld ix,#0");
+ output_line("add ix,sp");
+ stkp = stkp - INTSIZE;
+#endif
+}
+
+void gen_epilogue(void)
+{
+#if 0
+ output_line("ld sp,ix");
+ output_line("pop ix");
+ stkp = 0;
+#endif
}
/**
}
}
}
+ gen_prologue();
statement(YES);
print_label(fexitlab);
output_label_terminator();
newline();
+ gen_epilogue();
gen_modify_stack(0);
gen_ret();
stkp = 0;
extern void gen_unsigned_less_or_equal(void);
extern void gen_usigned_greater_than(void);
extern void gen_unsigned_greater_or_equal(void);
+extern void gen_prologue(void);
+extern void gen_epilogue(void);
extern char *inclib(void);
extern void gnargs(int d);
extern int assemble(char *s);
}
}
}
+ /* FIXME: do one gen_modify_stack at the end and
+ some kind of align method here */
if (stclass != LSTATIC) {
stkp = gen_modify_stack(stkp - k);
add_local(sname, j, typ, stkp, AUTO);
current_symbol_table_idx = global_table_index;
symbol = &symbol_table[current_symbol_table_idx];
buffer_ptr = symbol->name;
+ /* FIXME: only copy so many bytes */
while (alphanumeric(*buffer_ptr++ = *sname++));
symbol->identity = identity;
symbol->type = type;
current_symbol_table_idx = local_table_index;
symbol = &symbol_table[current_symbol_table_idx];
buffer_ptr = symbol->name;
+ /* FIXME: only copy so many bytes */
while (alphanumeric(*buffer_ptr++ = *sname++));
symbol->identity = identity;
symbol->type = type;