Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 06:32

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit x87
BeitragVerfasst: Di Mär 15, 2011 18:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Ich implementiere momentan einige Funktionen, die es zwar schon gibt, aber nicht so, wie ich sie brauche. zB brauche ich einige Funktionen, die sowohl mit einfacher als auch mit doppelter Genauigkeit das gleiche machen, aber bislang nur mit doppelter Genauigkeit existieren (zB SinCos)

Das Problem: Die Funktionen (bzw bislang weiß ich´s erst von einer) funktionieren nicht. Und ich hab keine Ahnung, wie ich das beheben soll, weil mir fallt keine alternative Möglichkeit ein, das zu implementieren.

Meine Implementation von SinCos gibt immer 0.0 (für sinus und für cosinus) zurück (Math.SinCos kann ich nicht verwenden, weil das nur double nimmt)
Code:
procedure SinCos(phi: ftype; out sinus: ftype; out cosinus: ftype); //ftype wird definiert als single bzw double (mit $define)
begin
  asm
    fld phi
    fsincos
    fstp cosinus
    fstp sinus
  end;
end;


ich benutze FPC 2.2.4, für den Fall, dass das irgendwas zur Sache tut


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Di Mär 15, 2011 20:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Da bist du wohl auf einen Compilerbug gestoßen, der auch bei FPC 2.4.2 noch drin ist. Das generierte ASM für deine sincos Funktion sieht so aus:
Code:
.section .text
   .balign 8,0x90
.globl   P$FPUTEST_SINCOS$SINGLE$SINGLE$SINGLE
   .type   P$FPUTEST_SINCOS$SINGLE$SINGLE$SINGLE,@function
P$FPUTEST_SINCOS$SINGLE$SINGLE$SINGLE:
.Lc1:
# Temps allocated between rbp-24 and rbp-24
# [fputest.pas]
# [8] begin
   pushq   %rbp
.Lc3:
.Lc4:
   movq   %rsp,%rbp
.Lc5:
   subq   $32,%rsp
# Var phi located at rbp-8
# Var sinus located at rbp-16
# Var cosinus located at rbp-24
   movss   %xmm0,-8(%rbp)
   movq   %rdi,-16(%rbp)
   movq   %rsi,-24(%rbp)
# [10] fld phi
   flds   -8(%rbp)
# [11] fsincos
   fsincos
# [12] fstp cosinus
   fstpl   -24(%rbp)
# [13] fstp sinus
   fstpl   -16(%rbp)
# [15] end;
   leave
   ret
.Lc2:
.Le0:
   .size   P$FPUTEST_SINCOS$SINGLE$SINGLE$SINGLE, .Le0 - P$FPUTEST_SINCOS$SINGLE$SINGLE$SINGLE

Wie man daraus unschwer(tm)* abliest, werden die werte zwar berechnet und auch vom FPU Stack geholt, aber dann nicht in die übergebenen Variablen geschrieben, sondern auf dem CPU Stack abgelegt. Dann wird die Funktion auch schon verlassen, sodass die da schön vor sich hingammeln.

Wenn man die Funktion so umschreibt geht es:
Code:
procedure SinCos(phi: Single; out sinus: Single; out cosinus: Single);
var
  tcos, tsin: Single;
begin
  asm
    fld phi
    fsincos
    fstp tcos
    fstp tsin
  end;
  sinus := tsin;
  cosinus := tcos;
end;


Ich habe versucht, die Funktion mal als Assembly-Funktion zu schreiben. Dann beschwerte sich der assembler zurecht darüber, dass ich versuchte, 64bit Register an fstp und ein xmm register an fld zu übergeben… nunja, für weiteres war ich dann zu faul. Aber das wäre ein Ansatz, um die temporären Variablen zu umgehen.

greetings

*„unschwer“ ist kein eingetragenes Markenzeichen aller Mathematikvorlesenden dieser Welt.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Di Mär 15, 2011 20:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Ja, jetzt gehts. Danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Di Mär 15, 2011 21:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Meldest du den Bug oder muss ich das für dich machen?

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Mi Mär 16, 2011 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Wo meldet man solche Bugs, und was schreib ich in die Meldung rein (also, zB "Hallo Leute, ich hab einen Bug gefunden" wirds noch nicht wirklich bringen ;) Also was (abgesehen vom code) muss da noch rein)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Mi Mär 16, 2011 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
http://bugs.freepascal.org
Fehlerbeschreibung (Parameter werden nicht zugewiesen), Code und den ASM-Output den ich reingestellt habe, beides als Attachments (asm-output ist .s).

Auf keinen Fall höher als Minor bewerten. Gib deine FPC Version an, aber auch, dass das auf 2.4.2 getestet wurde und da immernoch besteht.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Mi Mär 16, 2011 20:36 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ähm, ok. bin deinem Link gefolgt, finde aber nichts, wo ich eine Fehlerbeschreibung oder sonstwas raufladen kann. Auf der Seite sind zwar einige Links, aber keiner, der mir irgendwie so vorkommt (und die, die ich probiert hab, waren´s definitiv nicht), als ob ich da eine Fehlerbeschreibung reinstelen dürfte.



Zitat:
(asm-output ist .s)
:?: Werde ich das noch verstehen, wenn ich die richtige Seite habe, oder sollte ich das schon jetzt verstehen, und hab aus einem anderen Grund keine Ahnung, was das heißt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit x87
BeitragVerfasst: Mi Mär 16, 2011 22:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Natürlich musst du dich zum reporten registrieren. Mit dem .s war gemeint, dass der ASM-Output die Dateiendung .s haben sollte.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]