diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-05-30 21:12:57 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2010-05-30 21:12:57 +0000 |
commit | 585c02b95e1e192a626d9a56a97a5acc27b4c1c3 (patch) | |
tree | 0c5eb1ec8cdc5b860f11ea21b0d9b1a525efc0f8 /compiler/ncgld.pas | |
parent | e0d417123e477a6c50ff67c1c7ae13212279a102 (diff) | |
download | fpc-585c02b95e1e192a626d9a56a97a5acc27b4c1c3.tar.gz |
* changed tprocdef.funcretloc[] from a tlocation into a tcgpara so it can
represent complex locations (required for full x86-64 ABI support,
which is not yet implemented) -> lots of special result handling
code has been removed and replaced by the parameter handling
routines
+ added support for composite parameters (and hence function
results) to tcg.a_load_ref_cgpara() (so it can be used for
handling, e.g., 64 bit parameters on 32 bit platforms)
* the above fixed writing past the end of allocated memory when
handling records returned in registers on x86-64 whose size is
not a multiple of 8 bytes (mantis #16357)
- removed the x86-64 and PPC specific versions of a_load_ref_cgpara(),
as they are now handled correctly by the generic version
* moved the responsibility of allocating tcgpara cpu registers
(using paramanager.allocparaloc()) from the callers of
cg.a_load*_cgpara() to the cg.a_load*_cgpara() methods
themselves (so the register allocation can be done efficiently
when dealing with function results)
* for the above, renamed paramanager.alloc/freeparaloc() to
paramanager.alloc/freecgpara(), and use paramanager.allocparaloc()
to allocate individual pcgparalocations instead
* fixed the register size of SSE2 function result registers for
x86-64 (when used for floating point), which results in removing
a few superfluous "movs? %xmm0,%xmm0" instructions
* fixed compilation of paramanagers of avr, m68k and mips after r13695
and also updated them for these new changes
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15350 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/ncgld.pas')
-rw-r--r-- | compiler/ncgld.pas | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/compiler/ncgld.pas b/compiler/ncgld.pas index 69a7374af8..1b148b1aad 100644 --- a/compiler/ncgld.pas +++ b/compiler/ncgld.pas @@ -349,9 +349,8 @@ implementation reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname),0,sizeof(pint)) else reference_reset_symbol(href,current_asmdata.WeakRefAsmSymbol(gvs.mangledname),0,sizeof(pint)); - paramanager.allocparaloc(current_asmdata.CurrAsmList,paraloc1); cg.a_load_ref_cgpara(current_asmdata.CurrAsmList,OS_32,href,paraloc1); - paramanager.freeparaloc(current_asmdata.CurrAsmList,paraloc1); + paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paraloc1.done; cg.allocallcpuregisters(current_asmdata.CurrAsmList); cg.a_call_reg(current_asmdata.CurrAsmList,hregister); |