Commit Graph

15790 Commits

Author SHA1 Message Date
svenbarth
d908dbeec1 Fix for Mantis #25215.
compiler/scanner.pas, tscannerfile.readtoken:
  * after trying to read a _INTCONST check whether a valid first character for an identifier follows and give a syntax error if that is not the case

+ added test

git-svn-id: trunk@25835 -
2013-10-20 12:15:49 +00:00
svenbarth
d91d4afb0f Fix for Mantis #25210 .
compiler/pdecobj.pas, object_dec:
  * since revision 25518 the global symtable of the current module is no longer popped and pushed again so that the defaware symtablestack can add the helper; thus we need to do this not only for static symtables, but for global ones as well
  * adjusted comment to reflect current situation

git-svn-id: trunk@25834 -
2013-10-20 11:33:01 +00:00
nickysn
645cd11b9d * fixed the assignment of global functions to nested procvars in i8086 far code
models

git-svn-id: trunk@25831 -
2013-10-19 20:42:39 +00:00
nickysn
378afb69b2 * optimization in tcg386.g_intf_wrapper: use the much more efficient case 1
for virtual methods, that use the register calling convention, but have at
  least one free register (i.e. not used as a parameter and not required to be
  preserved by the function)

git-svn-id: trunk@25830 -
2013-10-19 17:40:38 +00:00
nickysn
bfd31e7516 * optimizations in tcg8086.g_copyvaluepara_openarray:
- when elesize=2, avoid the SHR CX,1 instruction
  - use rep movsw even for odd elesizes, unless cs_opt_size is set

git-svn-id: trunk@25829 -
2013-10-19 15:07:55 +00:00
nickysn
aca22a59f7 * optimizations in tcg386.g_copyvaluepara_openarray in order to avoid the
second IMUL

git-svn-id: trunk@25828 -
2013-10-19 12:56:58 +00:00
nickysn
0f69362edd - rm LEA reg,imm from x86ins.dat, as that's not a valid x86 instruction,
using it in inline asm causes an internal error and removing it didn't show
  any regressions after running the testsuite on i386-linux.

git-svn-id: trunk@25827 -
2013-10-18 23:26:58 +00:00
nickysn
ff9ce0d20d * tcg8086.g_copyvaluepara_openarray improvements:
- use a_op_const_reg for the multiplication, instead of emitting directly
    instructions, which are 186+
  - avoid using IMUL twice, when the element size is not power of two
  - rm the system_i386_win32 leftovers

git-svn-id: trunk@25826 -
2013-10-18 22:35:51 +00:00
nickysn
8744fbefbb * add $parentfp as a first parameter on i8086, instead of last. This makes
regular non-nested procedures compatible with nested var procvars and fixes
  the tmaclocalprocparam*.pp tests on i8086

git-svn-id: trunk@25825 -
2013-10-18 21:37:06 +00:00
nickysn
7e7ab2fd4d * also handle nested proc ptrs in thlcgcpu.location_force_mem on i8086
git-svn-id: trunk@25824 -
2013-10-18 20:09:01 +00:00
nickysn
ef51c8c5a2 * fixed the interface wrapper code generation for virtual methods on i8086 in
the medium memory model

git-svn-id: trunk@25817 -
2013-10-18 12:11:50 +00:00
nickysn
116d3746ca * fixed the stack offset to the self parameter when generating an interface
wrapper for a virtual method in tcg8086.g_intf_wrapper

