· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как использовать команды SSE в VC++ 6.0 ?

Посл.отвђт Сообщенiе


Дата: Июн 10, 2004 18:36:15

Как использовать команды SSE (SSE2/3DNow) в VC++ 6.0 ?


Дата: Июн 10, 2004 18:38:59

processor pack надо поставить(брать с сайта microsoft)


Дата: Июн 10, 2004 18:42:26

Thanks!
Сейчас попробую...


Дата: Июн 10, 2004 19:10:52

Зашибись!!! Все пошло - и SSE, и 3DNow...


Дата: Июн 10, 2004 19:15:40

Придётся шаманить, потому что компилятор сам до применения этих команд не догадается.
Кажется в интеловском компиляторе есть специальные прагмы на этот счёт, но я их не знаю.
А для VC++ насколько я знаю только так:
void Mult4x4_4x4_SSE( const float *src1, const float *src2, float *dst)
  {
    __asm {
      mov edx, src1
      mov eax, dst
      mov ecx, src2
      PIII_movss0(PIII_XMM0, PIII_EDX)
      PIII_movups0(PIII_XMM1, PIII_ECX)
 ..............

где
enum {
  PIII_EAX= 0,    PIII_XMM0= 0,
  PIII_ECX= 1,    PIII_XMM1= 1,
  PIII_EDX= 2,    PIII_XMM2= 2,
  PIII_EBX= 3,    PIII_XMM3= 3,
  PIII_ESP= 4,    PIII_XMM4= 4,
  PIII_EBP= 5,    PIII_XMM5= 5,
  PIII_ESI= 6,    PIII_XMM6= 6,
  PIII_EDI= 7,    PIII_XMM7= 7
};

#define PIII_movss0(xmmreg,reg)           PIII_emit4( 0xF3, 0x0F, 0x10, PIII_rm0(xmmreg,reg) )
#define PIII_rm0(reg1,ireg2)              PIII_modrm(reg1,ireg2,0x00)
#define PIII_modrm(mod, rm, hi)           (((mod)<<3)|(rm)|(hi))
#define PIII_emit1(b1)                    __asm { __asm _emit (b1) }
#define PIII_emit2(b1, b2)                __asm { PIII_emit1((b1)) PIII_emit1((b2)) }
#define PIII_emit3(b1, b2, b3)            __asm { PIII_emit2((b1),(b2)) PIII_emit1((b3)) }
#define PIII_emit4(b1, b2, b3, b4)        __asm { PIII_emit3((b1),(b2),(b3)) PIII_emit1((b4)) }


Дата: Июн 10, 2004 19:33:20 · Поправил: InsidePro_

Да мне и не надо, чтобы компилятор кодил на SSE, мне нужно, чтобы в секциях
__asm
{
...
}
я САМ мог использовать нужные мне команды.

Дык, все уже разобрался - еще раз спасибо за совет с Processor Pack'ом.


Дата: Июн 10, 2004 19:35:37

Тю. Догадается и еще как.
Ты можешь их использовать в VC 7.1 либо как intrinsic, либо в inline-асме, либо при соответствующих опциях оптимизации. Читаем о части возможностей тут:
http://www.codeproject.com/cpp/sseintro.asp?df=100&forumid=16168&exp=0&select=558629


Дата: Июн 10, 2004 19:44:37 · Поправил: InsidePro_

Ок, только мне VC 7.1 не очень понравился - я использую MFC, и столкнулся с тем, что mfc70.dll есть ДАЛЕКО не у всех юзеров, а делая статическую компоновку, получаю файл размером 400-500 кБ, что не есть good.
Поэтому мне и нужна возможность самому юзать SSE/3DNow именно в VC6.0, а в VC7 можно и безо всяких PPack'ов юзать эти команды, да и выставлять P-III в качестве целевого проца, но разговор не о VC7.


Дата: Июн 10, 2004 19:46:24

volodya

Не знал. Спасибо, пригодится на будущее, а то такой фарш приходилось в программе устраивать.


Дата: Июн 10, 2004 19:46:37

Ну... Мона таскать с собой...
А для Vc 6.0 только PPack...


Дата: Июн 10, 2004 19:49:35

Насчет фарша - вот именно!

А теперь - пишешь
...
#include "amd3dx.h"
#include "fpieee.h"
...

и юзаешь:
__asm
{
addss xmm0,xmm2
xorps xmm7,xmm4
}

Ляпота-а-а! :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.079