Commit Graph

586 Commits

Author SHA1 Message Date
florian
f07969245b * fix warning about uninitialized variable
git-svn-id: trunk@30240 -
2015-03-15 17:10:01 +00:00
Jonas Maebe
0c394eb6f4 * ensure we don't call a_load_cgparaloc_anyreg() to move an fpu register
into an integer register

git-svn-id: trunk@30227 -
2015-03-14 18:36:57 +00:00
Jonas Maebe
fc21845686 * fixed the allocation of R12 on ppc32/ppc64 when used to hold the value of
the stack pointer during the prolog. This was done previously in
    tcg.g_proc_entry(), but that routine is called after register allocation
    and hence has no influence. Also cleaned up the deallocation of that
    register by moving the previously ifdef'd code to thlcgppcgen
    (mantis #27634)

git-svn-id: trunk@30164 -
2015-03-11 17:49:44 +00:00
Károly Balogh
0021ad714f * fixed some ancient code behind cpu_uses_separate_address_registers define to at least compile again, for some m68k experiment
git-svn-id: trunk@30130 -
2015-03-07 22:11:43 +00:00
Jonas Maebe
edb3124ae8 * copy arrays passed by value to cdecl routines on the callee side even on
platforms that normally must copy value parameters on the caller side,
    because
   o if we copy them on the caller side, then the behaviour will be different
     compared to other platforms if the called routine is implemented in C
     (since they are passed by reference, changes to the array contents will
      be visible on other platforms, while they wouldn't be visible if the
      copy is made on the caller side)
   o if we don't copy them on the caller nor on the callee side, then behaviour
     will be different compared to other platforms if the called routine is
     implemented in Pascal and modifies the array (since then changes won't be
     visible on the caller side, except on platforms that normally perform
     the copy on the caller side)

git-svn-id: trunk@29873 -
2015-02-23 22:50:29 +00:00
Jonas Maebe
2dbfbd40ab * unified hlcg.g_copyvalueparas and ncgutil.copyvalueparas, they have the
same functionality in the mean time

git-svn-id: trunk@29872 -
2015-02-23 22:50:26 +00:00
Jonas Maebe
6e12ad817f * don't make copies of arrays passed as value parameters to cdecl routines
(since C compilers don't copy such arrays either, as they're implciitly
     pointers)

git-svn-id: trunk@29871 -
2015-02-23 22:50:23 +00:00
Jonas Maebe
c6ba0bb6fb + support for targets that require by-reference value parameters to be
be copied on the caller instead of callee side
   o mark Darwin/Aarch64 as such a target (any AArch64 target will be like
     that normally, as its ABI specifies this behaviour)
   o don't mark by-reference value parameters on such targets as
     vo_has_local_copy, since a) they don't have one (the copy is on the
     caller side), and b) this ensures that all code handling such
     parameters automatically knows that they are still by reference
     after the init code has run
   o when making the copies on the caller side, don't increase the
     reference count for managed types except for variants, just like
     is done when making the copies on the callee side. This is because
     the reference count increasing code on the callee side only runs
     for non-assembler functions, and we cannot know 100% certain on the
     caller side whether the called function is assembler or not (e.g. in
     case of externally declared functions)
   o maybe over time we can reuse the Pascal code in
     tcallparanode.copy_value_by_ref_para to replace the equivalent code
     in hlcgobj and ncgutil also on the caller side for other targets

git-svn-id: trunk@29870 -
2015-02-23 22:50:20 +00:00
Jonas Maebe
bc3d495285 * extra error checking in gen_load_cgpara_loc
git-svn-id: trunk@29824 -
2015-02-23 22:47:59 +00:00
Jonas Maebe
b8c8ef8489 * support transfering a cgpara that is stored in multiple paralocs into a
single register, by first storing everything consecutively to memory and
    then loading it. Required for "homogeneous float aggregates" on AArch64

git-svn-id: trunk@29815 -
2015-02-23 22:47:32 +00:00
pierre
9b468ba728 Change code so that the condition to use global or local symbol matches
the code written in hlcg.gen_proc_symbol to avoid change from AB_LOCAL
to AB_GLOBAL, which generates erroneous code (at least for targets using GOT)

