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
nickysn
7a873f495d
* use the stack segment for SP-relative addresses in Tcgx86.g_concatcopy in
...
the memory models with SS<>DS (necessary, because make_simple_ref isn't called
in the copy_string case)
git-svn-id: trunk@27479 -
2014-04-05 12:02:04 +00:00
sergei
5c48804240
* Moved local label infrastructure into tasmreader, reduces number of global vars. Functionality is not changed.
...
git-svn-id: trunk@27477 -
2014-04-05 09:43:13 +00:00
nickysn
ee20ecfcf2
* tcgx86.make_simple_ref: in i8086 memory models with DS<>SS, add an SS: segment
...
override when converting SP-relative references to use a general purpose
register
git-svn-id: trunk@27473 -
2014-04-05 08:56:40 +00:00
nickysn
b36a98ce51
+ Tcgx86.g_concatcopy: added support for memory models with DS<>SS
...
git-svn-id: trunk@27461 -
2014-04-04 01:13:02 +00:00
nickysn
e9e4cc8bcb
* Tcgx86.g_concatcopy: use boolean variables saved_ds and saved_es to keep track
...
whether these segment registers were saved on the stack or not
git-svn-id: trunk@27460 -
2014-04-04 00:10:36 +00:00
Jonas Maebe
d452686c39
* moved pbestrealtype from symdef to symcpu
...
git-svn-id: trunk@27441 -
2014-04-01 21:41:37 +00:00
Jonas Maebe
8364232049
+ symx86 unit, forgot to commit (part of r27397)
...
git-svn-id: trunk@27399 -
2014-03-30 22:03:55 +00:00
Jonas Maebe
338c064beb
* moved x86-specific tpointerdef functionality to architecture-specific
...
descendants
git-svn-id: trunk@27397 -
2014-03-30 21:04:36 +00:00
nickysn
4763723c75
+ support compact, large and huge memory models in x86/cpubase.segment_regs_equal()
...
git-svn-id: trunk@27392 -
2014-03-30 19:36:21 +00:00
nickysn
096bba90da
* fixed Tcgx86.g_concatcopy not using the correct push instruction size when
...
pushing the source segment
git-svn-id: trunk@27389 -
2014-03-30 18:09:15 +00:00
Jonas Maebe
4a79481c51
* isolated segment-related functionality of tabsolutevarsym into i386/i8086-
...
specific descendent classes and moved the code that deals with this in the
code generator also to target-specific classes -> only ifdefs left in
pdecvar
git-svn-id: trunk@27379 -
2014-03-30 15:42:53 +00:00
Jonas Maebe
b5fd71c3b9
* removed {$ifndef i8086} in tx86vecnode, instead reset cvecnode to
...
tcgvecnode in the n8086mem initcode
git-svn-id: trunk@27360 -
2014-03-29 22:31:49 +00:00
Jonas Maebe
6b16c05a98
* fixed compilation for i8086 with 2.6.x (it gave an unreachable code
...
warning)
git-svn-id: trunk@27358 -
2014-03-29 22:31:43 +00:00
nickysn
17a8c03e41
* declare the group dgroup even in i8086 far data memory models
...
git-svn-id: trunk@27348 -
2014-03-29 19:35:54 +00:00
florian
c38e52bb27
* create shorter code for -<single/double> when generating avx code
...
git-svn-id: trunk@27347 -
2014-03-29 19:35:41 +00:00
sergei
e4819e863b
+ Consider target_info.cprefix in symbol names.
...
git-svn-id: trunk@27315 -
2014-03-28 09:07:58 +00:00
sergei
ebdbf21650
* tx86addnode.second_cmpfloatsse and tx86addnode.second_cmpfloatavx are identical except instruction opcodes -> merged into second_cmpfloatvector, cleaned up, and allowed constant operands at both sides.
...
git-svn-id: trunk@27314 -
2014-03-28 09:04:28 +00:00
sergei
965540eab3
* Let tx86addnode.check_left_and_right_fpureg() act as when its argument was=true (removed argument and renamed to force_left_and_right_fpureg). Its action when force_fpureg=false is now coded separately.
...
git-svn-id: trunk@27299 -
2014-03-27 11:42:24 +00:00
florian
842e027a9f
+ prove of concept how FMA4 could be supported in inline assembler
...
git-svn-id: trunk@27214 -
2014-03-20 21:25:38 +00:00
florian
a79be2b05c
+ support for FMA instructions in inline assembler
...
+ extended avx test code with FMA
git-svn-id: trunk@27209 -
2014-03-20 20:06:56 +00:00
florian
aa107b914c
* merged avx2 branch, developed by Torsten Grundke
...
git-svn-id: trunk@27200 -
2014-03-20 12:03:52 +00:00
Jonas Maebe
80863a8361
* fixed warning/compilation
...
git-svn-id: trunk@27166 -
2014-03-16 19:46:10 +00:00
Jonas Maebe
4065483a50
* completed thlcgobj.location_force_fpureg(), use it everywhere and removed
...
ncgutil/thlcg2ll.location_force_fpureg()
git-svn-id: trunk@27071 -
2014-03-10 09:01:05 +00:00
pierre
044891fd94
Avoid range check error in a_op_const_reg_reg
...
git-svn-id: trunk@27060 -
2014-03-09 19:49:29 +00:00
sergei
9c54cdc85d
* x86: Cleaned out addr_far,addr_far_ref used to encode far calls/jumps. NASM (and FPC x86 assembler based on it) already have opsize=S_FAR for this purpose.
...
git-svn-id: trunk@27037 -
2014-03-08 22:54:43 +00:00