kategoria: ANSI C
[#1] Programowanie FPU w SAS/C
Program napisany w C realizuje kompresję arytmetyczną z użyciem łańcuchów Markova. Używa liczb typu float. Jeśli zdefiniuję typ math=standard czy ieee lub fpp to jest dobrze. Mnie jednak interesuje FPU. Jeśli zdefiniuję math=68881 lub 2 to jest problem. Po resecie (co istotne używam WinUAE, +-JIT nic nie zmienia) jest błąd kompresji (jeden bajt na 512 KB jest inny). Po kolejnych użyciach jest dobrze. Po resecie to samo. Być może jest błąd emulatora, ale jest jeszcze coś. W kompresji matematycznej ważne są wyniki liczb zmiennoprzecinkowych, a więc precyzja oraz zaokrąglenia. Odpowiadają za to bity w rejestrze fpcr. Pytanie brzmi, co nadzoruje ten rejestr, czy ktoś go przechowuje, czy kompilator go ustawia? Zrobiłem eksperyment i w asmie ustawiałem różne precyzje tego rejestru co diametralnie zmienia wyniki obliczeń, a jednocześnie zmienia strumień bitowy po kompresji. Drugi problem to ostrzeżenie o braku właściwej math library mimo, że podaję mu scm.lib, scm881.lib.
[#2] Re: Programowanie FPU w SAS/C

@cholok, post #1

Nie rozumiem ani jednego zdania ale z chęcia poczytam, gdy wątek się rozwinie wtf!?
[#3] Re: Programowanie FPU w SAS/C

@cholok, post #1

Rejestru FPCR nic nie nadzoruje, jest w przestrzeni użytkownika. Aczkolwiek system operacyjny przy przełączaniu tasków powinien Ci zapewnić, że cały czas będziesz tam miał to, co sobie ustawisz (do tego są uprzywilejowane instrukcje FSAVE i FRESTORE). Czy kompilator go ustawia, nie mam pojęcia, w zasadzie powinien, chociaż może polegać na ustawieniach domyślnych.
[#4] Re: Programowanie FPU w SAS/C

@_arti, post #2

Wątpię, by się rozwinął.
[#5] Re: Programowanie FPU w SAS/C

@Krashan, post #3

Kompilator ustawia fpcr na zero i sprawdza czy jest obecny fpu w systemie. Odpowiada za to moduł _fpinit. Problem jak dołączyć scm881.lib.

Problem rozwiązany. W liście opcji linkera musi być scm881.lib sc.lib. Nie może być na odwrót. Błąd kompresji był spowodowany brakiem scm881.lib.

Ostatnia aktualizacja: 17.01.2016 11:14:27 przez cholok
[#6] Re: Programowanie FPU w SAS/C

@cholok, post #5

Dalsze prace utwierdziły mnie w przekonaniu, że emulacja fpu winuae jest zbugowana.
Prog1:
...
bsr predict
...

Prog2:
...
predict inline
...

Oba dają różne wyniki. Programy były w asmie, więc ewentualne błędy kompilatora wykluczone.
[#7] Re: Programowanie FPU w SAS/C

@cholok, post #6

Mam takie same odczucia. Musiałem z tego co pamiętam wyłączyć JIT dla fpu żeby niektóre fragmenty kodu działały. Co zrobić. Nie jest mi to potrzebne więc nie wnikałem co dokładnie się wywala.
[#8] Re: Programowanie FPU w SAS/C

@cholok, post #6

Może podeślij te programy do Toniego Wilena? Być może wtedy naprawi ten bug.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem