#include "main.h"
#include "ralloc.h"
#include "gen.h"
+#include "peep.h"
#include "dbuf_string.h"
#include "../SDCCutil.h"
#include "peeph.rul"
};
+#define OPTION_STACK_SIZE "--stack-size"
+
+static OPTION _mcs51_options[] =
+ {
+ { 0, OPTION_STACK_SIZE, &options.stack_size, "Tells the linker to allocate this space for stack", CLAT_INTEGER },
+ { 0, "--parms-in-bank1", &options.parms_in_bank1, "use Bank1 for parameter passing"},
+ { 0, "--pack-iram", NULL, "Tells the linker to pack variables in internal ram (default)"},
+ { 0, "--no-pack-iram", &options.no_pack_iram, "Tells the linker not to pack variables in internal ram"},
+ { 0, "--acall-ajmp", &options.acall_ajmp, "Use acall/ajmp instead of lcall/ljmp" },
+ { 0, NULL }
+ };
+
/* list of key words used by msc51 */
static char *_mcs51_keywords[] =
{
{
int i;
- dbuf_printf (oBuf, "\tljmp\t__sdcc_gsinit_startup\n");
+ dbuf_printf (oBuf, "\t%cjmp\t__sdcc_gsinit_startup\n", options.acall_ajmp?'a':'l');
+ if((options.acall_ajmp)&&(maxInterrupts)) dbuf_printf (oBuf, "\t.ds\t1\n");
/* now for the other interrupts */
for (i = 0; i < maxInterrupts; i++)
{
if (interrupts[i])
{
- dbuf_printf (oBuf, "\tljmp\t%s\n", interrupts[i]->rname);
+ dbuf_printf (oBuf, "\t%cjmp\t%s\n", options.acall_ajmp?'a':'l', interrupts[i]->rname);
if ( i != maxInterrupts - 1 )
- dbuf_printf (oBuf, "\t.ds\t5\n");
+ dbuf_printf (oBuf, "\t.ds\t%d\n", options.acall_ajmp?6:5);
}
else
{
MODEL_SMALL | MODEL_MEDIUM | MODEL_LARGE,
MODEL_SMALL
},
- {
+ { /* Assembler */
_asmCmd,
NULL,
"-plosgffc", /* Options with debug */
".asm",
NULL /* no do_assemble function */
},
- {
+ { /* Linker */
_linkCmd,
NULL,
NULL,
".rel",
1
},
- {
+ { /* Peephole optimizer */
_defaultRules,
getInstructionSize,
getRegsRead,
getRegsWritten,
- mcs51DeadMove
+ mcs51DeadMove,
+ 0
},
{
/* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
"_",
_mcs51_init,
_mcs51_parseOptions,
- NULL,
+ _mcs51_options,
NULL,
_mcs51_finaliseOptions,
_mcs51_setDefaultOptions,