Commit Graph

18580 Commits

Author SHA1 Message Date
pierre
1abf9df1b0 Solaris assembler does not accept %st instead of %st(0), at least for some instructions
git-svn-id: trunk@32198 -
2015-10-30 11:20:10 +00:00
pierre
61aa4b6a40 Solaris assembler does not want 0x90 fill pattern for text section alignment
git-svn-id: trunk@32197 -
2015-10-30 11:19:14 +00:00
pierre
6b0e87b95c Correct error in last commit that generate new failures in tbs/tb0587 test for GNU as, as the change was not correctly limited to Solaris Assembler
git-svn-id: trunk@32196 -
2015-10-30 08:34:01 +00:00
nickysn
2e30b92c79 * removed the 'near ignored' and 'far ignored' inline asm warning messages on
the i8086, as 'near' and 'far' actually work there. Some forms may even work
  on the i386, but that's not tested very well for now, so we leave the messages
  there on i386 and x86_64.

git-svn-id: trunk@32195 -
2015-10-29 22:47:40 +00:00
nickysn
9e110e8e7e * treat interrupt procedures as 'near' in the i8086 inline assembler for TP7
compatibility

git-svn-id: trunk@32194 -
2015-10-29 22:43:41 +00:00
nickysn
dd9e5ea6f6 * convert 'call/jmp [proc]' properly to a near or far call/jmp, depending on
proc's call model

git-svn-id: trunk@32193 -
2015-10-29 22:05:09 +00:00
nickysn
ed09b4fcaa * in i8086 inline asm, convert 'call/jmp [proc/label]' to 'call/jmp proc/label'.
This is BP7 compatible and fixes e.g. 'call near ptr label' and 'call far ptr label'.

git-svn-id: trunk@32192 -
2015-10-29 17:07:23 +00:00
nickysn
77159d2806 + also add a cs: prefix to references such as [2+label]
git-svn-id: trunk@32191 -
2015-10-29 16:17:34 +00:00
nickysn
823deb39ac + also add an implicit cs: prefix on i8086 in tx86intreader.BuildOperand.AddLabelOperand
git-svn-id: trunk@32189 -
2015-10-29 15:35:09 +00:00
pierre
90ff332b49 Add -Aas-sol to use native Solaris assembler
git-svn-id: trunk@32188 -
2015-10-29 15:10:27 +00:00
nickysn
92a39c93f5 + add a CS: override for references without an explicitly set segment override, which are relative to a function entry point
git-svn-id: trunk@32187 -
2015-10-29 14:48:59 +00:00
pierre
885b0034c5 Allow use of stabs for 64-bit systems with -dUSE_STABS_64
git-svn-id: trunk@32185 -
2015-10-29 09:23:30 +00:00
Jonas Maebe
9ffadf2941 * write nil instead of a reference to _objc_empty_vtable for iOS and the
iOS simulator (based on clang source)

git-svn-id: trunk@32182 -
2015-10-28 21:00:57 +00:00
Jonas Maebe
56a4051296 * replaced another {$ifdef x86} with a virtual method call (the pointer type
of voidpointertype corresponds to the default pointer type)

