Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2015, 12:55   #1
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию не компилится программа

Всем привет!
Есть задание:Обработать массивы из 8 элементов по следующему выражению:

F[i]=A[i]-B[i]+C[i]-D[i] , i=1...8;

Используются следующие массивы:
A, B и С – 8 разрядные целые знаковые числа (_int8);
D – 16 разрядные целые знаковые числа (_int16).
Полученный результат отобразить на форме с использованием соответствующих элементов. При распаковке знаковых чисел совместно с командами распаковки использовать команды сравнения (сравнивать с нулём перед распаковкой).
Вот мой код:
Код C++
Код:
#include "stdafx.h"
#include "SSE.h"
#include <iostream>
#include <malloc.h>
using namespace std;
 
double* SSESolve(float* a, float* b, float* c, double* d)
{
    double* resultPointer = (double*)malloc(8 * sizeof(double));
    float arr_a[8];
    float arr_b[8];
    float arr_c[8];
    double arr_d[8];
    float preresult[8]; 
    double result[8];
    memcpy((void*)(&arr_a), (void*)a, 8*sizeof(float)); 
    memcpy((void*)(&arr_b), (void*)b, 8*sizeof(float));
    memcpy((void*)(&arr_c), (void*)c, 8*sizeof(float));
    memcpy((void*)(&arr_d), (void*)d, 8*sizeof(double));
    memset((void*)resultPointer, 0, 8*sizeof(double));
    __asm
    {
        /*      F[i]=(A[i] -B[i]) +(C[i] -D[i] ), i=1...8.; */
 
        /*
        Команды для чисел с плавающей точкой
Команды пересылки
Скалярные типы – MOVSS
Упакованные типы – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
Арифметические команды
Скалярные типы – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
Упакованные типы – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
Команды сравнения
Скалярные типы – CMPSS, COMISS, UCOMISS
Упакованные типы – CMPPS
Перемешивание и распаковка
Упакованные типы – SHUFPS, UNPCKHPS, UNPCKLPS
Команды для преобразования типов
Скалярные типы – CVTSI2SS, CVTSS2SI, CVTTSS2SI
Упакованные типы – CVTPI2PS, CVTPS2PI, CVTTPS2PI
Битовые логические операции
Упакованные типы – ANDPS, ORPS, XORPS, ANDNPS
Команды для целых чисел
Арифметические команды
PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
Команды пересылки - PEXTRW, PINSRW
Другие - PMOVMSKB, PSHUFW
Другие команды
Работа с регистром - MXCSR, LDMXCSR, STMXCSR
Управление кэшем и памятью
MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
*/
        movups xmm0, arr_b;
        movups xmm1, arr_c;
        mulps xmm0, xmm4;
        movups preresult, xmm0;
        movups xmm0, arr_b+16;
        movups xmm1, arr_c+16;
        mulps xmm0, xmm1;
        movups preresult+16, xmm0;
            
        movups xmm0, arr_a;
        movups xmm1, preresult;
        subps xmm0, xmm1;
        movups preresult, xmm0;
        movups xmm0, arr_a+16;
        movups xmm1, preresult+16;
        subps xmm0, xmm1;
        movups preresult+16, xmm0;
        
        movups xmm0, preresult;
        PSHUFD xmm1, xmm0, 00001110b
        cvtps2pd xmm0, xmm0;
        cvtps2pd xmm1, xmm1;
        movups xmm2, preresult+16
        movaps xmm3, xmm2;
        shufpd xmm3, xmm3, 1;
        cvtps2pd xmm2, xmm2
        cvtps2pd xmm3, xmm3;
        
        movups xmm4, arr_d;     
        movups xmm5, arr_d+16;  
        movups xmm6, arr_d+32;  
        movups xmm7, arr_d+48;  
            
        subpd xmm0, xmm4;
        subpd xmm1, xmm5;
        subpd xmm2, xmm6;
        subpd xmm3, xmm7;
 
        movups result, xmm0;
        movups result+16, xmm1;
        movups result+32, xmm2;
        movups result+48, xmm3;
            
      
    }
    memcpy((void*)resultPointer, (void*)(&result), 8 * sizeof(double));
    return resultPointer;
}
не могу скомпилировать - пишет ошибку
http://cs624823.vk.me/v624823808/2dfa6/MW94uQLIMVY.jpg
подскажите плз срочно что не так???

Последний раз редактировалось Stilet; 04.05.2015 в 13:19.
ULTRAS.K вне форума Ответить с цитированием
Старый 04.05.2015, 13:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

main где? (10 мейнов)
p51x на форуме Ответить с цитированием
Старый 04.05.2015, 14:10   #3
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию

void main(void) -этот?
ULTRAS.K вне форума Ответить с цитированием
Старый 04.05.2015, 19:36   #4
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию

я не знаю как его правильно написать,можете помочь?
ULTRAS.K вне форума Ответить с цитированием
Старый 05.05.2015, 06:10   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну как... как обычно... Можете спросить у того, кто этот код писал.

int main - объявление ваших а, б, с, д - их заполнение - вызов вашей функции - печать результата
p51x на форуме Ответить с цитированием
Старый 05.05.2015, 13:13   #6
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию

спс за помощь
ULTRAS.K вне форума Ответить с цитированием
Старый 06.05.2015, 18:22   #7
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию

void main(){
_int8 a[8]={0,1,2,3,4,5,6,7};
_int8 b[8]={0,1,2,3,4,5,6,7};
_int8 c[8]={0,1,2,3,4,5,6,7};
_int16 d[8]={0,1,2,3,4,5,6,7};
SSESolve((_int8*)&a,(_int8*)&b,(_in t8*)&c,(_int16*)&d);
}
Такой у меня и все равно не работает
ULTRAS.K вне форума Ответить с цитированием
Старый 06.05.2015, 19:22   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну у вас же в функции флоаты и даблы, откуда вы инты взяли то?
p51x на форуме Ответить с цитированием
Старый 09.05.2015, 21:49   #9
ULTRAS.K
 
Регистрация: 12.03.2012
Сообщений: 9
По умолчанию

void main(){
_float a[8]={0,1,2,3,4,5,6,7};
_float8 b[8]={0,1,2,3,4,5,6,7};
_float8 c[8]={0,1,2,3,4,5,6,7};
_double16 d[8]={0,1,2,3,4,5,6,7};
SSESolve((_float*)&a,(_float*)&b,(_ float*)&c,(_double16*)&d);
}

так правильно?
ULTRAS.K вне форума Ответить с цитированием
Старый 10.05.2015, 00:50   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Откуда вы эти типы берете? _float, _float8, _double16?
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не компилится? Praud Помощь студентам 7 11.01.2014 04:34
почему не компилится исходник Rayzor Общие вопросы C/C++ 4 19.05.2012 18:03
программа не компилится KOLANICH Общие вопросы C/C++ 3 25.01.2011 09:52
Не компилится =( С++ Soledan Помощь студентам 0 08.01.2010 20:57
Не компилится проект на студии 2005 prikolist Общие вопросы C/C++ 31 15.06.2009 19:18