Commit Graph

19259 Commits

Author SHA1 Message Date
florian
d05222990e * while updating used register sets, all labels can/must be skipped
git-svn-id: trunk@33909 -
2016-06-04 19:45:12 +00:00
florian
ba54f7243e * moved all i386 mov peephole optimization code into OptPass1MOV
git-svn-id: trunk@33908 -
2016-06-04 19:34:18 +00:00
florian
49f63d67b2 * correctly check left.location instead of left.expectloc when generating
code for not nodes, resolves #30208

git-svn-id: trunk@33906 -
2016-06-04 15:54:17 +00:00
svenbarth
17bb29ddc3 Check for tf_winlikewidestring in the target's flags instead of relying on the target being a Windows system when determining whether the system as the WideString type that's separate from UnicodeString
git-svn-id: trunk@33900 -
2016-06-04 08:45:22 +00:00
svenbarth
aaff6d0b97 Allow Delete() and Insert() to be used with generic types as arguments.
+ added test

git-svn-id: trunk@33897 -
2016-06-03 21:45:23 +00:00
svenbarth
a2c9c75e97 Convert Insert() and Delete() to intrinsics in preparation for dynamic array support for these two procedures.
Since overloading compilerprocs does not work each procedure got its own unique name, but they are using the new compilerproc extension to map them to the Insert and Delete symbol so that error messages can be shown with the respective name for the procedure declarations instead of fpc_shortstr_delete for example.

git-svn-id: trunk@33895 -
2016-06-03 21:25:49 +00:00
svenbarth
046614948c + new utility routine to print all parameter declarations for a specified system routine
git-svn-id: trunk@33893 -
2016-06-03 21:11:13 +00:00
svenbarth
b4354aff5e tprocdef.customprocname:
* if we have a compilerproc with a syssym then use the syssym's name when generating the name

git-svn-id: trunk@33892 -
2016-06-03 20:55:48 +00:00
svenbarth
8ec2d5478c Regenerated after r33890
git-svn-id: trunk@33891 -
2016-06-03 20:53:58 +00:00
svenbarth
88108bc4df Extend "compilerproc" with the optional ability to specify an index (same syntax as for "internproc") which allows to map the routine to a syssym.
git-svn-id: trunk@33890 -
2016-06-03 20:53:33 +00:00
svenbarth
2ed7a6de68 New class function tsymsym.find_by_number() to find a tsymsym instance based on it's number. The list containing the mapping from the indices to the symbols is created and freed using the init/done registration mechanism.
git-svn-id: trunk@33889 -
2016-06-03 20:49:06 +00:00
svenbarth
15ff68e144 Fix formatting of the output of unit import symbols.
git-svn-id: trunk@33888 -
2016-06-03 16:09:07 +00:00
svenbarth
b073d2dac5 Fix a bug in ppudump that seems to be there since revision 1.
compiler/utils/pputils/ppudump.pp, readsymbols:
  * ibstartsyms only contains one longint, namely the count of the symbols, not two

git-svn-id: trunk@33887 -
2016-06-03 16:07:54 +00:00
svenbarth
99189db897 hlcgobj.pas, thlcgobj:
* g_call_system_proc: if we directly call a symbol of the system unit from another unit then it must be considered as imported as well

git-svn-id: trunk@33886 -
2016-06-03 14:50:42 +00:00
svenbarth
6c3dd6b601 Another system, another regression... (this time tests/test/tgenfunc15.pp on i386-win32)
pgenutil.pas:
  * generate_specialization_phase2 & generate_specialization_procs: don't add pending specializations if we're currently parsing a generic

git-svn-id: trunk@33885 -
2016-06-03 12:36:27 +00:00
svenbarth
8c96fbed8f Fix for Mantis #28832
ninl.pas, tinlinenode:
  * pass_typecheck: let code pass on to simplify() for undefineddefs in Low() and High()
  * simplify: create a constant 0 as fallback

+ added test

git-svn-id: trunk@33884 -
2016-06-03 12:14:30 +00:00
svenbarth
af26a31251 psub.pas, read_proc_body:
* reset _FAIL directly after parsing the routine

git-svn-id: trunk@33881 -
2016-06-02 19:31:47 +00:00
florian
20807f4148 * factored out V<Op> optimizations into OptPass1VOP
* call OptPass1VOP also for i386

