nickysn
ff2fff365f
+ added x86 compiler intrinsics fpc_x86_sti and fpc_x86_cli, which generate the
...
'sti' and 'cli' instructions
git-svn-id: trunk@39388 -
2018-07-04 16:48:34 +00:00
nickysn
6cd88a24dc
* release al/ax/eax immediately after the 'in', before (instead of after) moving
...
it to the destination imaginary register. This generates better code.
git-svn-id: trunk@39380 -
2018-07-04 13:09:47 +00:00
nickysn
f34710faa0
+ use the in and out instructions with immediate constant port number for ports
...
that are evaluated as a compile-time constant in the range 0..255
git-svn-id: trunk@39365 -
2018-07-03 20:15:20 +00:00
nickysn
fdc896ad0a
+ inline support for the x86 'in' and 'out' instructions. Currently only enabled
...
in the i8086-msdos 'ports' unit, but will be enabled on other targets (e.g.
go32v2) in the future as well. 32-bit 'in' and 'out' not inlined on i8086, but
will be on i386 and x86_64.
git-svn-id: trunk@39362 -
2018-07-03 17:01:42 +00:00
florian
5782acc32d
* patch by J. Gareth Moreton to fix 33909
...
git-svn-id: trunk@39353 -
2018-07-01 12:54:30 +00:00
florian
78943ea843
+ patch by J. Gareth Moreton: x86 optimisations for Jcc and SETcc, resolves #33899
...
* optimization also added for i386
git-svn-id: trunk@39307 -
2018-06-25 20:40:05 +00:00
florian
1472a81768
* patch by J. Gareth Moreton to unify the x86 assembler optimizer method headers, resolves #33908
...
git-svn-id: trunk@39305 -
2018-06-25 20:13:34 +00:00
nickysn
45337b67fe
+ when using the i8086 with section based smartlinking, create OMF section
...
groups, named 'CGROUP' or 'CGROUP_UNITNAME', which include all the code
sections, that need to be put in the same segment
git-svn-id: trunk@39277 -
2018-06-22 15:02:39 +00:00
nickysn
ab47c8b899
+ introduce the omf_section_primary_group function. Use it instead of
...
section_belongs_to_dgroup, to allow sections to belong to groups, other than
dgroup.
git-svn-id: trunk@39268 -
2018-06-21 13:21:53 +00:00
nickysn
1631d9ac0a
+ support segments (sections) with a primary group, other than 'DGROUP' in the
...
NASM assembler writer
git-svn-id: trunk@39246 -
2018-06-20 16:14:41 +00:00
florian
0d168796d7
* patch by J. Gareth Moreton: More Peephole optimizations for AND and MOV
...
git-svn-id: trunk@39242 -
2018-06-18 20:50:08 +00:00
florian
a0b343a787
* patch by J. Gareth Moreton for less invasive DEBUG_AOPTCPU
...
git-svn-id: trunk@39239 -
2018-06-17 14:56:19 +00:00
nickysn
49b414ffee
+ support ugly constructs like 'DD BYTE PTR 5' in the x86 intel syntax inline
...
assembler; these are TP7 and Delphi compatible
git-svn-id: trunk@39143 -
2018-05-29 15:43:08 +00:00
nickysn
e5de7d0eac
* set all 16/32-bit specific stabs/dwarf register numbers of x86_64-only
...
registers to -1 in x86reg.dat. The values that used to be there weren't used
at all (most were just copies of the 32-bit version of the register). This can
be easily demonstrated by the fact that running 'make regdat' in the compiler
directory doesn't change any of the generated files for i8086/i386/x86_64.
git-svn-id: trunk@39098 -
2018-05-23 15:29:33 +00:00
nickysn
a275d15da2
+ added an i8086-specific column in x86reg.dat for the dwarf register numbers
...
and filled it with the dwarf register mapping, used by Open Watcom (Watcom
also uses this mapping on i386, but we don't need to support their debugger on
i386 for now)
git-svn-id: trunk@39097 -
2018-05-23 15:12:58 +00:00
nickysn
61e6d2afec
+ introduce asd_omf_linnum_line directives; they will be used for writing LINNUM
...
entries in the OMF object format
git-svn-id: trunk@39007 -
2018-05-16 17:05:02 +00:00
nickysn
d9925f7074
- removed pocall_far16 from the supported calling conventions of the i8086
...
code generator
git-svn-id: trunk@38938 -
2018-05-06 15:14:40 +00:00
nickysn
0a12bc4697
- removed pocall_oldfpccall from the supported calling conventions of the i8086
...
code generator
git-svn-id: trunk@38935 -
2018-05-06 14:07:31 +00:00
nickysn
c530e031b1
* synchronize get_saved_registers_int and get_volatile_registers_int for all
...
calling conventions on i386
* generated code at the caller side for pocall_pascal routines on i386 no longer
assumes the routine destroys all registers (except ebp) - instead now it
assumes that it preserves the ebx,esi,edi and ebp registers. This is
compatible with the pascal calling convention of 32-bit delphi and was already
honoured by FPC on the callee side.
* updated the list of calling conventions that save all registers, used in
tx86callnode.can_call_ref, so it is accurate on all x86 platforms - i8086,
i386 and x86_64.
git-svn-id: trunk@38904 -
2018-05-04 16:16:24 +00:00
nickysn
8a32d7c663
+ also support constants like 'dd [5]' in the intel syntax inline asm (for BP7
...
compatibility)
git-svn-id: trunk@38855 -
2018-04-27 11:21:51 +00:00
nickysn
a8a627f334
- removed the _count_asmdirectives and _count_asmoperators constants from the
...
rax86int unit. Instead, the _asmoperators and _asmdirectives arrays now use
tasmtoken directly as index.
git-svn-id: trunk@38854 -
2018-04-27 11:02:54 +00:00
nickysn
16e0172021
+ partial support for BP7 reference-like inline asm constants
...
git-svn-id: trunk@38850 -
2018-04-26 14:31:13 +00:00
nickysn
74f5436563
* also replaced the 3 boolean output parameters of tx86intreader.BuildConstSymbolExpression with a set
...
git-svn-id: trunk@38833 -
2018-04-24 15:40:37 +00:00
nickysn
e05c0d0168
* replaced the 3 boolean input parameters of tx86intreader.BuildConstSymbolExpression with a set
...
git-svn-id: trunk@38832 -
2018-04-24 14:59:39 +00:00
Jonas Maebe
4686f61002
* keep track of the temp position separately from the offset in references,
...
so that they can still be freed after the reference has been changed
(e.g. in case of array indexing or record field accesses) (mantis #33628 )
git-svn-id: trunk@38814 -
2018-04-22 17:03:16 +00:00
nickysn
518cdf9674
* replaced the saved_XXX_registers arrays with virtual methods inside
...
tcpuparamanager, very similar to the existing get_volatile_registers_XXX. The
new methods are called get_saved_registers_XXX, where XXX is the register
type ("int", "address", "fpu" or "mm")
git-svn-id: trunk@38794 -
2018-04-19 21:22:16 +00:00
florian
088af633ba
Fix casing, bug ID #38660
...
git-svn-id: trunk@38660 -
2018-04-02 08:53:31 +00:00
nickysn
c3483d1274
* make near/far procs/procvars compatible only with their matching (near vs far)
...
pointer type on i8086
git-svn-id: trunk@38646 -
2018-03-29 15:59:58 +00:00
florian
fa3ee68004
o patch by Dávid Pethes: Fixes for compilation with nasm 2.10 and higher on Win64:
...
* disable generation of RVA and SECREL32 symbols (according to comment in taiconst_type, they are win32 only)
* use lowercase cpu names (it was changed from case-insensitive names sometime after 2.10)
git-svn-id: trunk@38579 -
2018-03-20 21:55:01 +00:00
nickysn
602dd31a45
+ added a warning for using cs/ds/es/ss segment overrides in inline assembly on
...
the x86_64 target
git-svn-id: trunk@38517 -
2018-03-13 14:41:21 +00:00
nickysn
daf13d8750
* print a "Cannot use local variable or parameters here" error (instead of
...
internal error) in case of expressions that add two local variables using the
[expr1[expr2]] syntax
git-svn-id: trunk@38514 -
2018-03-13 12:25:54 +00:00
florian
8b0bbdcaab
* fix flag subregs after r38206
...
git-svn-id: trunk@38502 -
2018-03-11 20:30:11 +00:00
florian
9b18e39c81
* enable Lea2AddBase and Lea2AddIndex in TX86AsmOptimizer.PostPeepholeOptLea as we have flag tracking now
...
* some flag allocations fixed
git-svn-id: trunk@38501 -
2018-03-11 20:30:09 +00:00
florian
d86ffb9bfb
+ tcg.a_op_loc_reg
...
+ optimized tx86addnode.second_ordinal for x86
git-svn-id: trunk@38500 -
2018-03-11 16:32:26 +00:00
florian
5fbecc5501
+ use TX86AsmOptimizer.OptPass1SHLSAL on x86-64
...
git-svn-id: trunk@38499 -
2018-03-11 14:35:22 +00:00
florian
47927f053a
* factored out TX86AsmOptimizer.OptPass1SHLSAL
...
git-svn-id: trunk@38498 -
2018-03-11 14:35:19 +00:00
nickysn
77c782c89b
* when adding OPR_LOCAL with OPR_REFERENCE in tx86intreader.AddReferences, add
...
the offsets correctly:
1) localconstoffset is added with constoffset
2) localsymofs is added with ref.offset
git-svn-id: trunk@38470 -
2018-03-09 14:17:19 +00:00
nickysn
68be282507
+ support adding an OPR_REFERENCE to a OPR_LOCAL in the x86 intel syntax asm
...
reader; this fixes stuff like 'mov ax,cs:localvar[5]'
git-svn-id: trunk@38457 -
2018-03-08 14:32:31 +00:00
florian
78878f59b1
+ generic TAOptObj.AllocRegBetween
...
- removed x86 specific AllocRegBetween
git-svn-id: trunk@38445 -
2018-03-07 22:17:35 +00:00
nickysn
6e79c8ba86
+ support adding an OPR_LOCAL to a OPR_REFERENCE in
...
tx86intreader.AddReferences(); this allows things like mov ax,[cs:[local]] to
work
git-svn-id: trunk@38444 -
2018-03-07 17:31:25 +00:00
nickysn
d3cb61b651
* refactored tx86intreader.AddReferences to use a pair of case statements,
...
depending on the combination of operand types; this is done, so that adding
OPR_LOCAL with OPR_REFERENCE operands can be supported later.
git-svn-id: trunk@38443 -
2018-03-07 16:43:39 +00:00
marco
f0042a4719
* vcmppd hardcoded primitives like vcmpeqpd.
...
* required increasing maxinfolen to 9
git-svn-id: trunk@38404 -
2018-03-03 23:32:54 +00:00
marco
f21a141144
* mantis #32001 , add 32 vcmpps variants.
...
git-svn-id: trunk@38403 -
2018-03-03 23:10:03 +00:00
nickysn
2cee948b72
+ support segment overrides in inline asm references to local variables or parameters on x86
...
git-svn-id: trunk@38392 -
2018-03-01 17:59:57 +00:00
nickysn
df6a870873
* print an "invalid segment override expression" error message in case a segment
...
override uses an invalid (non-segment) register in the x86 inline asm reader
(both for intel and att syntax)
git-svn-id: trunk@38391 -
2018-03-01 15:34:16 +00:00
nickysn
c93c15429d
+ introduce tx86intreader.SetSegmentOverride(); using it everywhere adds more
...
checks for duplicated segment overrides (which cause a warning in TP mode and
an error in all the other compiler modes)
git-svn-id: trunk@38384 -
2018-02-28 17:16:50 +00:00
nickysn
6f8abde786
+ support [const+[ref]] in the x86 intel syntax asm reader
...
git-svn-id: trunk@38383 -
2018-02-28 16:24:45 +00:00
nickysn
8ffde52974
+ also support [expr1]+[expr2] for adding references in the x86 intel syntax asm reader
...
git-svn-id: trunk@38381 -
2018-02-28 15:48:48 +00:00
florian
2385c47c28
* compilation on x86-64 fixed
...
git-svn-id: trunk@38370 -
2018-02-27 21:54:12 +00:00
florian
8c5606b41d
+ support mmx shifting
...
git-svn-id: trunk@38367 -
2018-02-27 21:40:12 +00:00