git-svn-id: trunk@29450 -
2015-01-12 12:24:15 +00:00
florian
6e671e2e85 * gen_load_cgpara_loc with OS_(S)32 for 8 bit ALUs fixed
git-svn-id: trunk@28746 -
2014-10-04 18:28:21 +00:00
sergei
53b0ef1f61 - Removed superfluous tai_align, the new_section procedure creates one itself.
git-svn-id: trunk@28027 -
2014-06-21 22:36:17 +00:00
nickysn
9da1ee0138 * i8086 far data model fixes in the copying of openarray value params
git-svn-id: trunk@27470 -
2014-04-04 20:18:47 +00:00
nickysn
36aae69e2b + initialize the initialloc for push_addr_param parameters correctly in i8086
far data memory models

git-svn-id: trunk@27455 -
2014-04-03 17:24:41 +00:00
nickysn
cf1d60b8eb + added size info to the 'Var X located at' comment generated in the asm output
git-svn-id: trunk@27454 -
2014-04-03 16:54:01 +00:00
nickysn
66d7beb7fe * i8086 far data memory model fix for except_buf_size
git-svn-id: trunk@27371 -
2014-03-30 12:00:20 +00:00
nickysn
5ae9443d66 * moved the EXCEPT_BUF_SIZE const to be local to ncgutils.get_exception_temps,
because that's the only place where it's used

git-svn-id: trunk@27369 -
2014-03-30 11:27:07 +00:00
florian
a4b6e99db1 * increase refs of hidden high parameter if the corresponding open/const array is used
git-svn-id: trunk@27331 -
2014-03-29 13:10:54 +00:00
nickysn
891ab86254 * fixed ncgutil.gen_load_vmt_register and tcgloadvmtaddrnode.pass_generate_code
for i8086 far data memory models by using the high level code generator

git-svn-id: trunk@27326 -
2014-03-28 23:16:14 +00:00
nickysn
149db35910 * i8086 far data memory model fix in ncgutil.new_exception
git-svn-id: trunk@27242 -
2014-03-23 18:11:50 +00:00
Jonas Maebe
73a3f5ced4 * moved ncgutil.maybechangeloadnodereg() to hlcg.maybe_change_load_node_reg()
and moved ifdef'd jvm code to overridden method

git-svn-id: trunk@27153 -
2014-03-16 11:24:40 +00:00
Jonas Maebe
4065483a50 * completed thlcgobj.location_force_fpureg(), use it everywhere and removed
ncgutil/thlcg2ll.location_force_fpureg()

git-svn-id: trunk@27071 -
2014-03-10 09:01:05 +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
66f5b71fe9 Fixed passing of 32bit arguments on 8-bit architectures.
Added initial RTL startup code for AVR.

git-svn-id: trunk@26931 -
2014-03-02 20:53:21 +00:00
sergei
53556f529d * gen_alloc_symtable: don't use current_procinfo.procdef, the necessary procdef is passed in 'pd' parameter.
git-svn-id: trunk@26663 -
2014-02-03 10:21:56 +00:00
sergei
949907f1f3 * Don't emit "Temps allocated between..." comment in assembler listing if procedure has no temps.
git-svn-id: trunk@26660 -
2014-02-03 09:55:46 +00:00
Jonas Maebe
4e9c54278e * the function result of constructors always is self, always is valid and is
not stored in procdef.funcretsym -> fix check so that SSA is not performed
    on it in constructors when exit is used

git-svn-id: trunk@26650 -
2014-02-02 09:09:44 +00:00
florian
e6a9e385d3 * spelling fixed
git-svn-id: trunk@26435 -
2014-01-12 20:17:44 +00:00
nickysn
420f30bacd * fixed the handling of OS_PAIR/OS_SPAIR-sized parameters in ncgutil.gen_load_cgpara_loc. This fixes 32-bit regvar'd parameters on i8086.
git-svn-id: trunk@26278 -
2013-12-24 23:07:44 +00:00
sergei
409e176ded * Factored reusable (SEH-related) piece of code into separate procedure.
git-svn-id: trunk@26157 -
2013-12-01 11:47:12 +00:00
nickysn
c51c75936b * 16/8-bit ALU fixes in ncgutil.gen_free_symtable
git-svn-id: trunk@25762 -
2013-10-13 16:48:15 +00:00
nickysn
1dabaf5ded * 16/8-bit ALU fixes in ncgutil.add_regvars
git-svn-id: trunk@25761 -
2013-10-13 16:41:32 +00:00
nickysn
d1f0eea902 * 16/8-bit ALU fixes in ncgutil.gen_alloc_regvar
git-svn-id: trunk@25760 -
2013-10-13 16:31:16 +00:00
nickysn
fd05d0c14e * 16/8-bit ALU fix in maybechangeloadnodereg. This fixes the tbopr and trox2
tests on i8086.