git-svn-id: trunk@33878 -
2016-06-01 20:49:35 +00:00
florian
180e0e7561 * avoid spilling of 2nd and 3rd operand of avx instructions
git-svn-id: trunk@33877 -
2016-06-01 20:48:08 +00:00
svenbarth
04adcf2a12 Fix for Mantis #30179 and #30203.
pexpr.pas:
  * handle_factor_typenode: rework code for records and objects so that Delphi style specializations are handled as well
  * sub_expr.generate_inline_specialization: also do a typecheck pass on pload to be sure that we have a resultdef

+ added tests

git-svn-id: trunk@33876 -
2016-06-01 20:06:40 +00:00
svenbarth
c3c345d569 Fix for Mantis #30202.
pexpr.pas, sub_expr.generate_inline_specialization:
  * do_member_read() needs to happen independently of whether we're calling a method of the same object (was incorrectly copypasted code... :/ )

+ added test

git-svn-id: trunk@33875 -
2016-06-01 20:03:59 +00:00
florian
a7516dfb50 * fix modification information of VCOMISS and VCOMISD
git-svn-id: trunk@33874 -
2016-06-01 19:58:43 +00:00
svenbarth
fd98ec56e9 Fix (hopefully last) regression introduced due to the reworking specialization of routine bodies.
pgenutil.pas:
  * process_abstractrecorddef & generate_specialization_procs: also check for a forward def is the other module is still compiling (thus an access to tprocdef.forwarddef should still be possible); this might happen due to circular references like in tests/test/tgeneric91.pp

git-svn-id: trunk@33872 -
2016-06-01 19:03:54 +00:00
Károly Balogh
77318be022 m68k: fix build errors with some assemblers on modulo calculation on 020+
git-svn-id: trunk@33867 -
2016-06-01 10:50:22 +00:00
florian
04a68d9b94 * fix compilation with -Oodfa
git-svn-id: trunk@33865 -
2016-05-31 21:14:53 +00:00
Károly Balogh
a561ffe836 m68k: fixed initial offset adjustment for the unaligned store
git-svn-id: trunk@33860 -
2016-05-31 00:47:57 +00:00
Károly Balogh
4fba4cab15 added m68k vasm to the list of assemblers
git-svn-id: trunk@33855 -
2016-05-29 21:29:56 +00:00
Károly Balogh
b4fd85f19c m68k: unaligned handling for math and typeconv nodes
git-svn-id: trunk@33854 -
2016-05-29 18:48:24 +00:00
Károly Balogh
2d6736e40e m68k: fixed unaligned stores' predecrement addressing. also removed an unnecessary sign-extension of the tmpreg for 16bit stores
git-svn-id: trunk@33853 -
2016-05-29 18:25:33 +00:00
Károly Balogh
a8ad51e96f m68k: unaligned access support in add nodes
git-svn-id: trunk@33852 -
2016-05-29 18:12:36 +00:00
Károly Balogh
a756609a27 m68k: added a simple VASM writer frontend for the GNU AS writer (as VASM has a compatiblity mode)
git-svn-id: trunk@33847 -
2016-05-29 15:52:43 +00:00
svenbarth
1bd43d9e37 Fix regressions.
pgenutil.pas:
  + new function maybe_add_pending_specialization() to add a pending specialization if it belongs to the current unit
  * generate_specialization_phase2: don't set up the owner as this leads to problems when using overloaded generic routines and don't add it to the pending list if it's a procdef
ncal.pas, tcallnode:
  * pass_typecheck: if we have a specialization then add it to the pending specializations once we know that we use it

git-svn-id: trunk@33843 -
2016-05-28 22:12:45 +00:00
svenbarth
7c5c5d2e4b symdef.pas, tprocdef:
* don't check the type of the owner symtable if we don't have one

git-svn-id: trunk@33842 -
2016-05-28 22:08:00 +00:00
Károly Balogh
c509036c11 m68k: added REMS/REMU to the special formatting requirements list in the assembler writer
git-svn-id: trunk@33840 -
2016-05-28 15:30:48 +00:00
svenbarth
1d7c19aaf0 Fix regressions.
pgenutil.pas:
  * process_procdef & process_abstractrecorddef: only check whether the procdef's generic is still a forward declaration if it's in the current unit (otherwise we would trigger an internal error)

