Commit Graph

65 Commits

Author SHA1 Message Date
J. Gareth "Curious Kit" Moreton
83969d3ba3 * x86: Added BEXTR and BZHI to special spilling rules since they follow the same format as SHRX etc. 2022-09-10 19:10:55 +00:00
Yuriy Sydorov
e9acd759a4 * Fixed random AVs when targeting the AVX FPU. 2021-12-12 18:19:35 +02:00
florian
7811b915a9 * x86-64: we can spill replace 32 bit operations if the operation does not modify a register
git-svn-id: trunk@49097 -
2021-03-31 21:23:22 +00:00
florian
90710d055b * fix spilling of (v)min/max/s/ps/d operations
git-svn-id: trunk@48856 -
2021-03-01 20:29:58 +00:00
florian
de36d6c049 + added newly used opcodes to avx_opcode_only_op0_may_be_memref
git-svn-id: trunk@48070 -
2021-01-04 21:54:36 +00:00
florian
d9eddc50fd * fix spilling for PAND, POR and PXOR, resolves #37084
git-svn-id: trunk@45388 -
2020-05-16 15:51:48 +00:00
Jeppe Johansen
135a88c888 movhlps/movlhps only take xmm registers.
Handle spilling of SSE registers.

git-svn-id: trunk@44272 -
2020-03-06 17:19:51 +00:00
Jonas Maebe
281b3ad276 * fix case completeness and unreachable code warnings in compiler that would
be introduced by the next commit

git-svn-id: trunk@42046 -
2019-05-12 14:29:03 +00:00
florian
b1dff29cbf * removed unused units
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
florian
a8ba81a585 * unused data structure removed
git-svn-id: trunk@35523 -
2017-03-05 08:13:34 +00:00
florian
41b028ffc0 * unpcklp* require aligned memory, so do not spill replace their first operand by a memory location, resolves #31332
git-svn-id: trunk@35400 -
2017-02-05 20:59:54 +00:00
florian
180e0e7561 * avoid spilling of 2nd and 3rd operand of avx instructions
git-svn-id: trunk@33877 -
2016-06-01 20:48:08 +00:00
Jonas Maebe
7949bebb8d * synchronised with r28168 of trunk
git-svn-id: branches/hlcgllvm@28169 -
2014-07-05 21:30:28 +00:00
sergei
e7cd5319f0 * Put under {$ifndef x86_64} more cases of instructions that do not exist in 64-bit mode.
git-svn-id: trunk@27933 -
2014-06-11 12:51:38 +00:00
sergei
1c7a5d5adc * x86: fix spilling of sqrtss and sqrtsd instructions, they cannot have memory as destination.
git-svn-id: trunk@27810 -
2014-05-22 07:19:13 +00:00
Jonas Maebe
e9268a0a14 * synchronised with trunk up till r26975
git-svn-id: branches/hlcgllvm@26976 -
2014-03-06 21:36:58 +00:00
florian
75a13f7e47 * do not allow VCOMISD/VCOMISS to use a memory location as target
git-svn-id: trunk@26774 -
2014-02-14 21:26:51 +00:00
florian
a8643410c4 * fix trgx86.do_spill_replace for bmi rotating/shifting instructions
git-svn-id: trunk@26739 -
2014-02-08 21:38:23 +00:00
florian
9d84b83475 * fix comment
git-svn-id: trunk@26737 -
2014-02-08 21:38:18 +00:00
nickysn
c83032992d * more fixes to the 3-op IMUL spilling:
o Return the correct operation type for all forms of IMUL in
    taicpu.spilling_get_operation_type
  o Properly support 3-op IMUL in trgx86.do_spill_replace

git-svn-id: trunk@26514 -
2014-01-18 21:46:13 +00:00
florian
e210d5f30e + cpu_capabilites for x86_64 and i386
* take advantage of bmi2 instruction rorx

git-svn-id: trunk@26482 -
2014-01-16 21:47:28 +00:00
Jonas Maebe
5ef93e85b8 + added extra "orgsupreg" parameter to do_spill_read/do_spill_written/
do_spill_replace routines, will be necessary by llvm register
    allocator to determine the tdef corresponding to that register
  * replaced uses of taicpu with tai_cpu_abstract_sym in the register
    allocator so that it can work both with taicpu and taillvm instructions

git-svn-id: branches/hlcgllvm@26043 -
2013-11-11 11:15:43 +00:00
florian
f56d2d4b09 * be able to replace lea by add when spilling
git-svn-id: trunk@25901 -
2013-11-01 19:01:20 +00:00
florian
e81d2d1f3b * basic avx support for floating point operations (use -Cfavx to activate)
git-svn-id: trunk@24896 -
2013-06-14 20:03:01 +00:00
nickysn
2a9d38d878 + proper spilling support for R_SUBH (i.e. AH,BH,CH,DH) x86 registers in trgx86.do_spill_replace
git-svn-id: trunk@24476 -
2013-05-09 11:57:00 +00:00
sergei
1579583484 * COMISD (and COMISS, too) instruction cannot have memory reference as destination, Mantis #22150.
git-svn-id: trunk@21432 -
2012-05-29 14:43:01 +00:00
sergei
b3335abe75 * MOVSXD destination operand cannot be in memory, resolves #20850.
git-svn-id: trunk@19848 -
2011-12-13 22:56:24 +00:00
florian
ca1f33aae1 * extended do_spill_replace with some sse instructions
git-svn-id: trunk@18788 -
2011-08-20 12:29:41 +00:00
florian
66a8dd1e32 * cmov cannot use memory location as destination, fixed spiling code, resolves #19201
git-svn-id: trunk@17359 -
2011-04-21 13:51:45 +00:00
Jonas Maebe
99a75c56fc * fixed copy-paste error in r15600
* fixed spilling error after r15600 the same register appears twice in an
    instruction (it was spilled once in that case)

