Commit Graph

2484 Commits

Author SHA1 Message Date
pierre
702db31dc6 Fix syntax error in record
git-svn-id: trunk@20407 -
2012-02-22 23:24:34 +00:00
florian
f0f64a573b * don't pack softfpu helper records and added dummy for proper alignment, generates much better code on CPUs like arm
git-svn-id: trunk@20398 -
2012-02-22 20:13:38 +00:00
paul
950ef49b5c fpc: don't treat codepage as different if one element of array has CP_ACP codepage in fpc_AnsiStr_Concat_multi
git-svn-id: trunk@20381 -
2012-02-20 00:30:03 +00:00
Jonas Maebe
aa9aeeada0 * fixed compilation on platforms without ansistring support since assigning
one ansistring to another requires a helper (mantis #21260, patch by
    Koenraad Lelong)

git-svn-id: trunk@20369 -
2012-02-17 13:16:32 +00:00
Jonas Maebe
e8dae4f30a * set result of exp() to 0 in case of underflow with masked exceptions
(mantis #21265)

git-svn-id: trunk@20368 -
2012-02-17 13:07:50 +00:00
paul
79b725990c rtl: remove spaces
git-svn-id: trunk@20284 -
2012-02-09 08:13:05 +00:00
sergei
180686e429 * Removed 'first' field and 'packed' attribute from TAnsiRec and TUnicodeRec. Removing 'packed' should yield more efficient code on alignment-sensitive targets, while removing 'first' effectively makes two records identical to each other. Further cleanup is possible, but let's see the test suite results before proceeding.
git-svn-id: trunk@20275 -
2012-02-07 16:23:50 +00:00
sergei
a1cb87bcf8 * Improved ucs4 to utf16 conversions: removed function call on every character and multiple memory allocations, made as much code as possible shared between WideString and UnicodeString versions.
git-svn-id: trunk@20270 -
2012-02-06 19:55:56 +00:00
sergei
e94508d5eb * Improved utf16 to ucs4 conversion routines: removed function call on every character, allocate memory once and made as much as possible code shared between WideString and UnicodeString versions.
git-svn-id: trunk@20269 -
2012-02-06 17:55:06 +00:00
sergei
8dab34b31a * fpc_char_to_unicodestr: call widestringmanager directly instead of nested char_to_uchar conversion.
* UnicodeToUtf8: calculate UCS4 value without three (!) temp string variables. Also removed separate word-sized variable and unsigned subtractions.

git-svn-id: trunk@20268 -
2012-02-06 10:22:17 +00:00
pierre
b058593b53 * Fix compilation for cpu i386
git-svn-id: trunk@20264 -
2012-02-05 18:51:23 +00:00
sergei
f07d02b427 - Removed string conversion helpers that are not actually used by compiler code generation (duplicated pwidechar/punicodechar stuff).
- Removed one copy of duplicated utf8 encode/decode procedures.

git-svn-id: trunk@20262 -
2012-02-05 18:01:04 +00:00
florian
a2009af76e * updated MIPS code so the compiler gets through the system unit
git-svn-id: trunk@20259 -
2012-02-05 08:14:46 +00:00
florian
8b339ded7a * started to fix the mips(el) linux rtl
git-svn-id: trunk@20255 -
2012-02-04 21:25:53 +00:00
sergei
8d26b3358f RTL, wide/unicode strings cleanup:
- Removed outdated debugging code
- Removed DefaultWide2AnsiMove, using DefaultUnicode2AnsiMove instead.
- Removed unnecessary operations like SetLength before widestringmanager conversion calls and null-termination afterwards.
- Removed setting pointer to nil after fpc_wide/unicodestr_decr_ref.

git-svn-id: trunk@20231 -
2012-02-03 11:12:25 +00:00
sergei
df221e8196 * fpc_ansistr_concat, refactoring and minor fix:
* Assume code page of empty addend matching the destination (StringCodePage returns value of DefaultSystemCodePage for empty strings, causing unnecessary conversions if another addend has a non-default code page).
  * Moved part with temp Unicodestring variables into separate procedure in order to avoid an implicit try..finally block in primary control flow.
  * Renamed Size and Location varialbles into S1Len and S2Len.

git-svn-id: trunk@20230 -
2012-02-03 10:52:24 +00:00
sergei
a2233d7991 * fpc_ansistr_setlength: fixed/refactored:
* Handle codepage the same way in all control flow branches (was different for the cases of allocating a new string and reallocating an existing one)
  * Don't assign intermediate values directly to var-parameter, use local pointer instead.
  * Setting string pointer to nil after fpc_ansistr_decr_ref is no longer necessary.
- fpc_ansistr_copy: removed repeating index check and unecessary typecasts.

git-svn-id: trunk@20209 -
2012-02-01 16:27:24 +00:00
sergei
7ff76caa73 * Removed 'inline' attribute from 6 overloaded pos() functions which contain a managed typecast. Inlining it leads to noticeable increase in code size without any sensible speed improvement.
* Added 'const' modifier to the first argument of these functions in order to avoid creating a local copy.

git-svn-id: trunk@20207 -
2012-02-01 13:34:36 +00:00
pierre
6e81fe6abc + Add two new sotfpuu units with x80 or 128 bit support
git-svn-id: trunk@20204 -
2012-01-31 15:58:56 +00:00
pierre
f4a9b3d73b + Allow compilation as an external unit
git-svn-id: trunk@20203 -
2012-01-31 15:57:45 +00:00
sergei
f18767f6a8 * generic fpc_shortstr_assign: cleaned up
* align(): tweaked priority of calculation, yields better constant folding when these functions are inlined (alignment argument is a constant in most cases)

git-svn-id: trunk@20197 -
2012-01-30 09:20:43 +00:00
sergei
97e6e1fafd * Changed generic StrCopy and StrECopy to use IndexByte+Move:
o Makes behavior predictable in cases when source and destination strings happen to overlap.
  o Removes need in CPU-specific implementations, at least for CPUs having optimized IndexByte and Move implementations.

git-svn-id: trunk@20196 -
2012-01-30 09:09:49 +00:00
pierre
00ca9b4ce5 + Support multithreaded windows executables inCheckPointer function
git-svn-id: trunk@20181 -
2012-01-26 13:52:51 +00:00
Tomas Hajny
5d82eaa628 * fix buggy stabs offset calculation
git-svn-id: trunk@20144 -
2012-01-21 20:43:03 +00:00
sergei
f136e44b6b - RTL: cleaned up remaining 'decr_ref' routines (not removed completely due to bootstrapping needs, but aliased to 'finalize' ones).
git-svn-id: trunk@20130 -
2012-01-20 19:19:08 +00:00
sergei
06192a8137 Values of managed variables are never ever used after decrementing reference on the variable, so there is no point of having a 'decrement reference' as a separate operation. We can always do 'finalize', i.e. clear the contents after decref.
* Modified fpc_ansistr_decr_ref and fpc_widestr_decr_ref so they always zero the pointer passed by reference. Other _decr_ref helpers already do it.
- Removed tcg.g_decrrefcount, calling cg.g_finalize instead.
- finalize_data_node and tcg.g_finalize: removed code generation for zeroing locations, because it is now done by RTL helpers. This further reduces code size.

As a total result of this change and r20118, the size of Lazarus executable is reduced by about 12%.

git-svn-id: trunk@20119 -
2012-01-19 23:11:09 +00:00
sergei
568ef396fb * Added fpc_dynarray_assign (a helper for dynamic array assignments), added local access to fpc_intf_assign, and switched fpc_copy to use assignment helpers instead of incr_ref/decr_ref combinations.
git-svn-id: trunk@20114 -
2012-01-19 17:43:37 +00:00
sergei
a8fe9601de * Get rid of using pdynarraytypeinfo, instead treat rtti as distinct 'header' and 'data' parts. In variants unit, use rtti declarations from typinfo directly. In system unit, declare private tdynarraytypedata record which (like typinfo.TTypeData) is not packed on alignment-sensitive targets. This simplifies code and removes scary pointer manipulations, should also yield better code on aligned targets.
git-svn-id: trunk@20106 -
2012-01-18 19:28:08 +00:00
sergei
cbad0abab5 + Platform-specific exception support for x86_64-win64. Enable by cycling with OPT=-dTEST_WIN64_SEH.
git-svn-id: trunk@20098 -
2012-01-16 23:13:31 +00:00
sergei
5658c30328 * Partially reverted r20041 to prevent IE200606085 on ARM platforms.
It appears that a function which is present in interface part and aliased to another function using "external name 'foo'" directive cannot be placed immediately before the function to which it is aliased. The body of first function consists of a single jump which fails to be correctly relocated.

git-svn-id: trunk@20053 -
2012-01-11 18:22:43 +00:00
sergei
40f29ffd7a * Generate direct order of indexes passed to fpc_dynarray_setlength at compile time, eliminates the need of reversing them at runtime (in DynArraySetLength).
* 'dimcount' parameter is now of type sizeint everywhere (was dword in fpc_dynarray_setlength and  longint generated by compiler).
Since multi-dimensional dynarrays are not used in compiler code, this change does not break cycling.

git-svn-id: trunk@20041 -
2012-01-10 18:58:20 +00:00
florian
4765728fc4 * use SarInt64 to optimize 64 bit divs on 32 bit platforms, resolves #20998
git-svn-id: trunk@19968 -
2012-01-04 22:58:25 +00:00
sergei
49700e675c * Changed code generation for variant assignments to typecast arguments to TVarData instead of using pointers. Fixes one (probably the ugliest one) case of non-disposed temp variables:
When arguments are temps, they are supposed to be released by tcgcallnode.release_para_temps. However, taking address with taddrnode effectively changes original location of temp to some LOC_REGISTER, tcgcallnode.release_para_temps no longer sees the original location and therefore does not free such temps.

git-svn-id: trunk@19959 -
2012-01-03 19:31:58 +00:00
florian
6a1a2d3464 * get rid of some feature checks, probably the whole feature stuff is plainly the wrong way, embedded rtl compiles again, resolves #20913
git-svn-id: trunk@19907 -
2011-12-29 14:06:30 +00:00
marco
881caba4c3 * power functions added
git-svn-id: trunk@19900 -
2011-12-28 18:11:45 +00:00
sergei
009ee271ec - Cleaned out STR_CONCAT_PROCS define
- i386-specific fpc_shortstr_append_shortstr removed too, because a) it was anyway disabled with STR_CONCAT_PROCS, b) the generic implementation is smaller and probably faster due to optimized Move().

