собрать c + asm inline для х64

Тема в разделе "WASM.X64", создана пользователем Drakon Rider, 27 окт 2007.

  1. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    есть сишная программа из кусков типа

    Код (Text):
    1. #ifndef ASM_SSE
    2.         trans_col.r = mih_max(trans_col.r, trans);
    3.         trans_col.g = mih_max(trans_col.g, trans);
    4.         trans_col.b = mih_max(trans_col.b, trans);
    5.         trans_col.a = mih_max(trans_col.a, trans);
    6.  
    7. #else
    8.         __asm
    9.         {
    10. #ifdef SSE3
    11.             lddqu xmm0, trans_col
    12. #else
    13.             movups xmm0, trans_col
    14. #endif
    15.             movss xmm1, trans
    16.  
    17.             shufps xmm1, xmm1, 0
    18.             maxps xmm0, xmm1
    19.  
    20.             movups trans_col, xmm0
    21.         }
    22. #endif // ASM_SSE
    ее пытались собрать с помощью VS2005 для х64 и получили облом при включении дефайна ASM_SSE...

    на http://www.microsoft.com/Rus/Msdn/Magazine/2006/05/pietrek_x64.mspx указано:

    Одна из частей моего Win32-кода, которую удалось перенести на платформу x64 лишь с большим трудом, - подставляемый (inline) ассемблерный код, не поддерживаемый Visual C++ для x64. Но не бойтесь, любители ассемблера. Существует 64-разрядный MASM (ML64.exe); его вместе с документацией можно получить через MSDN. ML64.exe и другие инструменты для x64 (в том числе CL.EXE и LINK.EXE) доступны из командной строки. Чтобы настроить нужные переменные окружения, достаточно запустить файл VCVARS64.BAT.

    есть где мануал или туториал как это делается ?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Сам же написал:
    По поводу компиляции в FAQ.

    А вообще, в 8й студии масмом можно компилить асм-сорцы достаточно просто, смотри справку.
     
  3. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    и оно само выковыривает все асемблерные куски из сишного текста и собирает их х64 масмом с привязкой к сишным переменным и др ?

    вообщем самый главный вопрос - принципиальных проблем в сборке для х64 системы показаного примера асмовой программы нету ? т.е. компилятор и асемблер из vs2005 смогут переделать инструкции для 64битной адресации сами автоматически ?

    даже если есть че-нить типа

    mov eax, variable
    movups [eax], xmm0

    lea edi, diff_norm
    movups xmm0, xyz_mask
    maskmovdqu xmm7, xmm0

    т.е. косвенная адресация 32битными регистрами ?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Нет, конечно.
     
  5. Drakon Rider

    Drakon Rider New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2002
    Сообщения:
    21
    Адрес:
    Russia
    ну эт неинтересно - сделать отдельную либ или длл для асемблирования асемблером и потом линковки я и сам могу, но это вместо инлайнов придется делать вызовы функций и следить за регистрами и др - тяжко и неудобно... в исходной программе неск десятков замен сишных функций на асемблерные и вручную все перековыривать тяжко... хотелось как в х32 битном с++ - тыкается build all и все собирается, причем и с помощью c++ от мелкософта и c++ от интела без каких-либо изменений исходного текста программы... может надо подождать и для х64 бит версии так же сделают ? или может надо поискать какой-нить др компилятор си уже так умеющий ?

    в принципе могу добавить варианты 64битной адресации типа

    Код (Text):
    1. #ifdef ASM_32BIT
    2. mov eax, variable
    3. movups [eax], xmm0
    4. #endif
    5.  
    6. #ifdef ASM_64BIT
    7. mov rax, variable
    8. movups [rax], xmm0
    9. #endif
    так правильно ?

    попробую еще интеловский с++ 10 попробовать - там что-то про 64битность отличную от итаниума напечатано... в 9 не нашел...
     
  6. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    нет, не сделают. Вникай в философию - асм платформо зависимый язык теперь любой код на асме выносится в отдельный модуль и пишелся отдельно под каждую платформу
     
  7. IceStudent

    IceStudent Active Member

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