Commit Graph

48905 Commits

Author SHA1 Message Date
nickysn
c205cb03c8 * in SysUtils.DecodeDate(), cast the result of trunc() to longint (trunc
normally returns int64 in FPC), before performing any further calculations -
  the result always fits in a longint (the date is range checked against
  MaxDateTime and that is well within longint limits). This generates faster
  code on non 64-bit targets and also fixes i8086 compilation, which previously
  failed on register allocation on this function.

git-svn-id: trunk@33946 -
2016-06-10 19:39:44 +00:00
Jonas Maebe
cf6c7a0a1d * missing instruction type check
git-svn-id: trunk@33945 -
2016-06-10 17:59:18 +00:00
svenbarth
345d83c3e3 Merge RTTI changes from packages branch (including adjustments that were required due to changes in trunk since then). These changes favor source backwards compatibility in contrast to Delphi compatibility. Binary compatiblity is however drastically broken due to the indirect references that are platform independant!
Merged revision(s) 28239-28289 from branches/svenbarth/packages:
Provide the possiblity to switch between the direct and indirect RTTI symbols.

ncgrtti.pas, TRTTIWriter:
  + get_rtti_label, get_rtti_label_ord2str & get_rtti_label_str2ord: add new "indirect" parameter and pass that along to rtti_mangledname
hlcgobj.pas, thlcgobj:
  * g_incrrefcount, g_initialize, g_finalize, g_array_rtti_helper: for now pass along False to get_rtti_label()
ncgvmt.pas, TVMTWriter:
  * writevmt: for now pass along False to get_rtti_label()
ncgld.pas, tcgrttinode:
  * pass_generate_code: for now pass along False to the get_rtti_label*() methods
........
Provide possibility to select between using a direct and an indirect RTTI reference. This way the references can be changed for selected cases.

ncgrtti, TRTTIWriter:
  * ref_rtti: new "indirect" parameter that's relayed to rtti_mangledname()
  * write_rtti_reference: new "indirect" paramater that's relayed to ref_rtti()
........
Switch properties to use the indirect type information without breaking backwards compatiblity. :)

compiler/ncgrtti.pas, TRTTIWriter:
  * published_properties_write_rtti_data: use the indirect reference, not the direct one
rtl/objpas/typinfo.pp:
  * to allow compilation with both 2.6.x and 2.7.1 and too avoid too many ifdefs at least in the declarations we define a macro TypeInfoPtr which is either PTypeInfo (2.6.x) or PPTypeInfo (2.7.1 and newer)
  * TPropInfo: rename PropType to PropTypeRef and change type to TypeInfoPtr
  + TPropInfo: add a new property PropType which returns a PTypeInfo out of the PropTypeRef depending on the compiler version
........
Switch further simple types (sets, enums, class references, pointers) to indirect type information (again without breaking backwards compatibility).

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data:
  * enumdef_rtti, setdef_rtti, classrefdef_rtti & pointerdef_rtti: write an indirect RTTI reference

rtl/objpas/typinfo.pp, TTypeData:
  * rename BaseType to BaseTypeRef, CompType to CompTypeRef, InstanceType to InstanceTypeRef and RefType to RefTypeRef and change their type to TypeInfoPtr
  + add properties BaseType, CompType, InstanceType & RefType which return a PTypeInfo out of the corresponding *Ref field depending on the compiler version
........
Switch class and interface parent as well as extended type to indirect type information

compiler/ncgrtti.pas, TRTTIWriter:
  * write_rtti_data.objectdef_rtti.objectdef_rtti_class_full: use indirect reference for class parent and extended type
  * write_rtti_data.objectdef_rtti.objectdef_rtti_interface_full: use indirect reference for interface parent

rtl/objpas/typinfo.pp, TTypeData:
  + add new method DerefTypeInfoPtr which returns Nil if the indirect reference is Nil and otherwise returns the dereferences indirect reference (for 2.6.x the direct reference is returned as is)
  * rename ParentInfo to ParentInfoRef, HelperParent to HelperParentRef, ExtendedInfo to ExtendedInfoRef, IntfParent ot IntfParentRef and RawIntfParent to RawIntfParentRef and change their type to TypeInfoPtr
  + introduce ParentInfo, HelperParent, ExtendedInfo, IntfParent and RawIntfParent properties that return a PTypeInfo and use the new DerefTypeInfoPtr to return the correct type info value
  * change the other newly introduced properties of TTypeData to use DerefTypeInfoPtr as well to be on the safe side
........
Switch record/object fields to indirect type information references.

compiler/ncgrtti.pas, TRTTIWriter.fields_write_rtti_data:
  * use the indirect reference for the object parent type
  * use the indirect reference for the field type

rtl/inc/rtti.inc:
  * TRecordElement: change TypeInfo to PPointer for 2.7.1 and newer
  * RecordRTTI: correctly dereference the element type for 2.7.1 and newer
  * fpc_copy: correctly reference the element type for 2.7.1 and newer
