Recent

Recent Posts

Pages: [1] 2 3 ... 10
1
FPC development / Re: what to do if my target MIPS cpu has no FPU
« Last post by nickysn on Today at 04:16:02 pm »
In addition to the advices above, also make sure that the calling convention (defined in compiler/mips/cpupara.pas) doesn't use FPU registers to pass parameters or function return values when the softfpu is selected.

For a working example, look at:
compiler/avr/cpupara.pas
2
General / Re: Parameter passing oddities
« Last post by KodeZwerg on Today at 04:15:23 pm »
Each argument is treated on its own.
To make it more simple with same meaning:
Code: Pascal  [Select][+][-]
  1. procedure Add(const a, b: Integer; out c: Integer); inline;
  2. begin
  3.   c := a + b;
  4. end;
Within the codeblock, the used keyword is law for earch argument.
So you could not a := b + c; since that would break the law.
If on the other hand you as developer call such method in a (a, b, a) way, then its upon you to decide if its smart or not.
If variable "c" is instantated as a "const", than that method would refuse it since it must be var/out and not const.
{$WRITEABLECONST OFF} would also not help to prevent a (a, b, a) usage since it has nothing to do with it.
3
From the debug log it seems like the compiler is trying to load the fpintres unit. Have you compiled this unit?
4
Although I would like smaller files for testing. My drive only has 15 gb free space, so I cannot run the billion line generator

Did you see that the generator has a command line switch "-n" to set the amount of generated lines? This way you can create files for testing of any size.

but then I do not have an official hash to compare it with
5
General / Re: compiler error in unit
« Last post by paule32 on Today at 03:49:50 pm »
damm, yes, indeed...
I working on two different copies.

sorry...
6
Please confirm you are using Lazarus 3.0 or 3.2 (or 3.3 / 3.99 fixes/trunk)

Please post a log from your problem.

- Before starting the debugger, go to menu: View > Ide Internals > Debug Output
  Keep that window open.
- Start the debugger with F9

Once you get an error:
- copy (or screenshot) the text of the error.
- copy and attach the entire content of the "debug output" window.

Thanks.



I have not checked, if this thread is about a single problem, or if problems other than the initial have been added in the middle of the thread.
The initial problem should be fixed.
7
General / Parameter passing oddities
« Last post by Nitorami on Today at 03:31:11 pm »
I like Pascal, and it is in fact the only language I'm thoroughly familiar with. But sometimes I wonder how it seems to make simple tasks more difficult than they ought to be. Here is an example, taken from my unit for complex numbers. Don't get me wrong, the unit works and served me well over the years, but there are formal deficiencies which I struggle to resolve when aiming for effective code and a straightforward syntax.
We have

Code: Pascal  [Select][+][-]
  1. type complex = record re,im: double; end; // in fact I use advanced records but irrelevant here
  2.  
  3. procedure Add (const a,b: complex; out c: complex); inline;
  4. begin
  5.   ...
  6. end;
  7.  
  8. operator + (const a,b: complex): complex; inline;
  9. begin
  10.   Add (a,b,result);
  11. end;
  12.  

I chose this because operators, while convenient, are much slower; the infix notation requires the compiler to create a temporary and then copy it. Unfortunately the compiler uses the slow REP MOVSL for copying, as soon as the block size is larger than 8 bytes. For timing measurements see https://forum.lazarus.freepascal.org/index.php/topic,67003.msg514679.html#msg514679

Thus if speed matters, I can use the procedural version. But nevermind, that is not the issue. What concerns me is that calls like

Code: Pascal  [Select][+][-]
  1. C1 := C1+C2;
  2. add (C1,C2,C1);
break the "const" contract; C1 will be changed although declared as const. It works, the compiler does not care, but it gives me doubts. This is not clean.

So why don't I change "const" to "var":

Code: Pascal  [Select][+][-]
  1. procedure Add (var a,b: complex; out c: complex);

Fine. But - Ah ! 

Code: Pascal  [Select][+][-]
  1. Add(C1, Foo(), C2); //Error: can't take the address of constant expressions

