Commit Graph

274 Commits

Author SHA1 Message Date
Jonas Maebe
9125d0c189 * also align esp for all procedures/functions declared "assembler",
since they may do a call. If you don't want that to happen, use
    the nostackframe directive (i386-darwin only)

git-svn-id: trunk@2896 -
2006-03-12 21:20:29 +00:00
Jonas Maebe
435aee2398 * fixed g_copyvaluepara_openarray/g_releasevaluepara_openarray for
use_fixed_stack (use generic code)

git-svn-id: trunk@2895 -
2006-03-12 21:04:59 +00:00
Jonas Maebe
e7112c6636 * ignore po_interrupt for i386-darwin since it messes up stack alignment
git-svn-id: trunk@2857 -
2006-03-11 14:30:02 +00:00
Jonas Maebe
9de2847865 + support for passing parameters via pre-allocated stack space on i386
(override/adjust cgutils.use_fixed_stack to change conditions where
     this is done, currently only activated for darwin-i386)
  * make sure the stack is always aligned to 16 bytes on darwin-i386

git-svn-id: trunk@2840 -
2006-03-10 19:59:44 +00:00
Jonas Maebe
d7b4ac73cf + darwin/x86 support for a_call_name
git-svn-id: trunk@2819 -
2006-03-09 15:02:55 +00:00
Jonas Maebe
d2ba35df7e * don't destroy edi when allocating the stack frame for win32
git-svn-id: trunk@2330 -
2006-01-23 10:54:48 +00:00
florian
f5d790f9b6 * i386 uses dwarf cfi info on linux/win32, so even when omitting the stack frame, trace backs in gdb are correct
git-svn-id: trunk@2316 -
2006-01-21 14:30:57 +00:00
florian
a3e3e7e8c5 * avoid esp to be freed
git-svn-id: trunk@2203 -
2006-01-07 14:32:09 +00:00
Jonas Maebe
7aa315c71a * made some Tcpuregisterset parameters const to avoid useless copying
git-svn-id: trunk@2176 -
2006-01-05 10:10:25 +00:00
florian
f7d2c47f73 + no stackframe is generated for i386 if possible
git-svn-id: trunk@2162 -
2006-01-04 19:19:06 +00:00
florian
61e3b70cfa * cleaned up segmented thread variables
git-svn-id: trunk@2135 -
2006-01-03 12:49:29 +00:00
florian
fb4557d71e * first implementation of pic for i386
git-svn-id: trunk@2107 -
2006-01-01 20:14:48 +00:00
florian
99be25604b * fixed address calculation when generating pic
git-svn-id: trunk@1759 -
2005-11-15 19:25:42 +00:00
florian
72d7597edc + implementation of lazy binding for linux
git-svn-id: trunk@1750 -
2005-11-14 22:28:12 +00:00
florian
2585309c04 * of course, we can't omit pic generation for local symbols
git-svn-id: trunk@1743 -
2005-11-13 21:36:38 +00:00
florian
ff6af1804b * fixed loading of pic'ed symbols with offset
* symbols declared AB_COMMON or AB_LOCAL need no pic

git-svn-id: trunk@1739 -
2005-11-13 21:05:42 +00:00
florian
bc7fab1aeb + plt support for x86_64
git-svn-id: trunk@1578 -
2005-10-23 14:47:09 +00:00
florian
1b97e2cffd + added missing make_simple_ref
git-svn-id: trunk@1572 -
2005-10-23 13:28:43 +00:00
peter
a3ab2053c9 * support multiple asmlabel types, renamed getlabel to
getjumplabel and added type para to getlabel for specific types
  * moved lineinfo generation from assemble and aggas to dbgstabs

