Autor: MiW (miw_at_zeus.polsl.gliwice.pl)
Data: Sat 29 Nov 2003 - 22:58:40 MET
Witam !
Jestem ciekaw, czy ktos udzielilby mi odpowiedzi, bo jeszcze takiego nie
spotkalem :)
Pisalem jakis czas temu smieszny projekcik w asemblerze (konkretnie
optymalizacje fragmentu kodu IJG kodera JPEGa) operujacy w znakomitej
wiekszosci na operacjach FPU (x87... jak zwal tak zwal). Problemik objawial
sie po kilku sekwencjach typu:
fld qword ptr [ebx + 48]
fld qword ptr [ebx + 8]
fld ST(0)
fadd ST(0),ST(2)
fstp qword ptr tmp [8]
fsub ST(0),ST(1)
fstp qword ptr tmp [48]
Mianowicie nalezalo zresetowac koproca (finit), bo dawal dziwne wyniki
nastepnych operacji. Ilosc operacji przed kolejnym finitem ustalalem
doswiadczalnie ;-), bo nie miala wiekszego zwiazku z iloscia rozkazow (od
kilkunastu do >50).
Co wiecej - nie tylko ja mialem ten problem i wydawalo sie, ze nie dotyczy
to np tylko procow AMD (ktore jak wiadomo nie sa tak calkowicie i w 100%
zgodne z intel x86), bo sam mam Durona, a problem wystepuje rowniez na P4.
Moze mi ktos powiedziec, dlaczego ?
Hint: nie sa to zle ustawione flagi, bo ustawiane sa na nowo po kazdej
operacji zapisujacej cos do jakiegokolwiek rejestru FPU...
-- pzdr. MiW
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 11:46:23 MET DST