projects
/
fw
/
sdcc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* as/hc08/lkaomf51.c (OutputName),
[fw/sdcc]
/
src
/
xa51
/
gen.c
diff --git
a/src/xa51/gen.c
b/src/xa51/gen.c
index f16b6132ad264fd8cf0e849b5055f18459d17b30..508d890fbb7669c4b40e458229bc78e758fc60a0 100755
(executable)
--- a/
src/xa51/gen.c
+++ b/
src/xa51/gen.c
@@
-35,23
+35,6
@@
#include "SDCCglobl.h"
#include "newalloc.h"
#include "SDCCglobl.h"
#include "newalloc.h"
-#ifdef HAVE_SYS_ISA_DEFS_H
-#include <sys/isa_defs.h>
-#else
-#ifdef HAVE_MACHINE_ENDIAN_H
-#include <machine/endian.h>
-#else
-#ifdef HAVE_ENDIAN_H
-#include <endian.h>
-#else
-#if !defined(__BORLANDC__) && !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
-#warning "Cannot determine ENDIANESS of this machine assuming LITTLE_ENDIAN"
-#warning "If you running sdcc on an INTEL 80x86 Platform you are okay"
-#endif
-#endif
-#endif
-#endif
-
#include "common.h"
#include "SDCCpeeph.h"
#include "ralloc.h"
#include "common.h"
#include "SDCCpeeph.h"
#include "ralloc.h"
@@
-129,7
+112,7
@@
static void emitcode (char *inst, char *fmt,...) {
else
vsprintf (lb, fmt, ap);
else
vsprintf (lb, fmt, ap);
- while (isspace (
(int)
*lbp))
+ while (isspace (*lbp))
lbp++;
if (lbp && *lbp)
lbp++;
if (lbp && *lbp)
@@
-141,6
+124,19
@@
static void emitcode (char *inst, char *fmt,...) {
va_end (ap);
}
va_end (ap);
}
+/*-----------------------------------------------------------------*/
+/* xa51_emitDebuggerSymbol - associate the current code location */
+/* with a debugger symbol */
+/*-----------------------------------------------------------------*/
+void
+xa51_emitDebuggerSymbol (char * debugSym)
+{
+ _G.debugLine = 1;
+ emitcode ("", "%s ==.", debugSym);
+ _G.debugLine = 0;
+}
+
+
char *getStackOffset(int stack) {
static char gsoBuf[1024];
sprintf (gsoBuf, "r7+(%d%+d%+d)", stack,
char *getStackOffset(int stack) {
static char gsoBuf[1024];
sprintf (gsoBuf, "r7+(%d%+d%+d)", stack,
@@
-374,9
+370,9
@@
static asmop *aopForVal(operand *op) {
sprintf (aop->name[1], "#0");
break;
case 4:
sprintf (aop->name[1], "#0");
break;
case 4:
- sprintf (aop->name[0], "#0x%04
l
x",
+ sprintf (aop->name[0], "#0x%04x",
SPEC_CVAL(operandType(op)).v_ulong & 0xffff);
SPEC_CVAL(operandType(op)).v_ulong & 0xffff);
- sprintf (aop->name[1], "#0x%04
l
x",
+ sprintf (aop->name[1], "#0x%04x",
SPEC_CVAL(operandType(op)).v_ulong >> 16);
break;
default:
SPEC_CVAL(operandType(op)).v_ulong >> 16);
break;
default:
@@
-476,7
+472,7
@@
char *opRegName(operand *op, int offset, char *opName, bool decorate) {
break;
case V_INT:
if (SPEC_LONG(OP_VALUE(op)->type)) {
break;
case V_INT:
if (SPEC_LONG(OP_VALUE(op)->type)) {
- sprintf (opName, "#%s0x%02
l
x", decorate?"(long)":"",
+ sprintf (opName, "#%s0x%02x", decorate?"(long)":"",
SPEC_CVAL(OP_VALUE(op)->type).v_long);
} else {
sprintf (opName, "#%s0x%02x", decorate?"(int)":"",
SPEC_CVAL(OP_VALUE(op)->type).v_long);
} else {
sprintf (opName, "#%s0x%02x", decorate?"(int)":"",
@@
-846,6
+842,8
@@
genEndFunction (iCode * ic)
if (IFFUNC_ISNAKED(sym->type)) {
emitcode(";", "naked function: no epilogue.");
if (IFFUNC_ISNAKED(sym->type)) {
emitcode(";", "naked function: no epilogue.");
+ if (options.debug && currFunc)
+ debugFile->writeEndFunction (currFunc, ic, 0);
return;
}
return;
}
@@
-854,6
+852,10
@@
genEndFunction (iCode * ic)
emitcode ("add", "r7,#%d\t; release stack space for locals", sym->stack);
}
emitcode ("add", "r7,#%d\t; release stack space for locals", sym->stack);
}
+ if (options.debug && currFunc) {
+ debugFile->writeEndFunction (currFunc, ic, 1);
+ }
+
if (IFFUNC_ISISR(sym->type)) {
emitcode ("reti", "");
} else {
if (IFFUNC_ISISR(sym->type)) {
emitcode ("reti", "");
} else {
@@
-1205,7
+1207,7
@@
static iCode *hasInc (operand *op, iCode *ic, int osize) {
}
}
/* if the operand used or deffed */
}
}
/* if the operand used or deffed */
- if (bitVectBitValue(OP_USES(op),lic->key) ||
(unsigned)
lic->defKey == op->key) {
+ if (bitVectBitValue(OP_USES(op),lic->key) || lic->defKey == op->key) {
return NULL;
}
/* if GOTO or IFX */
return NULL;
}
/* if GOTO or IFX */
@@
-1906,38
+1908,39
@@
static void genReceive (iCode * ic) {
printIc (0, "genReceive", ic, 1,0,0);
}
printIc (0, "genReceive", ic, 1,0,0);
}
+/*-----------------------------------------------------------------*/
+/* genDummyRead - generate code for dummy read of volatiles */
+/*-----------------------------------------------------------------*/
+static void
+genDummyRead (iCode * ic)
+{
+ emitcode ("; genDummyRead","");
+
+ ic = ic;
+}
+
/*-----------------------------------------------------------------*/
/* gen51Code - generate code for 8051 based controllers */
/*-----------------------------------------------------------------*/
void genXA51Code (iCode * lic) {
iCode *ic;
int cln = 0;
/*-----------------------------------------------------------------*/
/* gen51Code - generate code for 8051 based controllers */
/*-----------------------------------------------------------------*/
void genXA51Code (iCode * lic) {
iCode *ic;
int cln = 0;
-
+
lineHead = lineCurr = NULL;
lineHead = lineCurr = NULL;
-
+
/* if debug information required */
if (options.debug && currFunc)
{
/* if debug information required */
if (options.debug && currFunc)
{
- cdbSymbol (currFunc, cdbFile, FALSE, TRUE);
- _G.debugLine = 1;
- if (IS_STATIC (currFunc->etype))
- emitcode ("", "F%s$%s$0$0 ==.", moduleName, currFunc->name);
- else
- emitcode ("", "G$%s$0$0 ==.", currFunc->name);
- _G.debugLine = 0;
+ debugFile->writeFunction (currFunc, lic);
}
}
-
+
for (ic = lic; ic; ic = ic->next) {
if (ic->lineno && cln != ic->lineno) {
if (options.debug) {
for (ic = lic; ic; ic = ic->next) {
if (ic->lineno && cln != ic->lineno) {
if (options.debug) {
- _G.debugLine = 1;
- emitcode ("", "C$%s$%d$%d$%d ==.",
- FileBaseName (ic->filename), ic->lineno,
- ic->level, ic->block);
- _G.debugLine = 0;
+ debugFile->writeCLine (ic);
}
if (!options.noCcodeInAsm) {
}
if (!options.noCcodeInAsm) {
- emitcode ("", ";\t%s:%d: %s", ic->filename, ic->lineno,
+ emitcode ("", ";\t%s:%d: %s", ic->filename, ic->lineno,
printCLine(ic->filename, ic->lineno));
}
cln = ic->lineno;
printCLine(ic->filename, ic->lineno));
}
cln = ic->lineno;
@@
-1945,25
+1948,25
@@
void genXA51Code (iCode * lic) {
if (options.iCodeInAsm) {
emitcode("", ";ic:%d: %s", ic->key, printILine(ic));
}
if (options.iCodeInAsm) {
emitcode("", ";ic:%d: %s", ic->key, printILine(ic));
}
-
+
/* if the result is marked as
spilt and rematerializable or code for
this has already been generated then
do nothing */
if (resultRemat (ic) || ic->generated)
continue;
/* if the result is marked as
spilt and rematerializable or code for
this has already been generated then
do nothing */
if (resultRemat (ic) || ic->generated)
continue;
-
+
/* depending on the operation */
switch (ic->op)
{
case '!':
genNot (ic);
break;
/* depending on the operation */
switch (ic->op)
{
case '!':
genNot (ic);
break;
-
+
case '~':
genCpl (ic);
break;
case '~':
genCpl (ic);
break;
-
+
case UNARYMINUS:
genUminus (ic);
break;
case UNARYMINUS:
genUminus (ic);
break;
@@
-2089,7
+2092,7
@@
void genXA51Code (iCode * lic) {
case RLC:
genRLC (ic);
break;
case RLC:
genRLC (ic);
break;
-
+
case GETHBIT:
genGetHbit (ic);
break;
case GETHBIT:
genGetHbit (ic);
break;
@@
-2132,22
+2135,26
@@
void genXA51Code (iCode * lic) {
case RECEIVE:
genReceive (ic);
break;
case RECEIVE:
genReceive (ic);
break;
-
+
case SEND:
addSet (&_G.sendSet, ic);
break;
case SEND:
addSet (&_G.sendSet, ic);
break;
-
+
+ case DUMMY_READ_VOLATILE:
+ genDummyRead (ic);
+ break;
+
default:
ic = ic;
}
}
default:
ic = ic;
}
}
-
-
+
+
/* now we are ready to call the
peep hole optimizer */
if (!options.nopeep)
peepHole (&lineHead);
/* now we are ready to call the
peep hole optimizer */
if (!options.nopeep)
peepHole (&lineHead);
-
+
/* now do the actual printing */
printLine (lineHead, codeOutFile);
return;
/* now do the actual printing */
printLine (lineHead, codeOutFile);
return;