maartenbrock [Tue, 15 Mar 2005 07:34:20 +0000 (07:34 +0000)]
* device/lib/printf_large.c: removed inline assembly for portability and
readability. Use printf_fast if speed or size are more important.
* src/pic16/gen.c: removed conditions around use of DEBUGpc
* src/pic16/genutils.h: added define for DEBUGpc for MSVC
vrokas [Mon, 14 Mar 2005 01:24:58 +0000 (01:24 +0000)]
* device/lib/pic16/startup/crt0i.c (_cinit): local variables where
moved to level 0 and declared as static. Also they are explicit
placed in access bank. This was necessery because some times they
might cross memory bank boundaries. crt0iz.c is *NOT* updated!!!
* src/pic16/device.h: added flag OPTIMIZE_CMP to enable some compare
optimizations. Currently only compare to unsigned char is implemented,
* src/pic16/gen.c: added fReturnIdx array,
* (struct resolvedIfx) is moved to gen.h and made public,
* (struct _G): added sregsAlloc and sregsAllocSet fields,
* (aopForSym): added an optimization to directly store in stack of
the operand of a SEND iCode,
* (pic16_aopOp): don't return return registers as strings (AOP_STR)
but as registers instead (AOP_REG) using the fReturnIdx array,
* (pic16_freeAsmop): remove the freed register from the
_G.sregsAlloc field,
* (pic16_aopGet): in case AOP_STR, the compare to 'a' is changed to
a compare of 'WREG',
* (pic16_popGetTempRegCond): changed function prototype, now
function takes also a bitVector argument v which holds the current
set of registers that are allocated for stack access by aopForSym,
registers allocated in aopForSym for accessing stack symbols are not
any more part of the functions usedRegs field,
* (genCall): some times aopOp is called for a stack variable to be
send, aopForSym might perform the push, if this is true make sure
that genCall doesn't push the variable twice by testing _G.resDirect,
* (genFunction): changed testing for unspecified interrupt number
from 256 to INTNO_UNSPEC,
* modified selection scheme of frame pointer generation. Previously
if function did use local registers a frame pointer was generated,
now a frame pointer is generated only if function has arguments
(that need PLUSW2 register access), or has stack arguments, or the
compiler is not instructed to omit the frame pointer,
* (genEndFunction): before restoring local registers that were saved
in the function preamble, also restore the registers that *might*
have been allocated for stack access,
* (genRet): removed some old comments,
* (genCmp, the active (RN's) version): added a call to the
pic16_genCmp_special function to perform the compare with a more
robust and optimized way,
* (genInline): a feature has been added in inline code generation,
which allows a wildcard variable substitution when writing inline
assembly. Code is incomplete and experimental therefore undocumented,
* (genCast): changed order of aopOp for result and right to allow
aopForSym to directly load the result if possible,
* src/pic16/genutils.c (selectCompareOp, pic16_genCmp_special): NEW,
perform an optimized compare on some selected special occasions,
* src/pic16/genutils.h: declaration of resolvedIfx structure from gen.c,
* src/pic16/glue.c (pic16createInterrupVect): make sure we never
generate an IVT any more,
* src/pic16/main.c (pic16_optionsTable): added command line option
--optimize-cmp,
* (_pic16_initPaths): when calling C preprocessor define pic18fXXXX
macro too, when calling assembler define pic18fXXXX *and* __18Fxxxx
macros,
* src/pic16/NOTES: Raphael Neider added in list of active developers
* src/pic16/pcode.c (OPT_TYPE_STR): added strings jumptable_begin and
jumptable_end to prevent bug #,
* (pic16_pciADDWFC, ADDFWC, COMF, CLRF): added some missing flags in
inCond and outCond fields,
* src/pic16/pcoderegs.c (pCodeOptime2pCodes): add a fix for bug #,
* src/pic16/ralloc.c (serialRegAssign): explicit set willCS to 0 to
turn off register spilling,
* (packRegsForOneUse): synced with other ports' versions although it
is not used currently,
* (pic16_packRegisters): added an optimization while reading
structure bitfields, some registers may be saved (malloc code is
decreased by 80 bytes)
vrokas [Sat, 12 Mar 2005 10:39:48 +0000 (10:39 +0000)]
* src/SDCCcse.c (cseBBlock): inside 'do operand lookup' loop test if
left is a bitfield, if yes, then don't optimize assignment. Perhaps
this can be optimized more?
maartenbrock [Sun, 6 Mar 2005 11:50:17 +0000 (11:50 +0000)]
* src/SDCCicode.h: moved CRITICAL and ENDCRITICAL from SKIP_IC2 to SKIP_IC
* src/mcs51/ralloc.c (willCauseSpill): added check for REG_BIT type,
(regTypeNum): set REG_BIT type if necessary
* src/mcs51/ralloc.h: added define REG_BIT, used to fix bug 1144613
* support/regression/tests/critical.c: check bug 1144613
frief [Sun, 20 Feb 2005 19:31:18 +0000 (19:31 +0000)]
* src/SDCCpeeph.def: new keyword "labelRefCountChange" which allows peepholes to keep the correct label reference count when adding/removing references to labels. A peephole file using this is appended to patch #1144962.
frief [Sun, 20 Feb 2005 19:29:56 +0000 (19:29 +0000)]
new keyword "labelRefCountChange" which allows peepholes to keep the correct label reference count when adding/removing references to labels. A peephole file using this is appended to patch #1144962.
tecodev [Mon, 14 Feb 2005 11:00:42 +0000 (11:00 +0000)]
* device/lib/pic16/libc/string/memccpy.c: changed 3rd argument to char
* src/SDCC.lex (process_pragma): fixed to make disable_warning work for PIC16
* src/pic16/gen.c (aopForSym, calls to pic16_aopOp): prevent unneccessary
retrievals of result operand's value on assignment
vrokas [Sun, 13 Feb 2005 13:57:22 +0000 (13:57 +0000)]
* device/include/pic16/string.h: modified prototype for memccpy()
to memccpy(void *, void *, char, size_t)
* src/pic16/gen.c (genFunction, genEndFunction): reenable if-case to
check whether to omit frame pointer or not,
* (genInline): convert all occurences of "\n" to LF in inline
assembler blocks, this helps formatting the inline text,
* (pic16_loadFSR0): modified prototype,
* (genNearPointerGet, genNearPointerSet): reorganization of code,
removed some 8051 legacy code,
* (genPackBits): enabled handling bitfields exceeding one byte in size,
* src/pic16/ralloc.c (pic16_assignRegisters): clear dynrIdx variable
before allocating temporary registers in functions,
tecodev [Wed, 9 Feb 2005 14:59:40 +0000 (14:59 +0000)]
* src/SDCC.lex(doPragma) : save and restore warning options as well
(also added new stack plus clone- and copyAndFreeSDCCERRG())
* have #pragma less_pedantic set the errorlevel to WARNING
(fixes #1117001)
* (cloneOptimize) : fixed wrong malloc's size
* support/Util/SDCCerr.[ch] : made SDCCERRG globally accessible to
facilitate correct handling of #pragma (save|restore)
tecodev [Wed, 2 Feb 2005 21:53:55 +0000 (21:53 +0000)]
* src/SDCCast.c (processParms): disabled W_NONRENT_ARGS for pic16 port
* src/pic16/gen.c (aopForSym): reenabled special case for function pointers
* (pic16_storeForReturn): fixed to allow returning function pointers
* (genPackBits): improved accessing full bytes, implemented for GPOINTERs
* device/include/pic16/{stddef.h,stdbool.h}: added
tecodev [Mon, 24 Jan 2005 00:18:44 +0000 (00:18 +0000)]
* src/pic16/pcode.h: added second memory operand to pCodeOpReg
to enable upcast to pCodeOpReg2 (there is no type tag to
differenciate the two and pic16_popGet2p casts into PCOR2)
* src/pic16/main.c (_process_pragma): fixed another malloc bug
(sizeof(sectNames) changed to sizeof(sectName))
Both patches fix segfaults under MinGW.
vrokas [Sun, 23 Jan 2005 11:23:43 +0000 (11:23 +0000)]
* src/pic16/gen.c: fixed bug #1106975,
* src/pic16/gen.c: fixed possible bug #1102572, now during TOS
pointer update, INTCON is saved, global interrupts are disabled and
restored after updateing TOS.
* src/SDCC.y, src/SDCC.lex, src/SDCCsymt.c, src/SDCCsymt.h:
* added function attribute 'shadowregs' to take advantage of shadow
registers,
* added function attribute 'wparam' as an alternative to the wparam
pragma,
* support/Utils/SDCCerr.[ch]: added error E_SHADOWREGS_NO_ISR when
user declares a non-ISR function as 'shadowregs',
* doc/sdccman.lyx: updated to reflect recent changes of pic16 port
vrokas [Sat, 22 Jan 2005 18:02:16 +0000 (18:02 +0000)]
* .version: bumped version number to 2.4.8
* device/lib/pic16/pics.all: list of PIC18F devices supported by
pic16 port,
* device/lib/pic16/libio/i2c/: I2C module support library,
* device/include/pic16/i2c.h: I2C support library header,
* device/lib/pic16/libc/stdio/: standard IO support sources,
* (printf_small.c): printf_small() source, supports float print,
* (printf_tiny.c): printf_tiny() source, does not support floats,
* device/lib/pic16/Makefile.common.in: added OPT_FLAGS macro to
enable global optimizations for entire library source, other
Makefiles in the source tree are also modified to reflect this,
* device/lib/pic16/libc/stdlib/putchar.c (putchar): dummy putchar()
function,
* doc/sdccman.lyx: updated to reflect new changes,
* src/pic16/gen.c (aopForSym): don't handle sym->iaccess in
sym->onStack if-case,
* src/pic16/main.c (_pic16_keywords): commented out keywords bit,
sbit, idata, _idata, xdata, _xdata,
* added pragma library, to link an external library, (see doc),
* removed command line options, --pomit-config-words, --pomit-ivt,
--pleave-reset-vector,
* (pic16_finaliseOptions): when define macro SDCC_MODEL_{SMALL/LARGE}
when calling assembler to reflect memory model used, also define
macro STACK_MODEL_{SMALL/LARGE} when compiling and assembling to
reflect stack model used,
* src/pic16/ralloc.c (pic16_allocDirReg): when operand is allocated
on stack return NULL,
tecodev [Sat, 22 Jan 2005 01:47:18 +0000 (01:47 +0000)]
* src/pic16/pcoderegs.c (pCodeOptime2pCodes): reenabled optimization
* (OptimizeRegUsage): make sure that there is really no other flow where
the first pCode is used
tecodev [Wed, 19 Jan 2005 16:48:36 +0000 (16:48 +0000)]
* src/SDCCglobl.h: ensure that PATH_MAX >= 2048 to guarantee
cmdLine buffers (used when calling sdcpp...) are large enough
(MAX_PATH=256 truncates arguments leading to system halts when
used in MinGW...)
* src/pic16/gen.c (pic16_sameRegs): relaxed size criterion
* (genUminus): rewritten to for efficiency
* (genNearPointer[GS]et): enforce reloading of FSR0 (was still
used uninitialized in some cases)
* (genCast): upcasting a 16bit int to a 24bit GPOINTER may not
copy the third byte from the int -- now assumes 0x80 (data memory)
* src/pic16/genarith.c (pic16_genPlus): fixed bug when swapping
operands (genAddLit expects the iCode's operands to swapped as
well), fixed leftover bytes (crashed for short left operands)
* (pic16_genMinusDec): performance improvements, removed false
PIC14 emitSKPNCs
* (pic16_genMinus): fixed to cope with differently sized operands
* src/pic16/glue.c (pic16_glue): added new banksel optimization
for --obanksel > 1
* src/pic16/pcode.c: implemented (first phase of) banksel optimization
* src/pic16/graph.[ch]: implementation of directed graphs, used by
new banksel optimization
* src/pic16/pcoderegs.c (pCodeRegMapLiveRangesInFlow): prevented
analysis for temporary registers (segfaults...)
* src/pic16/peeph.def: added rule
vrokas [Tue, 18 Jan 2005 10:44:20 +0000 (10:44 +0000)]
* device/lib/pic16/libc/stdlib/x_ftoa.c: it defines x_ftoa function
which converts a float number to its ASCII representation
* device/lib/pic16/libc/utils/cnvfrac.S,cnvint.S: support
functions to convert the fractional and integer part of a float to ASCII,
* device/lib/pic16/libc/stdlib/(calloc.c,free.c, malloc.c,
realloc.c): added _MALLOC_SPEC to explicit place variables in data ram
vrokas [Tue, 18 Jan 2005 10:42:16 +0000 (10:42 +0000)]
* device/lib/pic16/libc/stdlib/x_ftoa.c: it defines x_ftoa function
which converts a float number to its ASCII representation
* calloc.c, free.c, malloc.c, realloc.c: added _MALLOC_SPEC to explicit
place variables in data ram
vrokas [Tue, 18 Jan 2005 10:09:24 +0000 (10:09 +0000)]
* device/include/asm/pic16/features.h: added _CODE, _DATA, _AUTOMEM,
_STATMEM macros,
* device/include/pic16/adc.h: added GPL info,
* src/pic16/gen.c (genIfxpCOpJump): perform an genIfxJump but using
a pCodeOp as tested operand,
* (genNearPointerGet): optimized bit testing, does not use
intermediate register for bit value, test directly instead with
BTFSS, BTFSC, works only for single bits,
* (genpic16Code): dump the name of the iCode in the asm,
* src/pic16/ralloc.c (decodeOp): removed static declaration and
renamed to pic16_decodeOp,
* (serialRegAssign): do not allocate a temporary register for iCode
sequences that test a single bit for 1/0
vrokas [Wed, 12 Jan 2005 14:26:24 +0000 (14:26 +0000)]
* src/pic16/pcode.[ch]: introduced pic16_stackpnt_*,
pic16_framepnt_*, pic16_stack_*, pic1_frame_* pointer variables to
access stack and frame pointers. They are initially assigned to
point at pic16_pc_fsr1[lh] and pic16_pc_fsr2[lh] variables and other
accessing SFRs. Updated all occurences of modification of stack or
frame pointer in gen.c and pcode.c,
* src/pic16/ralloc.c (serialRegAssign): fixed two bugs with
assigning of a literal value to pointers,
* src/pic16/main.c (pic16_finiliseOptions): set pre-processor define
flag STACK_MODEL_SMALL or STACK_MODEL_LARGE according to the model
selected
tecodev [Tue, 4 Jan 2005 11:48:45 +0000 (11:48 +0000)]
* src/pic16/gen.c (genIfxJump) fixed inverted skips on CARRY
* (genIfx) fixed (?) read from uninitialized SPIL_LOC (now assumes CARRY
to hold the condition bit)
* added new version of genCmp (old code available via #define)
* added new version of genShiftLeft/genShiftRight in a generic
way, now supports shifting by negative values
* (genLeftShiftLiteral, genRightShiftLiteral) use absolute value of
shiftCount (expected by genGenericShift)
* src/pic16/genarith.c (genPlus) added code for adding CARRY+literal
* src/pic16/pcode.c (pic16_OptimizeJumps) removed annoying statistics dump
* (pic16_newpCodeOpLit) changed to cast to unsigned char (as e.g. -32766
is an invalid literal too...)
tecodev [Tue, 4 Jan 2005 11:38:36 +0000 (11:38 +0000)]
* src/pic16/gen.c (genIfxJump) fixed inverted skips on CARRY
* (genIfx) fixed (?) read from uninitialized SPIL_LOC (now assumes CARRY
to hold the condition bit)
* added new version of genCmp (old code available via #define)
* added new version of genShiftLeft/genShiftRight in a generic
way, now supports shifting by negative values
* (genLeftShiftLiteral, genRightShiftLiteral) use absolute value of
shiftCount (expected by genGenericShift)
* src/pic16/genarith.c (genPlus) added code for adding CARRY+literal
* src/pic16/pcode.c (pic16_OptimizeJumps) removed annoying statistics dump
* (pic16_newpCodeOpLit) changed (again) to cast to _unsigned_ char (as e.g.
-32766 is an invalid literal too...)
vrokas [Tue, 4 Jan 2005 00:51:18 +0000 (00:51 +0000)]
* src/pic16/gen.c (aopForSym, genEndFunction): applied some fixes
from Raphael Neider,
* src/pic16/pcode.c (pic16_newpCodeOpLit): removed casting to char
for 8-bit literals. This fixes some literal operands which are sign
extended to 16-bits ints when instruction needs only 8-bits.
pjs [Tue, 28 Dec 2004 21:54:28 +0000 (21:54 +0000)]
Don't provide printf_fast, printf_fast_f and printf_tiny on architectures
they don't support (eg, with --xstack).
Don't compile shared asm float helper functions when asm float lib not
enabled.
vrokas [Wed, 22 Dec 2004 07:08:06 +0000 (07:08 +0000)]
* applied a previous patch from Raphael Neider that wasn't included
in the previous commits, which fixes infinite loops within jumptable
improvements,
* made some fixes that previous patches introduced
vrokas [Tue, 21 Dec 2004 08:10:01 +0000 (08:10 +0000)]
* src/pic16/gen.c (pic16_aopGet): applied fix from Raphael Neider
that fixes an issue with AOP_PCODE asmop's offset,
* (pic16_popCopyReg): update instance field too,
* (mov2w): modified to pic16_mov2w because it conflicts with mov2w
function of pic port,
* (genCmp, genAnd, genAssign),
* src/pic16/genarith.c (genAddLit): some fixes from Raphael Neider,
vrokas [Mon, 20 Dec 2004 21:48:32 +0000 (21:48 +0000)]
* src/SDCCast.c (gatherAutoInit): allow pic16 to emit static
variables initial values to idata section,
* src/SDCCicode.c (geniCodeCall): patch from ### to fix unreferenced
variables in some functions. This utilizes parmBytes field of iCode
structure to hold the offset of the variable in stack. (might be
able to use the stack field too?)
* applied patch from Raphael Neider # ### , # ###
* src/pic16/glue.c (pic16emitRegularMap): fix to print static
variable initial values in idata section,
* src/pic16/ralloc.c (pic16_allocDirReg): don't allocate register
for static variables with initial value
* src/device/lib/pic16/libsdcc/float/ulong2fs.c (__ulong2fs):
applied fix in while loop from Raphael Neider.
maartenbrock [Thu, 9 Dec 2004 18:24:40 +0000 (18:24 +0000)]
* device/include/sdcc-lib.h: inserted LGPL, added includes
asm/ds390/features.h and asm/mcs51/features.h
* device/include/asm/default/features.h,
* device/include/asm/gbz80/features.h,
* device/include/asm/z80/features.h: added empty _AUTOMEM
and _STATMEM
* device/include/asm/ds390/features.h,
* device/include/asm/mcs51/features.h: added files with defines for
_AUTOMEM and _STATMEM indicating automatic and static storage class
* device/lib/printf_large.c (_print_format): optimized & used _AUTOMEM
* doc/sdccman.lyx: version 2.4.7, updated xstack documentation
* src/SDCCicode.c (geniCodeCast),
* src/SDCCsymt.c (compareType): allow cast of data-ptr to idata-ptr
* src/SDCCloop.c (loopInduction): removed unused variable lr
* src/SDCCopt.c (convilong, convertToFcall): moved "easy special case"
to convertToFcall to include char modulo (RFE 1065037), added check
if left operand is unsigned and use abs of literal value
* src/SDCCpeeph.c (setFromConditionArgs): removed double quotes option
as it doesn't work after conversion from peephole.def to peephole.rul
* src/mcs51/gen.c (toBoolean): added check for size,
(genModOneByte): optimized code for signed char modulo a literal
power of 2 (thanks to Hubert Sack),
(genRRC): removed unnecessary "clr c",
(genRLC): replaced "add a,acc" with cheaper "rlc a"
* src/mcs51/peeph.def: renamed 115 to 115.a, added rule 115.b: another
jump optimization,
swapped rules 256.c and 256.d,
extended 256.d by using new multiple checks (thanks Erik),
added rules 256.e and 256.f,
updated rule 261.a and 261.b to new generated code
* support/regression/tests/muldiv.c: added test div/mod by a power of 2
vrokas [Sun, 5 Dec 2004 00:16:11 +0000 (00:16 +0000)]
* applied patch from bug-report #1076292,
* applied patches for genAnd and Goto-optimizations for Raphael
Neider,
* src/SDCCicode.c (printOperand): fixed !REGA source to compile and
dump a less iCode information,
* src/pic16/device.h (pic16_options_t): added field debgen,
* src/pic16/gen.h: added macros DUMP_FUNCTION_ENTRY,
DUMP_FUNCTION_EXIT, FENTRY, FENTRY2,
* src/pic16/gen.c (my_powof2): renamed to pic16_my_powof2 and made
puclic,
* (various functions): added macros FENTRY and FENTRY2 to functions,
to emit function prologue,
* (various functions): fixed indentation,
* (genNearPointerGet): fixed loading of FSR0,
* (genPackBits): applied patch from Raphael Neider to fix updating
of FSR0 and touching only the modified bits,
* src/pic16/genarith.c (various functions): added macros FENTRY to
emit function prologue in comments,
* src/pic16/pcode.h: added functions debugf2, debugf3,
* src/pic16/ralloc.c: partial fix for packForPush caused
segmentation fault,
frief [Sat, 4 Dec 2004 11:16:11 +0000 (11:16 +0000)]
* src/mcs51/peeph.def: added 261.a,b (16 bit rotate) by Stas Sergeev <stsp AT users.sourceforge.net> with reversed byte order
* support/regression/tests/rotate.c: added (ds390 skips some tests)