--- /dev/null
+/*
+ * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ *
+ * This product is part of the Amsterdam Compiler Kit.
+ *
+ * Permission to use, sell, duplicate or disclose this software must be
+ * obtained in writing. Requests for such permissions may be sent to
+ *
+ * Dr. Andrew S. Tanenbaum
+ * Wiskundig Seminarium
+ * Vrije Universiteit
+ * Postbox 7161
+ * 1007 MC Amsterdam
+ * The Netherlands
+ *
+ */
+
+/*
+ * machine dependent back end routines for the Intel 8086
+ */
+
+con_part(sz,w) register sz; word w; {
+
+ while (part_size % sz)
+ part_size++;
+ if (part_size == EM_WSIZE)
+ 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;
+}
+
+con_mult(sz) word sz; {
+ long l;
+
+ if (sz != 4)
+ fatal("bad icon/ucon size");
+ l = atol(str);
+ fprintf(codefile,"\t.word %d,%d\n",
+ (int)l&0xFFFF,(int)(l>>16)&0xFFFF);
+}
+
+con_float() {
+ register i;
+
+ i= argval ;
+ if (i!= 4 && i!= 8)
+ fatal("bad fcon size");
+ while ( i ) {
+ fprintf(codefile," .word 0,0\n") ;
+ i -=4 ;
+ }
+}
+
+/*
+
+string holstr(n) word n; {
+
+ sprintf(str,hol_off,n,holno);
+ return(mystrcpy(str));
+}
+*/
+
+prolog(nlocals) full nlocals; {
+
+ fprintf(codefile,"\tpush\tbp\n\tmov\tbp,sp\n");
+ switch (nlocals) {
+ case 4: printf("\tpush\tax\n");
+ case 2: printf("\tpush\tax\n");
+ case 0: break;
+ default:
+ printf("\tsub\tsp,%d\n",nlocals); break;
+ }
+
+}
+
+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) ;
+ printf(".define %s\n",argstr) ;
+ break ;
+ }
+ }
+ default :
+ while ( getarg(any_ptyp) != sp_cend ) ;
+ break ;
+ }
+}
+
+char *segname[] = {
+ ".text", /* SEGTXT */
+ ".data", /* SEGCON */
+ ".data", /* SEGROM */
+ ".bss" /* SEGBSS */
+};
--- /dev/null
+#define ex_ap(y) fprintf(codefile,".extern %s\n",y)
+#define in_ap(y) /* nothing */
+
+#define newilb(x) fprintf(codefile,"%s:\n",x)
+#define newdlb(x) fprintf(codefile,"%s:\n",x)
+#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y)
+#define newlbss(l,x) fprintf(codefile,"%s: .space\t%d\n",l,x);
+
+#define cst_fmt "%d"
+#define off_fmt "%d"
+#define ilb_fmt "I%03x%x"
+#define dlb_fmt "_%d"
+#define hol_fmt "hol%d"
+
+#define loc_off "%d(bp)"
+#define arg_off "4+%d(bp)"
+#define hol_off "%d+hol%d"
+
+#define con_cst(x) fprintf(codefile,".word\t%d\n",x)
+#define con_ilb(x) fprintf(codefile,".word\t%s\n",x)
+#define con_dlb(x) fprintf(codefile,".word\t%s\n",x)
+
+#define modhead ""
+
+#define id_first '_'
+#define BSS_INIT 0