/* $Id$ */ /* * (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 z8000 */ void con_part(register int sz, word w) { while (part_size % sz) part_size++; if (part_size == TEM_WSIZE) part_flush(); if (sz == 1) { w &= 0xFF; if (part_size == 0) w <<= 8; part_word |= w; } else { assert(sz == 2); part_word = w; } part_size += sz; } void con_mult(word sz) { if (sz != 4) fatal("bad icon/ucon size"); fprintf(codefile,"\t.data4 %s\n", str); } void con_float(void) { static int been_here; if (argval != 4 && argval != 8) fatal("bad fcon size"); fprintf(codefile,"\t.data4 "); if (argval == 8) fprintf(codefile,"F_DUM, "); fprintf(codefile,"F_DUM\n"); if ( !been_here++) { fprintf(stderr,"Warning : dummy float-constant(s)\n"); } } /* string holstr(n) word n; { sprintf(str,hol_off,n,holno); return(mystrcpy(str)); } */ void prolog(full nlocals) { fprintf(codefile,"\tpush\t*RR14, R13\n\tld\tR13, R15\n"); if (nlocals == 0) return; else fprintf(codefile,"\tsub\tR15, $%d\n",nlocals); } void mes(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) ; printf(".define %s\n",argstr) ; break ; } } default : while ( getarg(any_ptyp) != sp_cend ) ; break ; } } char *segname[] = { ".sect .text", /* SEGTXT */ ".sect .data", /* SEGCON */ ".sect .rom", /* SEGROM */ ".sect .bss" /* SEGBSS */ };