Commit Graph

15341 Commits

Author SHA1 Message Date
nickysn
7edabc64e6 * rm support for Mem without segment on i8086
git-svn-id: trunk@24780 -
2013-06-02 16:20:26 +00:00
nickysn
dd0d2d6bf5 * fixed the spurious compiler warnings and added proper rangechecking when using Mem[] on i8086
git-svn-id: trunk@24779 -
2013-06-02 15:18:05 +00:00
Jeppe Johansen
570b40faed Signed modulus by 2 on ARM with no division is optimized to a series of instructions instead of calling fpc_mod_longint.
An ASR is removed from signed division by 2.

git-svn-id: trunk@24778 -
2013-06-02 14:44:06 +00:00
Jonas Maebe
7f2750f188 * missing part of r24776, using a build server also has pitfalls :/
git-svn-id: trunk@24777 -
2013-06-02 14:35:29 +00:00
Jonas Maebe
9938169d2c * don't use the paracgsize in get_paraloc_def(), because it generally
contains the tcgsize of the entire parameter rather than only of
    what is left (-> calculate it from the remaining parameter length)

git-svn-id: trunk@24776 -
2013-06-02 14:05:07 +00:00
sergei
4e873d0561 + Determine early (before pass 2) whether managed parameters/locals/temps will cause the procedure to reference RTTI labels and, therefore, need GOT.
+ trttinode also sets pi_needs_got flag.