git-svn-id: trunk@1120 -
2005-09-18 21:16:10 +00:00
daniel
22e89e1a42 * Proof of concept: Support threadvars using segment registers.
git-svn-id: trunk@740 -
2005-07-24 21:06:23 +00:00
florian
83209064f9 * getmmregister should test the mm register allocator for being assigned
git-svn-id: trunk@221 -
2005-06-05 15:32:24 +00:00
florian
c97714de9f * renamed windows related units from win32 to win so it can contain ce and 64 bit stuff
git-svn-id: trunk@213 -
2005-06-05 13:42:35 +00:00
florian
ebcb69478f * fixed a lot of stuff for fpu/mm register variables
git-svn-id: trunk@199 -
2005-06-04 21:23:15 +00:00
florian
b0545a7a04 * first bunch of pic fixes
git-svn-id: trunk@76 -
2005-05-22 19:57:38 +00:00
fpc
790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00
fpc
50778076c3 initial import
git-svn-id: trunk@1 -
2005-05-16 18:37:41 +00:00
florian
0811184277 + pic code reading for the assembler readers
* loadaddr generates pic code as well now
2005-04-25 09:51:07 +00:00
florian
0cd81efba7 + storing non-extended floats to memory generates now a fwait to get exceptions at the correct place 2005-03-13 17:15:26 +00:00
peter
e417e34496 * truncate log 2005-02-14 17:13:06 +00:00
florian
b1c8bfc478 + x86_64 pic draft 2005-02-06 00:05:56 +00:00
florian
3835b9f13b * fixed previous commit 2005-02-05 18:32:17 +00:00
florian
e94fe45846 * fixed dword -> qword/int64 type cast on x86_64 2005-02-05 18:08:48 +00:00
peter
0991cb288d * tf_pic_uses_got added 2005-01-25 18:48:15 +00:00
florian
cf55930118 * fixed loadaddr; I wonder how it ever worked 2005-01-08 16:00:55 +00:00
florian
0037f4a199 * fixed operand size calculation for sse operands
+ all nasm assembler targets to help page output added
2004-12-12 10:50:34 +00:00
florian
7b8c44bbce * fixed open arrays when using register variables 2004-11-08 20:23:29 +00:00
florian
c94553080b + added profiler call for x86_64 2004-11-02 20:50:54 +00:00
florian
bfce614370 * fixed -<sse register>
* information about simple moves for sse is given to the register allocator
2004-11-02 18:23:16 +00:00
peter
9b00c7832e * support > 32bit accesses for x86_64
* rewrote array size checking to support 64bit
2004-11-01 23:30:11 +00:00
florian
1c569cbd08 * cvt*2* can't write to memory location, fixed 2004-11-01 15:42:47 +00:00
peter
882cc700fb * fixed uninited var in a_load_reg_ref 2004-11-01 10:30:06 +00:00
peter
c95a859f0a * generic tlocation
* move tlocation to cgutils
2004-10-31 21:45:02 +00:00
peter
d19663f3a8 * save standard registers moved to tcgobj 2004-10-25 15:36:47 +00:00
peter
30d25d1d2b * -Or fixes 2004-10-24 20:10:08 +00:00
peter
adb6f59eef * small regvar fixes
* loadref parameter removed from concatcopy,incrrefcount,etc
2004-10-24 11:44:28 +00:00
Jonas Maebe
2b030488b2 * regvar fixes from Peter 2004-10-06 19:26:50 +00:00
peter
f5471aef6e * more spilling rewrites 2004-10-05 20:41:01 +00:00
peter
ee3585f56f * spilling code rewritten for x86. It now used the generic
spilling routines. Special x86 optimization still needs
    to be added.
  * Spilling fixed when both operands needed to be spilled
  * Cleanup of spilling routine, do_spill_readwritten removed
2004-10-04 20:46:22 +00:00
florian
001292bf50 * made sqrt, sqr and abs internal for the sparc 2004-10-03 12:41:30 +00:00
peter
65c3ba277c * ungetregister is now only used for cpuregisters, renamed to
ungetcpuregister
  * renamed (get|unget)explicitregister(s) to ..cpuregister
  * removed location-release/reference_release
2004-09-25 14:23:54 +00:00
florian
8a9758c5e2 * logs truncated 2004-06-20 08:55:28 +00:00
florian
588e2c38bf * dwarf branch merged 2004-06-16 20:07:06 +00:00
peter
5358278ca1 tai_regalloc.allocation changed to ratype to notify rgobj of register size changes 2004-05-22 23:34:27 +00:00
florian
c68ea95074 + syscall directive support for MorphOS added 2004-04-28 15:19:03 +00:00
peter
ffb2785d2b * A_MOVSL renamed to A_MOVSD 2004-04-09 14:36:05 +00:00
peter
81f3ef9eca * fixed concatcopy end bytes copy broken by 64bits patch 2004-03-11 19:35:05 +00:00
peter
970d84f86d * mcount for linux fixed
* push/pop edx for mcount
2004-03-10 22:52:03 +00:00
florian
10e765329d * fixed arm compilation
* cleaned up code generation for exported linux procedures
2004-03-06 20:35:19 +00:00
olle
4fecc1a56f * big transformation of Tai_[const_]Symbol.Create[data]name* 2004-03-02 00:36:32 +00:00
florian
fabb9c33ac * top_symbol killed
+ refaddr to treference added
  + refsymbol to treference added
  * top_local stuff moved to an extra record to save memory
  + aint introduced
  * tppufile.get/putint64/aint implemented
