Проблема такая: пишу на встроенном асме под Visual C++ .NET
Использую SSE инструкции, все отрабатывает правильно, вот только в окне registers в отладке все XMM регистры равны 0, независимо от того, что я с ними делаю. Помогите
Здравствуйте, KARALIUS, Вы писали:
KAR>Проблема такая: пишу на встроенном асме под Visual C++ .NET KAR>Использую SSE инструкции, все отрабатывает правильно, вот только в окне registers в отладке все XMM регистры равны 0, независимо от того, что я с ними делаю. Помогите
во-первых есть watch, на всякий случай,
во-вторых окно дизассемблера.
а вообще если не поможет давай код — посмотрим.
Здравствуйте, cpp, Вы писали:
cpp>Здравствуйте, KARALIUS, Вы писали:
KAR>>Проблема такая: пишу на встроенном асме под Visual C++ .NET KAR>>Использую SSE инструкции, все отрабатывает правильно, вот только в окне registers в отладке все XMM регистры равны 0, независимо от того, что я с ними делаю. Помогите
cpp>во-первых есть watch, на всякий случай, cpp>во-вторых окно дизассемблера. cpp>а вообще если не поможет давай код — посмотрим
Watch тоже показывает нули, а код пожалуйста, даже прокомментирую:
void main() // (1)
{ // (2)
float n1[] = {1.0, 2.0, 3.0, 4.0}; // (3)
float n2[4] = {0, 0, 0, 0}; // (4)
__asm{
movups xmm0, n1; // (5)
movups n2, xmm0; // (6)
}
}
Строка 5 выполняется, ничего с регистром xmm0 не происходит
Строка 6 выполняется, массивы n2 и n1 эквивалентны, причем xmm0 все еще равен 0.
В общем байда какая-то. Уже нашел два ServicePack'a под .NET. Ничего не помогает.
Причем остальное все работает, простые инструкции меняют регистры общего назначения,
MMX команды меняют MMX регистры, а SSE команды не меняют регистры??????????
Ничего не понятно, уже даже написал мелко-мягким, надеюсь ответят.
Здравствуйте, cpp, Вы писали:
cpp>Здравствуйте, KARALIUS, Вы писали:
KAR>>Проблема такая: пишу на встроенном асме под Visual C++ .NET KAR>>Использую SSE инструкции, все отрабатывает правильно, вот только в окне registers в отладке все XMM регистры равны 0, независимо от того, что я с ними делаю. Помогите
cpp>во-первых есть watch, на всякий случай, cpp>во-вторых окно дизассемблера. cpp>а вообще если не поможет давай код — посмотрим.
Watch тоже показывает нули, а код пожалуйста, даже прокомментирую:
void main() // (1)
{ // (2)
float n1[] = {1.0, 2.0, 3.0, 4.0}; // (3)
float n2[4] = {0, 0, 0, 0}; // (4)
__asm{
movups xmm0, n1; // (5)
movups n2, xmm0; // (6)
}
}
Строка 5 выполняется, ничего с регистром xmm0 не происходит
Строка 6 выполняется, массивы n2 и n1 эквивалентны, причем xmm0 все еще равен 0.
В общем байда какая-то. Уже нашел два ServicePack'a под .NET. Ничего не помогает.
Причем остальное все работает, простые инструкции меняют регистры общего назначения,
MMX команды меняют MMX регистры, а SSE команды не меняют регистры??????????
Ничего не понятно, уже даже написал мелко-мягким, надеюсь ответят
Здравствуйте, KARALIUS, Вы писали:
KAR>Здравствуйте, cpp, Вы писали:
cpp>>Здравствуйте, KARALIUS, Вы писали:
KAR>>>Проблема такая: пишу на встроенном асме под Visual C++ .NET KAR>>>Использую SSE инструкции, все отрабатывает правильно, вот только в окне registers в отладке все XMM регистры равны 0, независимо от того, что я с ними делаю. Помогите
cpp>>во-первых есть watch, на всякий случай, cpp>>во-вторых окно дизассемблера. cpp>>а вообще если не поможет давай код — посмотрим
KAR>Watch тоже показывает нули, а код пожалуйста, даже прокомментирую: KAR>void main() // (1) KAR>{ // (2) KAR> float n1[] = {1.0, 2.0, 3.0, 4.0}; // (3) KAR> float n2[4] = {0, 0, 0, 0}; // (4) KAR> __asm{ KAR> movups xmm0, n1; // (5) KAR> movups n2, xmm0; // (6) KAR> } KAR>}
KAR>Строка 5 выполняется, ничего с регистром xmm0 не происходит KAR>Строка 6 выполняется, массивы n2 и n1 эквивалентны, причем xmm0 все еще равен 0. KAR>В общем байда какая-то. Уже нашел два ServicePack'a под .NET. Ничего не помогает. KAR>Причем остальное все работает, простые инструкции меняют регистры общего назначения, KAR>MMX команды меняют MMX регистры, а SSE команды не меняют регистры??????????
Попробуй посмотреть окно дизассемблера — какие инструкции генирить линкер. Возможно он заменяет твои movups на что-то еще (например на ММХ опы).
Ради интереса твой камень поддерживает SSE (то бишь PIII ли у тебя или K7?)
KAR>Ничего не понятно, уже даже написал мелко-мягким, надеюсь ответят.
Прошу прощения у программерского сообщества за то, что замутил воду. На самом деле небольшая недоработка Microsoft поставила все с ног на голову. Просто XMM регистры не активизируются для консольного приложения. Сделал проект Dialog-based, и все стало ОК.
Здравствуйте, KARALIUS, Вы писали:
KAR>Прошу прощения у программерского сообщества за то, что замутил воду. На самом деле небольшая недоработка Microsoft поставила все с ног на голову. Просто XMM регистры не активизируются для консольного приложения. Сделал проект Dialog-based, и все стало ОК.
Не совсем понял вас KARALIUS. Как это не активизируются? Они были отключены (в смысле регистры)?
Здравствуйте, KARALIUS, Вы писали:
KAR>Прошу прощения у программерского сообщества за то, что замутил воду. На самом деле небольшая недоработка Microsoft поставила все с ног на голову. Просто XMM регистры не активизируются для консольного приложения. Сделал проект Dialog-based, и все стало ОК.
Убедительная просьба пояснить,
а) означает ли "недоработка" то, что это будет исправлено в дальнейшем,
б) был ли рекомендован способ решения именно для консольного варианта,
а также, по возможности, привести полный текст вопроса и ответа "авторитетного источника" (ведь это был он? ).
Здравствуйте, KARALIUS, Вы писали:
KAR>Прошу прощения у программерского сообщества за то, что замутил воду. На самом деле небольшая недоработка Microsoft поставила все с ног на голову. Просто XMM регистры не активизируются для консольного приложения. Сделал проект Dialog-based, и все стало ОК.
Бред какой-то... у меня все работало в консольном режиме, когда я этими вещами баловался. Не знаю, что там писал дебугер, но прога работала правильно.
Здравствуйте, Atilla, Вы писали:
A>Здравствуйте, KARALIUS, Вы писали:
KAR>>Прошу прощения у программерского сообщества за то, что замутил воду. На самом деле небольшая недоработка Microsoft поставила все с ног на голову. Просто XMM регистры не активизируются для консольного приложения. Сделал проект Dialog-based, и все стало ОК.
A>Бред какой-то... у меня все работало в консольном режиме, когда я этими вещами баловался. Не знаю, что там писал дебугер, но прога работала правильно.
Прога и у меня работала правильно, а вот в окне Registers нули сплошные именно в консольном варианте. По поводу исправления — вопрос к Билли.