Pre 2.95-2
authormichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 1 Aug 2000 03:22:21 +0000 (03:22 +0000)
committermichaelh <michaelh@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 1 Aug 2000 03:22:21 +0000 (03:22 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@315 4a8a32a2-be11-0410-ad9d-d568d2c75423

41 files changed:
Makefile
as/z80/asdata.c
as/z80/asexpr.c
as/z80/aslex.c
as/z80/aslist.c
as/z80/asm.h
as/z80/asmain.c
as/z80/asout.c
as/z80/assubr.c
as/z80/assym.c
as/z80/z80adr.c
as/z80/z80mch.c
as/z80/z80pst.c
link/z80/aslink.h
link/z80/lkarea.c
link/z80/lkeval.c
link/z80/lkhead.c
link/z80/lklex.c
link/z80/lklibr.c
link/z80/lklist.c
link/z80/lkmain.c
link/z80/lkrloc.c
link/z80/lksym.c
src/Makefile.in
src/SDCC.lex
src/SDCC.y
src/SDCCast.c
src/SDCCerr.c
src/SDCCerr.h
src/SDCCglobl.h
src/SDCCglue.c
src/SDCCmain.c
src/SDCCmem.c
src/SDCCsymt.c
src/SDCCsymt.h
src/avr/main.c
src/mcs51/main.c
src/port.h
src/z80/gen.c
src/z80/main.c
support/scripts/mega.mak

index 81db02c1f59985c2c495b9afe2fcf1a41e29f493..095b3dfb30cdd7b62eea7722b0455981ab1330a0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,8 @@ sdcc: sdcc-cc sdcc-aslink sdcc-misc sdcc-device
 # Some interesting sub rules
 sdcc-bin: sdcc-cc sdcc-aslink sdcc-misc
 
+sdcc-base: sdcc-cc sdcc-aslink
+
 # Compiling and installing everything and runing test
 # ---------------------------------------------------
 install:
index 1d1851dd144f93d6e3ce20fe05ee75294e96deba..eaff461af4c190feae2d66d6eae861d60641a386 100644 (file)
@@ -178,7 +178,7 @@ struct      mne     *mnehash[NHASH];
  *     };
  */
 struct sym     sym[] = {
-       NULL,   NULL,   ".",    S_USER, S_END,  NULL,   0,      0
+    { NULL,    NULL,   ".",    S_USER, S_END,  NULL,   0, }
 };
 
 struct sym     *symp;          /*      pointer to a symbol structure
@@ -212,7 +212,7 @@ struct      sym *symhash[NHASH];    /*      array of pointers to NHASH
  *     };
  */
 struct area    area[] = {
-       NULL,   "_CODE",        0,      0,      0,      A_CON|A_REL
+    { NULL,    "_CODE",        0,      0,      0,      A_CON|A_REL }
 };
 
 struct area    *areap; /*      pointer to an area structure
index f610022ec7f998cbb5c9bc268fb94e99223c24e0..009e3e1ee263d61b6a65ad6406e148e6abaa0dfb 100644 (file)
@@ -84,7 +84,7 @@ expr(esp, n)
 register struct expr *esp;
 int n;
 {
-        register c, d, p;
+        register int c, d, p;
         struct area *ap;
         struct expr re;
 
@@ -268,7 +268,7 @@ VOID
 term(esp)
 register struct expr *esp;
 {
-        register c, n;
+        register int c, n;
         register char *jp;
         char id[NCPS];
         struct sym  *sp;
@@ -347,7 +347,7 @@ register struct expr *esp;
         if (ctype[c] & DIGIT) {
                 esp->e_mode = S_USER;
                 jp = ip;
-                while (ctype[*jp] & RAD10) {
+                 while (ctype[*jp] & RAD10) {
                         jp++;
                 }
                 if (*jp == '$') {
@@ -498,7 +498,7 @@ register struct expr *esp;
 
 int
 digit(c, r)
-register c, r;
+register int c, r;
 {
         if (r == 16) {
                 if (ctype[c] & RAD16) {
@@ -619,7 +619,7 @@ register struct expr *esp;
  
 int
 oprio(c)
-register c;
+register int c;
 {
         if (c == '*' || c == '/' || c == '%')
                 return (10);
index 3fadd787933a0511208f6ae7512a678db0c12c36..49a395f913f0397116bf2e1901212e22d1275231 100644 (file)
@@ -84,7 +84,7 @@
 
 VOID
 getid(id, c)
-register c;
+register int c;
 char *id;
 {
        register char *p;
@@ -150,7 +150,7 @@ char *id;
 
 VOID
 getst(id, c)
-register c;
+register int c;
 char *id;
 {
        register char *p;
@@ -193,7 +193,7 @@ char *id;
 char
 getnb()
 {
-       register c;
+       register int c;
 
        while ((c=get()) == ' ' || c == '\t')
                ;
@@ -226,7 +226,7 @@ getnb()
 char
 get()
 {
-       register c;
+       register int c;
 
        if ((c = *ip) != 0)
                ++ip;
@@ -302,7 +302,7 @@ unget(c)
 int
 getmap(d)
 {
-       register c, n, v;
+       register int c, n, v;
 
        if ((c=get()) == '\0')
                qerr();
@@ -403,7 +403,7 @@ getmap(d)
 int
 getline()
 {
-register i;
+register int i;
 
 loop:  if (incfil >= 0) {
                if (fgets(ib, sizeof ib, ifp[incfil]) == NULL) {
@@ -461,7 +461,7 @@ loop:       if (incfil >= 0) {
 int
 more()
 {
-       register c;
+       register int c;
 
        c = getnb();
        unget(c);
@@ -493,7 +493,7 @@ more()
 char
 endline()
 {
-       register c;
+       register int c;
 
        c = getnb();
        return( (c == '\0' || c == ';') ? 0 : c );
index 845f728dbd8ee34c5035543fe4c6bcaa6c6c6692..e0e29f3ad8f81f17c5fd65859b1e9593aa95800b 100644 (file)
@@ -78,7 +78,7 @@ list()
 {
        register char *wp;
        register int *wpt;
-       register nb;
+       register int nb;
 
        if (lfp == NULL || lmode == NLIST)
                return;
@@ -354,7 +354,7 @@ list1(wp, wpt, nb, f)
 register char *wp;
 register int *wpt, nb, f;
 {
-       register i;
+       register int i;
 
        /*
         * HEX output Option.
index 58db9fafdb4f9b78d3b74e5a29bd93c051d5a1c9..1ad722ec77bc6e1cd277fc457282d5a6ccc8c548 100644 (file)
@@ -512,7 +512,7 @@ extern      char *          strncpy();
 extern FILE *          afile();
 extern VOID            asexit();
 extern VOID            asmbl();
-extern VOID            main();
+extern int             main();
 extern VOID            newdot();
 extern VOID            phase();
 extern VOID            usage();
index 6e1aec7c7822316632c762cfdc27a52abdf13714..a74d7648856d6873d711d1df6b9c315279a881fc 100644 (file)
  *             REL, LST, and/or SYM files may be generated.
  */
 
-VOID
+int
 main(int argc, char **argv)
 {
        register char *p;
-       register c, i;
+       register int c, i;
        struct area *ap;
 
 #ifdef SDK
@@ -320,6 +320,8 @@ main(int argc, char **argv)
                lstsym(lfp);
        }
        asexit(aserr);
