vrokas [Sun, 11 Jan 2004 15:26:54 +0000 (15:26 +0000)]
2004-01-11 Vangelis Rokas <vrokas@otenet.gr>
SDCC source changes:
* src/SDCCopt.c (cntToFcall, cnvToFloatCast, cnvFromFloatCast,
convilong): modified to inform the pic16 port that builtin functions
are external
PIC16 PORT specific changes:
* src/pic16/device.c pic16_dump_equates() added,
processor registers declared internally by the port are emitted in
the translation as equates,
* src/pic16/gen.c: inline code is passed unprocessed to the
translation,
* (pic16_popGetLit2): fnuction modified to take second operand as
pCodeOp pointer and not as literal,
* (popRegFromIdx): prefixed with pic16_,
* (pic16_popCombine2): modified to receive already allocated pCode
operands,
* (pic16_pushpCodeOpReg, pic16_poppCodeOpReg): added
* (genFunction): initializes local stack frame and pushes on stack
all the registers used by this function,
* (genEndFunction): restores all registers from stack and restores
stack frame,
* src/pic16/glue.c (pic16emitRegularMap): various changes and
improvements,
* (pic16glue): changed the program startup sequence,
* added new dbName code 'A' for functions placed in absolute section
* src/pic16/main.c: added function attribute _naked,
* added pragma 'code' to place a fnuction at an absolute address,
* added command line arguments --debug-ralloc and --pcode-verbose,
* (_pic16_finiliseOptions): options.all_callee_saves is set by default
* src/pic16/pcode.c (pic16_pBlockConvert2Absolute) added,
* (pic16_newpCodeOpLit2): modified to take the second operand as
pCodeOp pointer,
* (pic16_printpBlock): modified to emit each function in a separate
section,
* (pic16_get_op): modified to use the gpasm modifiers LOW,HIGH and
UPPER for immediate operands,
* src/pic16/pcodepeeph.c: added peephole support for the LFSR
instruction,
* src/pic16/peeph.def: all peepholes with movff are commented out,
because there is a problem in the pcode peep optimizer,
* src/pic16/ralloc.c: the register allocator can now reuse local
function symbols for another function. This saves register usage.
* src/pic16/ralloc.h: added flag isLocal in structure regs,
Added file src/pic16/NOTES with information about program writing on
the current port version.
epetrich [Fri, 9 Jan 2004 06:03:09 +0000 (06:03 +0000)]
* src/ds390/main.c,
* src/z80/main.c: added missed needLinkerScript flags (more than
one port structure defined in these file)
* src/ds390/gen.c (aopForSym, aopOp, operandsEqu, aopOp3): fixed
bug #795325
vrokas [Thu, 8 Jan 2004 16:08:03 +0000 (16:08 +0000)]
2004-01-08 Vangelis Rokas <vrokas@otenet.gr>
* src/SDCCmain.c: removed various references to DEFAULT_PORT
* src/port.h: added flag needLinkerScript in port->linker
structure to inform whether to create a .lnk file or not,
* src/avr/main.c,
* src/ds390/main.c,
* src/hc08/main.c,
* src/mcs51/main.c,
* src/pic/main.c,
* src/pic16/main.c,
* src/xa51/main.c,
* src/z80/main.c: changed appropriately to configure
needLinkerScript flag
* src/pic/gen.c,
* src/pic16/gen.c (genAddrOf): fixed bug #863624
* src/pic/glue.c: added variable udata_section_name to
override default uninitialized data segment definition for
devices only with SHAREBANK memory (reported from Erik Epetrich)
* (pic14emitOverlay): modified to emit a commented overlay segment
directive when no overlay data exist
* (picglue): modified to emit uninitialized data segment
according to udata_section_name
* src/pic/main.c (_pic14_parseOptions): added command line
options --udata-section-name=[name] to override default
udata definition name
* modified _linkCmd and _asmCmd to include compiler passed
arguments via -W option
* src/pic16/main.c: added $l in _asmCmd, changed extension for
object file from '.rel' to '.o' in port->linker structure,
changed size of fptr from 2 to 3 in port structure
epetrich [Wed, 7 Jan 2004 07:28:00 +0000 (07:28 +0000)]
* src/SDCCsymt.c (processFuncArgs): fixed superflous allocation noted
in bug #860505
* src/SDCCmem.c (printAllocInfoSeg, printAllocInfo): minor changes to
how the function variable allocation summary is displayed; also
include information about variables allocated to the overlay
segment
epetrich [Tue, 6 Jan 2004 07:14:55 +0000 (07:14 +0000)]
A python script to validate compiler diagnostic messages. It can be
used to verify that sdcc complains about bad c source code and
gives a good location of the error.
* support/valdiag/Makefile,
* support/valdiag/valdiag.py,
* support/valdiag/tests/*
epetrich [Tue, 6 Jan 2004 07:04:52 +0000 (07:04 +0000)]
* src/SDCC.y (enum_specifier, enumerator_list, opt_assign_expr),
* src/SDCCsymt.c (newEnumType),
* src/SDCCsymt.h
* support/Util/SDCCerr.c,
* support/Util/SDCCerr.h: fixed bug #871258 and some other unreported
enum related bugs.
* support/regression/tests/enum.c: added test for enum values that
require at least 2 bytes of storage.
vrokas [Mon, 5 Jan 2004 19:45:14 +0000 (19:45 +0000)]
2004-01-06 Vangelis Rokas <vrokas@otenet.gr>
PIC16 port related changes:
* device.c: removed pic16_finalMapping and pic16_finalMappingSize,
added variable stackPos,
* gen.c: genCall, assignResultValue: added support for
pushing/retrieving function parameters to/from stack,
genFunction,genEndFunction: setup stack frame for the
generated function,
genAddrOf: will be changed according to bug 863624
* added files genutils.c and genutils.h which contain gen*
debugged and optimised functions extracted from gen.c
* glue.c: added variable 'externs' which holds extern symbols,
pic16emitRegularMap: is modified to properly handle relocatable
symbols under the new scheme,
pic16createInterruptVect: is modified
pic16printPublics: is modified to emit 'global' assembler directives,
added pic16_printExterns to print extern symbols,
pic16glue: initializes stack/frame pointer in the beginning of
the assembly output. Temporary hack, will be corrected later,
because gplink yet does not support stack and SDCC does not
yet support a type of crt0.o object to create the final binary.
* Removed many lines that contain 8051 legacy code.
* The code is finally placed under a 'code' directive.
* Added port specific options.
* _process_pragma: simplified since now we do not need *special*
include file to define SFR registers. But a separate header
will be needed. This will be developed later.
* _pic16_parseOptions: added, parses port specific options:
--pgen-banksel, --obanksel=, --pomit-config-words, --pomit-ivt,
--pleave-reset-vector, --penable-stack, --pstack-model, --debug-xtra
--preplace-udata-with=
* _pic16_setDefaultOptions: modified to initialize section names,
but hack is temporarly out of order since it needs improvement.
* _pic16_genAssemblerPreamble: configuration words are emitted by
their address instead of their name. This part is incomplete and
supports only the 18Fxx2 devices. Other devices will emit an error
during assembly since they do not contain the same set of config
registers
* _pic16_genIVT: is modified,
* pcode.c: added definitions for some hardware registers that are needed
for stack support
* added flag is2LitOp and variable pci_magic in pCodeInstruction.
All PCI entries are updated. Now LFSR is supported.
* Removed pic16_pciTRIS is mentioned by mdubuc in source
* added pic16_newpCodeOpLit2 to support instructions with
two literal arguments
* pic16_pCode2str: corrected code that emits assembler instructions
with two literal operands and those that have an access bit modifier
* genericPrint: now PC_ASMDIR pCodes, can emit a label if it exists,
this fixes a bug which caused some labels to be lost, when an
assembler directive was added, i.e. banksel,
* pic16_FixRegisterBanking: improved logic that causes the insertion
of bank switching,
* InlineFunction: functions that are called once, are not any more
inlined. This can be a port option in the future,
* pcode.h: added pCodeOpLit2 and added variable label in pCodeAsmDir
* ralloc.c: added pic16_rel_udata and pic16_fix_udata variables which
hold the corresponding uninitialized symbols,
* pic16_allocProcessorRegister: registers have explicit marked the
accessBank field,
* pic16_allocInternalRegister: registers are explicit marked as
not used,
* pic16_writeUsedRegs: pic16_dynDirectBitRegs was missing from the
processing list, so bit registers were lost,
*
* ralloc.h: added field 'accessBank' and original symbol operand
in register definition,
* removed the field isMapped from register definition,
** Several functions have been removed from various sources:
BanksUsedFlow2,BanksUsedFlow,FixBankFlow,InstructionRegBank,
pic16_addMemRange,pic16_isREGinBank,pic16_dump_map,pic16_dump_cblock
isSFR,validAddress,mapRegister,assignRegister,pic16_assignFixedRegisters
pic16_assignRelocatableRegisters
** others have been introduced:
pic16_areRegsSame,pic16_dump_section,checkAddReg,pic16_groupRegistersInSection
pic16_popGetLit2,pic16_popCombine2,pushw,pushaop
vrokas [Mon, 5 Jan 2004 17:45:04 +0000 (17:45 +0000)]
2004-01-05 Vangelis Rokas <vrokas@otenet.gr>
* support/scripts/inc2h.pl: changed definition of BIT_AT
to emit 'sbit at' instead of 'bit at'. This was a request.
PIC16 port related preliminary changes:
* gen.c: prefixed function popRegFromString with
pic16_ and all references to it corrected
* pcode.c: all pic16_pc_* hardware registers prefixed
with underscore (_),
pic16_popCopyGPR2Bit(): function sets register wasUsed=1
* ralloc.c: newReg(): when register is REG_SFR then
set address to rIdx,
pic16_allocProcessorRegister(): marks register wasUsed=0
pic16_writeUsedRegs(): added a call to assign processor
registers via pic16_assignFixedRegisters
epetrich [Thu, 1 Jan 2004 17:10:04 +0000 (17:10 +0000)]
* src/SDCCsymt.h,
* src/SDCC.y (struct_or_union_specifier),
* support/Util/SDCCerr.c,
* support/Util/SDCCerr.h: verify that struct & union tags are used
as declared.
epetrich [Thu, 18 Dec 2003 21:23:36 +0000 (21:23 +0000)]
* src/SDCCast.c (createIvalCharPtr),
* src/SDCCglue.c (printChar): fixed bug #862241 (an error in my fix for
bug #753752)
* support/regression/tests/nullstring.c: tests for these two bugs
epetrich [Tue, 16 Dec 2003 19:46:43 +0000 (19:46 +0000)]
* src/SDCCval.c (valPlus, valMinus, valShift): fixed some problems with
implicit casts via union; they don't work on big endian systems
(possible fix for bug #861138)
frief [Sat, 13 Dec 2003 23:31:56 +0000 (23:31 +0000)]
* src/mcs51/main.c: fixed bug #737001 for the mcs51. SDCC clears xdata and data memory on startup. Set the environment variable SDCC_NOGENRAMCLEAR to disable this.
frief [Sat, 13 Dec 2003 23:09:08 +0000 (23:09 +0000)]
* src/mcs51/main.c: fixed bug #737001 for the mcs51. SDCC clears xdata and data memory on startup. Set the environment variable SDCC_NOGENRAMCLEAR to disable this.
frief [Sat, 13 Dec 2003 13:19:38 +0000 (13:19 +0000)]
src/mcs51/peephole.def, src/ds390/peephole.def: using the atomic test and clear instruction jbc (allows non-interrupt and interrupt code to safely compete for a resource without the non-interrupt code having to disable interrupts)
frief [Sat, 13 Dec 2003 13:17:53 +0000 (13:17 +0000)]
using the atomic test and clear instruction jbc. Allows non-interrupt and interrupt code to safely compete for a resource
without the non-interrupt code having to disable interrupts. Moved peephole 251 to the end and renumbered two to get
ascending numbers.
frief [Sat, 13 Dec 2003 13:16:08 +0000 (13:16 +0000)]
using the atomic test and clear instruction jbc. Allows non-interrupt and interrupt code to safely compete for a resource without the non-interrupt code having to disable interrupts.
epetrich [Sat, 13 Dec 2003 06:56:07 +0000 (06:56 +0000)]
* src/SDCCicode.c (geniCodeAdd),
* src/SDCCast.c (decorateType): fixed bug #857753 (need to be careful
with valFromType if type might be a pointer and host is big endian).
* src/SDCCast.c (decorateType): unary plus compatible with all arithmetic
types, not just integer types.
* src/SDCCsymt.c (addSymChain): clarified error message when symbol is
multiply defined with mismatching "at" address.
epetrich [Tue, 9 Dec 2003 07:17:29 +0000 (07:17 +0000)]
* src/SDCCopt.c (killDeadCode): change iCode type to DUMMY_READ_VOLATILE
instead of deleting the iCode when an operand is volatile
* src/z80/gen.c (genDummyRead),
* src/mcs51/gen.c (genDummyRead),
* src/ds390/gen.c (genDummyRead),
* src/hc08/gen.c (genDummyRead): handle operands in IC_LEFT and/or IC_RIGHT,
not just IC_RIGHT
* src/SDCCicode.c (geniCodeCall): fixed bug #851607
* src/SDCC.y: fixed bug #850420
frief [Fri, 5 Dec 2003 18:15:33 +0000 (18:15 +0000)]
Peter Townson's z80 in/out, more to bit/sbit/idata, link to indent, 'at' and initialization, #pragma preproc_asm, some ds390 options, array in code space, 2.3.6
epetrich [Fri, 5 Dec 2003 06:37:18 +0000 (06:37 +0000)]
Applied z80 i/o port patch from Peter Townson and fixed some operators
to better handle operands in A register.
* device/include/z180.h
* src/SDCC.y
* src/SDCCglue.c
* src/z80/gen.c
* src/z80/gen.h
* src/z80/main.c
* src/z80/peeph-z80.def
* src/z80/peeph.def
* src/z80/z80.h
epetrich [Mon, 1 Dec 2003 07:37:58 +0000 (07:37 +0000)]
* sim/ucsim/hc08.src/inst.cc,
* sim/ucsim/hc08.src/hc08mac.h: fixed some problems with CC flag bits and
carries from x to h
* src/hc08/gen.c (aopAdrStr): fixed problem with 16 bit immediate
* src/hc08/gen.c (XAccRsh): fixed problem with right shift
* device/include/stdarg.h: fixed varargs for hc08
* device/lib/Makefile.in,
* device/lib/hc08/Makefile,
* device/lib/hc08/_mulint.c,
* device/lib/hc08/_mullong.c: fixed some endian problems
epetrich [Wed, 26 Nov 2003 18:19:53 +0000 (18:19 +0000)]
* src/SDCCast.c (decorateType): disabled a transformation I added in
revision 1.188 (access to fields of a structure at an absolute address);
it breaks with bitfields, extern declarations, and gcse analysis.
* src/SDCCopt.c (isLocalWithoutDef): if ADDRESS_OF applied to a symbol, it
could be assigned through a pointer, so don't complain.
* src/SDCCast.c (astErrors),
* src/SDCCast.h,
* src/SDCCglue.c (emitRegularMap): fixed bug #847813
epetrich [Wed, 19 Nov 2003 17:23:35 +0000 (17:23 +0000)]
* src/SDCCcse.c (algebraicOpts): fixed bug #773153
* src/SDCClrange.c (rlivePoint): need to mark IC_RESULT used if POINTER_GET op
* src/SDCCopt.c (eBBlockFromiCode),
* src/SDCClrange.c (hashiCodeKeys, sequenceiCode, computeLiveRanges): seperated
the creation of the key hash table from the sequencing so it can be used
earlier (for some GCSE bug fixes still pending)
epetrich [Sat, 15 Nov 2003 08:38:38 +0000 (08:38 +0000)]
* src/SDCCcse.c (cseBBlock): fixed bug #527779
* src/SDCCcse.c (deleteGetPointers): rewrote so that the set
ordering is immaterial.
* src/SDCCdflow.c (mergeInExprs): fixed bug #587536
epetrich [Fri, 14 Nov 2003 08:33:10 +0000 (08:33 +0000)]
* src/SDCCicode.c (geniCodeAddressOf): fixed part of bug #840381
* src/SDCCopt.c (replaceRegEqv, isLocalWithoutDef): fixed other part
(SIGSEV) of bug #840381
* src/SDCCmain.c (linkEdit, assemble): fixed bug #841606 (don't
unlink new file before rename if new and old filenames are the same)
frief [Thu, 13 Nov 2003 21:17:25 +0000 (21:17 +0000)]
src/mcs51/main.c: started fixing bug #737001 (SDCC not clearing uninitialized variables) for the mcs51. Set environment variable SDCC_GENRAMCLEAR to test.
xdata initialization slightly shorter
frief [Thu, 13 Nov 2003 21:15:36 +0000 (21:15 +0000)]
started fixing bug #737001 (SDCC not clearing uninitialized variables) for the mcs51. Set environment variable SDCC_GENRAMCLEAR to test.
xdata initialization slightly shorter