sergei
e6a9f3b15b
* Fixed spilling of 3-operand IMUL instruction (went unnoticed this far because such instructions were not emitted by compiler).
...
git-svn-id: trunk@26510 -
2014-01-18 19:21:48 +00:00
nickysn
1f7b14f38e
* fixed the conversion of powerof2 mul/imuls to lea in tcgx86.a_op_const_reg_reg
...
git-svn-id: trunk@26509 -
2014-01-18 17:58:31 +00:00
nickysn
cc1faad3d2
+ make use of the 3-operand form of IMUL on i386 and x86_64
...
git-svn-id: trunk@26508 -
2014-01-18 17:04:57 +00:00
florian
7028210817
+ tzcnt assembler instruction
...
git-svn-id: trunk@26506 -
2014-01-18 12:11:50 +00:00
nickysn
5d75bf4f92
* always use IMUL instead of MUL on i386, when doing a 32->32 multiplication
...
without overflow checking
git-svn-id: trunk@26498 -
2014-01-18 02:56:51 +00:00
sergei
6168f563c2
* x86 compares: compare references with constants directly (without loading to register) if possible, this helps to reduce register pressure.
...
git-svn-id: trunk@26492 -
2014-01-17 19:42:09 +00:00
nickysn
820b667e1b
- rm the OP_IMUL to SHL optimization from tcgx86.a_op_const_reg and tcgx86.a_op_const_ref, because it's already done in optimize_op_const, which is called in the beginning of both methods.
...
git-svn-id: trunk@26491 -
2014-01-17 18:34: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
nickysn
270444508a
* fixed not(boolean32) and not(boolean64) on i8086
...
git-svn-id: trunk@26369 -
2014-01-03 15:18:07 +00:00
sergei
36d0c8a5a7
* x86 and SPARC: fixed handling 64-bit (qwordbool) values in tcgnotnode (partial fix for Mantis #25255 ).
...
* Moved handling LOC_JUMP locations to helper method of base class, it appears to be the same for all targets.
git-svn-id: trunk@26353 -
2014-01-02 10:29:44 +00:00
nickysn
39c54bf077
* handle ait_varloc in the nasm writer. This allows compiling the system unit
...
for i8086 with regvars and -sr for debugging purposes.
git-svn-id: trunk@26271 -
2013-12-23 13:27:22 +00:00
sergei
f2096de53a
* tcg386.g_proc_exit: instead of recalculating stack size, use current_procinfo.final_localsize which was calculated in g_proc_entry.
...
* tcgx86.g_proc_entry: don't over-allocate stack in SEH finalizer procedures.
git-svn-id: trunk@26251 -
2013-12-19 10:32:32 +00:00
nickysn
be5f49b3e5
* tx86addnode.second_cmpfloat: on i8086 only load the high byte of the FPU
...
status word after fstsw (and before sahf), because 8-bit memory transfers are
faster on the i8088, due to the 8-bit data bus
git-svn-id: trunk@26245 -
2013-12-16 23:52:28 +00:00
nickysn
ada9ccf6a6
* tx86addnode.second_cmpfloat: do not emit a fwait after fstsw as my own testing
...
on a true i8087 showed that the fwait isn't necessary
git-svn-id: trunk@26244 -
2013-12-16 23:17:44 +00:00
nickysn
a7b4953795
+ proper (i.e. not broken) implementation of arctan() for the 8087 and 80287
...
git-svn-id: trunk@26226 -
2013-12-12 23:46:51 +00:00
sergei
179586f589
+ SEH support for Win32. Enable by cycling with OPT=-dTEST_WIN32_SEH.
...
Although basic things work (no regressions in test suite, also with TEST_OPT=-O2), there are some secondary issues/TODOs:
- Exception frame around PASCALMAIN is not properly removed in DLLs
- No stack traces yet
- Stack overallocated in finalizer procedures, their entry/exit code needs cleanup
- Signals unit is probably completely broken.
git-svn-id: trunk@26225 -
2013-12-12 12:43:46 +00:00
nickysn
09a3fc74e3
* use the fwait prefixed FSTCW, followed by FWAIT, instead of FNSTCW in
...
tx86inlinenode.second_trunc_real, when generating code for the 8087
git-svn-id: trunk@26186 -
2013-12-05 23:33:33 +00:00
nickysn
2d45ea43af
* use the 'wait' prefix (on the same line as the instruction), instead of
...
'db 09bh' (on the previous line) for the fwait prefixed 8087 instructions in
the nasm assembly output, because it looks prettier this way :)
git-svn-id: trunk@26185 -
2013-12-05 21:31:16 +00:00
nickysn
3555b76495
- rm FDISI,FENI,FSAVE,FSTCW,FSTENV and FSTSW from the requires_fwait_on_8087()
...
list, because these instructions already have a built in FWAIT prefix even
when targeting the 287/387+ both with the internal asm writer and with the
NASM back end.
git-svn-id: trunk@26178 -
2013-12-03 23:56:45 +00:00
nickysn
e9a4896565
- rm the 287/387+ FPU instructions from the requires_fwait_on_8087() list
...
git-svn-id: trunk@26176 -
2013-12-03 22:48:52 +00:00
florian
4d5119bf1c
* fixes several issues which cause warnings by the dfa code when using it to detect uninitialized variables
...
git-svn-id: trunk@26161 -
2013-12-01 17:02:08 +00:00
nickysn
6fdadb6248
* 8087 fixes in tx86addnode.second_cmpfloat:
...
- use FSTSW instead of FNSTSW
- insert a FWAIT after the FSTSW, because the value is immediately loaded
afterwards by the integer unit of the CPU
git-svn-id: trunk@26110 -
2013-11-19 23:22:49 +00:00
nickysn
7ae59a62c5
* emit a FWAIT after a floating point store, when targeting the 8087 and 80287
...
git-svn-id: trunk@26109 -
2013-11-19 23:11:26 +00:00
nickysn
0020a2ed10
+ when targeting the i8087, emit FWAIT prefix manually for the 8087 instructions
...
that require it in the NASM asm writer, since NASM doesn't do it itself.
git-svn-id: trunk@26107 -
2013-11-19 01:26:57 +00:00
nickysn
12b2f86e99
+ added function requires_fwait_on_8087(), which checks whether a given
...
instruction needs adding a FWAIT prefix on the i8087.
git-svn-id: trunk@26106 -
2013-11-18 23:38:57 +00:00
sergei
bca2c464da
* Don't generate x87 instructions for sin and cos on win64, somehow managed to not commit this part in r25995. Mantis #17273 .
...
git-svn-id: trunk@26094 -
2013-11-15 10:37:59 +00:00
nickysn
dea947f87b
* fixed tcgx86.a_op_const_ref for shl/shr/sar/rol/ror on i8086 and x86_64
...
git-svn-id: trunk@26018 -
2013-11-10 20:39:47 +00:00
sergei
2b1e5f7014
* Mantis #17273 : don't generate x87 instructions on win64 target.
...
git-svn-id: trunk@25995 -
2013-11-08 13:31:07 +00:00
nickysn
d0f988f7a8
* don't use LEA in the code generator on i8086, as this breaks it quite badly.
...
While it is possible to use 16-bit LEA on the i8086, it's probably not worth
doing it in the code generator, because of the unpleasant register
restrictions that 16-bit references have.
git-svn-id: trunk@25989 -
2013-11-07 17:00:58 +00:00
florian
f132a804d6
+ handle 32 bit references on x86-64 so lea can be used for 32 bit arithmetics
...
git-svn-id: trunk@25909 -
2013-11-01 19:01:39 +00:00
florian
7fc1d70e49
* do reg2=reg1*const by lea if possible
...
git-svn-id: trunk@25908 -
2013-11-01 19:01:36 +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
3c58cad96b
* make use of lea if possible
...
git-svn-id: trunk@25898 -
2013-11-01 19:01:11 +00:00
sergei
486a7ef81e
* tx86inlinenode.second_popcnt: use emit_ref_reg instead of appending instruction directly, this provides proper PIC handling of the reference. emit_reg_reg part is not strictly necessary, but done for consistency.
...
git-svn-id: trunk@25878 -
2013-10-28 16:40:42 +00:00
nickysn
9f979eb5c6
* put the i8086-msdos dwarf debug sections in USE32 class=DWARF segments because
...
wlink wants them this way
git-svn-id: trunk@25873 -
2013-10-27 20:28:43 +00:00
nickysn
e6a4435330
+ support the aitconst_XXbit_unaligned const types in the NASM asm writer. This
...
fixes DWARF support when using NASM.
git-svn-id: trunk@25866 -
2013-10-27 15:21:30 +00:00
nickysn
0f69362edd
- rm LEA reg,imm from x86ins.dat, as that's not a valid x86 instruction,
...
using it in inline asm causes an internal error and removing it didn't show
any regressions after running the testsuite on i386-linux.
git-svn-id: trunk@25827 -
2013-10-18 23:26:58 +00:00
nickysn
4aa010eedc
+ support LEA with 16-bit operand size
...
git-svn-id: trunk@25808 -
2013-10-17 16:11:08 +00:00
nickysn
f6e846c574
+ added the NEC V20/V30 instructions
...
git-svn-id: trunk@25750 -
2013-10-11 21:27:56 +00:00
nickysn
67fdcb02f2
* in tcgx86.make_simple_ref, on the i8086, emit 'mov es, reg', instead of
...
'push reg/pop es', since that is a lot faster on 8088..80386
git-svn-id: trunk@25700 -
2013-10-06 19:52:38 +00:00
nickysn
6be9627e74
* use all kinds of copy and not just copy_string in Tcgx86.g_concatcopy, when
...
segments are specified on the i8086
git-svn-id: trunk@25698 -
2013-10-06 19:04:13 +00:00
sergei
5af873ee5b
* x86 targets: Profiling shows that quite a bit of time is spent in findreg_by_number(), despite it uses binary search. Worse, it is repeated for every piece of register information. Trying to get rid of some of these calls: rearranged registers so that their "opcode" matches 3 LSBs of superregister number (with a few exceptions described at the beginning of x86reg.dat). This allows to lookup opcodes in regval() with O(1) complexity, and removes need in rXXXop.inc files.
...
git-svn-id: trunk@25627 -
2013-10-03 08:08:04 +00:00
sergei
2c79314d59
* IF_SANDYBRIDGE designates CPU family, not feature. Mostly a cosmetic change, since we don't use these flags for anything.
...
git-svn-id: trunk@25626 -
2013-10-03 06:06:34 +00:00
nickysn
bd0585274e
* tsettings.enablecld converted to a targetswitch ts_cld
...
git-svn-id: trunk@25592 -
2013-09-28 13:41:58 +00:00
nickysn
52fcc0a407
+ added a new x86-specific compiler option 'enablecld', which controls whether
...
the compiler should emit a CLD before using the x86 string instructions.
git-svn-id: trunk@25590 -
2013-09-28 11:54:02 +00:00
nickysn
661e11ecb8
* on i8086 added section .fpc to the group 'dgroup'. This fixes a bug that caused the bss section to not be left out from the executable in tiny model, which caused, ironically, tiny model executables to be larger than the small model executables
...
git-svn-id: trunk@25525 -
2013-09-21 11:28:01 +00:00
nickysn
8608969eb8
* tx86casenode.genjumptable: explicitly emit near pointers in the case jump table on i8086, regardless of the memory model
...
git-svn-id: trunk@25503 -
2013-09-16 19:58:45 +00:00
sergei
5de4bdac40
* tx86addnode.second_cmpfloat: use getresflags() to reduce code duplication.
...
git-svn-id: trunk@25443 -
2013-09-09 11:25:49 +00:00
nickysn
4f96e8a20d
* convert i8086 inline asm instruction 'call symbol' to 'call far symbol' in memory models with far code
...
git-svn-id: trunk@25438 -
2013-09-08 16:34:12 +00:00
sergei
7e6a7f20cc
- Removed unused variables and dead assignments.
...
git-svn-id: trunk@25424 -
2013-09-05 09:05:56 +00:00