git-svn-id: trunk@24767 -
2013-06-02 13:09:47 +00:00
nickysn
75451181c9 * fixed the passing of the extended floating type parameters on i8086 after r24761
git-svn-id: trunk@24766 -
2013-06-02 12:03:16 +00:00
sergei
4b820a1ca5 - Removed tcgloadnode.generate_picvaraccess, it is never used and is not necessary because PIC stuff is handled at lower levels.
git-svn-id: trunk@24764 -
2013-06-02 10:49:17 +00:00
Jonas Maebe
109317e460 + full support for parameter passing in the high level code generator
(equivalent to what exists in tcgobj)
   o unfortunately it can't be generally enabled for all existing targets
     by overriding/disabling the tcgobj equivalents, because several targets
     call these methods inside other tcgcpu methods and we can't call the high
     level code generator methods from the low level code generator (so right
     now there's quite a bit of code duplication)

git-svn-id: trunk@24763 -
2013-06-02 10:24:13 +00:00
Jonas Maebe
7d9f98e516 + def_cgmmsize() that returns a vector tcgsize for arraydefs (as generated
for certain parameter locations in the x86-64 parameter manager)
  * full support for vector types in the high level code generator by
    translating arraydefs passed to a_*mm*() methods into vector tcgsizes

git-svn-id: trunk@24762 -
2013-06-02 10:24:08 +00:00
Jonas Maebe
7566ddcc8f * add a tdef to each parameter location and set it for all target
backends (not yet used, will be used in high level code generator)

git-svn-id: trunk@24761 -
2013-06-02 10:24:02 +00:00
Jonas Maebe
53ba7fbb8b * support formaldef in def_cgsize (-> OS_ADDR)
git-svn-id: trunk@24760 -
2013-06-02 10:23:54 +00:00
Jonas Maebe
dd15ee5bf2 * removed superfluous checks (push_addr_param() already checks for those)
git-svn-id: trunk@24759 -
2013-06-02 10:23:47 +00:00
Jonas Maebe
4e210e57c2 * use the correct type (pointer to object type) when loading the function
result of a TP-style object constructor

git-svn-id: trunk@24758 -
2013-06-02 10:23:40 +00:00
nickysn
e2241d97a2 * i8086 optimizations for 32-bit OP_SAR with const >= 16
git-svn-id: trunk@24757 -
2013-06-02 09:35:30 +00:00
nickysn
55a071692e * i8086 optimizations in op_const_reg for 32-bit OP_SHL and OP_SHR with const >= 16
git-svn-id: trunk@24756 -
2013-06-02 08:58:50 +00:00
nickysn
90ecd72286 * x86_64 compilation fixed after r24752
git-svn-id: trunk@24755 -
2013-06-01 22:38:07 +00:00
nickysn
ec76b2cf40 * refactored the segment-in-integer-register reference support, so it's handled in make_simple_ref, instead of all over the place in the code generator
git-svn-id: trunk@24752 -
2013-06-01 22:18:09 +00:00
Jonas Maebe
978b5530ec * renamed getmmcgsize to getintmmcgsize + comment
git-svn-id: trunk@24744 -
2013-06-01 18:32:14 +00:00
Jonas Maebe
2dd75e707e * renamed thlcgobj.tcgsize2orddef to defutil.cgsize_orddef
git-svn-id: trunk@24743 -
2013-06-01 18:28:15 +00:00
nickysn
525246f61b * support i8086 far references in tx86addnode.emit_op_right_left
git-svn-id: trunk@24737 -
2013-06-01 17:51:58 +00:00
nickysn
1e8b192b3d * support far references in second_cmp32bit for i8086
git-svn-id: trunk@24736 -
2013-06-01 17:51:18 +00:00
nickysn
c9c882c30a * always use 16-bit pushes for pushing/popping the segment registers on i8086 in Tcgx86.g_concatcopy
git-svn-id: trunk@24735 -
2013-06-01 17:49:49 +00:00
Károly Balogh
76d7527909 also return nil for the empty env vars in the generic implementation in GetEnvPChar
git-svn-id: trunk@24733 -
2013-06-01 17:40:34 +00:00
Jonas Maebe
f985149163 * fixed compilation after r24661 (added dummy overloads for newly
implemented LOC_MMREGISTER hlcgobj methods)

git-svn-id: trunk@24731 -
2013-06-01 16:48:11 +00:00
nickysn
e243b6b869 * never use the 66h prefix when pushing/popping segment registers on i8086, as the stack is aligned on 2 bytes there
git-svn-id: trunk@24729 -
2013-06-01 16:03:14 +00:00
nickysn
c2e3fb5918 + emit proper interrupt procedure entry/exit code on i8086
git-svn-id: trunk@24728 -
2013-06-01 15:50:11 +00:00
Károly Balogh
a11c113429 reverted the link object search change
git-svn-id: trunk@24727 -
2013-06-01 15:35:59 +00:00
Károly Balogh
36bf03372b handle the cases where f contains an absolute path
git-svn-id: trunk@24726 -
2013-06-01 15:22:58 +00:00
Károly Balogh
e7094cf1d6 fix redundant searches in FindObjectFile, if the object was found on the first try
git-svn-id: trunk@24725 -
2013-06-01 15:21:57 +00:00
paul
5ff7bb884e compiler: don't skip objc class/protocols in case of initrtti, fixed crash of dynamic array/record which contains a objc class/protocol and requires an initialization
git-svn-id: trunk@24723 -
2013-06-01 14:45:10 +00:00
nickysn
cb81153cc4 * fixed tcgnotnode.second_64bit for 8/16-bit cpus after r24678
git-svn-id: trunk@24719 -
2013-06-01 14:05:53 +00:00
sergei
4714dc2218 + paramgr.pas: provide generic implementation of getintparaloc(). Once this method has been changed to use the procdef, it can reuse 'regular' parameter locations created by create_paraloc_info, so separate cpu-specific implementations of getintparaloc are no longer necessary.
* parabase.pas: fixed tcgpara.getcopy, it should not modify the source object.

git-svn-id: trunk@24716 -
2013-06-01 13:47:33 +00:00
Jonas Maebe
3456f20546 * changed checks for support of opmm* calls in hlcg2ll from mms_movescalar
to whether the argument is a float type (the check is there to determine
    whether def_cgsize() can give us a correct result, which it can for
    floating point types but not yet for arrays used as vectors)

git-svn-id: trunk@24685 -
2013-06-01 08:28:32 +00:00
florian
44a7ef600f * improve register handling for not and unary minus operator by using a new register for the destination
git-svn-id: trunk@24678 -
2013-05-31 21:32:58 +00:00
florian
4056194e7c * don't ignore by accident the next instruction after a newly inserted constant pool
git-svn-id: trunk@24677 -
2013-05-31 21:29:08 +00:00
florian
3a393f839e * do not reuse register locations on arm fpa/vfp
git-svn-id: trunk@24676 -
2013-05-31 21:29:05 +00:00
masta
8c32802fcf Added LdrbAnd2Ldrb Peephole optimizer for arm
Changes the following code:
  ldrb dst1, [REF]
  and  dst2, dst1, #255
  # dealloc dst1
to
  ldrb dst2, [REF]

git-svn-id: trunk@24672 -
2013-05-31 17:36:54 +00:00
nickysn
10b3ce1ba5 * fixed an opsize bug in ti8086addnode.second_add64bit, which caused 32-bit instructions to be emitted
git-svn-id: trunk@24670 -
2013-05-31 17:13:38 +00:00
florian
0968d095ed * convert function like used new into a appropriate nodes only in pass_1 so proper error checking can be carried out, resolves #24495
git-svn-id: trunk@24667 -
2013-05-31 14:55:49 +00:00
nickysn
5b503f42c7 + implemented Mem/MemW/MemL[] for i8086
git-svn-id: trunk@24665 -
2013-05-31 13:31:45 +00:00
Károly Balogh
af1f84892c try to do VLink support semi-properly, so cross compilation is possible
git-svn-id: trunk@24664 -
2013-05-31 13:04:44 +00:00
Jonas Maebe
1551c773e0 - removed no longer necessary thlcg2ll.initialize_regvars override and
commented dummy location_force_mmregscalar (fully implemented in r24661)

git-svn-id: trunk@24663 -
2013-05-31 12:21:53 +00:00
Jonas Maebe
5051453806 + support for LOC_(C)MMREGISTER in hlcg
o migrated location_force_mmregister_scalar from ncgutil to hlcgobj

git-svn-id: trunk@24661 -
2013-05-31 12:05:14 +00:00
nickysn
c271594b4f + optimized implementation of 32-bit OP_SHL,OP_SHR and OP_SAR in tcg8086.a_op_const_reg
git-svn-id: trunk@24660 -
2013-05-31 11:03:36 +00:00
nickysn
db5573b395 * fixed the nasm assembly output for SAR/SAL with a memory reference
git-svn-id: trunk@24656 -
2013-05-31 08:21:42 +00:00
Károly Balogh
b3c4450186 make a warning a note, so it compiles with -Sew
git-svn-id: trunk@24651 -
2013-05-30 19:04:14 +00:00
nickysn
125a6a8720 * register id of (e)flags changed, so it doesn't overlap with dr0
git-svn-id: trunk@24647 -
2013-05-30 16:40:59 +00:00
nickysn
ed92dee3fb * fixed the calling of virtual methods on i8086
git-svn-id: trunk@24646 -
2013-05-30 16:23:29 +00:00
masta
073cab8d86 Optimize FoldShiftLdrStr in ARM Peephole optimizer
The optimizer now juggles around the base and index register if that opens
up the possibility of folding the shift into the instruction.

This can only be done in the case of addressmode=AM_OFFSET, in case of
[AM_POSTINDEXED, AM_PREINDEXED] we can not move the base register, as this
would cause havoc and destruction.

git-svn-id: trunk@24645 -
2013-05-30 16:13:58 +00:00