elderly assembler can handle.
--HG--
branch : default-branch
define pcc-cfile-impl
$(call cfile, $1)
- $(call dependson, $(OBJDIR)/$D/external.h)
+ $(call dependson, $(OBJDIR)/$D/pcc/external.h)
endef
pcc-cfile = $(eval $(pcc-cfile-impl))
define build-pcc-impl
+$(eval E := $(OBJDIR)/$D/pcc)
+
$(eval pcc-cflags = \
-Ilang/pcc \
- -I$(OBJDIR)/$D \
+ -I$E \
-Ilang/pcc/pcc/common \
-Ilang/pcc/pcc/mip \
-Ilang/pcc/pcc/cc/ccom \
$(call reset)
$(eval cflags += $(pcc-cflags))
-$(call pcc-cfile, $(OBJDIR)/$D/external.c)
+$(call pcc-cfile, $E/external.c)
$(call pcc-cfile, lang/pcc/pcc/arch/$(PCCARCH)/code.c)
$(call pcc-cfile, lang/pcc/pcc/arch/$(PCCARCH)/local.c)
$(call pcc-cfile, lang/pcc/pcc/arch/$(PCCARCH)/local2.c)
$(call pcc-cfile, lang/pcc/pcc/mip/regs.c)
$(call pcc-cfile, lang/pcc/pcc/cc/ccom/gcc_compat.c)
-$(call dependson, $(OBJDIR)/$D/cgram.h)
+$(call dependson, $E/cgram.h)
$(call pcc-cfile, lang/pcc/pcc/cc/ccom/pftn.c)
-$(call dependson, $(OBJDIR)/$D/cgram.h)
+$(call dependson, $E/cgram.h)
-$(call yacc, $(OBJDIR)/$D, lang/pcc/pcc/cc/ccom/cgram.y)
+$(call yacc, $E, lang/pcc/pcc/cc/ccom/cgram.y)
-$(call flex, $(OBJDIR)/$D, lang/pcc/pcc/cc/ccom/scan.l)
-$(call dependson, $(OBJDIR)/$D/cgram.h)
+$(call flex, $E, lang/pcc/pcc/cc/ccom/scan.l)
+$(call dependson, $E/cgram.h)
$(call cprogram, $(BINDIR)/$(PLATFORM)/pcc_ccom)
$(call installto, $(PLATDEP)/$(PLATFORM)/pcc_ccom)
$(call reset)
-$(call rawfile, $(OBJDIR)/$D/y.tab.h)
-$(call installto, $(OBJDIR)/$D/cgram.h)
-
-
-$(call reset)
-$(eval cflags += $(pcc-cflags))
+$(call rawfile, $E/y.tab.h)
+$(call dependson, $E/y.tab.c)
+$(call installto, $E/cgram.h)
$(call reset)
$(call cfile, lang/pcc/pcc/mip/mkext.c)
$(call cfile, lang/pcc/pcc/mip/common.c)
$(call cfile, lang/pcc/pcc/arch/$(PCCARCH)/table.c)
-$(call cprogram, $(OBJDIR)/$D/mkext)
+$(call cprogram, $E/mkext)
$(eval pcc_mkext := $o)
-$(OBJDIR)/$D/external.h: $(OBJDIR)/$D/external.c
-$(OBJDIR)/$D/external.c: $(pcc_mkext)
+$E/external.h: $E/external.c
+$E/external.c: $(pcc_mkext)
@echo MKEXT
@mkdir -p $$(dir $$@)
$(hide) (cd $$(dir $$@) && $(pcc_mkext))
setseg(int seg, char *name)
{
switch (seg) {
- case PROG: name = ".text"; break;
+ case PROG: name = ".sect .text"; break;
case DATA:
- case LDATA: name = ".data"; break;
+ case LDATA: name = ".sect .data"; break;
case UDATA: break;
case PICLDATA: name = ".section .data.rel.local,\"aw\",@progbits";break;
case PICDATA: name = ".section .data.rel.rw,\"aw\",@progbits"; break;
case PICRDATA: name = ".section .data.rel.ro,\"aw\",@progbits"; break;
case STRNG:
- case RDATA: name = ".section .rodata"; break;
+ case RDATA: name = ".sect .rom"; break;
case TLSDATA: name = ".section .tdata,\"awT\",@progbits"; break;
case TLSUDATA: name = ".section .tbss,\"awT\",@nobits"; break;
case CTORS: name = ".section\t.ctors,\"aw\",@progbits"; break;
printf("\t.type %s,%%function\n", n);
#endif
if (sp->sclass == EXTDEF)
- printf("\t.global %s\n", n);
+ printf("\t.extern %s\n", n);
+#if 0 // dg
if (sp->slevel == 0)
printf("%s:\n", n);
+#endif
else
printf(LABFMT ":\n", sp->soffset);
}
void
ejobcode(int flag)
{
- printf("\t.ident \"PCC: %s\"\n", VERSSTR);
}
/*
void
bjobcode(void)
{
+ printf(".sect .text; .sect .rom; .sect .data; .sect .bss\n");
}
/*
break;
case INT:
case UNSIGNED:
- printf("\t.word 0x%x", (int)glval(p));
+ printf("\t.data4 0x%x", (int)glval(p));
if ((q = p->n_sp) != NULL) {
if ((q->sclass == STATIC && q->slevel > 0)) {
printf("+" LABFMT, q->soffset);
#else
if (!features(FEATURE_BIGENDIAN))
#endif
- printf("\t.word\t0x%x\n\t.word\t0x%x\n",
+ printf("\t.data4\t0x%x\n\t.data4\t0x%x\n",
u.i[0], u.i[1]);
else
- printf("\t.word\t0x%x\n\t.word\t0x%x\n",
+ printf("\t.data4\t0x%x\n\t.data4\t0x%x\n",
u.i[1], u.i[0]);
break;
case FLOAT:
u.f = (float)((FLT *)p->n_dcon)->fp;
- printf("\t.word\t0x%x\n", u.i[0]);
+ printf("\t.data4\t0x%x\n", u.i[0]);
break;
default:
return 0;
printf("\tsub %s,%s,#%d\n", rnames[SP], rnames[SP], 16);
printf("\tmov %s,%s\n", rnames[IP], rnames[SP]);
- printf("\tstmfd %s!,{%s,%s,%s,%s}\n", rnames[SP], rnames[FP],
+ printf("\tstmfd %s<,{%s,%s,%s,%s}\n", rnames[SP], rnames[FP],
rnames[IP], rnames[LR], rnames[PC]);
printf("\tsub %s,%s,#4\n", rnames[FP], rnames[IP]);
rnames[SP], rnames[PC]);
printf("\tadd %s,%s,#%d\n", rnames[SP], rnames[SP], 16);
}
- printf("\t.size %s,.-%s\n", exname(ipp->ipp_name),
- exname(ipp->ipp_name));
}
int l = 32+strlen(el->name);
c = tmpalloc(l);
if (el->num)
- snprintf(c, l, "%s:\n\t.word %s+%d\n",
+ snprintf(c, l, "%s:\n\t.data4 %s+%d\n",
el->str, el->name, el->num);
else
- snprintf(c, l, "%s:\n\t.word %s\n", el->str, el->name);
+ snprintf(c, l, "%s:\n\t.data4 %s\n", el->str, el->name);
ip = anode(c);
DLIST_INSERT_BEFORE(ipbase, ip, qelem);
}
lab = prtnumber++;
if (nodcnt <= 1000 && notfirst == 0) {
if (getlval(l))
- printf(PRTLAB ":\n\t.word %s+%lld\n",
+ printf(PRTLAB ":\n\t.data4 %s+%lld\n",
lab, l->n_name, getlval(l));
else
- printf(PRTLAB ":\n\t.word %s\n",
+ printf(PRTLAB ":\n\t.data4 %s\n",
lab, l->n_name);
}
el = tmpalloc(sizeof(struct addrsymb));
NODE *arm_builtin_va_copy(const struct bitable *bt, NODE *a);
#undef NODE
-#define COM "\t@ "
+#define COM "\t! "
#define NARGREGS 4
SAREG, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
SANY, TWORD|TPOINT|TSHORT|TUSHORT|TCHAR|TUCHAR,
0, 0,
- " stmfd sp!,{AL}" COM "save function arg to stack\n", },
+ " stmfd sp<,{AL}" COM "save function arg to stack\n", },
{ FUNARG, FOREFF,
SBREG, TLONGLONG|TULONGLONG,
SANY, TLONGLONG|TULONGLONG,
0, 0,
- " stmfd sp!,{AL,UL}" COM "save function arg to stack (endianness problem here?)\n", },
+ " stmfd sp<,{AL,UL}" COM "save function arg to stack (endianness problem here?)\n", },
{ FUNARG, FOREFF,
SCREG, TFLOAT,
SANY, TFLOAT,
0, 0,
- " stmfd sp!,{AL}" COM "save function arg to stack\n", },
+ " stmfd sp<,{AL}" COM "save function arg to stack\n", },
{ FUNARG, FOREFF,
SCREG, TDOUBLE|TLDOUBLE,
SANY, TDOUBLE|TLDOUBLE,
0, 0,
- " stmfd sp!,{AL,UL}" COM "save function arg to stack (endianness problem here?)\n", },
+ " stmfd sp<,{AL,UL}" COM "save function arg to stack (endianness problem here?)\n", },
# define DF(x) FORREW,SANY,TANY,SANY,TANY,REWRITE,x,""