/* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * */ /* * machine dependent back end routines for the Intel 8080. */ #include /* atol */ void con_part(int sz, word w) { while (part_size % sz) part_size++; if (part_size == 2) part_flush(); if (sz == 1) { w &= 0xFF; if (part_size) w <<= 8; part_word |= w; } else { assert(sz == 2); part_word = w; } part_size += sz; } void con_mult(word sz) { if (sz != 4 && sz != 8) fatal("bad icon/ucon size"); fprintf(codefile,".data%d\t%s\n", (int)sz, str); } #define CODE_GENERATOR #define IEEEFLOAT #define FL_MSL_AT_LOW_ADDRESS 0 #define FL_MSW_AT_LOW_ADDRESS 0 #define FL_MSB_AT_LOW_ADDRESS 0 #include void prolog(full nlocals) { int16_t adjustment = -nlocals; if (adjustment == 0) fprintf(codefile, "\tcall .pro0\n"); else if (adjustment == -2) fprintf(codefile, "\tcall .pro2\n"); else if (adjustment == -4) fprintf(codefile, "\tcall .pro4\n"); else if ((adjustment >= -128) && (adjustment <= 127)) fprintf(codefile, "\tcall .probyte\n\t.data1 %d\n", adjustment); else fprintf(codefile, "\tcall .proword\n\t.data2 %d\n", adjustment); } void mes(type) word type; { int argt; switch ((int)type) { case ms_ext: for (;;) { switch (argt = getarg(ptyp(sp_cend) | ptyp(sp_pnam) | sym_ptyp)) { case sp_cend: return; default: strarg(argt); fprintf(codefile, ".define %s\n", argstr); break; } } default: while (getarg(any_ptyp) != sp_cend) ; break; } } char* segname[] = { ".sect .text", ".sect .data", ".sect .rom", ".sect .bss" };