florian
9a5b458d4e
* allocate registers properly before icall
...
* use emit_mov to load registers before icall
git-svn-id: trunk@30758 -
2015-05-02 08:02:17 +00:00
florian
5c8d0d87cd
o better code generation for avr:
...
* omit entry/exit code, if no frame pointer is used, partly fixes issue #27842
* take advantage of adiw/sbiw
* make more often use of ldd/std
git-svn-id: trunk@30732 -
2015-04-26 19:39:43 +00:00
florian
1969abec77
* improved code generation in a_op_const_reg_internal and a_op_const_reg_reg
...
git-svn-id: trunk@30662 -
2015-04-19 12:51:53 +00:00
florian
7f1585b99a
* do not save registers for subroutines which never return
...
* do not generate any exit code for subroutines which never return
git-svn-id: trunk@30657 -
2015-04-19 08:11:28 +00:00
florian
9e51283ae0
+ initial a_op_const_reg_reg and a_op_reg_reg_reg implementations to generate optimized 16 Bit multiplications on avr
...
git-svn-id: trunk@30648 -
2015-04-18 13:53:20 +00:00
florian
8b7a449cf1
* clear r1 after 8 Bit multiplication, resolves #27838
...
git-svn-id: trunk@30578 -
2015-04-13 20:15:30 +00:00
florian
4d01271944
* due to avr's harvard architecture, loads of code labels need to use the gs(...) macro
...
git-svn-id: trunk@30559 -
2015-04-12 20:29:13 +00:00
florian
bd803769b8
* fix compilation
...
git-svn-id: trunk@30554 -
2015-04-12 14:58:41 +00:00
florian
9559dabe51
* function result is in r24:r25
...
git-svn-id: trunk@30549 -
2015-04-11 21:25:05 +00:00
florian
1ef7e36f3c
* some fixes for handling parameters passed on the stack
...
git-svn-id: trunk@30545 -
2015-04-11 13:56:21 +00:00
florian
03fa8336de
o several avr fixes
...
* handle function result of FPC_MUL_WORD correctly
* use mov ...,r1 to load a register with zero instead of clr ..., this might enable the register allocator to
coalesce these moves in the feature
* use tst/dec instead of cpi/sub in the shifting loops, this reduces register pressure on r16 and higher
git-svn-id: trunk@30540 -
2015-04-11 11:08:01 +00:00
florian
6a032bee1b
* improved code generation for a_load_const_reg and a_op_const_reg
...
git-svn-id: trunk@30519 -
2015-04-09 20:38:19 +00:00
florian
63bf17440c
* use volatile registers first
...
* fix some range check errors
git-svn-id: trunk@30444 -
2015-04-05 19:17:24 +00:00
Jonas Maebe
61e4a1b811
+ added tasmlist parameter to getintparaloc() (needed for llvm)
...
git-svn-id: trunk@30429 -
2015-04-04 14:29:16 +00:00
Jeppe Johansen
8c105d4c97
Fix off by 8 error.
...
git-svn-id: trunk@30393 -
2015-03-30 12:03:18 +00:00
florian
873d88ba57
* fix 8 Bit*8 Bit multiplication according to #27737 using modified code supplied by Georg Hieber
...
git-svn-id: trunk@30381 -
2015-03-29 19:58:30 +00:00
florian
ad995eb121
* use correctly CALL/RCALL and JMP/RJMP on avr, resolves #27738
...
git-svn-id: trunk@30372 -
2015-03-29 18:26:32 +00:00
Jonas Maebe
b745dcc64c
* moved g_external_wrapper() to the hlcg, and also g_intf_wrapper() because
...
for some platforms it depends on that routine
git-svn-id: branches/hlcgllvm@28492 -
2014-08-19 20:22:54 +00:00
sergei
e4fea2ebc8
* Dummy implementations of a_bit_scan_reg_reg and g_stackpointer_alloc in tcg, removes the need to override these methods in every descendant code generator solely to avoid "constructing a class with abstract method" warning.
...
git-svn-id: trunk@28175 -
2014-07-06 11:34:04 +00:00
Jeppe Johansen
10522e9779
Disabled a_adjust_sp optimized steps for now.
...
Integrated proper stack frame calculation.
Changed rjmp to jmp in ATMEGA128 interrupt vectors.
git-svn-id: trunk@26964 -
2014-03-05 19:17:46 +00:00
Jeppe Johansen
2227045e23
Replace forbidden chars in more places in the GAS assembler writer.
...
Add support for .set and .weak on AVR.
Fix 64 bit negation on AVR.
Add cpu_capabilities to cpuinfo.pas and fixed some peephole optimizations.
Pass >4 byte parameters by reference.
git-svn-id: trunk@26943 -
2014-03-04 08:01:23 +00:00
Jeppe Johansen
e33550b67d
Added support for X,Y,and Z register aliases plus low/high forms, and post-incrementation in AVR assembler reader.
...
Cleaned up parameter and funcretloc information generation in AVR paramanger, and made it closer to GCC's calling convention.
Fixed a number of codegenerator bugs generating invalid or broken instructions: CP operands were swapped, a number of instructions had immediate operands, and stack frame epilogue wasn't complete.
Added a bunch of peephole optimizations that clears the generated code up a lot.
git-svn-id: trunk@26925 -
2014-03-02 15:37:24 +00:00
sergei
9c1f917e3a
* a_call_ref functionality cannot be implemented efficiently at code generator level, because references need specific preparations at earlier points. Moved this support to tcgcallnode and its x86 descendants, and got rid of all ifdef's around.
...
+ x86 targets now directly call procedure variables located in references.
- a_call_ref method removed from tcg and thlcgobj.
git-svn-id: trunk@26666 -
2014-02-03 13:28:56 +00:00
florian
cb48c2afca
* some fixes for parameter handling on avr
...
git-svn-id: trunk@26425 -
2014-01-11 17:02:34 +00:00
florian
4d5119bf1c
* fixes several issues which cause warnings by the dfa code when using it to detect uninitialized variables
...
git-svn-id: trunk@26161 -
2013-12-01 17:02:08 +00:00
Jonas Maebe
69c29a415f
* pass the procdef to getintparaloc instead of only the proccalloption, so
...
that the type of the parameters can be determined automatically
o added compilerproc declarations for all helpers called in the compiler
via their assembler name, so we can look up the corresponding procdef
git-svn-id: trunk@23325 -
2013-01-06 15:05:40 +00:00
florian
a3dff44489
+ support of 64 bit operations on avr
...
git-svn-id: trunk@22836 -
2012-10-23 20:15:47 +00:00
Jonas Maebe
7a0ae38700
+ also specify the parameter def when allocating a parameter via
...
getintparaloc + adapted all call sites of getintparaloc. This
led to a number of additional, related changes:
o corrected the type information for some getintparaloc parameters
o don't allocate some intparalocs in cases they aren't used
o changed "const tvardata" parameter into "constref tvardata" for
fpc_variant_copy_overwrite to make pass-by-reference semantics
explicit
o moved a number of routines that now have to call find_system_type()
from cgobj to hlcgobj so that cgobj doesn't have to start depending
on the symtable unit
o added versions of the cpureg alloc/dealloc methods to hlcgobj that
call through to their cgobj counter parts, so we can call save/restore
the cpu registers before/after calling system helpers from hlcgobj
(not implemented in hlcgobj itself, because all basic register
allocator functionality is still part of cgobj/cgcpu)
git-svn-id: trunk@21696 -
2012-06-24 15:02:12 +00:00
florian
0e7e45d423
* avoid warnings in the avr code generator
...
git-svn-id: trunk@20015 -
2012-01-08 20:10:59 +00:00
florian
0066a12974
* makes a_jmp_cond working
...
git-svn-id: trunk@18969 -
2011-09-04 18:47:08 +00:00
florian
6005ec2c91
+ a_jmp_cond implemented
...
git-svn-id: trunk@18840 -
2011-08-25 18:27:33 +00:00
florian
b0cef1693a
* compilation of system unit was broken
...
git-svn-id: trunk@17972 -
2011-07-10 21:03:55 +00:00
florian
26850e3425
* fix full cycle after adding new boolean types
...
git-svn-id: branches/pasboolxx@17847 -
2011-06-27 20:11:08 +00:00
florian
5231d109ba
* fullcycle fixed
...
git-svn-id: trunk@17475 -
2011-05-15 19:13:49 +00:00
florian
8cfbb70326
+ generic a_cmp_const_reg_label
...
git-svn-id: branches/avr@17294 -
2011-04-10 18:52:37 +00:00
florian
ebe8078263
* compilation fixed
...
git-svn-id: branches/avr@17293 -
2011-04-10 18:43:44 +00:00
florian
7b8f3a61d3
+ implemented tcgavr.g_flags2reg
...
git-svn-id: branches/avr@17290 -
2011-04-10 18:39:51 +00:00
florian
ed8d652398
+ implemened a_cmp_reg_reg_label
...
git-svn-id: branches/avr@17289 -
2011-04-10 18:39:07 +00:00
florian
5fd4bb70de
* started to implement ref.base parameter for normalize_ref
...
git-svn-id: branches/avr@17288 -
2011-04-10 18:38:06 +00:00
florian
a0b0b43d0c
+ implemented tcgavr.a_jmp_name
...
* updated todos
git-svn-id: branches/avr@17287 -
2011-04-10 18:37:26 +00:00
florian
8d960cb608
+ implementation of shifting operations for avr
...
* handle shl/shr operand size correctly
git-svn-id: branches/avr@17109 -
2011-03-09 19:48:01 +00:00
florian
d4ff3b2eb6
* forgotten file in previous commit
...
git-svn-id: branches/avr@17107 -
2011-03-09 19:46:42 +00:00
florian
c7e6d07ff0
* fix tavraddnode.second_cmp
...
* optimized register usage
+ implemented concatcopy for len<16
git-svn-id: branches/avr@17106 -
2011-03-09 19:46:05 +00:00
florian
8f343078fa
* optimize moves into movw if possible
...
* use ldd instruction if possible
git-svn-id: branches/avr@17105 -
2011-03-09 19:42:15 +00:00
florian
de2d504f15
+ dedicated getaddressregister so address registers are allocated with size OS_ADDR
...
* allocate volatile register first
* start with R8 so allocation might be pair wise
git-svn-id: branches/avr@17103 -
2011-03-09 19:40:57 +00:00
florian
a6464c36e3
* push reads the register
...
* concatcopy for len>=16 implemented
git-svn-id: branches/avr@17102 -
2011-03-09 19:40:07 +00:00
florian
1cc956afc8
+ implements tcgavr.a_loadaddr_ref_reg
...
git-svn-id: branches/avr@17101 -
2011-03-09 19:38:59 +00:00
florian
0302c7181e
* AVR: use LDS/LD and STS/ST depending on the reference
...
git-svn-id: branches/avr@17052 -
2011-02-27 21:13:25 +00:00
florian
93e72b7e8a
* fixed normalize_ref
...
git-svn-id: branches/avr@17045 -
2011-02-27 21:09:41 +00:00
florian
b870a6eff5
* started to fix parameter passing
...
* fixed entry/exit code generation
git-svn-id: branches/avr@17041 -
2011-02-27 21:05:53 +00:00