+       /* Never reached */
+       return 0;
 }
 
 /*)Function    VOID    asexit(i)
@@ -463,7 +465,7 @@ asmbl()
        register struct mne *mp;
        register struct sym *sp;
        register struct tsym *tp;
-       register c;
+       register int c;
        struct area  *ap;
        struct expr e1;
        char id[NCPS];
@@ -1021,7 +1023,7 @@ char *ft;
 int wf;
 {
        register char *p1, *p2, *p3;
-       register c;
+       register int c;
        FILE *fp;
 
        p1 = fn;
index eaf066fc3d7fe585d2962fe0f3daf340ffe1f534..e91ba04b6de7c4f8a2fe2aa2117982d8e8cb30ba 100644 (file)
@@ -312,7 +312,7 @@ outrb(esp, r)
 register struct expr *esp;
 int r;
 {
-       register n;
+       register int n;
 
        if (pass == 2) {
                if (esp->e_flag==0 && esp->e_base.e_ap==NULL) {
@@ -383,7 +383,7 @@ outrw(esp, r)
 register struct expr *esp;
 int r;
 {
-       register n;
+       register int n;
 
        if (pass == 2) {
                if (esp->e_flag==0 && esp->e_base.e_ap==NULL) {
@@ -456,7 +456,7 @@ outdp(carea, esp)
 register struct area *carea;
 register struct expr *esp;
 {
-       register n, r;
+       register int n, r;
 
        if (oflag && pass==2) {
                outchk(HUGE,HUGE);
@@ -670,7 +670,7 @@ outgsd()
 {
        register struct area *ap;
        register struct sym  *sp;
-       register i, j;
+       register int i, j;
        char *ptr;
        int c, narea, nglob, rn;
 
@@ -786,7 +786,7 @@ outarea(ap)
 register struct area *ap;
 {
        register char *ptr;
-       register c;
+       register int c;
 
        fprintf(ofp, "A ");
        ptr = &ap->a_id[0];
@@ -834,7 +834,7 @@ outsym(sp)
 register struct sym *sp;
 {
        register char *ptr;
-       register c;
+       register int c;
 
        fprintf(ofp, "S ");
        ptr = &sp->s_id[0];
@@ -879,7 +879,7 @@ register struct sym *sp;
 VOID
 out(p, n)
 register char *p;
-register n;
+register int n;
 {
        while (n--) {
                if (xflag == 0) {
@@ -919,7 +919,7 @@ register n;
 
 VOID
 out_lb(b,t)
-register b,t;
+register int b,t;
 {
        if (cp < &cb[NCODE]) {
                *cp++ = b;
@@ -952,7 +952,7 @@ register b,t;
 
 VOID
 out_lw(n,t)
-register n,t;
+register int n,t;
 {
        if (hilo) {
                out_lb(hibyte(n),t ? t|R_HIGH : 0);
@@ -986,7 +986,7 @@ register n,t;
 
 VOID
 out_rw(n)
-register n;
+register int n;
 {
        if (hilo) {
                *relp++ = hibyte(n);
@@ -1020,7 +1020,7 @@ register n;
 
 VOID
 out_tw(n)
-register n;
+register int n;
 {
        if (hilo) {
                *txtp++ = hibyte(n);
index 7302a4ff5ab436ae1f38b84df6b1cd37b8edb050..132f2387850f9860772b26c7d7f9e60e1d2f53e1 100644 (file)
@@ -59,7 +59,7 @@
 
 VOID
 err(c)
-register c;
+register int c;
 {
        register char *p;
 
index 8b8a6ae1bf87953c79b4c1c52abfa56af5f10881..cc7c08f71fae9df7fb9c880fdf3fd99281bec8e8 100644 (file)
@@ -80,7 +80,7 @@ syminit()
        struct mne **mpp;
        register struct sym  *sp;
        struct sym **spp;
-       register h;
+       register int h;
 
        mpp = &mnehash[0];
        while (mpp < &mnehash[NHASH])
@@ -176,7 +176,7 @@ mlookup(id)
 char *id;
 {
        register struct mne *mp;
-       register h;
+       register int h;
 
        h = hash(id);
        mp = mnehash[h];
@@ -221,7 +221,7 @@ lookup(id)
 char *id;
 {
        register struct sym *sp;
-       register h;
+       register int h;
 
        h = hash(id);
        sp = symhash[h];
@@ -268,7 +268,7 @@ VOID
 symglob()
 {
        register struct sym *sp;
-       register i;
+       register int i;
 
        for (i=0; i<NHASH; ++i) {
                sp = symhash[i];
@@ -305,7 +305,7 @@ VOID
 allglob()
 {
        register struct sym *sp;
-       register i;
+       register int i;
 
        for (i=0; i<NHASH; ++i) {
                sp = symhash[i];
@@ -344,7 +344,7 @@ int
 symeq(p1, p2)
 register char *p1, *p2;
 {
-       register n;
+       register int n;
 
        n = NCPS;
        do {
@@ -387,7 +387,7 @@ int
 hash(p)
 register char *p;
 {
-       register h, n;
+       register int h, n;
 
        h = 0;
        n = NCPS;
index 038adb8fd175221dcae10d6b85ca89961235eb29..f0d428ec931aeb4318662e398fba807ed0b6d788 100644 (file)
@@ -37,7 +37,7 @@ int
 addr(esp)
 register struct expr *esp;
 {
-       register c, mode, indx;
+       register int c, mode, indx;
 
        if ((c = getnb()) == '#') {
                expr(esp, 0);
@@ -196,45 +196,45 @@ char    c, *str;
  */
 
 struct adsym   R8[] = {
-       "b",    B|0400,
-       "c",    C|0400,
-       "d",    D|0400,
-       "e",    E|0400,
-       "h",    H|0400,
-       "l",    L|0400,
-       "a",    A|0400,
-       "",     0000
+    { "b",     B|0400 },
+    { "c",     C|0400 },
+    { "d",     D|0400 },
+    { "e",     E|0400 },
+    { "h",     H|0400 },
+    { "l",     L|0400 },
+    { "a",     A|0400 },
+    { "",      000 }
 };
 
 struct adsym   R8X[] = {
-       "i",    I|0400,
-       "r",    R|0400,
-       "",     0000
+    { "i",     I|0400 },
+    { "r",     R|0400 },
+    { "",      000 }
 };
 
 struct adsym   R16[] = {
-       "bc",   BC|0400,
-       "de",   DE|0400,
-       "hl",   HL|0400,
-       "sp",   SP|0400,
+    { "bc",    BC|0400 },
+    { "de",    DE|0400 },
+    { "hl",    HL|0400 },
+    { "sp",    SP|0400 },
 #ifndef GAMEBOY
-       "ix",   IX|0400,
-       "iy",   IY|0400,
+    { "ix",    IX|0400 },
+    { "iy",    IY|0400 },
 #else /* GAMEBOY */
-       "hl-",  HLD|0400,
-       "hl+",  HLI|0400,
-       "hld",  HLD|0400,
-       "hli",  HLI|0400,
+    { "hl-",   HLD|0400 },
+    { "hl+",   HLI|0400 },
+    { "hld",   HLD|0400 },
+    { "hli",   HLI|0400 },
 #endif /* GAMEBOY */
-       "",     0000
+    { "",      000 }
 };
 
 struct adsym   R16X[] = {
-       "af",   AF|0400,
+    { "af",    AF|0400 },
 #ifndef GAMEBOY
-       "af'",  AF|0400,
+    { "af'",   AF|0400 },
 #endif /* GAMEBOY */
-       "",     0000
+    { "",      000 }
 };
 
 /*
@@ -242,15 +242,15 @@ struct    adsym   R16X[] = {
  */
 
 struct adsym   CND[] = {
-       "NZ",   NZ|0400,
-       "Z",    Z |0400,
-       "NC",   NC|0400,
-       "C",    CS|0400,
+    { "NZ",    NZ|0400 },
+    { "Z",     Z |0400 },
+    { "NC",    NC|0400 },
+    { "C",     CS|0400 },
 #ifndef GAMEBOY
-       "PO",   PO|0400,
-       "PE",   PE|0400,
-       "P",    P |0400,
-       "M",    M |0400,
+    { "PO",    PO|0400 },
+    { "PE",    PE|0400 },
+    { "P",     P |0400 },
+    { "M",     M |0400 },
 #endif /* GAMEBOY */
-       "",     0000
+    { "",      000 }
 };