git-svn-id: trunk@25752 -
2013-10-13 11:35:56 +00:00
sergei
b8a76c5da2 - Removed gen_proc_symbol procedure, no longer used, replaced by thlcgobj.gen_proc_symbol method.
git-svn-id: trunk@25335 -
2013-08-23 10:54:57 +00:00
sergei
c3350d13f9 * MIPS: floating point parameters on stack should be loaded to/from FPU registers directly, without using temp.
git-svn-id: trunk@25122 -
2013-07-17 11:00:46 +00:00
Jonas Maebe
2dd75e707e * renamed thlcgobj.tcgsize2orddef to defutil.cgsize_orddef
git-svn-id: trunk@24743 -
2013-06-01 18:28:15 +00:00
Jonas Maebe
5051453806 + support for LOC_(C)MMREGISTER in hlcg
o migrated location_force_mmregister_scalar from ncgutil to hlcgobj

git-svn-id: trunk@24661 -
2013-05-31 12:05:14 +00:00
nickysn
47fe8e03b1 * refactored ncgutil.gen_load_cgpara_loc to use cgpara.locations_count
git-svn-id: trunk@24532 -
2013-05-19 18:49:21 +00:00
nickysn
ecb5a4866d * refactored the int64 result passing in ax:bx:cx:dx to use 4 paralocs, instead of the GetNextReg hack
git-svn-id: trunk@24527 -
2013-05-19 12:50:15 +00:00
florian
d4c7afbfe8 + generate thumb_func directives for thumb as well
git-svn-id: trunk@24377 -
2013-04-29 18:23:01 +00:00
florian
0e41df598e * merge i8086 branch by Nikolay Nikolov
git-svn-id: trunk@24324 -
2013-04-25 20:23:51 +00:00
nickysn
a5c5b05362 * initial support for system procs that use calling conventions that push left to right on i8086 or i386
git-svn-id: branches/i8086@24282 -
2013-04-21 13:26:12 +00:00
sergei
d54d38b4ab * Moved all code responsible for writing VMTs and interface wrappers (nobj.TVMTWriter, ncgutil.gen_intf_wrappers, ptype.write_persistent_type_info) into a new unit ncgvmt.pas.
This improves compiling speed a bit (two iterations over symtables replaced by one, code generator is created once per unit rather than once per class).
In perspective it makes possible to reduce amount of generated smartlink sections and global labels.

git-svn-id: trunk@24269 -
2013-04-19 13:31:27 +00:00
nickysn
3870f76cda * ncgutil: set pushexceptaddr_frametype_cgsize and setjmp_result_cgsize according to cpu16bitaddr, instead of cpu16bitalu
git-svn-id: branches/i8086@24233 -
2013-04-12 13:38:18 +00:00
florian
075abd6220 + support of stackframesize for arm thumb
+ estimatedtempsize to get a good estimatation for architectures which require to know the stack size before

git-svn-id: trunk@24188 -
2013-04-07 21:00:38 +00:00
florian
43b6139b66 + setlocalloc resets currentregloc
git-svn-id: trunk@24118 -
2013-04-01 19:52:46 +00:00
florian
364f170765 * cosmetic formatting changes
git-svn-id: trunk@24117 -
2013-04-01 19:52:43 +00:00
nickysn
1e28790e99 * fpc_PushExceptAddr's parameter Ft changed from LongInt to SmallInt on 16-bit CPUs for better efficiency
git-svn-id: branches/i8086@24036 -
2013-03-28 15:44:50 +00:00