Как проверить наличие у проца SSE3

Тема в разделе "WASM.BEGINNERS", создана пользователем Delphi, 2 окт 2006.

  1. Delphi

    Delphi New Member

    Публикаций:
    0
    Регистрация:
    15 май 2006
    Сообщения:
    26
    Адрес:
    Russia
    Здравствуйте.
    Такой вот вопросец:)
    Пишу на Delphi с использованием asm
    как програмно можно определить наличие у процессора SSE3?
    В инете нашел такой совет

    mov eax,1
    cpuid

    Если 26-ой бит в регистре EDX установлен, то SSE2 поддерживается.
    Если 0-ой бит в регистре ECX установлен, то поддерживатеся SSE3.

    так вот как на асме проверить вышеприведенное условие?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    можно поставить SEH и вызвать SSE3 инструкцию
     
  3. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    and ecx, 1
    jz no_sse3
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    afybc
    Зачем and советуешь? че уже test нету?
     
  5. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Это чтоб для наглядности =) Если ecx == 0, то не поддерживает. Если ecx == 1 - поддерживает.
    А так конечно же можно и даже нужно test, если не требуется изменять операнд.
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    afybc
    test это должно войти в привычку, ибо в след. проекте он может не глядя сделать багу, ибо сила привычки!
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt
    Ты опять советуешь использовать ограниченный набор инструкций? Нельзя сдерживать полёт мысли ассемблерщика, пугая его багами.
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent
    Это из опыта! Человек должен сразу обязан писать как можно правильный код! Почему, потому что возникнет меньше багов, и вырученное время из-за более правильного кода можно потратить на поиск более сложных багов или же для добавления новой возможности!

    зы:
    Я до сих пор не пойму почему не любят при создании пользовательских Прог, не системных, ООП юзать! Это гораздо облегчает и структурирует код! Я как перешел на ООП повысил производительность значительно. Щас вот балдею от XML облегчает создание конфигирирование ПО. Это я к тому что, если это не слишком трудно, то почему бы и не улучшить код сразу?
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ну да. Один раз сделал багу, так теперь никогда and не юзать?
     
  10. Delphi

    Delphi New Member

    Публикаций:
    0
    Регистрация:
    15 май 2006
    Сообщения:
    26
    Адрес:
    Russia
    Здравствуйте.

    написал функцию определяющую наличие SSE3 у проца.
    Как вы считаете алгоритм оптимален?
    //========

    function CheckSSE3(): Boolean;
    label NoSSE3;
    var
    TempCheck: LongWord;
    begin
    TempCheck:= 1;
    asm
    push eax
    push ebx
    push ecx
    push edx
    mov eax,1
    cpuid
    test ecx, 1
    jz NoSSE3
    mov edx, 0
    mov TempCheck, edx
    NoSSE3:
    pop edx
    pop ecx
    pop ebx
    pop eax
    end;
    Result:= (TempCheck=0);
    end;


    //======

    и если не сложно протестируйте прогу, оссобенно те у кого проц не держит SSE3.

    Спасибо
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1. Function CheckSSE3(): Boolean; assembler;
    2. asm
    3.     mov     eax,1
    4.     cpuid
    5.     xor     eax,eax
    6.     shr     ecx,1
    7.     adc     eax,eax
    8. end;
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    [deleted]
     
  13. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Код (Text):
    1. __asm{
    2.   xor eax,eax
    3.   inc eax
    4.   cpuid
    5.   and ecx,1
    6.   mov [Result],ecx
    7. }
     
  14. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    2n0name
    Нам же не регистр нужно прибавить, а флаг переноса...
     
  15. Delphi

    Delphi New Member

    Публикаций:
    0
    Регистрация:
    15 май 2006
    Сообщения:
    26
    Адрес:
    Russia
    всем спасибо.
    приятно было почувствовать себя ламером :)))
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    точно. туплю.
     
  17. dinoweb

    dinoweb Дмитрий

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    129
    Адрес:
    Россия. Красноярск
    Код (Text):
    1.   xor eax,eax
    2.   inc eax
    3.   push eax
    4.   cpuid
    5.   pop eax
    6.   and eax,ecx
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Мда ;) Это делается гораздо проще:
    Код (Text):
    1. function CheckSSE3:Boolean;
    2. asm
    3.   push ebx
    4.   mov eax,1
    5.   cpuid
    6.   mov eax,ecx
    7.   and eax,1
    8.   pop ebx  
    9. end;
    PS: Не фиг се, сколько уже понаписали ;)))) Торможу, однако...
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    У dinoweb красивей :)

    Имелось ввиду это.
    Только можно mov eax,ecx вместо Result.
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Да, ebx ещё сохранить, как у leo.