marco
2578514853
* first dragonfly patch (existing most). Mantis #27091
...
git-svn-id: trunk@29213 -
2014-12-07 20:27:02 +00:00
sergei
475a9e1617
* Asm readers: allow using procedure symbols in references, resolves #22376 .
...
* rax86int.pas: reject RIP-relative references to locals/parameters.
git-svn-id: trunk@29087 -
2014-11-17 05:34:55 +00:00
sergei
42d251da1c
- x86 assembler readers: cleaned out operand swapping code. Operands of TInstruction are kept in AT&T order, Intel reader attaches operands right-to-left. It was effectively the same way before the change (except Intel reader attaching operands left-to-right, followed by a single swap), operand order checks all over the place were just reducing readability.
...
git-svn-id: trunk@29081 -
2014-11-16 16:37:26 +00:00
Jonas Maebe
5c8ae259c4
* handle GOT-relative loads in the assembler reader as reads of
...
sizeof(pint) bytes (mantis 23109)
git-svn-id: trunk@28789 -
2014-10-08 18:38:06 +00:00
florian
ed11244632
* improved formatting
...
git-svn-id: trunk@28742 -
2014-10-04 17:52:17 +00:00
sergei
de42f2f2f7
* Fixed handling of sign in constant expressions in Intel x86 assembler reader. Mantis #26668 .
...
git-svn-id: trunk@28731 -
2014-10-03 15:51:38 +00:00
florian
8635894de4
* merged new changes to avx2 branch (AVX2 vectory-memory support) by Torsten Grundke
...
git-svn-id: trunk@28527 -
2014-08-27 21:06:23 +00:00
Károly Balogh
dd67fa8c5c
* fixed DFA warnings for i8086
...
git-svn-id: trunk@28504 -
2014-08-20 15:49:27 +00:00
Károly Balogh
07ad2a04ac
* fix warnings when compiling the compiler with DFA optimizer enabled on i386
...
git-svn-id: trunk@28497 -
2014-08-20 12:28:44 +00:00
Károly Balogh
249a60b28b
x86: fix a variable op not initialized warning. This hopefully fixes our x86 testsuite run.
...
git-svn-id: trunk@28496 -
2014-08-20 10:21:06 +00:00
Károly Balogh
74581a07af
AROS: assembler fixes
...
git-svn-id: trunk@28439 -
2014-08-18 11:25:55 +00:00
florian
499dd078e3
+ automatically insert fma inlines into floating point code if possible and fastmath is activated
...
git-svn-id: trunk@28382 -
2014-08-11 20:50:21 +00:00
nickysn
94bcb9878a
* reimplemented r28329 in a different way, as suggested by Jonas
...
git-svn-id: trunk@28332 -
2014-08-07 19:36:52 +00:00
nickysn
dfcbe03572
+ added x86-specific function getx86pointerdef, similar to getpointerdef, but
...
allows creating the x86 special pointer types as well
git-svn-id: trunk@28329 -
2014-08-07 08:50:01 +00:00
nickysn
9b560ffd64
* x86 intel syntax inline asm: allow a segment override (segcs,segds,seges,etc.)
...
to be followed by an instruction on the same line as the override
git-svn-id: trunk@28066 -
2014-06-25 21:06:19 +00:00
nickysn
36d6fb7868
* don't add the stack segment declaration at the beginning of each object file
...
in the i8086 far data memory models as well
git-svn-id: trunk@28022 -
2014-06-21 10:41:57 +00:00
nickysn
ef88fec688
* nested ifdefs in TX86NasmAssembler.WriteHeader replaced with an 'if defined()'
...
sequence
git-svn-id: trunk@28019 -
2014-06-21 08:28:15 +00:00
nickysn
40b2d3d562
* don't add the heap segment declaration at the beginning of each object file in
...
the i8086 far data memory models
git-svn-id: trunk@28018 -
2014-06-21 08:15:18 +00:00
nickysn
7cfd7a66cd
+ create a special 'heap' segment with reserved space equal to heapsize (i.e.
...
the value set by -Ch or the second parameter to the $M directive). This is
equivalent to the heapmin value in Turbo Pascal 7 and ensures that the program
has at least this amount of heap space available (otherwise DOS will show a
'not enough memory' error and will refuse to load the program).
git-svn-id: trunk@28002 -
2014-06-19 14:14:01 +00:00
nickysn
22a7dfa231
* stack segment moved outside of dgroup in the i8086 far data memory models, so
...
it no longer eats from the precious 64kb limit for static data
git-svn-id: trunk@27959 -
2014-06-14 19:34:36 +00:00
nickysn
2dc8839af5
* set class=data to all data segments/sections on i8086
...
git-svn-id: trunk@27957 -
2014-06-14 16:01:22 +00:00
sergei
05ecd3cec1
* One more fix of operand size, likely harmless because shift amount is taken modulo bit-width anyway.
...
git-svn-id: trunk@27955 -
2014-06-14 13:31:48 +00:00
sergei
be6d6d90d7
+ Division-by-constant optimization for x86_64 (merged i386 code adapted for different operand sizes, so the result should be suitable for i386 as well).
...
git-svn-id: trunk@27945 -
2014-06-13 12:32:45 +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
c28271ab99
* NASM writer: don't force 'near' size for all non-far branches and calls, it disables NASM's capability to optimize branches into short form where possible, and thus only increases size of generated code.
...
- LDS and LES instructions do not exist on x86_64.
git-svn-id: trunk@27932 -
2014-06-11 12:32:21 +00:00
sergei
b594eee70b
* Moved x86_64 mod/div code to x86, with minimal changes to ensure it compiles on i386/i8086. Merging optimized division-by-const code from i386 is pending...
...
git-svn-id: trunk@27930 -
2014-06-11 01:42:46 +00:00
nickysn
73d7f2aa18
* let the compiler generate the stack segment in i8086 near data memory models
...
as well. Even though, in these models, the stack is dynamically allocated
(because it goes on top of the heap, but the heap is variable size), there are
still benefits:
1) the program will run on a larger stack during initialization, before the
actual stack (and heap) are ready
2) in cases, when the system is extremely low on memory, DOS will reject to
load the program if there's not enough memory for the stack the program
requires. This way the startup code can be further simplified by omitting
the 'not enough memory' check in the future (when we add the minimum heap
size to the executable reserved space as well).
git-svn-id: trunk@27903 -
2014-06-08 21:14:57 +00:00
sergei
ae627a4ba8
* tcgx86.a_op_const_reg_reg: optimize trivial cases before considering more complex ones.
...
git-svn-id: trunk@27892 -
2014-06-08 00:08:56 +00:00
nickysn
daf71e6d88
* fixed multiplication by 64-bit constants on x86_64, mantis #26230
...
git-svn-id: trunk@27822 -
2014-05-28 22:52:08 +00:00
nickysn
3cc8ff11e3
+ generate the stack segment for i8086 far data memory models from within fpc
...
itself (instead of having a fixed 16k stack in the startup code). This allows
setting the stack size in these models with the -Cs option.
git-svn-id: trunk@27820 -
2014-05-27 23:29:50 +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
michael
36c662f69f
* Extention -> extension (By Reinier, bug ID #25979 )
...
git-svn-id: trunk@27750 -
2014-05-10 15:29:29 +00:00
florian
8207e0ef22
+ make use of vfnmsub*/vfmsub*/vfnmadd* instructions if possible
...
git-svn-id: trunk@27721 -
2014-05-02 21:07:46 +00:00
nickysn
6e7dd647fd
* Tcgx86.g_concatcopy: optimization for the case where source.segment is
...
specified, but equal to DS in the current memory model
git-svn-id: trunk@27720 -
2014-05-02 13:07:54 +00:00
nickysn
c9f8703679
+ set ref.segment to NR_SS for all temps/localvars on i8086. This allows the
...
segment to survive e.g. several nested vecnodes, which cause the base register
to change from BP to something else. In the cases where the ss: prefix is not
needed, it is removed by make_simple_ref.
+ remove the ss: prefix in the several cases where make_simple_ref isn't called
(namely spilling and tcg8086.a_call_reg_far)
git-svn-id: trunk@27714 -
2014-05-01 21:18:47 +00:00
nickysn
1eb24f9d98
+ remove the segment prefix in make_simple_ref on i8086, in case it is the same
...
as the default segment for the reference (SS for BP-relative, DS for all
others)
git-svn-id: trunk@27687 -
2014-04-29 23:11:10 +00:00
florian
33602db802
* try to registers more cleverly during fma code generation
...
git-svn-id: trunk@27671 -
2014-04-26 18:11:13 +00:00
nickysn
efb3cfcbc7
- don't write the default unit code section in the beginning of each asm file,
...
when using {$hugecode on}, to avoid bogus nasm warnings
git-svn-id: trunk@27623 -
2014-04-21 01:02:21 +00:00
sergei
2ee0c8de45
* i386: For integer comparisons with zero, emit "test $-1,%reg" instead of "test %reg,%reg". It is more spilling-friendly, because it transforms into "test $-1,spilltemp" and does not require a register.
...
* Improved peephole optimizer to remove these instructions if preceded by flag-setting instruction that operates on same location and followed by conditional jump, and change them back into "test %reg,%reg" otherwise.
git-svn-id: trunk@27617 -
2014-04-20 19:16:58 +00:00
nickysn
597f110eb9
+ added support for units with code larger than 64kb in the far code i8086
...
memory models. Enabled by the new directive {$hugecode on}. The directive is
ignored in the near code memory models. When enabled, it forces each procedure
to be in a separate segment and disables mixing near and far procedures (so
'near' and {$F-} are ignored in this mode). Note that {$hugecode on} does not
count as a different memory model, because you can freely link modules (units)
compiled with {$hugecode on} and {$hugecode off}.
git-svn-id: trunk@27615 -
2014-04-20 19:03:14 +00:00
sergei
07e90aaa24
+ Implemented IEEE 754-compliant checking for unordered results of floating-point compares on x86 targets. Mantis #9362 .
...
git-svn-id: trunk@27581 -
2014-04-14 12:36:11 +00:00
florian
18233f2c0c
* fix compilation of i8086 compiler
...
git-svn-id: trunk@27566 -
2014-04-13 19:28:59 +00:00
florian
6fd98d604a
* compilation fixed
...
git-svn-id: trunk@27565 -
2014-04-13 19:21:57 +00:00
florian
d88d644925
+ support for FMA intrinsic: if there is no hardware support, the compiler throws an error.
...
Currently it is implemented only for x86-CPUs supporting the FMA extension. While it would
be possible to implement it in software or simulate fma(<single>,<single>,<single>) using
double operations, it makes no sense in my opinion to do so.
git-svn-id: trunk@27564 -
2014-04-13 19:21:54 +00:00
sergei
3e20a136f3
* tx86addnode.second_addfloat: use single and double-precision memory locations without loading them on FPU stack if possible.
...
git-svn-id: trunk@27558 -
2014-04-13 12:37:30 +00:00
nickysn
fc71081b74
* i8086 and i386-specific code from tabstractprocdef.is_pushleftright moved to
...
symi86
git-svn-id: trunk@27549 -
2014-04-12 15:34:08 +00:00
nickysn
afcb8c3f10
* initialize DS from CS in the interrupt procedure entry code in tiny model,
...
because dgroup emits relocations, which results in a linker warning and broken
code when the target format is .com file.
git-svn-id: trunk@27517 -
2014-04-10 20:02:35 +00:00
pierre
816dfa69c1
Avoid new line after lock prefix for nasm
...
git-svn-id: trunk@27511 -
2014-04-10 14:56:30 +00:00
pierre
e0744b9759
Fix section output for user section in smart mode
...
git-svn-id: trunk@27510 -
2014-04-10 14:18:48 +00:00
nickysn
198960b17c
* preserve the segment of the reference in tx86vecnode.update_reference_reg_mul
...
on i386 and x86_64 as well
git-svn-id: trunk@27481 -
2014-04-05 14:46:35 +00:00