Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [SSE2] Проблема с MOVDQA 
:(
    Опции темы
marcusmae
Дата 23.4.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Здравствуйте,

Удумал такую штуковину :

Код


#define T08BIT char
#define T128BIT __m128i

    static void CopyData128(
        const T08BIT* to, const T08BIT* from, const unsigned int size) {
        const unsigned int atomicSize = sizeof(T128BIT);
        T128BIT *toPtr = (T128BIT*)to, *fromPtr = (T128BIT*)from;
        for (unsigned int offset = size; offset > 0; offset -= atomicSize)
            _mm_stream_si128(toPtr++, *fromPtr++);
    }


Если не бред (сразу smile), то откуда взялись строчки с 0xffffffff, приводящие к "Access violation reading location 0xffffffff"?

Код

?CopyData128@?$IntegralData@U?$GridVariable2d_Base@N@@@@KAXPBD0I@Z PROC ; IntegralData<GridVariable2d_Base<double> >::CopyData128, COMDAT

; 64   :        const T08BIT* to, const T08BIT* from, const unsigned int size) {

  00000    53         push     ebx
  00001    8b dc         mov     ebx, esp
  00003    83 ec 08     sub     esp, 8
  00006    83 e4 f0     and     esp, -16        ; fffffff0H
  00009    83 c4 04     add     esp, 4
  0000c    55         push     ebp
  0000d    8b 6b 04     mov     ebp, DWORD PTR [ebx+4]
  00010    89 6c 24 04     mov     DWORD PTR [esp+4], ebp
  00014    8b ec         mov     ebp, esp
  00016    81 ec 08 01 00
    00         sub     esp, 264        ; 00000108H
  0001c    56         push     esi
  0001d    57         push     edi
  0001e    8d bd f8 fe ff
    ff         lea     edi, DWORD PTR [ebp-264]
  00024    b9 42 00 00 00     mov     ecx, 66            ; 00000042H
  00029    b8 cc cc cc cc     mov     eax, -858993460        ; ccccccccH
  0002e    f3 ab         rep stosd

; 65   :        const unsigned int atomicSize = sizeof(T128BIT);

  00030    c7 45 f8 10 00
    00 00         mov     DWORD PTR _atomicSize$[ebp], 16 ; 00000010H

; 66   :        T128BIT *toPtr = (T128BIT*)to, *fromPtr = (T128BIT*)from;

  00037    8b 43 08     mov     eax, DWORD PTR _to$[ebx]
  0003a    89 45 ec     mov     DWORD PTR _toPtr$[ebp], eax
  0003d    8b 43 0c     mov     eax, DWORD PTR _from$[ebx]
  00040    89 45 e0     mov     DWORD PTR _fromPtr$[ebp], eax

; 67   :        for (unsigned int offset = size; offset > 0; offset -= atomicSize)

  00043    8b 43 10     mov     eax, DWORD PTR _size$[ebx]
  00046    89 45 d4     mov     DWORD PTR _offset$66192[ebp], eax
  00049    eb 09         jmp     SHORT $LN3@CopyData12
$LN2@CopyData12:
  0004b    8b 45 d4     mov     eax, DWORD PTR _offset$66192[ebp]
  0004e    83 e8 10     sub     eax, 16            ; 00000010H
  00051    89 45 d4     mov     DWORD PTR _offset$66192[ebp], eax
$LN3@CopyData12:
  00054    83 7d d4 00     cmp     DWORD PTR _offset$66192[ebp], 0
  00058    76 3e         jbe     SHORT $LN4@CopyData12

; 68   :            _mm_stream_si128(toPtr++, *fromPtr++);

  0005a    8b 45 e0     mov     eax, DWORD PTR _fromPtr$[ebp]
  0005d    66 0f 6f 00     movdqa     xmm0, XMMWORD PTR [eax]
  00061    66 0f 7f 85 00
    ff ff ff     movdqa     XMMWORD PTR tv67[ebp], xmm0
  00069    8b 4d e0     mov     ecx, DWORD PTR _fromPtr$[ebp]
  0006c    83 c1 10     add     ecx, 16            ; 00000010H
  0006f    89 4d e0     mov     DWORD PTR _fromPtr$[ebp], ecx
  00072    8b 55 ec     mov     edx, DWORD PTR _toPtr$[ebp]
  00075    89 95 fc fe ff
    ff         mov     DWORD PTR tv70[ebp], edx
  0007b    8b 45 ec     mov     eax, DWORD PTR _toPtr$[ebp]
  0007e    83 c0 10     add     eax, 16            ; 00000010H
  00081    89 45 ec     mov     DWORD PTR _toPtr$[ebp], eax
  00084    66 0f 6f 85 00
    ff ff ff     movdqa     xmm0, XMMWORD PTR tv67[ebp]
  0008c    8b 8d fc fe ff
    ff         mov     ecx, DWORD PTR tv70[ebp]
  00092    66 0f e7 01     movntdq XMMWORD PTR [ecx], xmm0
  00096    eb b3         jmp     SHORT $LN2@CopyData12
$LN4@CopyData12:

; 69   :    }







--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
marcusmae
Дата 23.4.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Ай-ай  : использую aligned-версию, а сам пытался подсунуть адрес, не выровненый по 16. 


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1123 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.