2004-02-27 10:21:04 +00:00
florian
01d16548f4 * fixed exception reason size for 64 bit systems 2004-02-22 18:27:21 +00:00
florian
0c35b6f3c4 * x86_64 uses generic concatcopy_valueopenarray for now 2004-02-22 16:48:09 +00:00
florian
6a392f766d * OP_SH* code generation fixed 2004-02-21 19:46:37 +00:00
peter
fad88e2c7c * allow mov to smaller sizes 2004-02-20 16:01:49 +00:00
peter
e6929a1a32 * more x86_64 parameter fixes
* tparalocation.lochigh is now used to indicate if registerhigh
    is used and what the type is
2004-02-09 22:14:17 +00:00
daniel
46d241a666 * Take advantage of our new with statement optimization 2004-02-07 23:28:34 +00:00
florian
3cb562e41f * movz*q fixed 2004-02-06 14:37:48 +00:00
peter
221090453c * x86_64 fixes for opsize 2004-02-05 18:28:37 +00:00
peter
8c5b0f7d82 * first try to get cpupara working for x86_64 2004-02-04 22:01:13 +00:00
peter
8012731ede *** empty log message *** 2004-02-04 19:22:27 +00:00
Jonas Maebe
4ba9c9ec67 - removed "mov reg,reg" optimization (those instructions are removed by
the register allocator, and may be necessary to indicate a register
    may not be released before some point)
2004-02-03 19:46:48 +00:00
daniel
eaa7da9015 + Cleanup of stabstring generation code. Cleaner, faster, and compiler
executable reduced by 50 kb,
2004-01-15 23:16:32 +00:00
florian
85bed883ce * another bunch of x86-64 fixes mainly calling convention and
assembler reader related
2004-01-14 23:39:05 +00:00
peter
bb03be5004 * add release_openarrayvalue 2004-01-14 21:43:54 +00:00
peter
1c7e6fc380 * sparc updates
* use registertype in spill_register
2003-12-26 14:02:30 +00:00
florian
ace2d682b0 * rtl and compiler compile with -Cfsse2 2003-12-26 13:19:16 +00:00
florian
3d8e1ab1fb + fpu<->mm register conversion 2003-12-26 00:32:21 +00:00
florian
dd2bb53aa5 + possible sse2 unit usage for double calculations
* some sse2 assembler issues fixed
2003-12-25 12:01:35 +00:00
florian
06442fa677 + $fputype directive support
+ single data type operations with sse unit
  * fixed more x86-64 stuff
2003-12-25 01:07:09 +00:00
florian
6d3d97e845 * first fixes to compile the x86-64 system unit 2003-12-24 01:47:22 +00:00
florian
9c476ba5f1 - delete parameter in cg64 methods removed 2003-12-24 00:10:02 +00:00
florian
b52cee6639 * fixed ppc inlining stuff
* fixed wrong unit writing
  + added some sse stuff
2003-12-21 19:42:42 +00:00
daniel
d84b7d0743 * Some work to restore the MMX capabilities 2003-12-19 22:08:44 +00:00
peter
1367e342db * reg allocations for imaginary register are now inserted just
before reg allocation
  * tregister changed to enum to allow compile time check
  * fixed several tregister-tsuperregister errors
2003-12-15 21:25:48 +00:00
peter
bce5a1e252 * rg[tregistertype] added in tcg 2003-12-12 17:16:17 +00:00
florian
bfe452936f * reverted Peter's alloctemp patch; hopefully properly 2003-12-06 01:15:22 +00:00
peter
64b0a0eadf * delayed paraloc allocation, a_param_*() gets extra parameter
if it needs to allocate temp or real paralocation
  * optimized/simplified int-real loading
