* src/SDCCcse.h (struct cseDef),
* src/SDCCcse.c (cseBBlock, newCseDef, ifFromAddrTaken): purge CSEs
over a function call if the CSE is derived from a symbol whose
address has been taken (fixes bug #1029883)
* support/regression/tests/bug-1029883: a new regression test for
this bug
* src/hc08/gen.c (emitinline): fixed bug #1029778
* src/SDCC.y (assignment_expr): fixed the grammer so that assignment
to a cast object is no longer a syntax error ("fixes" bug #1030006,
and starts toward RFE #905167)
* src/pic16/gen.c (mov2f): New function to move an operand to
another without considering if it is a literal or a register,
* (pic16_sameRegs): don't check if they are both AOP_REG,
* (AccRsh): removed andmask=0 lines,
* (genLeftShift): duplicated to be improved in future versions,
* src/pic16/main.c (_process_pragma): emit stack default size in hex,
* src/pic16/pcode.c: added POC_INFSNZW, updated inverted_op fields
in POC_INCFSZ, POC_INCFSZW, POC_INFSNZ,
* (pic16initMnemonics): added initialization for POC_INFSNZW,
* (insertBankSwitch): fixed inserting banksel directives algorithm
for instructions that follow a skip instruction, this fixes a report
for broken subtraction code generation,
* src/pic16/ralloc.c (deassignLRs): do not free register if current
iCode is a left op, just in case result and right share the same
registers
* src/hc08/main.c,
* src/hc08/gen.c (genJumpTable): more efficient jump table, supports
preservation of HX
* src/hc08/gen.c (pullRegs): fixed order of HX & XA pairs
* src/mcs51/ralloc.c (packRegisters): removed the patch applied
on 2004-09-12; it was buggy
* src/SDCCicode.c (piCode): applied patch from Raphael Neider,
* src/pic16/device.c (pic16_assignConfigWordValues): wrong
configuration values no more rejected by compiler, they are assigned
to configuration registers with a warning message instead,
* src/pic16/glue.c (pic16_emitConfigRegs): added +1 at top-limit of
the for-loop so last conf register is emitted too,
* (_pic16_initPaths): link library libsdcc.lib by default,
* (_hasNativeMulFor): modified test for multiplication according to
Raphael Neider's remarks. Integer multiplication is also done with
support functions,
* device/include/pic16/pic18fregs.h: corrected type error in while
testing and including 18f6720 header file
* src/pic16/device.h (pic16_options): removed field use_crt,
* src/pic16/gen.c (genUnpackBits): added call to pic16_loadFSR0
until an optimization to handle single bits is added,
* (pic16_loadFSR0): moved before genUnpackBits,
* (genAnd): some white lines removed,
* src/pic16/main.c (_pic16_finaliseOptions): set omit_ivt and clear
leave_reset flags in pic16_options when using crt modules,
* src/pic16/device.h (pic16_options_t): added field use_crt,
crt_name, no_crt,
* src/pic16/genarith.c (pic16_genPlus): added an assert(0) line to
catch a probable future bug,
* src/pic16/gen.c: aopIdx function commented out,
* (genAssign): commented out old code which used aopIdx,
* src/pic16/glue.c (pic16glue): removed some legacy fragments of
code, added if conditionals to take into account the --use-crt
command line options,
* src/pic16/main.c (pic16_optionsTable): added new command line
options, --use-crt= and --no-crt,
* (_pic16_linkEdit): now the proper crt object is added in the
linker command line except than when --no-crt is specified,
* pcode.c,
* pcode.h: added some structures and functions for a new
optimization scheme to compansete for instruction overhead between
same iCodes, this scheme is currently under development and is not
working in any way,
* src/pic16/gen.c (genAnd): added patch provided by Aaron Collwell
to && operator,
* device/lib/pic16/startup/crt0i.c,
* device/lib/pic16/startup/crt0iz.c: added global char variable
__uflags to force the generation of an idata section
* src/port.h,
* src/mcs51/main.c,
* src/ds390/main.c,
* src/z80/main.c,
* src/hc08/main.c,
* src/pic/main.c,
* src/pic16/main.c,
* src/avr/main.c,
* src/xa51/main.c
* src/SDCCicode.c (geniCodeJumpTable): Better logic to determine if a
a jump table is the best form for a switch statement, including
automatic insertion of missing cases to make the case range
continuous. Developed in collaboration with Frieder Ferlemann.
* src/pic16/gen.c (genPackBits): added operand right in function
parameters, load result directly if p_type is POINTER (that is
called by genNearPointerSet)
* (genUnPackBits): added operand left in function parameters,
* (genNearPointerGet, genNearPointerSet): prevent the loading of
FSR0 if accessing bitfields,
epetrich [Tue, 31 Aug 2004 07:46:41 +0000 (07:46 +0000)]
* src/SDCCpeeph.c (labelIsReturnOnly): support hc08 rts opcode also
* src/SDCCpeeph.c (buildLabelRefCountHash): assume function entry point
labels are referenced at least once (even if a reference is not found)
* src/hc08/gen.c (emitcode): set isComment flag for comments
* src/hc08/peeph.def: added rules 5a..5f (optimize redundant immediate
loads), rules 6a..6b (optimize jumps to return)
epetrich [Mon, 30 Aug 2004 05:04:03 +0000 (05:04 +0000)]
* src/hc08/gen.c (loadRegFromAop): better use of clra & clrx
* src/hc08/gen.c (genAnd, genOr): fixed bug with conditional when
multi-byte volatile operands are used
* src/hc08/gen.c (shiftRLong): fixed bug with wrong rotate direction
* src/hc08/main.c (_hc08_genAssemblerPreamble): moved the built-in
initialization to area GSINIT0 so that it would always precede
any static initializers in GSINIT
* support/regression/tests/zeropad.c: fixed idata define for hc08
* support/regression/tests/bug-927659.c,
* support/regression/tests/float_trans.c: disabled tests for hc08
pending missing library routines
* .version: increased version number to 2.4.4 - hc08 port now passes
regression tests
vrokas [Sun, 29 Aug 2004 10:26:33 +0000 (10:26 +0000)]
* src/pic16/gen.c (genFunction, genEndFunction): fixed return
instruction for interrupt handlers, use fast returns when returning
from high priority interrupts
epetrich [Sun, 29 Aug 2004 07:44:29 +0000 (07:44 +0000)]
* src/hc08/gen.c (genAnd, genOr, transferAopAop, rmwWithAop): optimized
code generation
* src/hc08/gen.c (genrshFour, genCpl): fixed bugs
* src/hc08/gen.c (genMultOneByte, genDivOneByte, genModOneByte): fixed
bugs, ported much of Bernhard's code from mcs51
* src/mcs51/gen.c (genSend),
* src/hc08/gen.c (genSend): fixed bug with lost SEND iCodes if more
than one when calling a reentrant function
* device/lib/_mullong.c: defined an alternate struct layout for big
endian ports (hc08)
epetrich [Sat, 28 Aug 2004 05:48:48 +0000 (05:48 +0000)]
* src/SDCCsymt.c (processFuncArgs): make sure parameter types
are sane and complete before asking the port its prefered parameter
passing method (fixes bug #1017633)
* device/lib/hc08/_ret.c: added "data" storage class to _ret2
and _ret3
epetrich [Fri, 27 Aug 2004 06:46:26 +0000 (06:46 +0000)]
* src/hc08/gen.c (genPointerSet, genFarPointerSet): moved code from
genFarPointerSet into genPointerSet; eliminated genFarPointerSet
* src/hc08/gen.c (genPointerGet, genFarPointerGet): moved code from
genFarPointerGet into genPointerGet; eliminated genFarPointerGet
* src/hc08/gen.c (genPackBitsImmed): generate optimized code for
assignments to bitfields at known addresses
* src/hc08/gen.c (genUnpackBitsImmed): generate optimized code for
reads from bitfields at known addresses
* src/hc08/ralloc.c (packRegisters),
* src/hc08/gen.c (genPointerGet, genUnpackBits, genUnpackBitsImmed,
genhc08Code): optimize pointer get values used as conditionals
* src/hc08/peeph.def: added rules 2e & 2f to optimize bit test
and branch
frief [Sat, 14 Aug 2004 14:10:03 +0000 (14:10 +0000)]
2004-08-14 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
* src/mcs51/gen.c (genJumpTab): jumptables for more than 16 switch cases use more compact code
epetrich [Thu, 12 Aug 2004 02:32:05 +0000 (02:32 +0000)]
* src/SDCCsymt.h,
* src/SDCCsymt.c (changePointer, checkDecl, addSymChain): changed
parameter of changePointer() from symbol* to sym_link*
* src/SDCCast.c (decorateType): call changePointer() for CAST op
* src/SDCCsymt.c (compareType): void* type is castable to other
pointers, but not necesarily an exact match.
* src/SDCCicode.c (geniCodeCast): allow void* casting here since it
is no longer blindly treated as an exact match.
* src/SDCCval.c (valCastLiteral): treat missing type as cast to void
* src/SDCCmem.c (allocGlobal): don't turn S_REGISTER storage class
to S_FIXED for pic16 port and when symbol is not in level 0,
allocate for S_REGISTER storage class and pic16 port, too,
* src/pic16/device.h: prototype for checkSym,
* src/pic16/device.c (pic16_dump_access, checkSym): NEW,
* (pic16_assignConfigWordValue): test the value and the mask to
validate that the value is suitable for the configuration word,
* src/pic16/glue.c (pic16_printIvalFuncPtr): use 'externs' to
collect extern declared symbols, don't emit symbol twice, check
first if symbol is in publics set first,
* src/pic16/main.c (_pic16_keywords[]): added keyword 'register',
* added command line '--fstack' which enables an experimental
feature for stack access, too buggy to be used yet...
* src/pic16/ralloc.c (pic16_accessregWithName): NEW,
* (pic16_allocDirReg): when register has storage class S_REGISTER
allocate in pic16_dynAccessRegs,
* device/include/pic16/pic18f????.h: modified configuration word
naming convention, words started as CONFIG0H but should be CONFIG1H
* doc/sdccman.lyx: updated example in section "Absolute Addressing"
* src/mcs51/peeph.def: added contributed fix for "bug" #995347 as peephole 177.e. Thanks to anonymous