Commit Graph

214 Commits

Author SHA1 Message Date
yury
c6253d5bd7 * Added missing override directive in trgcpu.add_constraints method for x86_64 CPU. It was missing for years and I am not sure that this code is really needed. Please review.
git-svn-id: trunk@13141 -
2009-05-13 11:37:09 +00:00
yury
f726e1691b * Fixed warnings and notes.
git-svn-id: trunk@13139 -
2009-05-13 11:26:01 +00:00
florian
694f563079 * fixed assembler tables for sse4 instructions, resolves #13186
git-svn-id: trunk@12787 -
2009-02-24 20:07:11 +00:00
Jonas Maebe
7d459cf12a * the compiler now explicitly keeps track of the minimally guaranteed
alignment for each memory reference (mantis #12137, and
    test/packages/fcl-registry/tregistry1.pp on sparc). This also
    enables better code generation for packed records in many cases.
  o several changes were made to the compiler to minimise the chances
    of accidentally forgetting to set the alignment of memory references
    in the future:
    - reference_reset*() now has an extra alignment parameter
    - location_reset() can now only be used for non LOC_(C)REFERENCE,
      use location_reset_ref() for those (split the tloc enum so the
      compiler can catch errors using range checking)

git-svn-id: trunk@12719 -
2009-02-08 13:00:24 +00:00
florian
17a08efb82 * handle methodpointer function results like records of the same size, resolves #12318
git-svn-id: trunk@12118 -
2008-11-15 23:05:36 +00:00
florian
49195b0ac0 * fixes assembling of mov ax,<mem16>
* fixes assembling of test <mem8>,reg8; resolves #11786

git-svn-id: trunk@12040 -
2008-11-09 10:24:59 +00:00
Jonas Maebe
53e52ac6a9 * implementation of 32x32->64 multiplication for i386 based on patch
by Sergei Gorelkin

git-svn-id: trunk@12028 -
2008-11-06 21:03:10 +00:00
Jonas Maebe
a23630260b + "weakexternal" support for imported procedures and variables.
the syntax is exactly the same as for "external", except for
    the keyword. It is currently only active for Darwin targets.
    It should also work at least for Linux targets, but only with
    the GNU assembler (which is why it is not activated there)
  + test for this functionality

git-svn-id: trunk@12009 -
2008-11-01 18:38:32 +00:00
yury
491f0fa1d8 * Replaced all user defined warnings by TODO comments to reduce compiler noise.
git-svn-id: trunk@11443 -
2008-07-23 11:00:03 +00:00
Jonas Maebe
a6b9b3e00a * fixed a_param_ref for source sizes < 8 bytes
git-svn-id: trunk@10505 -
2008-03-18 20:10:22 +00:00
peter
8f239d04b6 * cleanup and simplify the set type handling
git-svn-id: trunk@10432 -
2008-03-02 17:48:27 +00:00
Jonas Maebe
f36e5411af * split cpu64bit compiler define into
a) cpu64bitaddr, which means that we are generating a compiler which
       will generate code for targets with a 64 bit address space/abi
    b) cpu64bitalu, which means that we are generating a compiler which
       will generate code for a cpu with support for 64 bit integer
       operations (possibly running in a 32 bit address space, depending
       on the cpu64bitaddr define)
   All cpus which had cpu64bit set now have both the above defines set,
   and none of the 32 bit cpus have cpu64bitalu set (and none will
   compile with it currently)
  + pint and puint types, similar to aint/aword (not pword because that
    that conflicts with pword=^word)
  * several changes from aint/aword to pint/pword
  * some changes of tcgsize2size[OS_INT] to sizeof(pint)

git-svn-id: trunk@10320 -
2008-02-13 20:44:00 +00:00
florian
1a2a4af773 * hopefully the final fix for x86-64 sysv calling conventions
git-svn-id: trunk@10304 -
2008-02-11 19:46:40 +00:00
florian
4592402529 * fixed sysv x86-64 function results for records and arrays with sizes 9..16 bytes
git-svn-id: trunk@10285 -
2008-02-10 22:28:07 +00:00
Jonas Maebe
3e63d3f1dd - removed {$ifndef cpu64bit} code
git-svn-id: trunk@10275 -
2008-02-10 17:05:27 +00:00
Jonas Maebe
3d89822bc4 * free saved_standard_registers and saved_mm_registers in
done_register_allocators

git-svn-id: trunk@9527 -
2007-12-25 23:47:44 +00:00
Jonas Maebe
2adb00ac45 * enabled operand size checking (don't know why it was disabled,
but enabling it lets the compiler catch the error in tbf/tb0037
    and causes no regressions)

git-svn-id: trunk@9465 -
2007-12-15 22:30:23 +00:00
Jonas Maebe
146b3d8bf3 * fixed location.size for length node and x86_64 mul node
git-svn-id: trunk@9464 -
2007-12-15 19:27:24 +00:00
Jonas Maebe
974c240266 * also use sse2 instructions to convert int to real on i386
for (types convertable to) longint
  * fixed expectloc for x86_64 int_to_real if result is in mmreg

