*** empty log message ***
authorkeie <none@none>
Mon, 7 Jan 1985 13:49:31 +0000 (13:49 +0000)
committerkeie <none@none>
Mon, 7 Jan 1985 13:49:31 +0000 (13:49 +0000)
mach/i86/cg/mach.c [new file with mode: 0644]
mach/i86/cg/mach.h [new file with mode: 0644]

diff --git a/mach/i86/cg/mach.c b/mach/i86/cg/mach.c
new file mode 100644 (file)
index 0000000..aa1b37b
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * (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 */
+};
diff --git a/mach/i86/cg/mach.h b/mach/i86/cg/mach.h
new file mode 100644 (file)
index 0000000..6fd5a83
--- /dev/null
@@ -0,0 +1,26 @@
+#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