Commit Graph

21026 Commits

Author SHA1 Message Date
nickysn
02fb59d3e5 * unified the definition of pushleftright_pocalls on i8086 and i386
git-svn-id: trunk@38952 -
2018-05-08 14:27:36 +00:00
svenbarth
a33bf83822 * regenaret msg*.inc after r38941 and r38942
git-svn-id: trunk@38945 -
2018-05-07 19:50:24 +00:00
svenbarth
576a50f690 * print used unit scopes
git-svn-id: trunk@38944 -
2018-05-07 19:48:26 +00:00
svenbarth
295ca4de4b * adjust WritePathList() to work with TCmdStrList instead of TSearchPathList (and rename it accordingly)
git-svn-id: trunk@38943 -
2018-05-07 19:48:23 +00:00
svenbarth
56f36e6509 + add a diagnostic mesage for the used unit scopes
git-svn-id: trunk@38942 -
2018-05-07 19:48:20 +00:00
svenbarth
aa38d6f831 * adjust text for -FN<x> to include both "namespace" and "unit scope"
git-svn-id: trunk@38941 -
2018-05-07 19:48:16 +00:00
svenbarth
11f673a991 * also allow a ";"-separated list of namespaces for -FN
+ added test

git-svn-id: trunk@38939 -
2018-05-06 21:16:51 +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
eb95dcb85f - removed pocall_mwpascal from the supported calling conventions of the i8086
code generator

git-svn-id: trunk@38937 -
2018-05-06 14:40:08 +00:00
nickysn
4fbc658184 - removed check for system_i386_wince in i8086's cpupara
git-svn-id: trunk@38936 -
2018-05-06 14:30:05 +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
55ecc7feff - removed the check for pocall_oldfpccall from ncgutil.gen_save_used_regs and
gen_restore_used_regs. This is now handled by get_saved_registers_int in
  cpupara.

git-svn-id: trunk@38934 -
2018-05-06 12:41:40 +00:00
svenbarth
ffe788fcad * regenerate msg{idx,txt}.inc after r38920
git-svn-id: trunk@38922 -
2018-05-05 17:23:03 +00:00
svenbarth
7e1a058bb2 * document new -FN<x> option
git-svn-id: trunk@38920 -
2018-05-05 17:18:50 +00:00
svenbarth
760e1f3776 * default namespaces are specified using the new -FN<x> option whereby <x> is the namespace to be added to the
list of default namespaces

git-svn-id: trunk@38919 -
2018-05-05 17:18:47 +00:00
svenbarth
8bc0b604db * a symbol might be specified using a partial namespace path as long as the missing part is a namespace symbol,
so handle that correctly in try_consume_unitsym()

git-svn-id: trunk@38918 -
2018-05-05 17:18:45 +00:00
svenbarth
35bddf6fb1 * correctly update the (now unregistered) unit symbol if the unit was found with the help of a default namespace
(this is needed to trigger the correct creation of the namespace symbols)

git-svn-id: trunk@38917 -
2018-05-05 17:18:42 +00:00
svenbarth
083781bf0c * keep track if the unit was found by using a default namespace as prefix
git-svn-id: trunk@38916 -
2018-05-05 17:18:39 +00:00
svenbarth
99c53abf36 * also take into account default namespace when looking for a unit:
if looking for a unit's PPU or source failed (and no explicit name was specified)
    then all namespaces are walked in the order they were given in and then first the
    PPU is looked for and then the source

git-svn-id: trunk@38915 -
2018-05-05 17:18:37 +00:00
svenbarth
b77b6b001f + add a global that will contain all default namespaces passed in as parameters
git-svn-id: trunk@38914 -
2018-05-05 17:18:34 +00:00
svenbarth
e7f29e9e28 * also pass the pattern with which the potential unit/namespace symbol had been found to try_consume_unitsym*()
git-svn-id: trunk@38913 -
2018-05-05 17:18:31 +00:00
svenbarth
c0dcb505e2 * use the module's filename instead of the passed in name (we assume all units added that way don't use the
ability to have a different module name to their filename)

git-svn-id: trunk@38912 -
2018-05-05 17:18:29 +00:00
svenbarth
e59e9e2a0a * extend tunitsym to be created as registered or not (for now all are created as registered)
git-svn-id: trunk@38911 -
2018-05-05 17:18:26 +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
80a9dab99a * introduce a case statement, based on the calling convention in i386's
tcpuparamanager.get_saved_registers_int

