-
>Так кто кого подставил? Компилятор меня. В хелпе про это нет ни слова.
-
Вообще странно, я проверил на ХЕ4 и на последнм Берлине, не воспроизвелось (ХЕ6 нет)
-
Для меня это тоже странно.
Там такой код:
//Единица на случай нулевой разницы if (gEndTime = gStartTime) then gEndTime := (gEndTime + 1); //Время использованное на отрисовку кадра в миллисекундах gUsedTime := (gEndTime - gStartTime); //Время использованное на отрисовку кадра в секундах gFrameTime := (gUsedTime / 1000); //Всего кадров отрисовано с момента сброса gTotalFrames := (gTotalFrames + 1); //Всего времени с момента сброса gTotalTime := (gTotalTime + gFrameTime); //Кадров в секунду с момента сброса gFPS := (gTotalFrames / gTotalTime);
Потом вызывается
//Рамка региона отсечения sBmp.RectAA(Rgn.X, Rgn.Y, Rgn.W, Rgn.H, crWhite, 255, 128);
Внутри RectAA есть вызов
//Рисуем линию FBlendScLine(lpDA, lpLen, dColor, dAlpha, dOpacity);
В линии (часть кода):
//Формируем маски очистки из одной movdqu xmm6, PClearMask //Читаем общую маску очистки movdqu xmm8, xmm6 //дублируем movdqu xmm9, xmm6 //дублируем psrldq xmm8, 1 //xmm8 - Маска очистки 15-го байта psrldq xmm9, 15 //xmm9 - маска инверсии psrldq xmm6, 8 //в xmm6 маска очистки 7..0 байтов
В общем использую xmm на полную. После выход а из нее переменная приобретает вид QNAN вместо 0,001 как было до нее.
Где я накосячил? Если сделать переменную глобальную - все в полном порядке. Если выключить оптимизацию - все хорошо. Поэтому вывод один - компилятор пихает локульную переменную в регистры. И да стека у меня нет. Ничего не сохраняю. Там все 16 xmm-регистров используются.
-
МОгу полный код FBlendScLine на почту скинуть. Кормить не хочу халявщиков :)
-
In line with the x64 Application Binary Interface (ABI), the contents of the following registers must be preserved and restored within inline assembly functions: R12, R13, R14, R15, RDI, RSI, RBX, RBP, RSP, XMM4, XMM5, XMM6, XMM7, XMM8, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, and XMM15. http://docwiki.embarcadero.com/RADStudio/XE6/en/Using_Inline_Assembly_Code
-
Ну да, меня предупреждали :(
-
Спасибо!
|