git-svn-id: trunk@9423 -
2007-12-09 18:10:23 +00:00
Jonas Maebe
444ba107f8 * fixed location.size for divmodn (in particular the sign)
git-svn-id: trunk@9422 -
2007-12-09 18:06:44 +00:00
Jonas Maebe
defe46ef42 * added missing size suffixes for several sse2 opcodes
git-svn-id: trunk@9182 -
2007-11-10 19:57:01 +00:00
Jonas Maebe
032352d98b + darwin/x86_64 support
git-svn-id: trunk@9180 -
2007-11-10 18:33:09 +00:00
florian
965bb41288 * fixed more rex placements
git-svn-id: trunk@9069 -
2007-11-02 21:30:43 +00:00
florian
82c7896d8d * more ins. dat issues popped up, did I mention I start to hate it :(?
git-svn-id: trunk@8968 -
2007-10-28 14:08:04 +00:00
florian
c1d62172fe * the saga continues, fixed previously broken assembler table entries
git-svn-id: trunk@8967 -
2007-10-28 13:01:58 +00:00
florian
f32831c44a * fixed assembling of fisttp of sse3 instruction set
+ sse3 optimized trunc() using fisttp
+ -Cfsse3 for x86-64

git-svn-id: trunk@8962 -
2007-10-27 20:50:46 +00:00
florian
46e1587395 * another bunch of assembler fixes, win64 builds again
git-svn-id: trunk@8957 -
2007-10-27 19:49:53 +00:00
florian
00d6a03b2c + default code now preserves mm registers
* save|restore_standard_registers => save|restore_registers

git-svn-id: trunk@8954 -
2007-10-27 12:02:28 +00:00
florian
8f5a4cc514 * more, hopefully correct, x86-64 assembler fixes
git-svn-id: trunk@8952 -
2007-10-26 20:44:57 +00:00
florian
c5f492ef50 * fixed assembling of movq mem,xmmreg
git-svn-id: trunk@8923 -
2007-10-24 20:45:38 +00:00
peter
a0ebdcf820 * enable regvar for -O2
git-svn-id: trunk@8910 -
2007-10-22 16:50:09 +00:00
florian
1cb5d2a603 * some missing make_simple_ref calls added, resolves #8948
git-svn-id: trunk@8904 -
2007-10-21 20:19:04 +00:00
peter
43c2694d50 * fixed REX placement for xmm opcodes
git-svn-id: trunk@8850 -
2007-10-18 23:30:35 +00:00
peter
ad944fd198 * move x86_64 specific int_to_real conversion to nx64cnv
* fix x86_64 code for none loc_register/loc_reference location

git-svn-id: trunk@8844 -
2007-10-18 20:46:44 +00:00
florian
bb314e5456 * regenerated
git-svn-id: trunk@8788 -
2007-10-14 09:32:15 +00:00
florian
5d31cd02a7 * regenerated
git-svn-id: trunk@8786 -
2007-10-14 09:04:56 +00:00
florian
342ba323cf * fixed assembling of cvtsi2ss with rex
git-svn-id: trunk@8777 -
2007-10-13 14:53:27 +00:00
Jonas Maebe
a8191abd16 * fixed parsing of "rcl/rcr rm,imm" (mantis #9025)
git-svn-id: trunk@8272 -
2007-08-12 13:50:52 +00:00
peter
2e9968d46c * arrays always by addr
git-svn-id: trunk@8232 -
2007-08-06 19:44:25 +00:00
peter
f5d5e377d2 * fix linux x86_64 for records and arrays
git-svn-id: trunk@8224 -
2007-08-05 19:38:21 +00:00
peter
4e6c57b9ee * cleanup x86_64 structures in registers
git-svn-id: trunk@8214 -
2007-08-02 20:46:48 +00:00
florian
be6d2dd0f9 * reverted wrong commit in r8133
git-svn-id: trunk@8135 -
2007-07-22 17:00:51 +00:00
florian
447276c5bb * Jcc reads the flags, this was not in the dat yet, resolves #9278
* disabled 4 ops variant of insertq for now

git-svn-id: trunk@8133 -
2007-07-22 16:40:44 +00:00
daniel
5add416dab * Fix mul opsize
git-svn-id: trunk@8131 -
2007-07-22 11:48:10 +00:00
daniel
5ce54c6a20 + For muln, don't load left operand in register unless necessary.
(mul supports memory operands).

git-svn-id: trunk@8110 -
2007-07-21 09:20:33 +00:00
daniel
4a3870eb12 * Fix bug #9261.
git-svn-id: trunk@8056 -
2007-07-14 20:57:56 +00:00
daniel
f31889df57 * Pass const params by pointer if calling convention<>register. This is
needed for the windows unit as Delphi compatibility requires const
    parameters for some procedures and Delphi assumes parameters > 4 to be
    passed as pointer.

git-svn-id: trunk@7982 -
2007-07-08 17:26:08 +00:00
daniel
44e07cd098 * Fix bug #9141 and pass const params <=16 in by value.
git-svn-id: trunk@7979 -
2007-07-07 21:01:46 +00:00
daniel
e002e6b9f4 * Also execute setfirsttemp on non-Windows platforms. Fixes -O2 cycle on Linux.
git-svn-id: trunk@7848 -
2007-06-29 17:46:27 +00:00
daniel
62b6fcead8 * Fix operator count.
git-svn-id: trunk@7835 -
2007-06-27 20:31:58 +00:00