........
Switch static arrays to indirect RTTI reference.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data:
  * arraydef_rtti: write the dimension types and the final field type as indirect references

rtl/inc/rtti.inc:
  * TArrayInfo: switch ElInfo to PPointer for 2.7.1+
  * ArrayRTTI & fpc_copy: correctly dereference ElInfo for 2.7.1+
rtl/objpas/typinfo.pp, TArrayTypeData:
  * switch ElType and Dims to PPTypeInfo; no backwards compatibility needed here as TArrayTypeData was added in 2.7.1 only

tests/test/trtti8.pp: fix test
........
Switch dynamic arrays to indirect RTTI references.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.arraydef_rtti:
  * write indirect references for the two element entries

rtl/inc/dynarr.inc:
  * tdynarraytypedata: change elType2 to PPointer for 2.7.1+
  * fpc_dynarray_clear, fpc_dynarray_setlength & fpc_dynarray_copy: correctly dereference elType2 for 2.7.1+
rtl/objpas/typinfo.pp, TTypeData:
  * rename elType and elType2 to elTypeRef and elType2Ref respectively and change type to TypeInfoPtr
  * add properties elType and elType2 which return PTypeInfo by dereferencing elTypeRef and elType2Ref respecively correctly
  * remove a few stray "inline" directives in the implementation
........
Switch procedure parameters and result type to indirect RTTI references.

compiler/ncgrtti.pas, TRTTIWriter.write_rtti_data.procvardef_rtti:
  * write_procedure_param: use indirect RTTI reference
  * write result info for both methods and procvars as indirect RTTI reference
  * write parameters for procvars as indirect RTTI reference

rtl/objpas/typinfo.pp:
  * TProcedureParam: change type of ParamType to PPTypeInfo (no backwards compatiblity needed here; was added for 2.7.1)
  * TProcedureSignature: change type of RseultType to PPTypeInfo (no backwards compatibility needed here; was added for 2.7.1)
  * TTypeData: remark in the comments of tkMethod that ResultTypeRef and ParamTypeRefs are of type PPTypeInfo and not PTypeInfo

tests/test/trtti9.pp: 
  * fix test
........
Remove no longer needed "indirect" parameter for TRTTIWriter methods.

ncgrtti.pas, TRTTIWriter:
  - ref_rtti & write_rtti_reference: remove "indirect" parameter
  * ref_rtti: call rtti_mangledname with "indirect" always set to "true"
  - remove "true" parameter on callsites of write_rtti_reference & ref_rtti
........

git-svn-id: trunk@33944 -
2016-06-10 17:01:51 +00:00
Jonas Maebe
5af40f22e8 * handle enums with a packenum setting that is larger than necessary to store
all of their values, when kept in a bitpacked array, properly via
    pass_typecheck rather than hacking location.size in pass_generate_code:
   o the old fix was incomplete (it didn't handle non-constant indices)
   o the old fix didn't work for llvm (since it uses defs rather than
     location.size)

git-svn-id: trunk@33943 -
2016-06-09 22:00:14 +00:00
Jonas Maebe
f55a403270 * specify the packenum setting to use when creating a tenumdef
git-svn-id: trunk@33942 -
2016-06-09 22:00:10 +00:00
Jonas Maebe
d5e5ca0531 * fixed conversion of LOC_JUMP in location_force_reg() for C-style booleans
(usually these are never LOC_JUMP, but it happens for LLVM)

git-svn-id: trunk@33941 -
2016-06-09 22:00:07 +00:00
Jonas Maebe
b76539a049 * fixed handling of uninitialised complex function results
git-svn-id: trunk@33940 -
2016-06-09 22:00:05 +00:00
Jonas Maebe
a59fc7c165 - disable attempts to generate debug info when using llvm for now
git-svn-id: trunk@33939 -
2016-06-09 22:00:02 +00:00
Jonas Maebe
ea54b6b2c5 * factored comp/currency-in-register handling out of a_loadfpu_reg_reg()
into llvmconvop() so it's also used by code using that routine

