Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Вниз

Валится! ММХ + single . Что делать?   Найти похожие ветки 

 
AlexT1000   (2002-10-09 17:41) [0]

Что делать? Падает .
Я так пологая конфликт MMX и single.
Дайте совет кто встречался с этим!


Var MySrcXXXX , MyDeltaXXXX : single ;

for DstX := R.Left to R.Right do
begin
SrcX :=MyTrunc(MySrcXXXX ) shl 2;
BlendMemEx(PColor32(Integer(SrcP) + SrcX)^, DstP^, MasterAlpha);
MySrcXXXX := MySrcXXXX + MyDeltaXXXX; <<<< падает система
Inc(DstP);
end;
procedure M_BlendMemEx(F: TColor32; var B:TColor32; M: TColor32);
asm
// blend foregrownd color (F) to a background color (B),
// using alpha channel value of F
// EAX <- F
// [EDX] <- B
// ECX <- M
// Result := M * Fa * (Frgb - Brgb) + Brgb
TEST EAX,$FF000000
JZ @2

PUSH EBX
MOV EBX,EAX
SHR EBX,24
INC ECX // 255:256 range bias
IMUL ECX,EBX
SHR ECX,8
JZ @1

db $0F,$EF,$C0 /// PXOR MM0,MM0
db $0F,$6E,$C8 /// MOVD MM1,EAX
SHL ECX,3
db $0F,$6E,$12 /// MOVD MM2,[EDX]
db $0F,$60,$C8 /// PUNPCKLBW MM1,MM0
db $0F,$60,$D0 /// PUNPCKLBW MM2,MM0
ADD ECX,alpha_ptr
db $0F,$F9,$CA /// PSUBW MM1,MM2
db $0F,$D5,$09 /// PMULLW MM1,[ECX]
db $0F,$71,$F2,$08 /// PSLLW MM2,8
MOV ECX,bias_ptr
db $0F,$FD,$11 /// PADDW MM2,[ECX]
db $0F,$FD,$CA /// PADDW MM1,MM2
db $0F,$71,$D1,$08 /// PSRLW MM1,8
db $0F,$67,$C8 /// PACKUSWB MM1,MM0
db $0F,$7E,$0A /// MOVD [EDX],MM1
@1: POP EBX
@2:
end;


 
PVOzerski   (2002-10-09 19:14) [1]

Я с MMX не работал, но всё же несколько соображений (как отлаживать).
1) Попробуйте временно сделать Ваши single переменными целочисленного типа. Исчезнет ли проблема?
2) Временно замените Вашу процедуру с MMX на заглушку без MMX. Исчезнет ли проблема?
3) Посмотрите в M_BlendMemEx содержимое регистра EBX перед push и после pop. Совпадают ли значения?
4) Сделайте M_BlendMemEx внешней и сассемблируйте каким-нибудь ассемблером, поддерживающим
MMX-инструкции (естественно, назвав команды своими именами, а не через db).


 
cypher   (2002-10-09 23:59) [2]

посмари-ка каким-нить софт-айсом, твои db конвертятся в ТО что ты задумал, али нет, и пройдись по ним в пошаговом режиме (в софт-айсе)


 
Alx2   (2002-10-10 08:53) [3]

Попробуй после исп-я mmx использовать

EMMS—Empty MMX™ State
Description
Sets the values of all the tags in the FPU tag word to empty (all ones). This operation marks the
MMX registers as available, so they can subsequently be used by floating-point instructions.
(See Figure 7-11 in the Intel Architecture Software Developer’s Manual, Volume 1, for the
format of the FPU tag word.) All other MMX instructions (other than the EMMS instruction)
set all the tags in FPU tag word to valid (all zeros).


 
Alx2   (2002-10-10 08:58) [4]


The EMMS instruction must be used to clear the MMX state at the end of all MMX routines and
before calling other procedures or subroutines that may execute floating-point instructions. If a
floating-point instruction loads one of the registers in the FPU register stack before the FPU tag
word has been reset by the EMMS instruction, a floating-point stack overflow can occur that will
result in a floating-point exception or incorrect result.


 
Alx2   (2002-10-10 09:06) [5]

По поводу падения системы - посмотри как на "чистом" паскале аналог
procedure M_BlendMemEx(F: TColor32; var B:TColor32; M: TColor32);

откомпилируется. В твоем варианте еще, наверное, со стэком где-то еще есть путанница



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.035 c
3-68682
Oct
2002-09-27 17:22
2002.10.21
Disconnect from DataBase


8-68879
Yuri Btr
2002-06-21 13:33
2002.10.21
Длина звукозаписи в файле (wav, mp3, wma ...)


7-69038
Smok_er
2002-08-12 23:51
2002.10.21
Определение версии операционной системы и привилегий пользователя


1-68722
mark_kms
2002-10-11 07:56
2002.10.21
Печать таблицы


3-68664
BJValentine
2002-09-27 19:33
2002.10.21
Украинские символы в dbf





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский