bernhardheld [Thu, 26 Feb 2004 20:51:08 +0000 (20:51 +0000)]
* src/SDCCicode.c (operandOperation): fixed EQ_OP bug, now same as in valCompare(); regression tested in muldiv.c
* support/regression/tests/muldiv.c: mod sign follows dividend only
bernhardheld [Thu, 26 Feb 2004 20:04:51 +0000 (20:04 +0000)]
* src/Makefile.in (dep): include SLIBOBJS in dependency check
* src/SDCCast.c (decorateType): catch another small optimization with '?' operator
* src/SDCCsymt.c (computeType): added comments and cosmetic changes
* src/SDCCval.c (valMult, valDiv, valMod, valPlus, valMinus, valShift): modified to finally use computeType() all over SDCC, see Feature Request #877103
* src/SDCCval.h: cosmetic
vrokas [Fri, 20 Feb 2004 00:48:07 +0000 (00:48 +0000)]
* doc/sdccman.lyx: removed PIC16 from PIC16 Port Specific Options,
removed -penable-stack, added comment for stack pragma, added
warning for not initializing the stack/frame registers, removed
comment at interrupts section
Stack is made permanent, there is no ability to disable stack usage.
* src/pic16/device.h,
* src/pic16/device.c: removed all references to USE_STACK macro,
* src/pic16/device.c (pic16_dump_section): when no elements in
rlist, free rlist before return,
* (pic16_dump_int_registers): NEW, internal registers are a new set
of general purpose registers reused by each function,
* (checkAddReg): returns 1 if registers is added to set,
* (pic16_groupRegistersInSection): when a registers is of type
PO_GPR_TEMP add it in pic16_int_regs and not in pic16_rel_udata,
* src/pic16/device.h: memRange and Assigned Memory are deleted,
SRCASECMP macro is moved here from device.c
* src/pic16/genarith.c (pic16_pCodeOpType): added cases for
PO_PCLATU, PO_PRODL, PO_PRODH,
* (pic16_pCodeOpType, genMinus,
changed compares to "a" register, with AOP_ACC,
* (pic16_genPlus): fixed some bugs and indented properly,
* (pic16_addSign): changed size to size+offset in the MOVWF
instruction,
* (pic16_genUMult8XLit_8): NEW, uses processor MULLW instruction to
multiply 8-bit operand by literal, result is 8-bit,
* (pic16_genUMult8X8_8): NEW, uses processor MULWF instruction to
multiply 2 8-bit operand, result is 8-bit,
* (pic16_genMult8X8_8): modified to call genUMult8X*_8 functions and not
genUMult8X*_16,
* src/pic16/gen.c: changed accUse to contain WREG only,
* (pic16_emitcomment): renamed to pic16_emitpcomment,
* (aopForSym): allocated dir register when IN_DIRSPACE(space) is,
true, do not use immediate addressing any more unless sym is a
pointer in codespace,
* (aopForRemat): do not use immediate addressing when symbol not in
codespace and when symbol's address is requested,
* (aopOp): for-loop in if(sym->accUse) is modified for the new
accUse size (= 1),
* (aopGet): added case for AOP_ACC and don't return "accumulator
bug" but WREG instead,
* (popGetTempReg): pushes contents of temporary register in stack,
* (popReleaseTempReg): pops contents of temporary register from
stack. Use popGetTempReg/popReleaseTempReg in aligned pairs,
* (pic16_popGet): separated case AOP_ACC to return register WREG
from processor registers, AOP_PCODE not checks if pcop is PO_DIR
or PO_IMMEDIATE and initializes their instance/offset appropriately,
* The whole issue with aopForSym,aopForRemat,popGet) is to minimize
the use of immediate pointers to certain cases only.
* (pic16_pushpCodeOpReg, pic16_poppCodeOpReg): use pic16_popGet2p,
* (pic16_loadFromReturn, pic16_storeForReturn: NEW,
* (assignResultValue, genCall, genRet): modified to use the new
function return value scheme with WREG,PRODL,PRODH,FSR0L and FSR0,
genPcall is still broken,
* (genFunction): added code to create 'A' type pBlocks when
interrupt functions are generated, code not extensively tested yet,
ISRs push WREG,STATUS,BSR,PRODL,PRODH,FSR0L,FSR0H registers on stack,
* (genEndFunction): modified so ISRs pop stored registers from stack,
* (genMultOneByte): cleanup,
* (AccRsh): added flag andmask, to and result with appropriate mask,
* (genUnpackBits,genPackBits): fixed and can handle bit fields,
* (genDataPointerGet): fixed and reenabled its use,
* (genNearDataPointerGet): bugs fixed,
* (genDataPointerSet): bugs fixed,
* src/pic16/genutils.c: added functions pic16_DumpValue,pic16_DumpAop,
pic16_DumpSymbol, pic16_DumpOp,
* src/pic16/genutils.h: function prototypes for the above functions,
* src/pic16/glue.c: new flags initsfpnt, to initialize stack/frame
pointers,
* (pic16emitRegularMap): many many many improvements, but needs a
major cleanup,
* src/pic16/main.c: enable_stack in pic16_options is removed,
* (_pic16_parseOptions): removed command line options -penable-stack,
* (_process_pragma): emit stack symbol only when stack pragma is
processed,
* src/pic16/pcode.c: pic16_pc_fsr0 is removed, all operations are
redirected to FSR0L/FSR0H pair,
* (pic16_get_op, pic16_get_op2): modifications and improvements,
* (pic16_getRegFromInstruction, pic16_getRegFromInstruction2): added
cases PO_PRODL,PO_PRODH, pic16_getRegFromInstruction2 returns sane
for immediates,
* (insertBankSwitch): modified to handle cases like: (alfa + 1)
* (dumpPicOptype): NEW,
* src/pic16/pcode.h: added PO_PCLATU,PO_PRODL,PO_PRODH in enum,
* src/pic16/pcoderegs.c (pCodeRegMapLiveRangesInFlow): fixed bug
with movff instruction,
* src/pic16/ralloc.c: renamed typeRegWithIdx to pic16_typeRegWithIdx,
added pic16_int_regs, some packRegsFor* functions are commented out,
because produce errors,
* src/pic16/NOTES: minor modifications
bernhardheld [Fri, 13 Feb 2004 21:47:42 +0000 (21:47 +0000)]
* src/SDCCicode.c (usualBinaryConversions): removed pic16 from ports which can't handle SDCC_NEWONEBYTEOPS,
(geniCodeMultiply): removed conversion from mult to shift for pic14 and pic16
bernhardheld [Wed, 11 Feb 2004 21:30:33 +0000 (21:30 +0000)]
* device/lib/_modsint.c,
* device/lib/_modslong.c: sign follows divisor only
* src/hc08/gen.c (genMultOneByte): if result size is 1, signs or signedness can be ignored
* src/SDCCast.c (addCast): cosmetic - added lineno to CAST
* src/SDCCast.c (resultTypePropagate): added even more ops: +, - and *, added optimization for IFX,
(decorateType): Mult/Div/ModOneByte ops can handle all kind of signed arguments;
reenabled optimization for IFX, which was removed on 2004-01-11
* src/SDCCast.h: added return type IFX
* src/SDCCicode.c: Mult/Div/ModOneByte ops can handle all kind of signed arguments with 8 or 16 bit results; pic14 and pic16 ports use old promotion behaviour;
env. var. SDCC_NEWONEBYTEOPS selects the new, SDCC_OLDONEBYTEOPS selects the old behaviour
* src/SDCCsymt.c (computeType): type2 can be NULL (for LEFT_OP);
changed again and commented promotion rule (it's still not perfect)
* src/SDCCval.c (valDiv): promotion no longer necessary
* src/ds390/gen.c (genMultOneByte) (genDivOneByte) (genModOneByte),
* src/mcs51/gen.c (genMultOneByte) (genDivOneByte) (genModOneByte): rewritten
* support/regression/tests/onebyte.c: added
vrokas [Tue, 10 Feb 2004 19:19:01 +0000 (19:19 +0000)]
* pcode.c,
* pcode.h,
* ralloc.h: added FSR0L, FSR0H and other missing PIC16 SFR's for
indirect addressing. Marked FSR0 as deprecated
* gen.c (pointerCode): commented out, not needed now
(pic16_popGet2p): new MOVFF helper function
(genGenPointerGet),
(genGenPointerSet): reimplemented with MOVFF and POSTINC0
(shiftRLong): removed duplicate debugging info
frief [Sun, 8 Feb 2004 14:29:30 +0000 (14:29 +0000)]
* device/include/c8051f120.h,c8051f300.h,c8051f310.h: added/updated header files for
Silicon Laboratories (formerly Cygnal) CPUs. Contributed by Maarten Brock.
* doc/sdccman.lyx: minor changes, recommended diff -Naur and diff -u in new section Submitting patches
epetrich [Sat, 7 Feb 2004 08:21:56 +0000 (08:21 +0000)]
* support/Util/SDCCerr.h,
* support/Util/SDCCerr.c,
* src/SDCCast.c (decorateType, sizeofOp): complain when sizeof is used
with an incomplete type (fixed bug #883734)
* src/SDCCicode.c (geniCodeCast): fixed bug #890510
epetrich [Fri, 6 Feb 2004 06:27:15 +0000 (06:27 +0000)]
* src/SDCCast.c (decorateType),
* src/SDCCicode.c (geniCodeParms, geniCodeCall): fixed bugs in my ANSI
function pointer implementation
* support/regression/tests/funptrs.c: added tests to verify both forms
of function pointers work correctly. Added tests to verify parameters
are passed in the correct order.
vrokas [Fri, 6 Feb 2004 01:54:37 +0000 (01:54 +0000)]
2004-02-06 Vangelis Rokas <vrokas AT otenet.gr>
* device.c (regCompare): registers are sorted by ascending
address and increasing size,
* main.c (_pic16_finaliseOptions): removed the declaration
of compiler macro MCU. Now a macro of the format pic18fxxxx
will be defined from the command line
2004-02-06 Hans-Juergen Dorn <hans.dorn AT apl-landau.de>
patch committed by Vangelis Rokas <vrokas AT otenet.gr>
* pcode.c (pic16initMnemonics): fixed typo in assignment to PCOP_RLNCF
PCOP_RLCF was overwritten!
* gen.c (genSkip) commented out calls to pic16_emitcode,
* (genCmpEQ) fixed "long" compares, only high word did get compared,
* (genlshTwo),
* (genRRC) added debugging info,
* (shiftL2Left2Result) Fixed bug, if offr > offl. Result got
overwritten while shifting,
* (shiftR2Left2Result) Fixed bug, if offr < offl. Result got
overwritten while shifting,
* (AccLsh),
* (AccRsh),
* (shiftLLeftOrResult),
* (shiftRLeftOrResult),
* (shiftRLong),
* (shiftLLong) Implemented with pic16_emitpcode
* (genlshFour) Replaced pic16_aopPut with pic16_emitpcode,
* (genLeftShift) Fixed bug, operand for shift by variable always
was "and"ed with 0x0f,
* (genLeftShiftLiteral),
* (genrshTwo),
* (genRightShiftLiteral) added debugging info,
* (genrshFour) added comment,
* (genRightShift) determined signedness from operand "left"
instead of "result"
epetrich [Wed, 4 Feb 2004 06:26:03 +0000 (06:26 +0000)]
* src/SDCCicode.c (geniCodeParms),
* src/SDCCast.c (decorateType, processParms): support for ANSI-style
function pointers, fixed function pointer bugs #861242 and #861896
bernhardheld [Sat, 31 Jan 2004 21:47:47 +0000 (21:47 +0000)]
* src/SDCCast.c (processParams): added new type flow and restructured
(gatherAutoInit): added new type flow
(addCast): cosmetic changes
(getLeftResultType): added new type flow for array indices, patch provided by Stas, see FR #877103
(decorateType): SDCC_NEWTYPEFLOW removed, new type flow is now standard; array index patch by Stas
* src/SDCCast.h: added prototype getResultTypeFromType()
* src/SDCCval.h,
* src/SDCCval.c (resolveIvalSym) (resolveIvalSym),
* src/pic/glue.c (pic14emitStaticSeg),
* src/pic16/glue.c (pic16emitStaticSeg),
* src/SDCCglue.c (emitRegularMap) (emitStaticSeg): added new type flow for initialization of symbols
* src/SDCCicode.c (geniCodeArray): removed warning W_ARRAY_BOUND
* support/Util/SDCCerr.h:
* support/Util/SDCCerr.c: replaced W_ARRAY_BOUND by W_IDX_OUT_OF_BOUNDS
* .version: bumped version number to 2.3.8
frief [Sat, 31 Jan 2004 21:36:33 +0000 (21:36 +0000)]
Added header files for Silicon Laboratories (formerly Cygnal) CPUs
converted by Maarten Brock. The original cygnal license prohibited inclusion into SDCC.
On 2004-01-19 Maarten has received permission from <mcutools@silabs.com>: "We are currently in the process of removing the copyright notices from our header files. So, feel free to do what you like with them". We maybe will change later from LGPL to whatever license shows up on the silabs website.
epetrich [Thu, 29 Jan 2004 06:36:41 +0000 (06:36 +0000)]
* src/z80/gen.c (genMult): handle single byte result product
* src/SDCCopt.c (killDeadCode): never convert ADDRESS_OF iCode to
DUMMY_READ_VOLATILE (fixed bug #886367)
bernhardheld [Tue, 27 Jan 2004 09:40:04 +0000 (09:40 +0000)]
Fixed promotion, it should be done on AST level:
* src/SDCCast.c (addCast): added promotion to int
(decorateType): updated call to upCast()
* src/SDCCicode.c (geniCodeLeftShift): removed call usualUnaryConversions()
bernhardheld [Sun, 25 Jan 2004 21:33:56 +0000 (21:33 +0000)]
* src/SDCCast.c: added an additional type flow in decorateType() of opposite direction, see feature request #860006; it's enabled at runtime by setting the environment variable SDCC_NEWTYPEFLOW
* src/SDCCast.h: changed prototype of decorateType()
* src/SDCCglue.c (emitRegularMap): updated call of decorateType()
* src/SDCCicode.c (geniCodeDivision) (geniCodeModulus): promotion from 'char' to 'int' can be omitted, if both operands are 'unsigned char'; see feature request #877103
* src/SDCCval.c: updated call of decorateType()
(valBitwise): fixed bug #882876
(valMinus): added promotion
(valLogicAndOr): result is unsigned
(cheapestVal) (constVal): literals from 0...255 are 'unsigned char' now
* src/SDCCsymt.c (computeType),
* src/mcs51/gen.c (genCmpGt) (genCmpLt): literal 'unsigned char' must not cause an unsigned operation
* src/pic/glue (pic14emitRegularMap),
* src/pic16/glue.c (pic16emitRegularMap): updated call of decorateType()
bernhardheld [Tue, 20 Jan 2004 21:08:53 +0000 (21:08 +0000)]
* src/pic/device.c,
* src/pic/gen.c,
* src/pic/gen.h,
* src/pic/glue.c,
* src/pic/main.c,
* src/pic/pcode.c,
* src/pic/pcode.h,
* src/pic/pcodepeep.c,
* src/pic/pcoderegs.c,
* src/pic/ralloc.c,
* src/pic/ralloc.h: applied patch from Slade Rich;
added support for multiple code pages and multiple RAM banks on the
PIC 14 port. The ASM files now no longer simply assume all the
code / RAM are in the same page / bank. This means the linker can
safely allocate code/RAM of separate ASM files to different pages/banks.
* doc/sdccman.lyx: added Slade's tips
bernhardheld [Tue, 20 Jan 2004 21:06:26 +0000 (21:06 +0000)]
* support/valdiag/tests/overflow.c: added shift tests
* src/pic/device.c,
* src/pic/gen.c,
* src/pic/gen.h,
* src/pic/glue.c,
* src/pic/main.c,
* src/pic/pcode.c,
* src/pic/pcode.h,
* src/pic/pcodepeep.c,
* src/pic/pcoderegs.c,
* src/pic/ralloc.c,
* src/pic/ralloc.h: applied patch from Slade Rich;
added support for multiple code pages and multiple RAM banks on the
PIC 14 port. The ASM files now no longer simply assume all the
code / RAM are in the same page / bank. This means the linker can
safely allocate code/RAM of separate ASM files to different pages/banks.
* doc/sdccman.lyx: added Slade's tips
epetrich [Tue, 20 Jan 2004 05:48:09 +0000 (05:48 +0000)]
* src/hc08/gen.c (genPlusIncr, genUminus, genMinusDec, genCmp,
shiftL2Left2Result): fixed bug #879326
(genAnd, genOr, genXor): fixed bug when result was of type AOP_CRY
(genMultOneByte): fixed bug in signed vs unsigned multiplication
* sim/ucsim/hc08.src/inst.cc (inst_clr): added missing effective
address fetch for clr instruction
* device/lib/hc08/_mulint.c: created optimized assembly version
* src/SDCCdflow.c (computeDataFlow): fixed bug #878209
vrokas [Fri, 16 Jan 2004 15:06:35 +0000 (15:06 +0000)]
2004-01-16 Vangelis Rokas <vrokas@otenet.gr>
* src/SDCCmain.c (linkEdit): variable $3 of the linker command is
loaded with the linker search paths (-L arguments) and the libraries
to be linked with the current source (-l arguments). Changes
currently will affect only the pic16 port.
* src/pic16/main.c (_pic16_finaliseOptions): add to the linker
include path the port specific paths and port specific libraries,
* gplink command now contains the $3 argument,
* src/pic16/device.h,
* src/pic16/device.c,: structure PIC_device is made public and
renamed to PIC16_device, the same for variable Pics which is renamed
to Pics16. Updated all references to them.
* src/pic16/glue.c (pic16glue): corrected bug with code
initialization which bypassed the variable initializations block.
* device/lib/pic16/Makefile.rules: removed --penable-stack from
COMPILE_FLAGS and added the --nostdinc option
vrokas [Tue, 13 Jan 2004 23:18:32 +0000 (23:18 +0000)]
2004-01-14 Vangelis Rokas <vrokas@otenet.gr>
Documenting changes from previous commits.
* configure.in (version 1.56),
* configure: initially I've added AC_CONFIG_SUBDIRS(device/lib/pic16)
when generating output files to configure the pic16 library,
but now I've commented it out, since gputils aren't installed in the
SF compile farm, so library won't compile
* device/lib/Makefile.in (version 1.56): initially I've added in
target 'all' the prerequestive 'model-pic16' so it compiled the
pic16 library, but now I've commented it out for the same reasons
above,
* added targets 'model-pic16' and 'objects-pic16' to compile the
library
* added target 'port-specific-objects-pic16' to handle the
generated libraries and copy them into the build/ directory
* added target 'clean-intermediate-pic16' to clean intermediate
files into pic16 directory
* in target 'installdirs' added line to create directory pic16 in
the installation path
* device/include/Makefile.in (version 1.11): in target 'install'
added lines to copy all header files to installation path,
* in target 'installdirs' added line create directory for pic16
headers in the installation path
epetrich [Tue, 13 Jan 2004 06:31:25 +0000 (06:31 +0000)]
* src/z80/main.c (_parseOptions): fixed the portmode= command line
option so that it actually works. Made it specific to the z80, since
the gbz80 doesn't have these kinds of I/O ports.
vrokas [Mon, 12 Jan 2004 23:31:46 +0000 (23:31 +0000)]
2004-01-13 Vangelis Rokas <vrokas@otenet.gr>
Mainly changes to support compilation of the device libraries
* src/pic16/device.c: stack is allocated via symbol and not
via literal number. The symbol is placed in the corresponding
position of the data ram
* (pic16_dump_section): relocatable and absolute uninitialized
data are now emitted in sorted order to reduce section naming,
* src/pic16/ralloc.c (newReg): fixed bug with SFR's that
weren't marked as being in the access bank,
vrokas [Mon, 12 Jan 2004 22:40:44 +0000 (22:40 +0000)]
2004-01-13 Vangelis Rokas <vrokas@otenet.gr>
Added portion of GNU PIC Library under the directory
device/include/pic16 and device/lib/pic16. These files
contain the declarations of SFRs for the PIC18Fxx2 devices.
The directory is initialized via configure from toplevel.