git-svn-id: trunk@33938 -
2016-06-09 21:59:58 +00:00
joost
561c7b0862 * Added ability to clear global-variable containing the compiler-version info
git-svn-id: trunk@33937 -
2016-06-08 21:06:34 +00:00
florian
7f44774852 * i386 uses OptPass1And from aoptx86
git-svn-id: trunk@33936 -
2016-06-07 20:01:13 +00:00
florian
ff506eb219 * enabled And2Test optimization
git-svn-id: trunk@33935 -
2016-06-07 20:01:11 +00:00
florian
a5fc8b629a * factored out OptPass1AND from x86-64 and moved it to aoptx86
git-svn-id: trunk@33934 -
2016-06-07 20:01:09 +00:00
florian
5e8e21c1be * factored out OpPass2MOV code, x86-64 uses it as well now
git-svn-id: trunk@33932 -
2016-06-06 21:18:24 +00:00
florian
4758271c91 * x86-64 uses OptPass1MOV
git-svn-id: trunk@33931 -
2016-06-06 21:18:23 +00:00
florian
6609e8def2 * correctly set the size of the operation when carrying out Mov Op Mov optimizations
git-svn-id: trunk@33930 -
2016-06-06 21:18:21 +00:00
florian
b274599a47 * made some assembler optimizer methods class methods
git-svn-id: trunk@33929 -
2016-06-06 21:18:20 +00:00
florian
e56147ac6e * integrated mov op mov -> op optimization in aoptx86
* isFoldableArithOp is in aoptx86 now

git-svn-id: trunk@33928 -
2016-06-06 21:18:18 +00:00
florian
9ed6638baa * moved MovAnd2Mov optimization to aoptx86
git-svn-id: trunk@33927 -
2016-06-06 21:18:16 +00:00
Jonas Maebe
7f2d970a1e * fixed type encoding of C-style blocks for LLVM
git-svn-id: trunk@33926 -
2016-06-05 21:34:47 +00:00
Jonas Maebe
951ca4e62b * fixed procdef used to call C-style blocks (only relevant for LLVM)
git-svn-id: trunk@33925 -
2016-06-05 21:34:45 +00:00
Jonas Maebe
ccf011dbc5 * C-style blocks are implicit pointers -> don't parse such typed constants
as a record

git-svn-id: trunk@33924 -
2016-06-05 21:34:42 +00:00
florian
8c5fdc9dc2 * softfpu patch by Max Nazhalov: Small fixes to softfpu.pp complementing r27215
git-svn-id: trunk@33923 -
2016-06-05 21:16:01 +00:00
Jonas Maebe
0ed6c3d80e * also use the last floating point parameter register on AArch64 in case of
a HFA type (which in practice also applies to plain floating point types)
    (patch by Alfred, mantis #30207)

git-svn-id: trunk@33922 -
2016-06-05 20:18:24 +00:00
Tomas Hajny
cd236d1811 * fcl-pdf package added
git-svn-id: trunk@33918 -
2016-06-05 14:43:15 +00:00
Tomas Hajny
942360289f * added short name for fcl-pdf
git-svn-id: trunk@33917 -
2016-06-05 14:37:26 +00:00
florian
dfe41db13f * call GetNextInstruction only once when carrying out mov optimizations
git-svn-id: trunk@33916 -
2016-06-05 12:40:41 +00:00
michael
022e099e41 * Corrected implementation of ServiceRunning and WaitForServicecompletion
git-svn-id: trunk@33913 -
2016-06-05 08:40:50 +00:00
michael
ef7c327c7a * Revert rev r33905, started from too old version
git-svn-id: trunk@33912 -
2016-06-05 08:27:55 +00:00
michael
d37dfecbd5 * Fix unit name
git-svn-id: trunk@33911 -
2016-06-05 08:25:16 +00:00
Károly Balogh
2eeb078f3e m68k: removed obsolete and wrong comment. the '881 extended type is actually 12 bytes during load/store, not 10, which means longword alignment is fine. no functional changes.
git-svn-id: trunk@33910 -
2016-06-05 07:11:23 +00:00
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
michael
c026dab430 * Added ServiceRunning and WaitForServiceCompletion functions
git-svn-id: trunk@33905 -
2016-06-04 15:48:39 +00:00
svenbarth
7523e97d83 Fix compilation of JVM platform after recent changes to Delete() and Insert()
git-svn-id: trunk@33904 -
2016-06-04 10:42:09 +00:00
svenbarth
fd66d70449 innr.inc:
+ add constants for the Delete and Insert intrinsics
compproc.inc:
  * use the new constants instead of magic values to denote the relationship of the compilerprocs to the intrinsics

git-svn-id: trunk@33901 -
2016-06-04 08:58:38 +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
Tomas Hajny
293d9be6b6 * fix compilation after UnicodeString ExecuteProcess related changes
git-svn-id: trunk@33899 -
2016-06-03 23:57:51 +00:00
Tomas Hajny
3732ad18d1 * package libmicrohttpd is not compatible to anything but MS Windows and Unix platforms in its current state - disabled for OS/2 and Symbian
git-svn-id: trunk@33898 -
2016-06-03 23:28:38 +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
9fb2a8bba9 + added simple test to check whether Delete() and Insert() still work correctly (though a mistake there would probably have broken the cycling totally anyway...)
git-svn-id: trunk@33896 -
2016-06-03 21:38:29 +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
Tomas Hajny
c1afb4b63b * avoid FindFirst failing due to Attribute parameter bigger than $FF
git-svn-id: trunk@33894 -
2016-06-03 21:16:35 +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