Scratch my head. Oh yes. Understood. That does not work with functions as arguments.

Well, then let's pass by value instead. I suspect this may be a bit slower because the compiler now has to make copies of a and b, presumably using the slow REP MOVSL again. But let's try:

Code: Pascal  [Select][+][-]
  1. procedure Add (a,b: complex; out c: complex);

WTF, this is FACTOR 50 slower! Impressive, REP MOVSL hitting hard. Forget it!

Let's go back to the "const" version which is the only one that works. To prevent const parameters from being changed, we could check for identical addresses in the argument:

Code: Pascal  [Select][+][-]
  1. procedure Add (const a,b: complex; out c: complex);
  2. begin
  3.   assert ((@a<>@c) and (@b<>@c);
  4.   (....);
  5. end;
  6.  

Nice, and less than 10% overhead for checking the assertion. That should be bulletproof.
BUT - Ah!- the assertion fails on "add (C1,C2,C1)" or "C1 := C1+C2". Yes, I see. Of course it does. But I need such calls.

What shall I do ? I went back to the original version, ignoring that the const parameters may in fact change, and hoping that the compiler will not stumble across it one day.
8
I'm facing the same problem as described in the first post of this thread.

However, I'm not sure I understood what the solution was, despite the enthusiastic messages following the commit quoted by Martin.

Have I missed something or has the problem just not been solved yet?
9
General / Re: Compile/Convert Delphi project to MacOS
« Last post by Joseph on Today at 02:43:45 pm »
Thanks! It's probably the same issue I'm facing.

I'll continue the discussion there.
10
General / how to tweek fpmake to compile RTL?
« Last post by Key-Real on Today at 02:33:27 pm »
Code: Pascal  [Select][+][-]
  1. TOS=(
  2.         o_none,linux,go32v2,win32,os2,freebsd,beos,haiku,netbsd,
  3.         amiga,atari, solaris, qnx, netware, openbsd,wdosx,
  4.         palmos,macosclassic,darwin,emx,watcom,morphos,netwlibc,
  5.         win64,wince,gba,nds,embedded,symbian,nativent,iphonesim,
  6.         wii,aix,java,android,msdos,aros,dragonfly,win16,freertos,
  7.         zxspectrum,msxdos,ios,amstradcpc,sinclairql,wasi,human68k,ps1    <- this is my new Target
  8.       );
  9.  
  10.  
  11. OSStr : array[TOS] of string=(
  12.         'none','linux','go32v2','win32','os2','freebsd','beos','haiku','netbsd',
  13.         'amiga','atari','solaris', 'qnx', 'netware','openbsd','wdosx',
  14.         'palmos','macosclassic','darwin','emx','watcom','morphos','netwlibc',
  15.         'win64','wince','gba','nds','embedded','symbian','nativent',
  16.         'iphonesim', 'wii', 'aix', 'java', 'android', 'msdos', 'aros',
  17.         'dragonfly', 'win16', 'freertos', 'zxspectrum', 'msxdos',
  18.         'ios','amstradcpc','sinclairql','wasi','human68k','ps1'   <- also here
  19.       );
  20.    
  21.    OSSuffix : array[TOS] of string=(
  22.         '_none','_linux','_go32v2','_win32','_os2','_freebsd','_beos','_haiku','_netbsd',
  23.         '_amiga','_atari','_solaris', '_qnx', '_netware','_openbsd','_wdosx',
  24.         '_palmos','_macosclassic','_darwin','_emx','_watcom','_morphos','_netwlibc',
  25.         '_win64','_wince','_gba','_nds','_embedded','_symbian','_nativent',
  26.         '_iphonesim','_wii','_aix','_java','_android','_msdos','_aros',
  27.         '_dragonfly','_win16','_freertos','_zxspectrum','_msxdos',
  28.         '_ios','_amstradcpc','_sinclairql','_wasi','_human68k','_ps1'   <- also here
  29.       );
  30.  
  31.  
  32.  
  33.  
  34. OSCpuPossible : array[TOS,TCpu] of boolean =
  35.       (
  36.         { os          none   i386    m68k  ppc    sparc  x86_64 arm    ppc64  avr    armeb  armel  mips   mipsel mips64 misp64el jvm    i8086  aarch64 wasm32 sparc64 riscv32 riscv64 xtensa z80   loongarch64 }
  37.         { none  }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  38.         { linux }   ( false, true,  true,  true,  true,  true,  true,  true,  false, true,  false, true,  true,  true,  true,    false, false, true,   false, true,  true,   true,   true,  false, true),
  39.         { go32v2 }  ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  40.         { win32 }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  41.         { os2 }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  42.         { freebsd } ( false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, true,   false, false, false,  false,  false, false, false),
  43.         { beos }    ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  44.         { haiku }   ( false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  45.         { netbsd }  ( false, true,  true,  true,  true,  true,  true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  46.         { amiga }   ( false, false, true,  true,  false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  47.         { atari }   ( false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  48.         { solaris } ( false, true,  false, false, true,  true,  false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  49.         { qnx }     ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  50.         { netware } ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  51.         { openbsd } ( false, true,  false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  52.         { wdosx }   ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  53.         { palmos }  ( false, false, true,  false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  54.    { macosclassic } ( false, false, true,  true,  false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  55.         { darwin }  ( false, true,  false, true,  false, true,  false, true,  false, false, false, false, false, false, false,   false, false, true,   false, false, false,  false,  false, false, false),
  56.         { emx }     ( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  57.         { watcom }  ( false, true,  false, false, false ,false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  58.         { morphos } ( false, false, false, true,  false ,false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  59.         { netwlibc }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  60.         { win64   } ( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, true,   false, false, false,  false,  false, false, false),
  61.         { wince    }( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  62.         { gba    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  63.         { nds    }  ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  64.         { embedded }( false, true,  true,  true,  true,  true,  true,  true,  true,  true , false, false, true , false, false,   false, true , true ,  true,  false, true,   true,   true,  true,  false),
  65.         { symbian } ( false, true,  false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  66.         { nativent }( false, true,  false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  67.         { iphonesim }( false, true, false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, true ,  false, false, false,  false,  false, false, false),
  68.         { wii }     ( false, false, false, true,  false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  69.         { aix }     ( false, false, false, true,  false, false, false, true,  false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  70.         { java }    ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   true,  false, false,  false, false, false,  false,  false, false, false),
  71.         { android } ( false, true,  false, false, false, true,  true,  false, false, false, false, false, true,  false, false,   true,  false, true,   false, false, false,  false,  false, false, false),
  72.         { msdos }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, true , false,  false, false, false,  false,  false, false, false),
  73.         { aros }    ( false, true,  false, false, false, true,  true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  74.         {dragonfly} ( false, false, false, false, false, true,  false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  75.         { win16 }   ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, true , false,  false, false, false,  false,  false, false, false),
  76.         { freertos }( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, false,  false, false, true,   false,   true, false, false),
  77.         {zxspectrum}( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, true,  false),
  78.         { msxdos}   ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, true,  false),
  79.         { ios }     ( false, false, false, false, false, false, true,  false, false, false, false, false, false, false, false,   false, false, true ,  false, false, false,  false,  false, false, false),
  80.         {amstradcpc}( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, true,  false),
  81.         {sinclairql}( false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  82.         { wasi }    ( false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  true,  false, false,  false,  false, false, false),
  83.         { human68k }( false, false, true,  false, false, false, false, false, false, false, false, false, false, false, false,   false, false, false,  false, false, false,  false,  false, false, false),
  84.         { ps1 }     ( false, false, false, false, false, false, false, false, false, false, false, false, true,  false, false,   false, false, false,  false, false, false,  false,  false, false, false)
  85.       );
  86.                and in this table
  87.  


with this setup it compiles me the compiler! :)
how to set up for the RTL?
Pages: [1] 2 3 ... 10

TinyPortal © 2005-2018