2003-12-03 23:13:19 +00:00
florian
08f4e363f6 * elesize of g_copyvaluepara_openarray changed 2003-11-05 23:06:03 +00:00
marco
706118fcb9 * profiling fix 2003-10-30 18:53:53 +00:00
peter
9e66b09843 * call firstpass before allocation and codegeneration is started
* move leftover code from pass_2.generatecode() to psub
2003-10-30 16:22:40 +00:00
Jonas Maebe
0cac29ec76 + support for fpu temp parameters
+ saving/restoring of fpu register before/after a procedure call
2003-10-29 21:24:14 +00:00
peter
925bc3bbad * remove memdebug code for rg 2003-10-20 19:30:08 +00:00
peter
9f54e1b7c5 * made worklists dynamic in size 2003-10-18 15:41:26 +00:00
florian
5b33ab3643 * fixed more ppc stuff 2003-10-17 15:25:18 +00:00
peter
d0de3b3ea8 * 64k registers supported
* fixed some memory leaks
2003-10-17 14:38:32 +00:00
florian
57a2fe6ddb + some code for PIC support added 2003-10-14 00:30:48 +00:00
florian
947280d8e2 * some ideas for mm support implemented 2003-10-13 01:23:13 +00:00
florian
1df13c788c * fixed some MMX<->SSE
* started to fix ppc, needs an overhaul
  + stabs info improve for spilling, not sure if it works correctly/completly
  - MMX_SUPPORT removed from Makefile.fpc
2003-10-11 16:06:42 +00:00
peter
fb81b7ebbb * old trgobj moved to x86/rgcpu and renamed to trgx86fpu
* tregisteralloctor renamed to trgobj
  * removed rgobj from a lot of units
  * moved location_* and reference_* to cgobj
  * first things for mmx register allocation
2003-10-10 17:48:13 +00:00
daniel
b2343f4b16 * Register allocator splitted, ans abstract now 2003-10-09 21:31:37 +00:00
florian
e3519e3b0c * x86 supports only mem/reg to reg for movsx and movzx 2003-10-07 16:09:03 +00:00
peter
e27d6f67da * inline supported again, LOC_REFERENCEs are used to pass the
parameters
  * inlineparasymtable,inlinelocalsymtable removed
  * exitlabel inserting fixed
2003-10-07 15:17:07 +00:00
peter
3a92a2a25a * parameter alignment fixes 2003-10-03 22:00:33 +00:00
peter
c63b079d07 * save ESP after pusha and restore before popa for save all registers 2003-10-03 14:45:37 +00:00
peter
70fe77ca7c * procinfo unit contains tprocinfo
* cginfo renamed to cgbase
  * moved cgmessage to verbose
  * fixed ppc and sparc compiles
2003-10-01 20:34:48 +00:00
peter
5a7ce9fbe3 * fix pushw reg 2003-09-30 19:53:47 +00:00
peter
540691bf02 * optimized releasing of registers 2003-09-29 20:58:55 +00:00
peter
e248f1b570 * a_call_ref removed 2003-09-28 13:37:19 +00:00
peter
1c11c95b3c * change push/pop in getreg/ungetreg 2003-09-25 21:29:16 +00:00
florian
0493cd3d2e * more x86-64 fixes 2003-09-25 13:13:32 +00:00
florian
8f66389b46 * improved arm code generation
* move some protected and private field around
  * the temp. register for register parameters/arguments are now released
    before the move to the parameter register is done. This improves
    the code in a lot of cases.
2003-09-11 11:54:59 +00:00
peter
3a3d710c47 * basics for x86 register calling 2003-09-09 21:03:17 +00:00
daniel
49e539ac8d * Adding register allocation order 2003-09-09 20:59:27 +00:00
peter
b9d09a4e5c * preparations for different default calling conventions
* various RA fixes
2003-09-07 22:09:34 +00:00
florian
22f1ff8da4 * merged Wiktor's Watcom patches in 1.1 2003-09-05 17:41:12 +00:00
peter
6a8d5eb25d * NEWRA branch merged 2003-09-03 15:55:00 +00:00
daniel
2b0cd432ca * Small NOTARGETWIN32 conditional tweak 2003-08-20 19:28:21 +00:00
peter
390db181c1 * loadfpu_reg_reg size specifier 2003-07-03 18:59:25 +00:00
Jonas Maebe
d29c96896f * fixed newra cycle for x86
* added constants for indicating source and destination operands of the
    "move reg,reg" instruction to aasmcpu (and use those in rgobj)
