Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
AB3: EXEs FPU-Abhängigkeit => Compiler fix?
#1
In der lib ist es drin um den round modus zu setzen, für die val int print befehle. eben alles was mit float fpu auch gehen muss

In der vallib.bb2 printlib.bb2 ist der meiste FPU code drin. Es gibt aber einen Befehl um in der lib abzufragen ob mit oder ohne FPU kompiliert wurde ist ALibJsr $c704. die libs die wissen müssen ob FPU kompile oder nicht, die fragen es ab und speichern den Wert in dc.b fpuon.

in der strings2lib wird der round mode gesetzt.
setcpumode ;mode 0=normal 2=fpu
MOVE.l d0,mode
CMP.l #2,d0
BNE 'l2
MOVEQ.l #0,d0
Dc.l $f2009000
'l2 RTS
getcpumode
MOVE.l mode,d0
RTS

eigentlich sollten die Programme auch ohne FPU laufen, müsst ihr an einem testprogramm ohne FPU schauen, wo es abstürzt, welche befehle da stehen. vielleicht habe ich auch einfach nur irgendwo die abfrage ob FPU on oder off, nicht eingebaut. getestet ob es ohne FPU auch geht habe ich nie, weil mein develop System nicht ohne FPU bootet
Zitieren
#2
So ich antworte jetzt mal hier:

Bernd danke für die Infos das bestätigt meine untersuchen des Codes ende März.

Ich denke nicht das die Blitzlibs das größte Problem sind, man muss die auf jeden Fall nochmal unter die Lupe nehmen. Das Hauptproblem ist der Compiler dieser erzeugt Code wo einfach in FPU Register geschrieben oder daraus gelesen wird ohne auf die FPU Optimierung zu achten. Der Compiler selbst verwende auch direkt FPU Befehle ohne zu testen ob eine FPU vorhanden ist wenn ich da den Code richtig gelesen und verstanden habe.

Ende März ist es mir mit zwei kleinen Änderung am Compiler gelungen das er damit Code erzeugt so das die IDE (Compiler +PED ) komplett ohne Fehler startet wenn das System keine FPU hat. Das wars dann aber schon Compileren, der Taschenrechner ... resultieren in einem Crash.

Die frage die sich mir jetzt stellt soll ich diese Version comitten bzw. nur den Source oder auch die geänderten Exes?
Zitieren
#3
Ich habe thilo so verstanden, dass er nur die exe meint. also nicht amiblitz und ped. amiblitz und ped gehen mit sicherheit nicht ohne FPU. wenn du also testen willst dann nur mit programmen die auch keine FPU nutzen. vielleicht die dbl oder image include tests.

einchecken kannst es mal, wenn du nur bei optimitize ohne FPU den FPU code write überspringst, dürfte ja nix schlimmes passieren. dort wo #$f2....,d1 im code vorkommt muss man dann immer überspringen, weil das ein FPU Befehl ist
Zitieren
#4
Ja, die Entwicklungsumgebung und Compiler wird wohl niemand auf einer FPU-losen maschine verwenden, wenn doch, ist er mit BlitzBasic2 besser bedient (Auflösung, Speicher, Speed etc.) Aber es kommt doch öfters der Wunsch ein Program oder Spiel für Maschinen ohne FPU zu kompilieren. Ansonsten wäre auch der optimize 2 überflüssig.
Zitieren
#5
@Bernd

JA es geht um die resultierende EXE nach dem Compilieren sie soll keine FPU-Befehle verwenden bzw enthalten wenn sie nicht mit dem entsprechenden Optimize level erstellt wurde.

JA momentan gehen Amiblitz (compiler) und Ped nicht ohne FPU aber muss das so sein ich denke nicht.

Ich fange gerade an und comitte meine Änderungen erst mal die unkritischen kosmetischen wo ich Val(..) in Vallong(...9) geändet habe und dann noch die wo ich den Compiler geändert habe mit den entsprechenden exes zum Review und testen Wink
Zitieren
#6
der compiler macht die konstantencalculation, also wenn du 1.5*2 oder so tippst mit der FPU in 64 bit. Denn das ffp was blitz basic hatte ist auch nicht so genau. Wenn im Programm steht 1.5*2 dann ist im Code dann 3 als konstante drin oder 2.9999999999999999998. Denn da die Werte sich nicht ändern, kann man sich die berechnung während der Laufzeit sparen. und wenn da dann ohne FPU 2.9995 drinsteht ist dann ja nicht gerade gut. Programme können also auch ziemlich unterschiedliche Rechenergebnisse bekommen. Blitz 2 nutzt ffp. Dass ist ein schnelleres Verfahren als IEEEE, aber es kommen auch andre Ergebnisse raus und es ist nicht binarkompatibel mit IEEE und FPU. Man müsste also auch noch den Compiler auf 64 bit IEEEEE über libs umbauen, was ihn dann aber wieder langsamer macht

