Anwendung soll auf Intel laufen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Anwendung soll auf Intel laufen

Beitrag von Mathias »

Wie muss ich das mit den Compileranweisungen lösen, so das der ASM-Code nur auf Intel kompatiblen läuft, egal ob 32 oder 64Bit ?
ZB. auf einem ARM (Raspberry) soll es ohne ASM laufen.

Folgender Code nimmt den ASM-Block nur auf auf 64Bit.

Code: Alles auswählen

{$ifdef cpux86_64 or cpu386}
function Vec_Add(const v0, v1: TVector4f): TVector4f; assembler; nostackframe; register;
asm
         Movups  Xmm0, [v0]
         Movups  Xmm1, [v1]
         Addps   Xmm1, Xmm0
         Movups  [Result], Xmm1
end;
{$else}
function Vec_Add(const v0, v1: TVector4f): TVector4f; inline;
begin
  Result[0] := v0[0] + v1[0];
  Result[1] := v0[1] + v1[1];
  Result[2] := v0[2] + v1[2];
  Result[3] := v0[3] + v1[3];
end;
{$endif}   


Hier habe ich mal geguckt, aber nicht gescheites gefunden: http://wiki.freepascal.org/Conditional_compilation/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anwendung soll auf Intel laufen

Beitrag von mse »

Code: Alles auswählen

 
{$if defined(cpux86_64) or defined(cpux86)}
 

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anwendung soll auf Intel laufen

Beitrag von Mathias »

Danke.
Jetzt geht es, sobald ich ARM wähle, wird der ASM-Code wie erwartet grau.

Man hätte nur das englische Wiki angucken müssen, dann hatte man ein Beispiel man and gesehen.
Ich habe dies gerade mit or probiert, geht aber nicht. :roll:

Code: Alles auswählen

{$ifdef cpux86_64 or $ifdef cpux86}


Aber deine Variante geht zum Glück. :wink:

Ich habe noch das deutsche Wiki um cpux86 ergänzt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anwendung soll auf Intel laufen

Beitrag von mse »

defined(cpu386) oder defined(cpui386) gehen auch.

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Anwendung soll auf Intel laufen

Beitrag von mischi »

Im Quellcode von fpc habe ich sowohl cpu386 als auch cpui386 gefunden. Ist das nur ein historischer gewachsener Unterschied oder steckt da mehr dahinter?
MiSchi macht die fink-Pakete

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anwendung soll auf Intel laufen

Beitrag von mse »

mischi hat geschrieben:Im Quellcode von fpc habe ich sowohl cpu386 als auch cpui386 gefunden. Ist das nur ein historischer gewachsener Unterschied oder steckt da mehr dahinter?

Das scheint alles dasselbe zu sein, compiler/options.pas:

Code: Alles auswählen

 
{ some stuff for TP compatibility }
{$ifdef i386}
  def_system_macro('CPU86');
  def_system_macro('CPU87');
  def_system_macro('CPU386');
{$endif}
 
{ new processor stuff }
{$ifdef i386}
  def_system_macro('CPUI386');
  def_system_macro('CPU32');
  def_system_macro('CPUX86');
  def_system_macro('FPC_HAS_TYPE_EXTENDED');
  def_system_macro('FPC_HAS_TYPE_DOUBLE');
  def_system_macro('FPC_HAS_TYPE_SINGLE');
{$endif}
 

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anwendung soll auf Intel laufen

Beitrag von Mathias »

Könnte dies vielen Option ein Grund sein, weis das FPC nicht so schnell wie Delphi ist ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Anwendung soll auf Intel laufen

Beitrag von mse »

Mathias hat geschrieben:Könnte dies vielen Option ein Grund sein, weis das FPC nicht so schnell wie Delphi ist ?

Ich denke nicht, auf jeden Fall nicht hauptsächlich. Das Hauptproblem liegt vermutlich eher in der Architektur, in der exzessiven Verwendung von Klassen und dass die Free Pascal Kompiliergeschwindigkeit einen kleinen Stellenwert hat.
Die neueren Delphi Compiler sind ja auch nicht mehr so schnell wie Delphi 7, vermutlich gibt es dort keine Entwickler mehr, welche schnellen Code schreiben können, wollen oder dürfen.

Antworten