Jonas Maebe
d04e05ff82
+ handling of floating point constants in llvm code (just load them in a
...
register, llvm will take care of putting them in memory if necessary)
git-svn-id: branches/hlcgllvm@26046 -
2013-11-11 11:15:54 +00:00
Jonas Maebe
9d4ea0337a
+ basic implementation of the LLVM high level code generator
...
git-svn-id: branches/hlcgllvm@26045 -
2013-11-11 11:15:51 +00:00
Jonas Maebe
b7803ab974
+ llvm support for the register allocator. While llvm works with virtual
...
registers itself, it requires them to be in SSA form. Therefore we
spill all registers that are written more than once to memory.
+ support in the generic register allocator for generating code that is
SSA-safe
+ spilling helpers for llvm
git-svn-id: branches/hlcgllvm@26044 -
2013-11-11 11:15:47 +00:00
Jonas Maebe
5ef93e85b8
+ added extra "orgsupreg" parameter to do_spill_read/do_spill_written/
...
do_spill_replace routines, will be necessary by llvm register
allocator to determine the tdef corresponding to that register
* replaced uses of taicpu with tai_cpu_abstract_sym in the register
allocator so that it can work both with taicpu and taillvm instructions
git-svn-id: branches/hlcgllvm@26043 -
2013-11-11 11:15:43 +00:00
Jonas Maebe
5599870a4e
* moved the register colouring and spill temp allocation to a virtual method,
...
and made the related data structures protected instead of private, so they
can be overridden
git-svn-id: branches/hlcgllvm@26042 -
2013-11-11 11:15:38 +00:00
Jonas Maebe
d13b510144
+ helpers to convert tdefs to strings describing the types in llvm syntax.
...
Other than arrays and complex procvardefs, all aggregates are currently
handled as opaque arrays of bytes
o special case: s80real (x87 extended type) is encoded as "array[0..9] of
byte" inside arrays, because when using the llvm type describing
"extended" llvm will handle it in an ABI-compliant way (allocating e.g.
16 bytes for it on Darwin and x86-64 platforms). Loading/storing them
always happens using instructions that only read/write 10 bytes, so
we only have to take care to convert them to the actual extended type
when indexing arrays/subscripting records (when records are no longer
handled in an opaque way)
git-svn-id: branches/hlcgllvm@26041 -
2013-11-11 11:15:35 +00:00
Jonas Maebe
8ede313ba1
+ llvm parameter manager: it reuses the native parameter manager to create
...
the paraloc information, and then adds llvm-specific information to the
paralocs
o only partially implemented, in particular function result handling is
not yet there
git-svn-id: branches/hlcgllvm@26040 -
2013-11-11 11:15:31 +00:00
Jonas Maebe
99de108c68
* renamed all paramanagers to tcpuparamanager so the llvm paramanager can
...
derive from them without ifdefs
git-svn-id: branches/hlcgllvm@26039 -
2013-11-11 11:15:27 +00:00
Jonas Maebe
d245228ba6
+ tcgllvm.a_label() and tcgllvm.a_jmp_always(). Special for llvm: every
...
basic block must end with a terminator instruciton (such as a branch) ->
when emitting a label, check whether the previous instruction is a
terminator instruction and if not, add an unconditional branch to the
label we are adding.
o Implemented at the tcg instead of at the thlcgobj level because
a) these methods don't need any high level type information
b) implementing them in thlcgobj would require making thlcg.a_label()
virtual and ensuring that no-one ever calls cg.a_label() in any
generic code
git-svn-id: branches/hlcgllvm@26038 -
2013-11-11 11:15:20 +00:00
Jonas Maebe
7db9d4c7e9
+ basic tcg unit for llvm: initialise register allocators and getint
...
fpuregister overloads that ignore subregisters (everything is
handled via tdef at the thlcgobj level)
git-svn-id: branches/hlcgllvm@26037 -
2013-11-11 11:15:16 +00:00
Jonas Maebe
3296984bd9
+ classes for llvm instructions (ait_llvmins), procedure definitions
...
(ait_llvmprocdef), global variable definitions (ait_llvmvarsym)
and alias definitions (ait_llvmalias)
git-svn-id: branches/hlcgllvm@26036 -
2013-11-11 11:15:13 +00:00
Jonas Maebe
44b1996158
+ base units for llvm:
...
o opcodes + string representation
o llvm string representations of targets supported by fpc
o supported fpc optimisations
o list of supported LLVM versions (currently only targeting 3.3)
git-svn-id: branches/hlcgllvm@26035 -
2013-11-11 11:15:09 +00:00
Jonas Maebe
967354bb4c
* corrected def used for loads of the address of pass-by-reference
...
parameters
git-svn-id: branches/hlcgllvm@26034 -
2013-11-11 11:15:05 +00:00
Jonas Maebe
1df3039424
+ LLVM temp allocator based on new R_TEMPREGISTER register class. For every
...
temp we allocate, we set the base register to a newly allocated
R_TEMPREGISTER. This allows for uniquely identifying a temp even if its
offset is modified.
git-svn-id: branches/hlcgllvm@26033 -
2013-11-11 11:14:59 +00:00
Jonas Maebe
9573160c1a
+ llvmdatalayout field for tsysteminfo that contains the encoded data layout
...
as used by llvm for most targets (taken from clang, adapted in some cases
where we use a custom stack alignment)
git-svn-id: branches/hlcgllvm@26032 -
2013-11-11 11:14:55 +00:00
Jonas Maebe
6426180438
* mangled names (generated for global symbols) start with an '@' for llvm
...
git-svn-id: branches/hlcgllvm@26031 -
2013-11-11 11:14:50 +00:00
Jonas Maebe
b47cc22d66
* separated JVM-specific subscripting code in virtual method
...
git-svn-id: branches/hlcgllvm@26030 -
2013-11-11 11:14:47 +00:00
Jonas Maebe
9e6764e443
* converted program termination to compilerproc/hlcg
...
git-svn-id: branches/hlcgllvm@26029 -
2013-11-11 11:14:43 +00:00
Jonas Maebe
cd92791d09
* converted unit initialization to compilerproc/hlcg
...
git-svn-id: branches/hlcgllvm@26028 -
2013-11-11 11:14:38 +00:00
Jonas Maebe
9c97f10d57
* branch for (new) llvm backend based on the high level code generator
...
infrastructure
git-svn-id: branches/hlcgllvm@26027 -
2013-11-11 10:52:07 +00:00
sergei
437b3755d1
* math.hypot(): factor larger argument out of expression in order to avoid loss of precision.
...
git-svn-id: trunk@26026 -
2013-11-11 09:56:20 +00:00
lacak
aa147703d5
fcl-db: memds: when FieldDefs are changed set TableIsCreated to false to signal, that CreteTable should be called.
...
+ Add test unit for TMemDataset to allow test specific properties/methods of TMemDataset
+ Add this unit to test frameworks
git-svn-id: trunk@26025 -
2013-11-11 09:14:21 +00:00
Jonas Maebe
8d1fb0ee1c
* added a safety check to gen_load_cgpara_loc()
...
git-svn-id: trunk@26024 -
2013-11-10 23:27:05 +00:00
Jonas Maebe
8a0caea0c0
+ override g_save_registers() and g_restore_registers() with do-nothing versions
...
for high level code generator targets
git-svn-id: trunk@26023 -
2013-11-10 21:33:38 +00:00
Jonas Maebe
1b6e4e572f
- removed duplicate thlcg2ll a_label method (it's declared the same in
...
thlcgobj and not virtual in either class)
git-svn-id: trunk@26022 -
2013-11-10 21:32:39 +00:00
Jonas Maebe
8cdde466bb
* include fpcdefs.inc
...
git-svn-id: trunk@26021 -
2013-11-10 21:30:55 +00:00
Jonas Maebe
62e1df9e76
* fixed indentation
...
git-svn-id: trunk@26020 -
2013-11-10 21:25:34 +00:00
Jonas Maebe
c1cec52897
* fixed alignment of bitpacked arrays of ordinals/enums: the prevous code
...
always returned the alignment of enum/ordinal by itself, which could be
either bigger or smaller than what was required
* for non-bitpacked regular arrays, always use the alignment of the elements
instead of sometimes the natural alignment of the size of the elements
(which can be different)
git-svn-id: trunk@26019 -
2013-11-10 21:22:28 +00:00
nickysn
dea947f87b
* fixed tcgx86.a_op_const_ref for shl/shr/sar/rol/ror on i8086 and x86_64
...
git-svn-id: trunk@26018 -
2013-11-10 20:39:47 +00:00
florian
412dc6586f
* the writestr helper initializes the target string, so mark it as being written
...
before the call to the helper to get proper life information
git-svn-id: trunk@26017 -
2013-11-10 20:20:40 +00:00
florian
8be7cfa05f
* check the scope of a variable when checking dfa based uninitialized variables,
...
dfa is procedure local only so consider only variables of the current scope
git-svn-id: trunk@26016 -
2013-11-10 20:20:38 +00:00
florian
57586b69c7
* implicit try...finally frames are added after dfa so we don't have to take care if the subroutine needs/uses those or not
...
git-svn-id: trunk@26015 -
2013-11-10 20:20:36 +00:00
florian
3cb747f4a7
* mark the node which is the entry of the user code with a flag
...
* check for uninitialized variables at the node which is marked as the start of the user code
git-svn-id: trunk@26014 -
2013-11-10 20:20:27 +00:00
nickysn
870d432468
+ reenabled the new str<->float conversion code on i8086 after the fix in r26005
...
git-svn-id: trunk@26013 -
2013-11-10 18:29:17 +00:00
florian
24d88edf37
* fixes arm building after 26004
...
git-svn-id: trunk@26012 -
2013-11-10 17:46:03 +00:00
Jonas Maebe
f348e89112
- removed too early assignment of have_first_symbol:=true, making the later
...
check of "if not have_first_symbol and dosub then" always evaluate to
false (found by looking at the results of constant propagation :)
git-svn-id: trunk@26011 -
2013-11-10 15:08:28 +00:00
sergei
203efdcd0e
* Let order of fields in float64 record depend on FPC_DOUBLE_HILO_SWAPPED, so messing with this order on every usage of float64 is no longer necessary.
...
git-svn-id: trunk@26010 -
2013-11-10 14:52:57 +00:00
nickysn
c666649320
* proper fix for the passing of TEST_OPT to tstunits on msdos. The value of
...
TEST_OPT was normally already passed in OPT, but on msdos the old value
was killed, due to the 'override OPT=-CX'.
git-svn-id: trunk@26009 -
2013-11-10 14:36:06 +00:00
marco
b4496c4aba
* trim output buffer in try..finally, catch result iconv in variable.
...
git-svn-id: trunk@26008 -
2013-11-10 12:53:58 +00:00
nickysn
681350daba
* add the options specified in TEST_OPT when compiling the tstunits. This allows
...
running the testsuite for a different than the default i8086 memory model by
specifying (for example) TEST_OPT=-WmMedium
git-svn-id: trunk@26007 -
2013-11-10 12:23:26 +00:00
marco
be92aba9ba
* correction for missing start in wavstream record. Mantis #25268
...
git-svn-id: trunk@26006 -
2013-11-10 11:34:01 +00:00
Jonas Maebe
6359441045
* force shl operations to be 32 bit on 16/8 bit platforms (patch by
...
Max Nazhalov, mantis #25241 )
git-svn-id: trunk@26005 -
2013-11-10 10:24:54 +00:00
florian
a0f0d0de40
* make use of the noreturn directive for internalerror
...
* clean up of the internalerror procedure variable in the constexp unit
git-svn-id: trunk@26004 -
2013-11-10 09:01:03 +00:00
florian
1d4a4d0684
+ noreturn directive
...
git-svn-id: trunk@26003 -
2013-11-10 09:00:59 +00:00
nickysn
039979fdcc
* handle 4-byte records in registers as well in location_force_mem on i8086
...
git-svn-id: trunk@26002 -
2013-11-09 21:57:29 +00:00
Jonas Maebe
0302453912
* disabled the lea->add transformation added in r25907 because it breaks
...
webtbs/tw15694.pp. Such transformation require liveness analysis of
the flags
git-svn-id: trunk@26001 -
2013-11-09 18:42:23 +00:00
marco
22236de331
* adds IP and cachecontrol headers to http defs. Patch by Silvio Clécio
...
Mantis #25263
git-svn-id: trunk@26000 -
2013-11-09 17:06:07 +00:00
nickysn
b8de1370a0
* fixed assignment of i8086 method pointers, when the source is in a register
...
git-svn-id: trunk@25999 -
2013-11-09 16:50:56 +00:00
marco
c84ac2214d
* adapt sdl mixer wavestream to 2008 SDL change. Patch by Yuichiro Takahashi
...
Mantis #25268
git-svn-id: trunk@25998 -
2013-11-09 14:31:28 +00:00
sergei
5ea99c84fd
* x86_64 non-Win64 targets: calculate tan() and cotan() using x87 "fptan" instruction.
...
git-svn-id: trunk@25996 -
2013-11-09 11:31:27 +00:00