Autor |
Beitrag |
Sinspin
      
Beiträge: 1136
Erhaltene Danke: 75
Win7
DXE2 Prof, Lazarus
|
Verfasst: Fr 22.06.18 10:57
Hallo ich versuche gerade den Synopse fast Jpeg Decoder unter FPC 3 Win64 zum laufen zu bekomen.
Das Projekt scheint bisher nur für ältere Versionen übersetzt worden zu sein, auch wenn sich hinweise auf FPC 3 finden.
Ich bekomme Fehlermeldungen aus dem Assemblerpart die auf einen fehlenden Compilerschalter hindeuten.
Was FPC angeht bin ich noch ein noob, erst recht wenn es um defines und compiler schalter geht.
Ich bekomme Meldungen wie :
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Projekt kompilieren, Ziel: lib\x86_64-win64\Project1.exe: Exit code 1, Fehler: 50, Warnungen: 772 push 0 jpegdec.pas(214,21) Warning: No size specified and unable to determine the size of the operands, using DWORD as default push eax jpegdec.pas(213,9) Error: Asm: [push reg32] invalid combination of opcode and operands dd offset @TBL_8x8_04 // offsets will be recalculated in JpegDecode() jpegdec.pas(277,12) Error: Assembler syntax error in constant mov ecx, dword ptr [ebp + 000000C8H] jpegdec.pas(631,48) Warning: Use of +offset(%ebp) for parameters invalid here movaps xmm7, dqword ptr [ebp + 000000E0H] jpegdec.pas(635,50) Warning: Check size of memory operand "movaps: memory-operand-size is 128 bits, but expected [128 bits + 224 byte offset]" |
Wenn niemand eine plötzliche Eingebung hat, wende ich mich an die Entwikler und schau mal ob da was kommt.
Synopse Webseite
jpegdec Sourcecode
Danke für eure Hilfe.
€1: Links hinzugefügt.
_________________ Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Zuletzt bearbeitet von Sinspin am So 24.06.18 07:35, insgesamt 1-mal bearbeitet
|
|
Frühlingsrolle
      
Beiträge: 2162
Erhaltene Danke: 399
[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
|
Verfasst: Sa 23.06.18 04:47
Wenn du den Source verlinkst, könnte ich dir vielleicht weiter helfen. Eins vorweg: Funktioniert das Projekt in Win32 Anwendungen, mit FPC ausgeführt?
_________________ „Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Für diesen Beitrag haben gedankt: Sinspin
|
|
Anwender
      
Beiträge: 61
Erhaltene Danke: 8
|
Verfasst: Sa 23.06.18 21:59
ich bin mir nicht sicher, aber mit inline-ASsembler Code kann Freepascal glaub ich nicht so gut umgehen ...
da werden nicht alle Befehle unterstützt, hab ich mal irgendwo gelesen.
Kann aber mittlerweile auch gefixt sein - dann wird es was anderes sein.
_________________ neu hier
Für diesen Beitrag haben gedankt: Sinspin
|
|
Sinspin 
      
Beiträge: 1136
Erhaltene Danke: 75
Win7
DXE2 Prof, Lazarus
|
Verfasst: So 24.06.18 07:52
Frühlingsrolle hat folgendes geschrieben : | Wenn du den Source verlinkst, könnte ich dir vielleicht weiter helfen. |
Habe ich gemacht. Im ersten Post.
Frühlingsrolle hat folgendes geschrieben : | Eins vorweg: Funktioniert das Projekt in Win32 Anwendungen, mit FPC ausgeführt? |
Gute Frage, ich freu mich das alles nach der Installation auf Win10/64 ohne Probleme läuft.
Mein Programm sollte später dann auch 64Bit sein, das spart mir einiges an (Speicher)Problemen.
Wenn nur 32Bit geht muss ich das Programm doch aufteilen und via IPC die Daten schaufeln, aber genau das wollte ich vermeiden.
Ich schau Heute Abend mal nach wie man 32 bit übersetzt und probier es mal.
Anwender hat folgendes geschrieben : | ich bin mir nicht sicher, aber mit inline-ASsembler Code kann Freepascal glaub ich nicht so gut umgehen ... |
Laut Dokumentation im Quelltext war mal ein übersetzen möglich. Ich habe leider keine Info gefunden ob 32 oder 64 Bit.
_________________ Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
|
|
Horst_H
      
Beiträge: 1636
Erhaltene Danke: 232
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: So 24.06.18 08:46
Hallo,
für 32-Bit könnte es klappen.
Natürlich meckert der Compiler wenn Assembler 32-Bit Code nun auf 64 Bit compiliert wird.
Die Register sind ja jetzt 64 Bit breit und damit auch Pointer.
Quelltext 1: 2: 3: 4: 5: 6: 7:
| push eax jpegdec.pas(213,9) Error: Asm: [push reg32] invalid combination of opcode and operands jetzt push RAX; ... mov ecx, dword ptr [ebp + 000000C8H] jpegdec.pas(631,48) Warning: Use of +offset(%ebp) for parameters invalid here Zeiger sprich hier Basis Register 64 Bit also RBP |
Da sind einige Fallstricke.
Gruß Horst
|
|
Sinspin 
      
Beiträge: 1136
Erhaltene Danke: 75
Win7
DXE2 Prof, Lazarus
|
Verfasst: So 24.06.18 13:45
Soweit habe ich noch nichtmal gedacht. Aber Du wirst recht haben. Ich hatte die Vermutung das es am neuen FPC liegt und nen Compilerschalter falsch ist.
Wenn ich überlege was Compiler Heutzutage übersetzen können, hatte ich erwartet dass der Umstieg auf 64Bit für den Assembler Complier weniger aufwendig wäre, bzw. dass sich der Befehlssatz für 64Bit unterscheidet, und der Compiler einfach den für die Plattform passenden Code erzeugt.
Aber richtig, für 64Bit ist die Speicheradressierung ja anders und so ziemlich alle Befehle haben eine Variante mit Speicherzugriff bei der Zeiger nun 64Bit sein müssen.
Dann werde ich wohl vorerst nicht um ein 32Bit Modul rumkommen.
_________________ Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
|
|
Sinspin 
      
Beiträge: 1136
Erhaltene Danke: 75
Win7
DXE2 Prof, Lazarus
|
Verfasst: Fr 29.06.18 18:44
Ich habe mir den neusten Lazarus/FPC installiert und das cross complie addon für Win32.
Es klappt auch dann mit übersetzen (Richtung Win32) nicht.
Quelltext 1: 2:
| dd offset @TBL_8x8_04 // offsets will be recalculated in JpegDecode() jpegdec.pas(277,12) Error: Assembler syntax error in constant |
Es wird "offset" markiert.
Zudem kommen massig Warnungen, auch zu einigen in Lazarus deklarierten Konstanten die typlos deklariert wurden.
Ist schon witzig das ein Compiler der Pascal in Maschienencode übersetzen kann nicht mit Assembler klar kommt, bei dem es sich ja um lesbaren Maschienencode handelt.
Wobei auch Delphi einige Probleme haben soll. Deswegen sind hier ein paar Umwege implementiert worden um SSE/SSE2 verwenden zu können. Nun scheint es genau dort zu scheitern.
Wenn ich noch was rausfinde, landet es hier.
_________________ Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
|
|
|