git-svn-id: trunk@33828 -
2016-05-27 16:29:22 +00:00
svenbarth
ac95dcd7fa Improve inlining of generic routines (no matter whether they belong to a generic type or a generics themselves).
psub.pas, read_proc_body: 
  * also try to generate pending specializations before generating a routine's code so that these might be inlined as well

git-svn-id: trunk@33827 -
2016-05-26 18:57:55 +00:00
svenbarth
f27ce0b159 Rework the way the method bodies for specializations are generated: instead of walking the global and local symboltable all pending specializations are kept in a list of the current module which is (for now) walked at the end of a unit/program to generate the method bodies as before.
fmodule.pas, tmodule:
  + new list pendingspecializations which keeps track of all pending specializations of the current module
psub.pas:
  * move generate_specialization_procs and related routines to pgenutil
  + new procedure read_proc_body to read a routine's body, cause generate_specialization_procs needs it (unlike the already existing overload in the implementation section, this one can only handle bodies of non-nested routines) 
pgenutil.pas:
  * generate_specialization_phase2: add the newly specialized generic to the current module's pending specializations
  * generate_specialization_procs: reworked so that it uses the new pendingspecializations field instead of walking the global and local symboltable of the current unit
pmodules.pas:
  + add pgenutil to uses due to the moved generate_specialization_procs

+ added test

git-svn-id: trunk@33826 -
2016-05-26 18:56:16 +00:00
svenbarth
2f6a1c01ba pgenutil.pas, generate_specialization_phase2:
* ensure that the owner of the newly greated def is set to the symtable we specialize in (happens with generic routines)

git-svn-id: trunk@33825 -
2016-05-26 18:37:37 +00:00
svenbarth
f8def6dbc9 Store and use procedure directives of generic routines.
scanner.pas, tscannerfile:
  + new method is_recording_tokens to check whether token recording is already active
pdecsub.pas, parse_proc_directives:
  * record tokens into the declaration token buffer of a generic routine if necessary
pgenutil.pas, generate_specialization_phase2:
  * process the procedure directives that had been recorded with the generic routine

git-svn-id: trunk@33824 -
2016-05-26 18:35:08 +00:00
Károly Balogh
a2a630e9c5 m68k: fixed and enabled hardware mod/div support for coldfire, also it no longer depends on cpu family but cpu capability
git-svn-id: trunk@33821 -
2016-05-26 16:54:39 +00:00
Károly Balogh
931c14f0cf m68k: in second_int_to_bool, don't call TST after OR, since OR sets the flags as required already
git-svn-id: trunk@33819 -
2016-05-26 14:48:56 +00:00
Károly Balogh
766eeffc69 m68k: build fix. (changes before commit is a bad idea...)
git-svn-id: trunk@33817 -
2016-05-26 14:47:16 +00:00
Károly Balogh
2bfa1b995a m68k: added division/remainder cpu capabilities
git-svn-id: trunk@33816 -
2016-05-26 14:41:00 +00:00
Károly Balogh
6706445cb4 m68k: enable hardware divisions for all '020+, not only 020 itself
git-svn-id: trunk@33810 -
2016-05-26 10:38:08 +00:00
Károly Balogh
aa63aa95bb m68k: a bunch of '000 related fixes and cleanups. generated source now compiles for '000 again, which was broken due to recent improvements conflicting with limitations of the original '000
git-svn-id: trunk@33809 -
2016-05-26 10:33:29 +00:00
Károly Balogh
62e0eab89b m68k: also handle large register save/restore offsets on 68000
git-svn-id: trunk@33808 -
2016-05-26 00:04:55 +00:00
Károly Balogh
0dd5beb064 m68k: more unaligned access support in the base cg, also enabled the code
git-svn-id: trunk@33807 -
2016-05-26 00:03:25 +00:00
Károly Balogh
b6d845e732 m68k: needs_unaligned helper. returns true when the given reference with the given size needs to be loaded with unaligned support on the given cpu
git-svn-id: trunk@33806 -
2016-05-25 23:56:24 +00:00
Károly Balogh
7fbae10515 m68k: added more cpu capabilities (unaligned access, long addressing, various MULx), and the 68060 cpu target
git-svn-id: trunk@33804 -
2016-05-25 22:14:58 +00:00
Károly Balogh
a82196bf84 * now Amiga and MorphOS defines tf_requires_proper_alignment. for 68k Amiga it's required for 68000, on others it's not mandatory but beneficial
git-svn-id: trunk@33788 -
2016-05-25 09:54:01 +00:00