projects
/
fw
/
sdcc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* as/mcs51/asdata.c: changed ctype['['] to BINOP
[fw/sdcc]
/
src
/
mcs51
/
main.c
diff --git
a/src/mcs51/main.c
b/src/mcs51/main.c
index bed2b95e289917882d66857bff613c8f5617ecd5..a8854a78b672ebabc630183756e6595e327b79b5 100644
(file)
--- a/
src/mcs51/main.c
+++ b/
src/mcs51/main.c
@@
-53,6
+53,7
@@
static char *_mcs51_keywords[] =
void mcs51_assignRegisters (ebbIndex *);
static int regParmFlg = 0; /* determine if we can register a parameter */
void mcs51_assignRegisters (ebbIndex *);
static int regParmFlg = 0; /* determine if we can register a parameter */
+static int regBitParmFlg = 0; /* determine if we can register a bit parameter */
static void
_mcs51_init (void)
static void
_mcs51_init (void)
@@
-64,13
+65,20
@@
static void
_mcs51_reset_regparm (void)
{
regParmFlg = 0;
_mcs51_reset_regparm (void)
{
regParmFlg = 0;
+ regBitParmFlg = 0;
}
static int
_mcs51_regparm (sym_link * l)
{
}
static int
_mcs51_regparm (sym_link * l)
{
- if (IS_SPEC(l) && (SPEC_NOUN(l) == V_BIT))
+ if (IS_SPEC(l) && (SPEC_NOUN(l) == V_BIT)) {
+ /* bit parameters go to b0 thru b7 */
+ if (options.stackAuto && (regBitParmFlg < 8)) {
+ regBitParmFlg++;
+ return 12 + regBitParmFlg;
+ }
return 0;
return 0;
+ }
if (options.parms_in_bank1 == 0) {
/* simple can pass only the first parameter in a register */
if (regParmFlg)
if (options.parms_in_bank1 == 0) {
/* simple can pass only the first parameter in a register */
if (regParmFlg)
@@
-712,7
+720,7
@@
PORT mcs51_port =
1, 2, 2, 4, 1, 2, 3, 1, 4, 4
},
{
1, 2, 2, 4, 1, 2, 3, 1, 4, 4
},
{
- "XSTK (PAG,XDATA)", // xstack_name
+ "XSTK (PAG,XDATA)",
// xstack_name
"STACK (DATA)", // istack_name
"CSEG (CODE)", // code_name
"DSEG (DATA)", // data_name
"STACK (DATA)", // istack_name
"CSEG (CODE)", // code_name
"DSEG (DATA)", // data_name