git-svn-id: trunk@19867 -
2011-12-17 17:22:18 +00:00
sergei
724f41a9af - Cleaned out FPC_STRTOSHORTSTRPROC and FPC_STRTOCHARARRAYPROC defines. Somebody had to do it one day.
git-svn-id: trunk@19851 -
2011-12-14 22:40:08 +00:00
sergei
2642403d5b * float_raise: Reduce amount of threadvar accesses, gains a bit more compact code. Functionality is not changed.
git-svn-id: trunk@19846 -
2011-12-13 20:21:22 +00:00
sergei
bcbd25568e * Call InitHeap before InitSystemThreads in TLS callback (necessary because InitSystemThreads calls RelocateHeap), and skip both of them in initialization section of system.pp if they have been called from TLS callback. This restores correct initialization sequence which was broken by r19779, resulting in lots of debug messages about corrupted heap when running tests/test/theapthread.pp
git-svn-id: trunk@19836 -
2011-12-13 07:40:02 +00:00
florian
41636711e4 * fix to align float64 correctly
git-svn-id: trunk@19791 -
2011-12-09 21:34:09 +00:00
sergei
3b904943e7 * Moved ExceptObjProc from objpas to system, because it is going to be called from system. Also added ExceptClsProc variable.
* Fixed SExceptionErrorMessage, it was missing format placeholder.