git-svn-id: trunk@38902 -
2018-05-04 15:03:01 +00:00
Jonas Maebe
8da8b956b0 * discard type conversions from/to generic defs for llvm as well
git-svn-id: trunk@38864 -
2018-04-28 16:17:45 +00:00
Jonas Maebe
eaafb166ad * set totypedef correctly when converting @class.classmethod to a procvar
of object in FPC mode (for llvm)

git-svn-id: trunk@38863 -
2018-04-28 16:17:41 +00:00
Jonas Maebe
807fcb3371 * support pasbool8 as type for a record field when a record is passed/
returned in multiple registers (llvm)

git-svn-id: trunk@38862 -
2018-04-28 16:17:37 +00:00
svenbarth
afbbd22544 - the labtree argument is no longer needed
git-svn-id: trunk@38861 -
2018-04-27 21:09:09 +00:00
svenbarth
cfa373a8cf * fix case of string with ranges as labels
+ add test

git-svn-id: trunk@38860 -
2018-04-27 21:06:33 +00:00
Jonas Maebe
52e7678033 * ensure that load nodes only substitute temps in case both references point
to the start of their respective temps

git-svn-id: trunk@38859 -
2018-04-27 19:18:59 +00:00
Jonas Maebe
d69ad8fa41 * removed temppos field again from parameter locations: they're not allocated
by the temp manager of the current procedure

git-svn-id: trunk@38858 -
2018-04-27 19:18:55 +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
d1fc31de94 + add support for '[' and ']' parenthesis in addition to '(' and ')' in
rautils.TExprParse. They behave exactly like '(' and ')'. However, you cannot
  nest '(' with ']' and '[' with ')'. This is introduced in order to help
  implementing support for BP7 asm constants that are parsed like references,
  e.g. 'dd Rec.Str[5]' or 'dd 5[7]'.

git-svn-id: trunk@38849 -
2018-04-26 14:13:30 +00:00
Jonas Maebe
5ca8893987 * fixed temppos of loaded nested variables: invalid rather than the temppos
in their parent frame (mantis #33636)

git-svn-id: trunk@38836 -
2018-04-24 19:28:20 +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
nickysn
9a6e490699 * changed the 'register' and 'cdecl' calling conventions on i8086, so they don't
modify the SI and DI registers. For 'register', this makes it compatible with
  Borland C++'s __fastcall calling convention, while 'cdecl' becomes compatible
  with Borland C, Microsoft C and Watcom C.

git-svn-id: trunk@38824 -
2018-04-23 16:12:16 +00:00
Jonas Maebe
3da67019e5 * fixed llvm compiler compilation after r38814 (crashes in "make cycle", but
that was already the case before)

git-svn-id: trunk@38815 -
2018-04-22 20:40:19 +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
Jonas Maebe
3e8cd7d4c9 * after making a copy of a vo_has_local_copy parameter, only release
the old location as a temp in case it was a reference

git-svn-id: trunk@38813 -
2018-04-22 17:03:11 +00:00
Jonas Maebe
ad73453e64 * fixed alignment of threadvars (used uninitialised field value)
git-svn-id: trunk@38812 -
2018-04-22 17:03:07 +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
nickysn
bd3d35f2da + add support for passing 32-bit values in a pair of registers in
tcg8086.a_load_const_cgpara. This fixes passing const longint parameters in
  dx:ax when using the register calling convention on i8086.

git-svn-id: trunk@38785 -
2018-04-18 15:40:09 +00:00
nickysn
a73aabcc39 * support loading longint in dx:ax when using the 'register' calling convention
on i8086. This is compatible with Borland C++ 3.1's _fastcall. Note that
  passing parameters in multiple registers is not yet implemented, so using this
  will cause internal errors, but these will be fixed later (and the 'register'
  calling convention was never officially supported on i8086).

git-svn-id: trunk@38784 -
2018-04-18 15:36:55 +00:00
nickysn
91707deba7 * changed the registers, used by the 'register' calling convention on i8086 to
ax,dx,bx instead of ax,dx,cx, because that makes it more compatible with
  Borland C++ 3.1's _fastcall calling convention

git-svn-id: trunk@38783 -
2018-04-18 13:46:56 +00:00
nickysn
bbc364b245 * inline asm fix for accessing record variables when using the unitname (e.g.
'mov ax, unitname.varname.fieldname')

git-svn-id: trunk@38755 -
2018-04-12 16:35:21 +00:00
pierre
d12ba4d37d Regenerated Makefile's after addition of ppas and ppaslink script removal in rev 38745
git-svn-id: trunk@38749 -
2018-04-12 15:21:49 +00:00