Irgendwann sollte aber auch mal ein Amigauser einsehen, dass man nicht endlos Zeit hat und es viel viel wichtigeres gibt. das gejammer wegen der fehlenden FPU unterstützung ist so als ob man noch Programme will die auf windows 3.11 laufen ohne FPU.

Aber es könnte noch schlimmer kommen, weil sich bisher noch keiner beschwert hat, dass amiblitz 2 nicht mehr auf kick 1.3 läuft. blitz2 geht noch auf 1.3 Big Grin

wichtig ist, dass man seine zeit so einteilt um das wichtigste zu schaffen. Bei perfektionisten passiert es, dass die sich an Details verlieren und am Ende wird garnichts richtig benutzbar. perfektionismusfalle nennt sich das. klar wäre es besser wenn amiblitz ohne FPU ginge. aber gibts nichts wichtigeres ?

perfektionismus ist auch schlecht für die Gesundheit wegen höheren Herzinfarktrisiko. Wer mal schauen will ob er ein Problem mit Perfektionismus hat, der kann ja mal den selbsttest machen.

<!-- m --><a class="postlink" href="http://www.palverlag.de/perfektionismus-test.php">http://www.palverlag.de/perfektionismus-test.php</a><!-- m -->
Zitieren
#7
Bernd ich verstehe was du meinst und das es für dich unnötig erscheint.

Mir reicht es wenn es sich ohne FPU genauso verhält bzw. genau ist wie beim alten BlitzBasic, ich denke auch das dies machbar ist.

Es gibt jetzt zwei Möglichkeiten dies zu erreichen entweder man orientiert sich an der Optimierungsstufe die dies beim Compilieren festlegt, oder man baut eine abfrage ein die beim Start des Programmes testet ob eine FPU im System vorhanden ist.
Zitieren
#8
Ich habe mal gesucht, hier ist ein FPU emulator für fpu lose amigas. ist von der uae fpu. für amiblitz lässt sich das einfacher nutzen, denn es muss nicht per OS anzeigen FPU vorhanden, sondern lediglich wenn eine FPU Code exception auftritt statt dem Guru den Code ausführen.

<!-- m --><a class="postlink" href="http://aminet.net/package.php?package=util/misc/acopro.lha">http://aminet.net/package.php?package=u ... acopro.lha</a><!-- m -->

vieleicht läuft amiblitz damit dann schon

der fpu emulator hätte den Vorteil auch später, wenn man was erweitert, dass man nicht ohne FPU als testen muss ob es noch ohne FPU geht.
Denn je mehr seltene Extrawürste man in code baut desto höher die fehlerwahrscheinlichkeit

Ich wollte code auschecken aber es geht nicht. kommt ne Meldung

Error: 'https://svn.code.sf.net/p/amiblitz3/code/!svn/vcc/default'; please relocate

habe ich eingegeben. geht aber auch nicht. dann aus dem SVN web browse die adresse genommen geht auch nicht. was muss ich da nehmen ?
Zitieren
#9
Sourceforge hat vor geraumer Zeit den Zugang geändert.

Bei mir hats geholfen das ich AB3 nochmal neu ausgecheckt habe...
Zitieren
#10
Wie Blackbird schon schrieb hat Sourceforge letztes jahr im April den Zugang geändert.

Bei uns auf den Amigas funktioniert jetzt nur noch der zugang zum Checkout/Updaten und Committen über diese URL

<!-- m --><a class="postlink" href="https://svn.code.sf.net/p/amiblitz3/code/">https://svn.code.sf.net/p/amiblitz3/code/</a><!-- m -->

Diese URL bekommst du nur angezeigt wenn du bei Sourceforge angemeldet bist.

Ich habe auch wie Blackbird einen komplett neuen Checkout gemacht, da es mir mit den Subversiontools für den Amiga nicht gelungen die alte lokale Kopie auf die neue URL umzustellen.


Warte mit deinem Commit bitte ich stelle wieder die Version von r464 her da ich jetzt Fehler bei PED entdeckt habe die mit der neuen Version nur mit vorhander FPU auftretten.

edit: so habe wieder alles zurück gestellt.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste