Autor Beitrag
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1193
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: 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 :
ausblenden 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
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.06.18 04:47 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Sinspin
Anwender
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 62
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1193
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 24.06.18 07:52 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du den Source verlinkst, könnte ich dir vielleicht weiter helfen.
Habe ich gemacht. Im ersten Post.

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconAnwender hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1647
Erhaltene Danke: 237

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1193
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1193
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: 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.
ausblenden 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.