git-svn-id: trunk@19787 -
2011-12-09 14:52:26 +00:00
pierre
4a9c8e330b + Move EXEC_callback into separate file win/systlsdir.inc
* In win32/sysinitXX units, rename EntryInforation
    to SysInitEntryInformation.
    include new win/systlsdir.inc file from
    win/syswin.inc for win64 target
    and from win32/sysinit.inc for win32 target.
    Set fields of both SysInitEntryInformation and EntryInformation
    by converting them into typed constants.

git-svn-id: trunk@19779 -
2011-12-08 16:11:07 +00:00
pierre
ceffd8b8cc * Fix lineinfo problems for BeOS/Haiku
git-svn-id: trunk@19760 -
2011-12-05 16:29:43 +00:00
sergei
8dc6ebb5ed rtl/generic.inc, minor optimizations:
* fpc_help_constructor: call platform-optimized version of FillChar directly instead of going through generic overloaded version.
* don't compile software multiplication routines if not necessary (the interface part already has similar $ifdef around)
* fpc_shortstr_append_shortstr: use sizeint instead of integer (the latter is 16-bit, produces less efficient code on most platforms)

git-svn-id: trunk@19727 -
2011-12-02 20:55:53 +00:00
Jonas Maebe
f67d7f08fc * use temporary location to construct writestr() string, because the
final destination may also be used in the other arguments
    (mantis #20744)

git-svn-id: trunk@19678 -
2011-11-24 19:56:21 +00:00
marco
b070a0bbbc * add NULL handling for customvariants, patch by Ludo, Mantis #20697
git-svn-id: trunk@19660 -
2011-11-20 19:45:22 +00:00
sergei
ebe1d74d6e * Moved multiple similar checks for FPC_HAS_FEATURE_EXITCODE and FPC_LIMITED_EXITCODE to Halt() procedure. Now these checks appear only once.
git-svn-id: trunk@19597 -
2011-11-05 16:48:12 +00:00
sergei
56900b4754 * RTL: clean up exception handling code (functionality is not changed).
* changed fpc_pushexceptobj to normal procedure, it does not need to be a compilerproc.

git-svn-id: trunk@19596 -
2011-11-05 16:28:37 +00:00
paul
60de075ebe rtl: initialize CodePage field of ReadStr/WriteStr Text variables
git-svn-id: trunk@19567 -
2011-10-31 07:07:24 +00:00
paul
5c00cdf40d rtl: correct ifdef for a code which assigns a codepage to textrec to use FPC_HAS_CPSTRING
git-svn-id: trunk@19548 -
2011-10-27 01:24:00 +00:00