git-svn-id: trunk@32181 -
2015-10-28 18:25:26 +00:00
Jonas Maebe
4f7b4a2735 * changed {$ifdef x86} code in defcmp into virtual methods
git-svn-id: trunk@32180 -
2015-10-28 18:06:27 +00:00
nickysn
ef5e368327 + support local label data access in the i8086 inline asm (fixes test tlbldat1.pp)
git-svn-id: trunk@32179 -
2015-10-28 17:22:37 +00:00
Jonas Maebe
9c0d550320 * immediately register interface defs so their defid cannot vary depending
on the implementation (which would change the interface crc, even though
    the interface didn't change)

git-svn-id: trunk@32171 -
2015-10-28 13:19:01 +00:00
nickysn
dc6119bab7 * also convert 'jmp farprocsymbol' to 'jmp far farprocsymbol' in the i8086
inline assembler

git-svn-id: trunk@32170 -
2015-10-28 00:19:42 +00:00
nickysn
cb36b2d3bd * i8086 inline asm: convert 'call symbol' to 'call far symbol' only for symbols
that are an entry point of a function with a far call model

git-svn-id: trunk@32169 -
2015-10-28 00:17:54 +00:00
nickysn
a159ebdbad * fixed comparison of two procvars in the i8086 compact and medium memory models
git-svn-id: trunk@32166 -
2015-10-27 17:24:33 +00:00
nickysn
e2740f0fd7 * disallow procvar to pointer conversion, if the pointer type isn't the default
code pointer type for the current memory model

git-svn-id: trunk@32165 -
2015-10-27 17:23:50 +00:00
Jonas Maebe
cf0164b460 + support for classrefdef
git-svn-id: trunk@32163 -
2015-10-26 21:24:33 +00:00
Jonas Maebe
d7bda793f2 * record rather than immediately append encountered defs, so that we don't
emit the same def multiple times

git-svn-id: trunk@32162 -
2015-10-26 21:24:29 +00:00
Jonas Maebe
7d5262ef78 * free unregistered elements of the localsymtable after a module has been
compiled

git-svn-id: trunk@32160 -
2015-10-26 19:56:09 +00:00
Jonas Maebe
ed211b9888 * don't use symid anymore as fallback when sorting fields, as it's no longer
guaranteed to be set. Instead, temporarily assign fieldoffsets to determine
    their order in the sort function (fixes webtbs/tw15415 with -O4 after
    r32153)

git-svn-id: trunk@32159 -
2015-10-26 17:31:11 +00:00
nickysn
c068c96302 * on i8086 convert the 'ret' inline asm instruction to either 'retn' or 'retf',
depending on the call model of the current function (which is BP7 compatible
  behaviour)

git-svn-id: trunk@32157 -
2015-10-26 16:01:50 +00:00
Jonas Maebe
2cea723a0d * only write the parts of the unit localsymtables that are actually needed:
the defs and syms (recursively) referred by inline routines and by the WPO
    info
   o defs and syms are no longer added immediately to the module's deflist/
     symlist, even if they are created as "registered". Instead,
     "doregister=true" simply means "add it to the symbol table at the
     top of the symtable stack"
   o normally only when a sym/def is deref'ed, it gets added to the module
     symlist/deflist and defid/symid gets a (unique) value
   o in cases where we use(d) the defid to construct unique names within the
     current module, you now have to call call the tdef.new unique_id_str()
     method. If the def was not yet registered, we will reserve room for it
     in the deflist (to get a unique id), but the defid gets set to a
     negative value computed from its position in the deflist. Should it
     have to be written to the ppu file later on, the defid will be
     modified to the actual position in the deflist. For both values,
     new unique_id_str() will return the same result so that references
     to this def before and after actual registrations are the same (needed
     for the JVM backend, but also a good principle in general)

   Overall: don't directly use symid/defid anymore to get unique identifiers,
     but use tdef.new unique_id_str() instead (if necessary, a similar routine
     for tsym can be added)

   The result is the ppu file size gets reduced significantly after its big
   increase as a result of the high level typed constant builder (which creates
   a lot of defs). The result is even more efficient than before, as other
   unneeded defs/syms from the localsymtables don't get saved/restored anymore
   either.

git-svn-id: trunk@32153 -
2015-10-25 19:22:00 +00:00
Jonas Maebe
d440daf47f * fixed compilation with -Oodfa/-O3
git-svn-id: trunk@32152 -
2015-10-25 19:21:57 +00:00
Jonas Maebe
8c90941d89 * use the enymsym's name rather converting its symid to a string when creating
the rtti record's fields

git-svn-id: trunk@32150 -
2015-10-25 19:21:51 +00:00
Jonas Maebe
4aa6c95ced * call inherited method from t*sym.buildderef (currently still empty,
but won't stay that way)

git-svn-id: trunk@32149 -
2015-10-25 19:21:48 +00:00
nickysn
1491d9655c + fixed the emitting of non-nil far and huge pointer constptrs in typed
constants on i8086

git-svn-id: trunk@32141 -
2015-10-24 20:25:49 +00:00
marcus
2f83eeba39 AROS: shortname in system description to uppercase (usual form)
git-svn-id: trunk@32140 -
2015-10-24 09:01:05 +00:00
florian
0ffe6157a8 * cast hsym with the correct type, should resolve issue #28862
git-svn-id: trunk@32125 -
2015-10-22 19:07:31 +00:00
nickysn
863daace35 + implemented correct simplification of far pointer comparison of two pointer const nodes
git-svn-id: trunk@32122 -
2015-10-22 14:07:45 +00:00
nickysn
b0130c008d + show the full segment:offset value of far and huge pointer const nodes in the node tree generated by -vp
git-svn-id: trunk@32117 -
2015-10-21 16:53:41 +00:00
nickysn
e325cf1126 * fixed internconsts with two arguments. This allows compile time evaluation of ptr(const,const) on i8086 and i386.
git-svn-id: trunk@32116 -
2015-10-21 16:00:12 +00:00
yury
6537b99ac3 * i386: Fixed detection of a peephole optimization using CMOV.
git-svn-id: trunk@32115 -
2015-10-21 15:59:12 +00:00
yury
5771073e0b * Fixed general peephole optimization of conditional jumps after r30446. It has been broken, since r30446 had added some IsJumpToLabel() checks, which tests for unconditional jump, but the optimization code expects also conditional jumps.
- Renamed IsJumpToLabel() to IsJumpToLabelUncond() to avoid confusions.
  - Added IsJumpToLabel() to check for any jump to a label.
  - Added comments.

git-svn-id: trunk@32114 -
2015-10-21 15:35:54 +00:00
yury
35ff024f03 * mips: Fixed internal error 2014061703 when optimization are enabled.
git-svn-id: trunk@32112 -
2015-10-21 12:14:49 +00:00
nickysn
09218c88aa + optimizations in tcg8086.g_flags2reg for the case where the carry flag or the
inverted carry flag is converted to int, using shorter branchless code and
  the adc/rcl/sbb instructions

git-svn-id: trunk@32106 -
2015-10-20 23:22:32 +00:00
nickysn
8eceb73dd4 * also use an 8-bit zero constant for string comparisons with the empty string.
This avoids the unnecessary 32-bit comparison on 16-bit and 8-bit CPUs

git-svn-id: trunk@32103 -
2015-10-20 15:50:02 +00:00
Jonas Maebe
9437d0e4d8 * Linux/AArch64 must also copy value parameters passed by reference on the
caller side, as this is an AArch64 ABI requirement (unrelated to Darwin).
    Fixes webtbs/tw3523 compiled with optimisations on Linux/AArch64

git-svn-id: trunk@32102 -
2015-10-20 12:58:53 +00:00
Jeppe Johansen
eadd93dbae Most if not all instructions for thumb use only 2 operand rw forms. Changed get_oper_type to match that. It was previously creating bad spilling.
git-svn-id: trunk@32100 -
2015-10-20 03:45:22 +00:00
nickysn
a20428f246 * when doing a string comparison that calls an rtl helper, compare the function
result with an 8-bit zero constant (which will be expanded to the native
  integer size by the comparison node), instead of 32-bit zero. This avoids the
  unnecessary 32-bit comparison on 16-bit and 8-bit cpus.

git-svn-id: trunk@32099 -
2015-10-20 01:22:01 +00:00
Jeppe Johansen
14020b044c Fix bug in gen_load_cgpara_loc for 64bit registers on 8bit architectures.
Added a workaround in a_load_const_reg to allow compilation for AVR.

git-svn-id: trunk@32090 -
2015-10-18 11:36:58 +00:00
Jeppe Johansen
1a285a7d24 Fixed an off-by-one error in a_load_const_cgpara which caused some problems.
Added some minor CG optimizations.

git-svn-id: trunk@32088 -
2015-10-18 11:03:57 +00:00
Jeppe Johansen
7fc3ed2644 Fix a broken OpCp2Op optimization. It needed the added NR_DEFAULTFLAGS allocation to not break subsequent optimizations.
Updated the code for a_load_const_cgpara in case it needed stack parameters. This was completely broken before. Now it should allow things to compile at least.

git-svn-id: trunk@32086 -
2015-10-17 23:29:15 +00:00
yury
36622eaba9 * arm-android: Compile for ARMv5T by default to be compatible with all versions of Android.
git-svn-id: trunk@32078 -
2015-10-17 16:27:53 +00:00
Jeppe Johansen
4c8fc04a24 Fix a bunch of alignment problems for arm-embedded, mostly armv6m which uses the generic Move and FIllChar routines.
git-svn-id: trunk@32070 -
2015-10-17 12:11:32 +00:00
Jonas Maebe
b2144d1da0 * give an internalerror if we try to write a tdef that doesn't belong to any
symtable to a ppufile

git-svn-id: trunk@32065 -
2015-10-16 19:15:37 +00:00