git-svn-id: trunk@25816 -
2013-10-18 10:56:04 +00:00
nickysn
83aa50de74 * emit a far jmp in the interface wrapper on i8086 in far code memory models
git-svn-id: trunk@25812 -
2013-10-17 21:55:45 +00:00
nickysn
4aa010eedc + support LEA with 16-bit operand size
git-svn-id: trunk@25808 -
2013-10-17 16:11:08 +00:00
Jonas Maebe
8dd956cbde * convert unicode/widestring constants to ansistring in resourcestring
declarations (mantis #25198)

git-svn-id: trunk@25807 -
2013-10-17 12:43:39 +00:00
nickysn
814e1297ed * tcg8086.g_adjust_self_value fixed for far code memory models
git-svn-id: trunk@25798 -
2013-10-15 23:34:18 +00:00
nickysn
7ff97d9b7d * specify AT_DATA when refering to the 'RESSTR' symbols; among other things,
this fixes resourcestring constants in the i8086 memory model.

git-svn-id: trunk@25796 -
2013-10-15 22:06:16 +00:00
nickysn
bf07fc077b * specify AT_DATA in all references to the tobjectdef.vmt_mangledname symbol.
This fixes a lot of bugs, related to objects and classes in the i8086 medium
  memory model

git-svn-id: trunk@25794 -
2013-10-15 18:56:27 +00:00
nickysn
e160dab697 + added i8086 to the list of supported CPUs by FPC.exe
git-svn-id: trunk@25792 -
2013-10-15 13:29:51 +00:00
Jonas Maebe
a28917086b * updated *crt1* linking logic for OS X 10.8+:
o don't link by default
   o when generating profiling info, link gcrt1.o and specify "-no_new_main"
     linker parameter
  * don't use version-specific crt1.o files when targetting the
    iPhoneSimulator platform
  * don't link a crt1.o file when targetting iOS 6 or later
  (all info from
   http://llvm.org/svn/llvm-project/cfe/trunk/lib/Driver/Tools.cpp )

git-svn-id: trunk@25789 -
2013-10-14 21:38:38 +00:00
Jonas Maebe
10ae87f11c * fixed LdrLdr2LdrMov optimisation in case the first and second ldr have
a different size (disable it in that case) + test

git-svn-id: trunk@25778 -
2013-10-14 12:49:34 +00:00
Jonas Maebe
5276159e77 * correct ofset for saving floating point registers + explanation behind
the calculation (fixes make cycle on ARMHF)

git-svn-id: trunk@25777 -
2013-10-14 12:49:31 +00:00
Jonas Maebe
31a3122b91 * fixed LsrAnd2Lsr test by replacing the existing buggy check with comparing
the outcome of the original and the optimised sequence and seeing whether
    it's same + test

git-svn-id: trunk@25776 -
2013-10-14 12:49:28 +00:00
Károly Balogh
74af6d0dab enabled hardware mul reg, reg codepath for ColdFire too, accelerates tfloattostr test (thus some of the SoftFPU code) by a magnitude...
git-svn-id: trunk@25770 -
2013-10-13 21:36:24 +00:00
sergei
142d20ca30 * MIPS: cleanup assembler reader, MIPS references allow only a single register in parentheses.
git-svn-id: trunk@25768 -
2013-10-13 21:22:04 +00:00
sergei
e10e383b8e * MIPS: ".set macro"/".set nomacro" directives around ".cprestore" are necessary only when offset is outside smallint range. Otherwise they just clutter the assembler file.
git-svn-id: trunk@25767 -
2013-10-13 20:23:43 +00:00
Károly Balogh
97864d7cbd trying harder to commit compilable code (manual merge fail)
git-svn-id: trunk@25764 -
2013-10-13 18:31:43 +00:00
nickysn
c51c75936b * 16/8-bit ALU fixes in ncgutil.gen_free_symtable
git-svn-id: trunk@25762 -
2013-10-13 16:48:15 +00:00
nickysn
1dabaf5ded * 16/8-bit ALU fixes in ncgutil.add_regvars
git-svn-id: trunk@25761 -
2013-10-13 16:41:32 +00:00
nickysn
d1f0eea902 * 16/8-bit ALU fixes in ncgutil.gen_alloc_regvar
git-svn-id: trunk@25760 -
2013-10-13 16:31:16 +00:00
Károly Balogh
3b99974847 set up register A6 to be saved as well. this will only happen in case A6 is not used as framepointer
git-svn-id: trunk@25759 -
2013-10-13 16:12:32 +00:00
Károly Balogh
e5eac1bd44 make the array of registers to use depending on wheter we have an FP or not, and which register we have as FP
git-svn-id: trunk@25758 -
2013-10-13 16:06:35 +00:00
nickysn
fd05d0c14e * 16/8-bit ALU fix in maybechangeloadnodereg. This fixes the tbopr and trox2
tests on i8086.

git-svn-id: trunk@25752 -
2013-10-13 11:35:56 +00:00
nickysn
f6e846c574 + added the NEC V20/V30 instructions
git-svn-id: trunk@25750 -
2013-10-11 21:27:56 +00:00
Károly Balogh
db49a169cb handle more locations in tm68knotnode, fixes several tests failing to compile with 200203223
git-svn-id: trunk@25746 -
2013-10-11 02:51:23 +00:00
Károly Balogh
aedf2dc20d fixed spilling operation type for A_LEA, fixes test tb0112 to compile, but still fails to run
git-svn-id: trunk@25745 -
2013-10-11 02:03:48 +00:00
Károly Balogh
275031a0dd fix a bogus R_INTREGISTER to be R_ADDRESSREGISTER in getopstr()
git-svn-id: trunk@25744 -
2013-10-10 22:24:56 +00:00
Károly Balogh
fe3d11118c add string version of the new instructions to the right place. removed one more duplicate table.
git-svn-id: trunk@25743 -
2013-10-10 22:12:40 +00:00
Károly Balogh
dfe2f253f9 added 68040 CPU type, MOVE16 and ColdFire V4 extra instructions
git-svn-id: trunk@25742 -
2013-10-10 22:01:58 +00:00
Károly Balogh
280ee919b7 removed several debug writeln()s
git-svn-id: trunk@25741 -
2013-10-10 21:20:20 +00:00
Károly Balogh
bcab04538c removed unused table, cleanups
git-svn-id: trunk@25740 -
2013-10-10 21:19:15 +00:00
Károly Balogh
4c5f273bc5 removed redundant instruction table only used for ugly debug, and the ugly debug code itself
git-svn-id: trunk@25739 -
2013-10-10 21:16:07 +00:00
sergei
a5ae26da7e * Moved SkipEntryExitMarker method from ARM optimizer to the base one, since it is not target-dependent. Now it can be reused by other targets.
git-svn-id: trunk@25738 -
2013-10-10 21:12:49 +00:00
sergei
90d66595c2 * typecheck_real_to_currency: generate inline round() node instead of direct call to fpc_round_real, this allows target-specific processing to take place and possibly emit more efficient code.
* Provide x86_64 SSE versions of fpc_trunc_real and fpc_round_real, strictly they are not necessary after the above change to code generation, but it still reduces size of system unit by avoiding compilation of related generic code.

git-svn-id: trunk@25735 -
2013-10-10 12:46:51 +00:00
svenbarth
6fef9a2c80 Correctly implement g_intf_wrapper. Fixes nearly 200 tests and now the cross compiled compiler is at least able to print the help (compiling a simple program does not work yet though).
m68k/cgcpu.pas, tcg68k:
  + override g_adjust_self_value as we don't do register allocation for the wrapper we need to adjust the Self value using the scratch registers (could be improved however) and we also can not use the offset that the original procedure in tcg uses
  * fix g_intf_wrapper by using the correct operations and loading the correct (virtual) method offset

git-svn-id: trunk@25728 -
2013-10-09 19:56:17 +00:00
florian
babbc21afd * fix handling of register sets on m68k: it is required that they are stored as two tcpuregistersets because address registers and data registers have different register types
git-svn-id: trunk@25726 -
2013-10-09 18:15:06 +00:00
paul
1c578de28c compiler:
* don't allow to apply the same hint directive twice
  * change parser_e_proc_dir_not_allowed to more generic variant parser_e_dir_not_allowed - they are similar and 'procedure' prefix does not give more information about the error.
  * maybe_parse_hint_directives() uses procdef settings for initial values
  + add tests

git-svn-id: trunk@25720 -
2013-10-08 04:56:42 +00:00
Jonas Maebe
9619ed8b4b - undo hack from r25713
* fix maybe_parse_hint_directives() when it is called multiple times for a
   procdef that has a deprecation message specified (fixes crashes
   reported in #25101/#25165)

git-svn-id: trunk@25719 -
2013-10-07 20:54:26 +00:00
nickysn
8fad859161 * the default packrecords setting changed to 1 on i8086 for Turbo Pascal 7
compatibility

git-svn-id: trunk@25718 -
2013-10-07 20:42:17 +00:00
nickysn
9d1ba65cec * {$PackRecords NORMAL}, {$PackRecords DEFAULT} and {$ALIGN RESET} now set
packrecords to default_settings.packrecords, instead of 0

git-svn-id: trunk@25717 -
2013-10-07 20:41:19 +00:00