git-svn-id: trunk@15601 -
2010-07-18 21:24:52 +00:00
Jonas Maebe
a75016e67b * make sure that registers are of the right type before calling get_alias
on them (could cause crashes or, in very rare instances, wrong spilling
    code)

git-svn-id: trunk@15600 -
2010-07-18 21:01:06 +00:00
Jonas Maebe
146a819615 * fixed spilling of and operations on spilled 32 bit values for x86_64
(mantis #14403)

git-svn-id: trunk@13573 -
2009-08-21 16:20:16 +00:00
Jonas Maebe
4e1859e108 * fixed spilling of "mov $64bitconst,%reg" on x86_64
git-svn-id: trunk@12711 -
2009-02-07 22:57:59 +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
yury
5548824859 * Removed/ifdefed/commented unused local variables.
git-svn-id: trunk@11438 -
2008-07-23 09:22:47 +00:00
peter
6058b2c247 * renamed t_times to executionweight and moved it to
code generation pass
  * include executionweight in the spilling decision

git-svn-id: trunk@9330 -
2007-11-25 16:38:05 +00:00
daniel
3ad8257ecb * Fix replace spilling of shld/shrd.
git-svn-id: trunk@7252 -
2007-05-03 20:56:09 +00:00
daniel
f3660976bc + Allow replace spilling for "opcode register,const" and "opcode const,register"
git-svn-id: trunk@7183 -
2007-04-28 19:11:17 +00:00
daniel
9256c180de * Fix register allocation bug that happens when a coalesced
move is spilled in its entirely.

git-svn-id: trunk@6408 -
2007-02-10 22:47:13 +00:00
Jonas Maebe
e815b923d5 * a_loadfpu_* gets two size parameters: fromsize and tosize
* fixed downsizing the precision of floating point values
  * floating point constants are now treated using only the minimal
    precision required (e.g. 2.0 is now a single, 1.1 extended etc)
    (Delphi compatible)

git-svn-id: trunk@5927 -
2007-01-12 18:33:51 +00:00
florian
85d63d9fa9 * settings refactored
git-svn-id: trunk@5094 -
2006-10-30 18:02:58 +00:00
daniel
3125ed73cf * Add one more call to get_alias
git-svn-id: trunk@5000 -
2006-10-22 09:18:37 +00:00
daniel
01afee1f73 * Add extra calls to get_alias to properly recognize coalesced
registers to be spilled.

git-svn-id: trunk@4997 -
2006-10-21 21:31:08 +00:00
Jonas Maebe
51259b697b * more mmx/sse register spilling fixes:
* operand read/write info for movaps and movapd
    * use "movapd reg,reg" instead of "movaps reg,reg" if appropriate
      so the spilling code can spill the correct size to memory
    * replace movaps/movapd with movss/movsd when spilling to memory
      instead of movq

git-svn-id: trunk@4612 -
2006-09-12 11:07:45 +00:00
Jonas Maebe
cd0c38b9d9 * fixed spilling of mmx registers
git-svn-id: trunk@4604 -
2006-09-10 15:59:58 +00:00
florian
0378f8c162 + more reg/reg reg/mem only instructions
git-svn-id: trunk@3587 -
2006-05-19 23:51:13 +00:00
peter
b7fe6797bf Merged revisions 2921-2922,2925 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/linker/compiler

........
r2921 | peter | 2006-03-15 08:35:00 +0100 (Wed, 15 Mar 2006) | 2 lines

  * pass ObjectWriter to ObjectOuput

........
r2922 | peter | 2006-03-15 12:40:30 +0100 (Wed, 15 Mar 2006) | 2 lines

  * refactor asmdata

........
r2925 | peter | 2006-03-15 16:09:39 +0100 (Wed, 15 Mar 2006) | 3 lines

  * add cfi to asmdata
  * move asmlist, asmcfi, asmdata to own unit

........

git-svn-id: trunk@2932 -
2006-03-16 08:52:22 +00:00
peter
b6e35a200e * rewrite of optimizer options
git-svn-id: trunk@2901 -
2006-03-13 09:05:50 +00:00
florian
0e89afa607 * mm register spilling fixed
* no sse instruction can operate on memory

git-svn-id: trunk@762 -
2005-07-27 19:31:31 +00:00
florian
146efddbb7 * unified internal error
git-svn-id: trunk@756 -
2005-07-26 21:02:31 +00:00