index 785087487c0b21cfa275db623febbf065a9a28d3..6758c0057a1d34e7ce9656493c5bcac3de954b0c 100644 (file)
@@ -30,7 +30,7 @@ VOID
 machine(mp)
 struct mne *mp;
 {
-       register op, t1, t2;
+       register int op, t1, t2;
        struct expr e1, e2;
        int rf, v1, v2;
 
index 55a68dc3acdf2022db22396c9977e42cdffd0e11..7e6dc80782c2ecfd9df8399b16b63246843ae4d2 100644 (file)
@@ -24,156 +24,156 @@ struct    mne     mne[] = {
 
        /* system */
 
-       NULL,   "CON",          S_ATYP,         0,      A_CON,
-       NULL,   "OVR",          S_ATYP,         0,      A_OVR,
-       NULL,   "REL",          S_ATYP,         0,      A_REL,
-       NULL,   "ABS",          S_ATYP,         0,      A_ABS|A_OVR,
-       NULL,   "NOPAG",        S_ATYP,         0,      A_NOPAG,
-       NULL,   "PAG",          S_ATYP,         0,      A_PAG,
-
-       NULL,   ".byte",        S_BYTE,         0,      0,
-       NULL,   ".db",          S_BYTE,         0,      0,
-       NULL,   ".word",        S_WORD,         0,      0,
-       NULL,   ".dw",          S_WORD,         0,      0,
-       NULL,   ".df",          S_FLOAT,        0,      0,
-       NULL,   ".ascii",       S_ASCII,        0,      0,
-       NULL,   ".asciz",       S_ASCIZ,        0,      0,
-       NULL,   ".blkb",        S_BLK,          0,      1,
-       NULL,   ".ds",          S_BLK,          0,      1,
-       NULL,   ".blkw",        S_BLK,          0,      2,
-       NULL,   ".page",        S_PAGE,         0,      0,
-       NULL,   ".title",       S_TITLE,        0,      0,
-       NULL,   ".sbttl",       S_SBTL,         0,      0,
-       NULL,   ".globl",       S_GLOBL,        0,      0,
-       NULL,   ".area",        S_DAREA,        0,      0,
-       NULL,   ".even",        S_EVEN,         0,      0,
-       NULL,   ".odd",         S_ODD,          0,      0,
-       NULL,   ".if",          S_IF,           0,      0,
-       NULL,   ".else",        S_ELSE,         0,      0,
-       NULL,   ".endif",       S_ENDIF,        0,      0,
-       NULL,   ".include",     S_INCL,         0,      0,
-       NULL,   ".radix",       S_RADIX,        0,      0,
-       NULL,   ".org",         S_ORG,          0,      0,
-       NULL,   ".module",      S_MODUL,        0,      0,
-       NULL,   ".ascis",       S_ASCIS,        0,      0,
+    { NULL,    "CON",          S_ATYP,         0,      A_CON },
+    { NULL,    "OVR",          S_ATYP,         0,      A_OVR },
+    { NULL,    "REL",          S_ATYP,         0,      A_REL },
+    { NULL,    "ABS",          S_ATYP,         0,      A_ABS|A_OVR },
+    { NULL,    "NOPAG",        S_ATYP,         0,      A_NOPAG },
+    { NULL,    "PAG",          S_ATYP,         0,      A_PAG },
+
+    { NULL,    ".byte",        S_BYTE,         0,      0 },
+    { NULL,    ".db",          S_BYTE,         0,      0 },
+    { NULL,    ".word",        S_WORD,         0,      0 },
+    { NULL,    ".dw",          S_WORD,         0,      0 },
+    { NULL,    ".df",          S_FLOAT,        0,      0 },
+    { NULL,    ".ascii",       S_ASCII,        0,      0 },
+    { NULL,    ".asciz",       S_ASCIZ,        0,      0 },
+    { NULL,    ".blkb",        S_BLK,          0,      1 },
+    { NULL,    ".ds",          S_BLK,          0,      1 },
+    { NULL,    ".blkw",        S_BLK,          0,      2 },
+    { NULL,    ".page",        S_PAGE,         0,      0 },
+    { NULL,    ".title",       S_TITLE,        0,      0 },
+    { NULL,    ".sbttl",       S_SBTL,         0,      0 },
+    { NULL,    ".globl",       S_GLOBL,        0,      0 },
+    { NULL,    ".area",        S_DAREA,        0,      0 },
+    { NULL,    ".even",        S_EVEN,         0,      0 },
+    { NULL,    ".odd",         S_ODD,          0,      0 },
+    { NULL,    ".if",          S_IF,           0,      0 },
+    { NULL,    ".else",        S_ELSE,         0,      0 },
+    { NULL,    ".endif",       S_ENDIF,        0,      0 },
+    { NULL,    ".include",     S_INCL,         0,      0 },
+    { NULL,    ".radix",       S_RADIX,        0,      0 },
+    { NULL,    ".org",         S_ORG,          0,      0 },
+    { NULL,    ".module",      S_MODUL,        0,      0 },
+    { NULL,    ".ascis",       S_ASCIS,        0,      0 },
 
        /* z80 / hd64180 */
 
-       NULL,   "ld",           S_LD,           0,      0x40,
+    { NULL,    "ld",           S_LD,           0,      0x40 },
 
-       NULL,   "call",         S_CALL,         0,      0xC4,
-       NULL,   "jp",           S_JP,           0,      0xC2,
-       NULL,   "jr",           S_JR,           0,      0x18,
+    { NULL,    "call",         S_CALL,         0,      0xC4 },
+    { NULL,    "jp",           S_JP,           0,      0xC2 },
+    { NULL,    "jr",           S_JR,           0,      0x18 },
 #ifndef GAMEBOY
-       NULL,   "djnz",         S_DJNZ,         0,      0x10,
+    { NULL,    "djnz",         S_DJNZ,         0,      0x10 },
 #endif /* GAMEBOY */
-       NULL,   "ret",          S_RET,          0,      0xC0,
+    { NULL,    "ret",          S_RET,          0,      0xC0 },
 
-       NULL,   "bit",          S_BIT,          0,      0x40,
-       NULL,   "res",          S_BIT,          0,      0x80,
-       NULL,   "set",          S_BIT,          0,      0xC0,
+    { NULL,    "bit",          S_BIT,          0,      0x40 },
+    { NULL,    "res",          S_BIT,          0,      0x80 },
+    { NULL,    "set",          S_BIT,          0,      0xC0 },
 
-       NULL,   "inc",          S_INC,          0,      0x04,
-       NULL,   "dec",          S_DEC,          0,      0x05,
+    { NULL,    "inc",          S_INC,          0,      0x04 },
+    { NULL,    "dec",          S_DEC,          0,      0x05 },
 
-       NULL,   "add",          S_ADD,          0,      0x80,
-       NULL,   "adc",          S_ADC,          0,      0x88,
-       NULL,   "sub",          S_SUB,          0,      0x90,
-       NULL,   "sbc",          S_SBC,          0,      0x98,
+    { NULL,    "add",          S_ADD,          0,      0x80 },
+    { NULL,    "adc",          S_ADC,          0,      0x88 },
+    { NULL,    "sub",          S_SUB,          0,      0x90 },
+    { NULL,    "sbc",          S_SBC,          0,      0x98 },
 
-       NULL,   "and",          S_AND,          0,      0xA0,
-       NULL,   "cp",           S_AND,          0,      0xB8,
-       NULL,   "or",           S_AND,          0,      0xB0,
-       NULL,   "xor",          S_AND,          0,      0xA8,
+    { NULL,    "and",          S_AND,          0,      0xA0 },
+    { NULL,    "cp",           S_AND,          0,      0xB8 },
+    { NULL,    "or",           S_AND,          0,      0xB0 },
+    { NULL,    "xor",          S_AND,          0,      0xA8 },
 
 #ifndef GAMEBOY
-       NULL,   "ex",           S_EX,           0,      0xE3,
+    { NULL,    "ex",           S_EX,           0,      0xE3 },
 #endif /* GAMEBOY */
 
-       NULL,   "push",         S_PUSH,         0,      0xC5,
-       NULL,   "pop",          S_PUSH,         0,      0xC1,
+    { NULL,    "push",         S_PUSH,         0,      0xC5 },
+    { NULL,    "pop",          S_PUSH,         0,      0xC1 },
 
 #ifndef GAMEBOY
-       NULL,   "in",           S_IN,           0,      0xDB,
-       NULL,   "out",          S_OUT,          0,      0xD3,
+    { NULL,    "in",           S_IN,           0,      0xDB },
+    { NULL,    "out",          S_OUT,          0,      0xD3 },
 #endif /* GAMEBOY */
 
-       NULL,   "rl",           S_RL,           0,      0x10,
-       NULL,   "rlc",          S_RL,           0,      0x00,
-       NULL,   "rr",           S_RL,           0,      0x18,
-       NULL,   "rrc",          S_RL,           0,      0x08,
-       NULL,   "sla",          S_RL,           0,      0x20,
-       NULL,   "sra",          S_RL,           0,      0x28,
-       NULL,   "srl",          S_RL,           0,      0x38,
+    { NULL,    "rl",           S_RL,           0,      0x10 },
+    { NULL,    "rlc",          S_RL,           0,      0x00 },
+    { NULL,    "rr",           S_RL,           0,      0x18 },
+    { NULL,    "rrc",          S_RL,           0,      0x08 },
+    { NULL,    "sla",          S_RL,           0,      0x20 },
+    { NULL,    "sra",          S_RL,           0,      0x28 },
+    { NULL,    "srl",          S_RL,           0,      0x38 },
 
-       NULL,   "rst",          S_RST,          0,      0xC7,
+    { NULL,    "rst",          S_RST,          0,      0xC7 },
 
 #ifndef GAMEBOY
-       NULL,   "im",           S_IM,           0,      0xED,
+    { NULL,    "im",           S_IM,           0,      0xED },
 #endif /* GAMEBOY */
 
-       NULL,   "ccf",          S_INH1,         0,      0x3F,
-       NULL,   "cpl",          S_INH1,         0,      0x2F,
-       NULL,   "daa",          S_INH1,         0,      0x27,
-       NULL,   "di",           S_INH1,         0,      0xF3,
-       NULL,   "ei",           S_INH1,         0,      0xFB,
+    { NULL,    "ccf",          S_INH1,         0,      0x3F },
+    { NULL,    "cpl",          S_INH1,         0,      0x2F },
+    { NULL,    "daa",          S_INH1,         0,      0x27 },
+    { NULL,    "di",           S_INH1,         0,      0xF3 },
+    { NULL,    "ei",           S_INH1,         0,      0xFB },
 #ifndef GAMEBOY
-       NULL,   "exx",          S_INH1,         0,      0xD9,
+    { NULL,    "exx",          S_INH1,         0,      0xD9 },
 #endif /* GAMEBOY */
-       NULL,   "nop",          S_INH1,         0,      0x00,
-       NULL,   "halt",         S_INH1,         0,      0x76,
-       NULL,   "rla",          S_INH1,         0,      0x17,
-       NULL,   "rlca",         S_INH1,         0,      0x07,
-       NULL,   "rra",          S_INH1,         0,      0x1F,
-       NULL,   "rrca",         S_INH1,         0,      0x0F,
-       NULL,   "scf",          S_INH1,         0,      0x37,
+    { NULL,    "nop",          S_INH1,         0,      0x00 },
+    { NULL,    "halt",         S_INH1,         0,      0x76 },
+    { NULL,    "rla",          S_INH1,         0,      0x17 },
+    { NULL,    "rlca",         S_INH1,         0,      0x07 },
+    { NULL,    "rra",          S_INH1,         0,      0x1F },
+    { NULL,    "rrca",         S_INH1,         0,      0x0F },
+    { NULL,    "scf",          S_INH1,         0,      0x37 },
 
 #ifndef GAMEBOY
-       NULL,   "cpd",          S_INH2,         0,      0xA9,
-       NULL,   "cpdr",         S_INH2,         0,      0xB9,
-       NULL,   "cpi",          S_INH2,         0,      0xA1,
-       NULL,   "cpir",         S_INH2,         0,      0xB1,
-       NULL,   "ind",          S_INH2,         0,      0xAA,
-       NULL,   "indr",         S_INH2,         0,      0xBA,
-       NULL,   "ini",          S_INH2,         0,      0xA2,
-       NULL,   "inir",         S_INH2,         0,      0xB2,
-       NULL,   "ldd",          S_INH2,         0,      0xA8,
-       NULL,   "lddr",         S_INH2,         0,      0xB8,
-       NULL,   "ldi",          S_INH2,         0,      0xA0,
-       NULL,   "ldir",         S_INH2,         0,      0xB0,
-       NULL,   "neg",          S_INH2,         0,      0x44,
-       NULL,   "otdr",         S_INH2,         0,      0xBB,
-       NULL,   "otir",         S_INH2,         0,      0xB3,
-       NULL,   "outd",         S_INH2,         0,      0xAB,
-       NULL,   "outi",         S_INH2,         0,      0xA3,
-       NULL,   "reti",         S_INH2,         0,      0x4D,
-       NULL,   "retn",         S_INH2,         0,      0x45,
-       NULL,   "rld",          S_INH2,         0,      0x6F,
-       NULL,   "rrd",          S_INH2,         0,      0x67,
+    { NULL,    "cpd",          S_INH2,         0,      0xA9 },
+    { NULL,    "cpdr",         S_INH2,         0,      0xB9 },
+    { NULL,    "cpi",          S_INH2,         0,      0xA1 },
+    { NULL,    "cpir",         S_INH2,         0,      0xB1 },
+    { NULL,    "ind",          S_INH2,         0,      0xAA },
+    { NULL,    "indr",         S_INH2,         0,      0xBA },
+    { NULL,    "ini",          S_INH2,         0,      0xA2 },
+    { NULL,    "inir",         S_INH2,         0,      0xB2 },
+    { NULL,    "ldd",          S_INH2,         0,      0xA8 },
+    { NULL,    "lddr",         S_INH2,         0,      0xB8 },
+    { NULL,    "ldi",          S_INH2,         0,      0xA0 },
+    { NULL,    "ldir",         S_INH2,         0,      0xB0 },
+    { NULL,    "neg",          S_INH2,         0,      0x44 },
+    { NULL,    "otdr",         S_INH2,         0,      0xBB },
+    { NULL,    "otir",         S_INH2,         0,      0xB3 },
+    { NULL,    "outd",         S_INH2,         0,      0xAB },
+    { NULL,    "outi",         S_INH2,         0,      0xA3 },
+    { NULL,    "reti",         S_INH2,         0,      0x4D },
+    { NULL,    "retn",         S_INH2,         0,      0x45 },
+    { NULL,    "rld",          S_INH2,         0,      0x6F },
+    { NULL,    "rrd",          S_INH2,         0,      0x67 },
 
        /* 64180 */
 
-       NULL,   ".hd64",        X_HD64,         0,      0,
+    { NULL,    ".hd64",        X_HD64,         0,      0 },
 
-       NULL,   "otdm",         X_INH2,         0,      0x8B,
-       NULL,   "otdmr",        X_INH2,         0,      0x9B,
-       NULL,   "otim",         X_INH2,         0,      0x83,
-       NULL,   "otimr",        X_INH2,         0,      0x93,
-       NULL,   "slp",          X_INH2,         0,      0x76,
+    { NULL,    "otdm",         X_INH2,         0,      0x8B },
+    { NULL,    "otdmr",        X_INH2,         0,      0x9B },
+    { NULL,    "otim",         X_INH2,         0,      0x83 },
+    { NULL,    "otimr",        X_INH2,         0,      0x93 },
+    { NULL,    "slp",          X_INH2,         0,      0x76 },
 
-       NULL,   "in0",          X_IN,           0,      0x00,
-       NULL,   "out0",         X_OUT,          0,      0x01,
+    { NULL,    "in0",          X_IN,           0,      0x00 },
+    { NULL,    "out0",         X_OUT,          0,      0x01 },
 
-       NULL,   "mlt",          X_MLT,          0,      0x4C,
+    { NULL,    "mlt",          X_MLT,          0,      0x4C },
 
-       NULL,   "tst",          X_TST,          0,      0x04,
-       NULL,   "tstio",        X_TSTIO,        S_END,  0x74
+    { NULL,    "tst",          X_TST,          0,      0x04 },
+    { NULL,    "tstio",        X_TSTIO,        S_END,  0x7 }
 #else /* GAMEBOY */
-       NULL,   "stop",         S_STOP,         0,      0x10,
-       NULL,   "swap",         S_RL,           0,      0x30,
-       NULL,   "reti",         S_INH1,         0,      0xD9,
-       NULL,   "ldh",          S_LDH,          0,      0xE0,
-       NULL,   "lda",          S_LDA,          0,      0xE8,
-       NULL,   "ldhl",         S_LDHL,         S_END,  0xF8
+    { NULL,    "stop",         S_STOP,         0,      0x10 },
+    { NULL,    "swap",         S_RL,           0,      0x30 },
+    { NULL,    "reti",         S_INH1,         0,      0xD9 },
+    { NULL,    "ldh",          S_LDH,          0,      0xE0 },
+    { NULL,    "lda",          S_LDA,          0,      0xE8 },
+    { NULL,    "ldhl",         S_LDHL,         S_END,  0xF }
 #endif /* GAMEBOY */
 };
index 04ddecbedd311cc3c56eff04036cf0e4fa5c20e5..d04029357dbbab318183358dad9e6678d48a6fe8 100644 (file)
@@ -618,7 +618,7 @@ extern      VOID            bassav();
 extern VOID            gblsav();
 extern VOID            link();
 extern VOID            lkexit();
-extern VOID            main();
+extern int             main();
 extern VOID            map();
 #ifdef SDK
 extern VOID            sym();
index 797b0b416369bdc8af55d6cfc04600ecfec74d19..add571a05a80371b77a0631a919653dc32dd89bf 100644 (file)
 VOID
 newarea()
 {
-       register i, narea;
+       register int i, narea;
        struct areax *taxp;
        struct areax **halp;
        char id[NCPS];
@@ -312,7 +312,7 @@ char *id;
 VOID
 lnkarea()
 {
-       register rloc;
+       register int rloc;
        char temp[NCPS];
        struct sym *sp;
 
index 573d6c8ef840d8cd1e7575707b9d09ddb092f291..9ae7177303dbdc99c2c63b263c53c14877f93217 100644 (file)
@@ -62,7 +62,7 @@
 addr_t
 eval()
 {
-       register c, v;
+       register int c, v;
        register addr_t n;
 
        c = getnb();
@@ -114,7 +114,7 @@ eval()
 addr_t
 expr (n)
 {
-       register c, p;
+       register int c, p;
        register addr_t v, ve;
 
        v = term();
@@ -211,7 +211,7 @@ expr (n)
 addr_t
 term()
 {
-       register c, r, n;
+       register int c, r, n;
        register addr_t v;
        struct sym *sp;
        char id[NCPS];
@@ -330,7 +330,7 @@ term()
 
 int
 digit(c, r)
-register c, r;
+register int c, r;
 {
        if (r == 16) {
                if (ctype[c] & RAD16) {
@@ -378,7 +378,7 @@ register c, r;
  
 int
 oprio(c)
-register c;
+register int c;
 {
        if (c == '*' || c == '/' || c == '%')
                return (10);
index 75c4f3d59fe94f19fec634d22f25b371650e9c07..69e77376cc16cb62f1ec7433e138078de669e4b4 100644 (file)
@@ -75,7 +75,7 @@
 VOID
 newhead()
 {
-       register i;
+       register int i;
        struct head *thp;
 
        hp = (struct head *) new (sizeof(struct head));
index 8863809fd97f0274677dd5c9c756ab0b4b7de179..5447b736bb4b127a7f0ae45739f8f9e2587fbf11 100644 (file)
@@ -81,7 +81,7 @@
 
 VOID
 getid(id, c)
-register c;
+register int c;
 char *id;
 {
        register char *p;
@@ -134,7 +134,7 @@ char *id;
 
 VOID
 getfid(str, c)
-register c;
+register int c;
 char *str;
 {
        register char *p;
@@ -175,7 +175,7 @@ char *str;
 char
 getnb()
 {
-       register c;
+       register int c;
 
        while ((c=get())==' ' || c=='\t')
                ;
@@ -205,7 +205,7 @@ getnb()
 
 VOID
 skip(c)
-register c;
+register int c;
 {
        if (c < 0)
                c = getnb();
@@ -239,7 +239,7 @@ register c;
 char
 get()
 {
-       register c;
+       register int c;
 
        if ((c = *ip) != 0)
                ++ip;
@@ -315,7 +315,7 @@ unget(c)
 int
 getmap(d)
 {
-       register c, n, v;
+       register int c, n, v;
 
        if ((c = get()) == '\0')
                return (-1);
@@ -423,7 +423,7 @@ getmap(d)
 int
 getline()
 {
-       register i, ftype;
+       register int i, ftype;
        register char *fid;
 
 loop:  if (pflag && cfp && cfp->f_type == F_STD)
@@ -530,7 +530,7 @@ loop:       if (pflag && cfp && cfp->f_type == F_STD)
 int
 more()
 {
-       register c;
+       register int c;
 
        c = getnb();
        unget(c);
@@ -562,7 +562,7 @@ more()
 char
 endline()
 {
-       register c;
+       register int c;
 
        c = getnb();
        return( (c == '\0' || c == ';') ? 0 : c );
index b6cd1bd219119ae3c8045e1fc4ec6c9f0cbfc1ec..14c9ee043d14b52bb0421e6e687dc7a78b9a9c4f 100644 (file)
@@ -289,7 +289,7 @@ VOID
 search()
 {
        register struct sym *sp;
-       register i,symfnd;
+       register int i, symfnd;
 
        /*
         * Look for undefined symbols.  Keep
index 4f907ff72d84981d7e80d5770cddda6a1413dcad..bea53725688608ccca1a24a968bcfae6c1856f58 100644 (file)
@@ -60,7 +60,7 @@ VOID
 slew(fp)
 FILE *fp;
 {
-       register i;
+       register int i;
 
        if (lop++ >= NLPP) {
                newpag(fp);
@@ -334,10 +334,8 @@ struct area *xp;
 #else
 VOID lstarea(struct area *xp)
 {
-       register struct area *op;
        register struct areax *oxp;
-       register c, i, j;
-       register char *ptr;
+       register int i, j;
        int nmsym;
        addr_t a0, ai, aj;
        struct sym *sp;
@@ -678,7 +676,7 @@ VOID lstareatosym(struct area *xp)
 {
        /* Output the current area symbols to a NO$GMB .sym file */
        register struct areax *oxp;
-       register i, j;
+       register int i, j;
        int nmsym;
        addr_t a0, ai;
        struct sym *sp;
index e92f59943dc7d8d1b95de6f5602684fc041828fb..ddff705e3d359e812d5471076da4614bff7e4be7 100644 (file)
@@ -157,12 +157,12 @@ char *default_globlp[] = {
 };
 #endif /* GAMEBOY */
 
-VOID
+int
 main(argc, argv)
 char *argv[];
 {
        register char *p;
-       register c, i;
+       register int c, i;
 
 #ifdef GAMEBOY
        nb_rom_banks = 2;
@@ -449,7 +449,7 @@ int i;
 VOID
 link()
 {
-       register c;
+       register int c;
 
        if ((c=endline()) == 0) { return; }
        switch (c) {
@@ -681,7 +681,6 @@ map()
 #else
 VOID map()
 {
-       register i;
        register struct head *hdp;
        register struct lbfile *lbfh;
 
@@ -774,10 +773,6 @@ VOID map()
 #ifdef SDK
 VOID sym()
 {
-       register i;
-       register struct head *hdp;
-       register struct lbfile *lbfh;
-
        /*
         * Open sym File
         */
@@ -849,7 +844,7 @@ VOID sym()
 int
 parse()
 {
-       register c;
+       register int c;
        char fid[NINPUT];
 
        while ((c = getnb()) != 0) {
@@ -1088,7 +1083,7 @@ bassav()
 VOID
 setbas()
 {
-       register v;
+       register int v;
        char id[NCPS];
 
        bsp = basep;
@@ -1198,7 +1193,7 @@ gblsav()
 VOID
 setgbl()
 {
-       register v;
+       register int v;
        register struct sym *sp;
        char id[NCPS];
 
@@ -1280,7 +1275,7 @@ char *fn;
 char *ft;
 {
        register char *p1, *p2, *p3;
-       register c;
+       register int c;
        FILE *fp;
        char fb[FILSPC];
 
index d5873e05a3593b43f76d971da60af2dc4e6a461d..847e070f79c032cdb79148d823cb7a26bf252e85 100644 (file)
@@ -248,7 +248,7 @@ relt()
 VOID
 relr()
 {
-       register mode;
+       register int mode;
        register addr_t reli, relv;
        int aindex, rindex, rtp, error;
        addr_t r, rtbase, rtofst, paga, pags, pc;
@@ -507,7 +507,7 @@ char *errmsg[] = {
 VOID
 relp()
 {
-       register aindex, rindex;
+       register int aindex, rindex;
        int mode, rtp;
        addr_t relv;
        struct areax **a;
index 03b96b9219bdb92f8094bc41699020564855871d..9545247460b36364f5ea1cebc1ca2573e1164114 100644 (file)
@@ -56,7 +56,7 @@
 VOID
 syminit()
 {
-       register h;
+       register int h;
        struct sym **spp;
 
        spp = &symhash[0];
@@ -124,7 +124,7 @@ syminit()
 struct sym *
 newsym()
 {
-       register c, i, nglob;
+       register int c, i, nglob;
        struct sym *tsp;
        struct sym **s;
        char id[NCPS];
@@ -176,6 +176,7 @@ newsym()
        }
        fprintf(stderr, "Header symbol list overflow\n");
        lkexit(1);
+       /* Never reached */
 }
 
 /*)Function    sym *   lkpsym(id,f)
@@ -214,7 +215,7 @@ lkpsym(id, f)
 char *id;
 {
        register struct sym *sp;
-       register h;
+       register int h;
 
        h = hash(id);
        sp = symhash[h];
@@ -298,7 +299,7 @@ symdef(fp)
 FILE *fp;
 {
        register struct sym *sp;
-       register i;
+       register int i;
 
        for (i=0; i<NHASH; ++i) {
                sp = symhash[i];
@@ -347,7 +348,7 @@ symmod(fp, tsp)
 FILE *fp;
 struct sym *tsp;
 {
-       register i, j;
+       register int i, j;
        struct sym **p;
 
        if ((hp = headp) != NULL) {
@@ -392,7 +393,7 @@ int
 symeq(p1, p2)
 register char *p1, *p2;
 {
-       register n;
+       register int n;
 
        n = NCPS;
        do {
@@ -436,7 +437,7 @@ int
 hash(p)
 register char *p;
 {
-       register h, n;
+       register int h, n;
 
        h = 0;
        n = NCPS;
index 2c79f0b4d6a7850907c198091e5bd9e4b557d02f..d82f8de23515b7760837db7926e77caa648d9420 100644 (file)
@@ -16,6 +16,10 @@ LIBDIRS              = -L$(PRJDIR)/support/gc
 LIBGC          = $(PRJDIR)/support/gc/libgc.a
 endif
 
+ifdef SDCC_SUB_VERSION
+CFLAGS         += -DSDCC_SUB_VERSION_STR=\"$(SDCC_SUB_VERSION)\"
+endif
+
 OBJECTS        = SDCCy.o SDCClex.o SDCCerr.o SDCChasht.o SDCCmain.o \
                  SDCCsymt.o SDCCopt.o SDCCast.o SDCCmem.o SDCCval.o \
                  SDCCicode.o SDCCbitv.o SDCCset.o SDCClabel.o \
@@ -37,7 +41,6 @@ ports:
 $(PRJDIR)/support/gc/libgc.a:
        cd $(PRJDIR)/support/gc && $(MAKE)
 
-
 # Compiling and installing everything and runing test
 # ---------------------------------------------------
 install: all installdirs
index ab71ecefeab3a1e492e811ae31ead9e007eafcfa..94ca769f380c7838d9a3e052d855d82c82605394 100644 (file)
@@ -118,6 +118,7 @@ struct options  save_options  ;
 "int"          { count(); return(INT); }
 "interrupt"    { count(); return(INTERRUPT);}
 "nonbanked"    { count(); TKEYWORD(NONBANKED);}
+"banked"       { count(); TKEYWORD(BANKED);}
 "long"        { count(); return(LONG); }
 "near"        { count(); TKEYWORD(DATA);}
 "pdata"        { count(); TKEYWORD(PDATA); }
index a73224e2db0fd387e27ba6ab1a482787c9f78e95..add8d20217e23f9ebfbed1afd097eb1adee232e6 100644 (file)
@@ -77,7 +77,7 @@ value *cenum = NULL  ;  /* current enumeration  type chain*/
 %token <yyint> SUB_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN
 %token <yyint> XOR_ASSIGN OR_ASSIGN
 %token TYPEDEF EXTERN STATIC AUTO REGISTER CODE EEPROM INTERRUPT SFR AT SBIT
-%token REENTRANT USING  XDATA DATA IDATA PDATA VAR_ARGS CRITICAL NONBANKED
+%token REENTRANT USING  XDATA DATA IDATA PDATA VAR_ARGS CRITICAL NONBANKED BANKED
 %token CHAR SHORT INT LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID BIT
 %token STRUCT UNION ENUM ELIPSIS RANGE FAR _XDATA _CODE _GENERIC _NEAR _PDATA _IDATA _EEPROM
 %token CASE DEFAULT IF ELSE SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN 
@@ -168,6 +168,19 @@ using_reentrant_interrupt
    |  NONBANKED      {$$ = newLink ();
                         $$->class = SPECIFIER   ;
                         SPEC_NONBANKED($$) = 1;
+                       if (SPEC_BANKED($$)) {
+                           werror(W_BANKED_WITH_NONBANKED);
+                       }
+                     }
+   |  BANKED         {$$ = newLink ();
+                        $$->class = SPECIFIER   ;
+                        SPEC_BANKED($$) = 1;
+                       if (SPEC_NONBANKED($$)) {
+                           werror(W_BANKED_WITH_NONBANKED);
+                       }
+                       if (SPEC_STAT($$)) {
+                           werror(W_BANKED_WITH_STATIC);
+                       }
                      }
    |  Interrupt_storage
                      {
index 89cdcdabf403b80e7e425e6e9bd63c50d135732f..bf8f2f60cacafeea8da012e5b427222d7e0909fe 100644 (file)
@@ -3543,8 +3543,9 @@ ast  *createFunction   (symbol  *name,   ast  *body )
           we need to add the name to the publics list : this
           actually means we are now compiling the compiler
           support routine */
-       if (name->cdef)
+       if (name->cdef) {
            addSet(&publics,name);
+       }
     }
     else {
        addSymChain(name);
index 9bd37c6b2895d5e9796fd52bfcb5c98f81836494..eb464c6f6ad195d8c87478f36a0b94b8c78f234d 100644 (file)
@@ -146,6 +146,9 @@ struct  {
 { WARNING,"warning *** unknown memory model at %s : %d\n" },
 { ERROR  ,"error   *** cannot generate code for target '%s'\n"},
 { WARNING,"warning *** Indirect call to a banked function not implemented.\n"},
+{ WARNING,"warning *** Model '%s' not supported for %s, ignored.\n"},
+{ WARNING,"warning *** Both banked and nonbanked attributes used.  nonbanked wins.\n"},
+{ WARNING,"warning *** Both banked and static used.  static wins.\n"},
 };
 
 /****************************************************************************/
index d5d82190170d01e15d150d2a40152d2d3aa65c42..cb8472bd4f9ba4137346a1be6d5d1b1e1d169ead 100644 (file)
 #define  W_UNKNOWN_MODEL    130                /* Unknown memory model */
 #define  E_UNKNOWN_TARGET   131         /* target not defined   */
 #define         W_INDIR_BANKED     132         /* Indirect call to a banked fun */
+#define         W_UNSUPPORTED_MODEL 133        /* Unsupported model, ignored */
+#define         W_BANKED_WITH_NONBANKED 134    /* banked and nonbanked attributes mixed */
+#define         W_BANKED_WITH_STATIC 135       /* banked and static mixed */
 
 void werror(int, ...);
index 000722ffc8a16c158404bcc2c079679e58b08231..1c417decf9669cb062d10218ae93f605244da211 100644 (file)
@@ -170,14 +170,21 @@ struct optimize {
     unsigned    noLoopReverse :1;
 } ;
 
-/* Values for options.model. */
-#define MODEL_SMALL    0
-#define MODEL_LARGE    1
-#define MODEL_FLAT24   2
+/** Build model.
+    Used in options.model.A bit each as port.supported_models is an OR
+    of these. 
+*/
+enum {
+    MODEL_SMALL              = 1,
+    MODEL_COMPACT     = 2,
+    MODEL_MEDIUM      = 4,
+    MODEL_LARGE              = 8,
+    MODEL_FLAT24      = 16
+};
 
 /* other command line options */
 struct options {
-    int model  : 3     ; /* see MODEL_* defines above */
+    int model;        ; /* see MODEL_* defines above */
     int stackAuto : 3  ; /* Stack Automatic  */
     int useXstack : 3  ; /* use Xternal Stack */
     int stack10bit : 3;  /* use 10 bit stack (flat24 model only) */
index 6b76e1d51be922124cfe72f706ba562cf974d407..448034e8ea3775cc329cf45b471780cdefd3b431 100644 (file)
@@ -178,8 +178,10 @@ static void emitRegularMap (memmap * map, bool addPublics, bool arFlag)
        if ((sym->level == 0 || 
             (sym->_isparm && !IS_REGPARM(sym->etype))) &&
            addPublics &&
-           !IS_STATIC (sym->etype))
+           !IS_STATIC (sym->etype) &&
+           (sym->used || sym->fbody)) {
            addSetHead (&publics, sym);
+       }
        
        /* if extern then do nothing or is a function 
           then do nothing */
index 7adc16aeb66b16cff3e6181ca4e9ac873b77320e..4e32a37eb710193db9e0f0e15dc0971b6c79809e 100644 (file)
@@ -74,7 +74,10 @@ bool verboseExec = FALSE;
 //extern int wait (int *);
 char    *preOutName;
 
+/* Far functions, far data */
 #define OPTION_LARGE_MODEL "-model-large"
+/* Far functions, near data */
+#define OPTION_MEDIUM_MODEL "-model-medium"
 #define OPTION_SMALL_MODEL "-model-small"
 #define OPTION_FLAT24_MODEL "-model-flat24"
 #define OPTION_STACK_AUTO  "-stack-auto"
@@ -248,8 +251,11 @@ void       printVersionInfo ()
             "SDCC : ");
     for (i=0; i<NUM_PORTS; i++)
        fprintf(stderr, "%s%s", i==0 ? "" : "/", _ports[i]->target);
-
-    fprintf(stderr, " %s `"
+    fprintf(stderr, " %s"
+#ifdef SDCC_SUB_VERSION_STR
+           "/" SDCC_SUB_VERSION_STR
+#endif
+           " ` "
 #ifdef __CYGWIN32__
                " (CYGWIN32)\n"
 #else
@@ -259,6 +265,7 @@ void        printVersionInfo ()
                " (UNIX) \n"
 # endif
 #endif
+
            , VersionString
            );
 }
@@ -340,6 +347,7 @@ static void setDefaultOptions()
     options.idata_loc = 0x80;
     options.genericPtr = 1;   /* default on */
     options.nopeep    = 0;
+    options.model = port->general.default_model;
 
     /* now for the optimizations */
     /* turn on the everything */
@@ -458,6 +466,14 @@ static void _addToList(const char **list, const char *str)
     *(++list) = NULL;
 }
 
+static void _setModel(int model, const char *sz)
+{
+    if (port->general.supported_models & model)
+       options.model = model;
+    else
+       werror(W_UNSUPPORTED_MODEL, sz, port->target);
+}
+
 /*-----------------------------------------------------------------*/
 /* parseCmdLine - parses the command line and sets the options     */
 /*-----------------------------------------------------------------*/
@@ -485,17 +501,22 @@ int   parseCmdLine ( int argc, char **argv )
            }
 
            if (strcmp(&argv[i][1],OPTION_LARGE_MODEL) == 0) {
-               options.model = MODEL_LARGE;
+               _setModel(MODEL_LARGE, argv[i]);
+                continue;
+           }
+
+           if (strcmp(&argv[i][1],OPTION_MEDIUM_MODEL) == 0) {
+               _setModel(MODEL_MEDIUM, argv[i]);
                 continue;
            }
            
            if (strcmp(&argv[i][1],OPTION_SMALL_MODEL) == 0) {
-               options.model = MODEL_SMALL;
+               _setModel(MODEL_SMALL, argv[i]);
                 continue;
            }
            
            if (strcmp(&argv[i][1],OPTION_FLAT24_MODEL) == 0) {
-               options.model = MODEL_FLAT24;
+               _setModel(MODEL_FLAT24, argv[i]);
                 continue;
            }
            
@@ -1232,6 +1253,12 @@ static int preProcess (char **envp)
            case MODEL_SMALL:
                _addToList(preArgv, "-DSDCC_MODEL_SMALL");
                break;
+           case MODEL_COMPACT:
+               _addToList(preArgv, "-DSDCC_MODEL_COMPACT");
+               break;
+           case MODEL_MEDIUM:
+               _addToList(preArgv, "-DSDCC_MODEL_MEDIUM");
+               break;
            case MODEL_FLAT24:
                _addToList(preArgv, "-DSDCC_MODEL_FLAT24");
                break;
index 662f04bbe91c9d9debe2b3d1a38f033b44b5d95d..ca4eff72c20b6d5fa767df5df18348adb44f4cf9 100644 (file)
@@ -444,7 +444,7 @@ void allocParms ( value  *val )
                    /* PENDING: isr, bank overhead, ... */
                    SPEC_STAK(lval->etype) = SPEC_STAK(lval->sym->etype) = lval->sym->stack = 
                        stackPtr +
-                       (IS_BANKED(currFunc->etype) ? port->stack.banked_overhead : 0) +
+                       (IS_BANKEDCALL(currFunc->etype) ? port->stack.banked_overhead : 0) +
                        (IS_ISR(currFunc->etype) ? port->stack.isr_overhead : 0) +
                        0;
                    stackPtr += getSize (lval->type);
index c2addb57f466675e2c6b031b355edf08b780475d..33585fddb57f580bbc1a9bee09354c91d9dd0614 100644 (file)
@@ -1372,8 +1372,9 @@ int   checkFunction (symbol   *sym)
     deleteSym (SymbolTab,csym,csym->name);
     addSym    (SymbolTab,sym,sym->name,sym->level,sym->block);
     if (IS_EXTERN(csym->etype) && !
-       IS_EXTERN(sym->etype))
+       IS_EXTERN(sym->etype)) {
        addSet(&publics,sym);
+    }
     return 1 ;      
 }
 
index ad908cf918c85006f944926fb1c375096361db33..36e361d88e12ab42a0f40767a3f36a736a800dbb 100644 (file)
@@ -101,7 +101,8 @@ typedef struct specifier {
     unsigned   _typedef :1  ;  /* is typedefed               */
     unsigned   _isregparm:1 ;  /* is the first parameter     */
     unsigned   _isenum   :1 ;  /* is an enumerated type      */
-    unsigned    nonbanked   :1  ;  /* function has the nonbanked attribute */
+    unsigned   nonbanked   :1  ;  /* function has the nonbanked attribute */
+    unsigned   banked   :1  ;  /* function has the banked attribute */
     unsigned   _IntNo       ;  /* 1=Interrupt svc routine    */
     short      _regbank     ;  /* register bank 2b used      */
     unsigned   _addr        ;  /* address of symbol          */
@@ -280,6 +281,7 @@ typedef struct symbol {
 #define SPEC_TYPEDEF(x) x->select.s._typedef
 #define SPEC_REGPARM(x) x->select.s._isregparm
 #define SPEC_NONBANKED(x) x->select.s.nonbanked
+#define SPEC_BANKED(x) x->select.s.banked
 
 /* type check macros */
 #define IS_DECL(x)   ( x && x->class == DECLARATOR     )
@@ -324,11 +326,11 @@ typedef struct symbol {
 #define IS_ARITHMETIC(x) (IS_INTEGRAL(x) || IS_FLOAT(x))
 #define IS_AGGREGATE(x) (IS_ARRAY(x) || IS_STRUCT(x))
 #define IS_LITERAL(x)   (IS_SPEC(x)  && x->select.s.sclass == S_LITERAL)
-#define IS_ISR(x)              (IS_SPEC(x)  && SPEC_INTRTN(x))
+#define IS_ISR(x)      (IS_SPEC(x)  && SPEC_INTRTN(x))
 #define IS_REGPARM(x)   (IS_SPEC(x) && SPEC_REGPARM(x))
-#define IS_NONBANKED(x)   (IS_SPEC(x) && SPEC_NONBANKED(x))
-/* Note that !IS_BANKED is not IS_NONBANKED */
-#define IS_BANKED(x)   (IS_SPEC(x) && !SPEC_NONBANKED(x) && !SPEC_STAT(x))
+#define IS_NONBANKED(x) (IS_SPEC(x) && SPEC_NONBANKED(x))
+#define IS_BANKED(x)   (IS_SPEC(x) && SPEC_BANKED(x))
+#define IS_BANKEDCALL(x) (IS_SPEC(x) && !SPEC_NONBANKED(x) && !SPEC_STAT(x) && (options.model == MODEL_LARGE || options.model == MODEL_MEDIUM || SPEC_BANKED(x)))
 
 /* forward declaration for the global vars */
 extern bucket *SymbolTab[] ;
index 57c0aece2eb5b324a40d9c96edda3f82ca66a57e..45be337b621adc01b86b159dc626cefac39e32ef 100644 (file)
@@ -140,6 +140,8 @@ PORT avr_port = {
     "ATMEL AVR",               /* Target name */
     {
        TRUE,                   /* Emit glue around main */
+       MODEL_LARGE | MODEL_SMALL,
+       MODEL_SMALL
     },
     {  
        _asmCmd,
index 9bfed563e79b08fa59f08b35417fac614c519852..eded0bfedf0bc79b61340c87df3c2cc4ba088b60 100644 (file)
@@ -197,6 +197,8 @@ PORT mcs51_port = {
     "MCU 8051",                        /* Target name */
     {
        TRUE,                   /* Emit glue around main */
+       MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24,
+       MODEL_SMALL
     },
     {  
        _asmCmd,
index 0b142f871615bdcc50fe07341a12563b32497b46..65cfc29da9e752f2f85a4c003c3974e5a14e518d 100644 (file)
@@ -20,6 +20,9 @@ typedef struct {
            code is provided by a seperate module.
        */
        bool glue_up_main;
+       /* OR of MODEL_* */
+       int supported_models;
+       int default_model;
     } general;
 
     /* assembler related information */
index ddee57b470582afe44a03097ee364b9efab943f8..e33f32818ee3ce5227ba308b9de92db2d7ca8912 100644 (file)
@@ -1680,9 +1680,6 @@ static void emitCall(iCode *ic, bool ispcall)
     int pushed_de = 0;
     link *detype = getSpec(operandType(IC_LEFT(ic)));
 
-    if (IS_BANKED(detype)) 
-       emit2("; call to a banked function");
-
     /* if caller saves & we have not saved then */
     if (!ic->regsSaved) {
        /* PENDING */
@@ -1753,7 +1750,7 @@ static void emitCall(iCode *ic, bool ispcall)
     }
 
     if (ispcall) {
-       if (IS_BANKED(detype)) {
+       if (IS_BANKEDCALL(detype)) {
            werror(W_INDIR_BANKED);
        }
        aopOp(IC_LEFT(ic),ic,FALSE, FALSE);
@@ -1780,7 +1777,7 @@ static void emitCall(iCode *ic, bool ispcall)
        char *name = OP_SYMBOL(IC_LEFT(ic))->rname[0] ?
            OP_SYMBOL(IC_LEFT(ic))->rname :
            OP_SYMBOL(IC_LEFT(ic))->name;
-       if (IS_BANKED(detype)) {
+       if (IS_BANKEDCALL(detype)) {
            emit2("call banked_call");
            emit2("!dws", name);
            emit2("!dw !bankimmeds", name);
@@ -1870,6 +1867,8 @@ static int resultRemat (iCode *ic)
     return 0;
 }
 
+extern set *publics;
+
 /*-----------------------------------------------------------------*/
 /* genFunction - generated code for function entry                 */
 /*-----------------------------------------------------------------*/
@@ -1881,6 +1880,11 @@ static void genFunction (iCode *ic)
     nregssaved = 0;
     setArea(IS_NONBANKED(sym->etype));
 
+    /* PENDING: hack */
+    if (!IS_STATIC(sym->etype)) {
+       addSetIfnotP(&publics, sym);
+    }
+
     /* create the function header */
     emit2("!functionheader", sym->name);
     /* PENDING: portability. */
index 8254ac8cbd7d95c15dda020aaf52cf27c36a28da..53f097865fcb27c2165c2c02be8f58dd73d0d577 100644 (file)
@@ -28,6 +28,7 @@ static struct {
 static char *_keywords[] = {
     "sfr",
     "nonbanked",
+    "banked",
     NULL 
 };
 
@@ -282,6 +283,8 @@ PORT z80_port = {
     "Zilog Z80",               /* Target name */
     {
        FALSE,
+       MODEL_MEDIUM | MODEL_SMALL,
+       MODEL_SMALL
     },
     {  
        _z80_asmCmd,
@@ -346,6 +349,8 @@ PORT gbz80_port = {
     "Gameboy Z80-like",                /* Target name */
     {
        FALSE,
+       MODEL_MEDIUM | MODEL_SMALL,
+       MODEL_SMALL
     },
     {  
        _gbz80_asmCmd,
index af1d522aa3d6d8a94535a470c7b11a274d4f524a..9f8d0190195178c9b47b38380cd763fe9051bc4d 100644 (file)
@@ -7,7 +7,9 @@
 #  * Takes the libs from native and hooks them into win32
 #  * tars it all up and calls it done
 
-BUILD_DIR = /home/michaelh/tmp/sdcc-build
+DIST = gbdk
+
+BUILD_DIR = /home/michaelh/tmp/$(DIST)-build
 NATIVE = linux-linux
 CROSS = linux-mingw32
 NATIVE_DIST = linux-glibc2
@@ -25,12 +27,12 @@ spawn:
 build: orig native cross dist
 
 dist:
-       cd $(NATIVE)/build; tar czf ../../sdcc-$(VER)-$(NATIVE_DIST).tar.gz sdcc
+       cd $(NATIVE)/build; tar czf ../../$(DIST)-$(VER)-$(NATIVE_DIST).tar.gz $(DIST)
 ifeq ($(CROSS_DIST), win32)
-       rm -f sdcc-$(VER)-$(CROSS_DIST).zip
-       cd $(CROSS)/build; zip -rlq9 ../../sdcc-$(VER)-$(CROSS_DIST).zip sdcc
+       rm -f $(DIST)-$(VER)-$(CROSS_DIST).zip
+       cd $(CROSS)/build; zip -rlq9 ../../$(DIST)-$(VER)-$(CROSS_DIST).zip $(DIST)
 else
-       cd $(CROSS)/build; tar czf ../../sdcc-$(VER)-$(CROSS_DIST).tar.gz sdcc
+       cd $(CROSS)/build; tar czf ../../$(DIST)-$(VER)-$(CROSS_DIST).tar.gz $(DIST)
 endif
 
 clean:
@@ -42,7 +44,6 @@ orig:
        touch orig/logged_in                    # Assume already logged in
        make -C orig -f build.mak update
 
-
 linux-linux: orig
        mkdir -p linux-linux
        (cd orig; tar cf - .) | (cd linux-linux; tar xf -)
@@ -67,9 +68,9 @@ cross-bin: $(CROSS) dummy
 # Binary files are compiled; now copy the built libs from the native
 # version across
 cross-mix:
-       mv $(CROSS)/build/sdcc/bin $(CROSS)/build/sdcc/bin.1
-       (cd $(NATIVE); tar cf - build/sdcc) | (cd $(CROSS); tar xf - )
-       rm -rf $(CROSS)/build/sdcc/bin
-       mv $(CROSS)/build/sdcc/bin.1 $(CROSS)/build/sdcc/bin
+       mv $(CROSS)/build/$(DIST)/bin $(CROSS)/build/$(DIST)/bin.1
+       (cd $(NATIVE); tar cf - build/$(DIST)) | (cd $(CROSS); tar xf - )
+       rm -rf $(CROSS)/build/$(DIST)/bin
+       mv $(CROSS)/build/$(DIST)/bin.1 $(CROSS)/build/$(DIST)/bin
 
 cross: cross-bin cross-mix