2003-06-14 14:53:50 +00:00
peter
0dceec9a64 * current_procdef removed, use current_procinfo.procdef instead 2003-06-13 21:19:30 +00:00
peter
a71427cf2c * fix newra cycle for i386 2003-06-12 18:31:18 +00:00
peter
46a27d8c27 * fixed copyvaluepara for left-to-right pushing 2003-06-07 10:24:10 +00:00
Jonas Maebe
f27da44d92 * fixed cycling problem 2003-06-07 10:06:55 +00:00
peter
d91c880148 * cg.a_load_* get a from and to size specifier
* makeregsize only accepts newregister
  * i386 uses generic tcgnotnode,tcgunaryminus
2003-06-03 21:11:09 +00:00
daniel
41e0bc4cec * Register allocator finished 2003-06-03 13:01:59 +00:00
peter
230a14ff68 * getregisterfpu size parameter added
* op_const_reg size parameter added
  * sparc updates
2003-06-01 21:38:06 +00:00
peter
414bd5fa22 * more sparc cleanup
* accumulator removed, splitted in function_return_reg (called) and
    function_result_reg (caller)
2003-05-30 23:57:08 +00:00
peter
437ce7f8a2 * removed some unit dependencies 2003-05-22 21:32:28 +00:00
peter
abca40f041 * regvar fixes 2003-05-16 14:33:31 +00:00
peter
92ee1804b6 * removed selfpointer_offset, vmtpointer_offset
* tvarsym.adjusted_address
  * address in localsymtable is now in the real direction
  * removed some obsolete globals
2003-05-15 18:58:53 +00:00
florian
91bbc7bea3 * error when address of an abstract method is taken
* fixed some x86-64 problems
  * merged some more x86-64 and i386 code
2003-04-30 20:53:32 +00:00
peter
60978ba89c * aktprocdef renamed to current_procdef
* procinfo renamed to current_procinfo
  * procinfo will now be stored in current_module so it can be
    cleaned up properly
  * gen_main_procsym changed to create_main_proc and release_main_proc
    to also generate a tprocinfo structure
  * fixed unit implicit initfinal
2003-04-27 11:21:32 +00:00
daniel
9e2084b8d5 * Further register allocator work. Compiler now smaller with new
allocator than without.
  * Somebody forgot to adjust ppu version number
2003-04-23 14:42:07 +00:00
daniel
7677b18770 * Removed usage of edi in a lot of places when new register allocator used
+ Added newra versions of g_concatcopy and secondadd_float
2003-04-23 09:51:16 +00:00
peter
e248c0ece4 * fixed C style array of const
* fixed C array passing
  * fixed left to right with high parameters
2003-04-22 13:47:08 +00:00
daniel
25059e21b6 + Implemented the actual register allocator
+ Scratch registers unavailable when new register allocator used
  + maybe_save/maybe_restore unavailable when new register allocator used
2003-04-22 10:09:34 +00:00
daniel
0c93e261e7 * Added some code to keep track of move instructions in register
allocator
2003-04-17 16:48:21 +00:00
peter
c4ddcc78a8 * generic constructor working for i386
* remove fixed self register
  * esi added as address register for i386
2003-03-28 19:16:56 +00:00
peter
864736747f * reg2opsize() 2003-03-18 18:17:46 +00:00
Jonas Maebe
e8a0c0cd62 * and more new register allocator fixes (in the i386 code generator this
time). At least now the ppc cross compiler can compile the linux
    system unit again, but I haven't tested it.
2003-03-13 19:52:23 +00:00
daniel
390ae3e2b1 * Fixed ie 200301234 problem on Win32 target 2003-02-27 16:40:32 +00:00
daniel
18ab545cb7 * Fixed the optimizer 2003-02-26 21:15:43 +00:00
daniel
86bcea6ef5 * Code generator converted to new register notation
- Horribily outdated todo.txt removed
2003-02-19 22:00:14 +00:00
daniel
dc14489292 * Fixed another 200301081 2003-01-21 10:41:13 +00:00
daniel
509618b646 * Fixed internalerror 2003-01-13 23:00:18 +00:00
daniel
cbe0383afe * Further work to convert codegenerator register convention;
internalerror bug fixed.
2003-01-13 14:54:34 +00:00
daniel
7b2fd10fb4 * Converted some code in cgx86.pas to new register numbering 2003-01-09 20:40:59 +00:00
daniel
55a161bbbf * Tregister changed into a record 2003-01-08 18:43:56 +00:00
florian
b59b436130 * x86-64 compiles
+ very basic support for float128 type (x86-64 only)
2003-01-05 13:36:53 +00:00
peter
a51ce770c2 * align stack on 4 bytes in copyvalueopenarray 2003-01-02 16:17:50 +00:00