другие вариации __fastcall

Тема в разделе "WASM.RESEARCH", создана пользователем reversecode, 19 июн 2009.

  1. reversecode

    reversecode Guest

    Публикаций:
    0
    есть прога под виндой собраная VC
    но не в этом суть
    наскоко я помню вариаций у fastcall нет? или есть?
    тоесть параметры ecx, eax, edx остальные через стек идут

    а в этой программке есть другие вариации
    esi, eax, дальше через стек
    eax, ecx дальше через стек
    встречаються и другие
    причем они от функции к функции прыгают

    вопрос
    где это задаеться или как это выбирает компилер
    или это не fastcall а что то другое?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    кажется fastcall у разных компиляторов разный, борман фасткалл отличается от МС, а может гоню)
     
  3. reversecode

    reversecode Guest

    Публикаций:
    0
    файл скомпилированый под VC
    и параметры гуляют от функции к функции
    при этом функции не от классов
    тоесть это не функции классов где первый параметр всегда ecx - this
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    реализации фасткалл отличаются между компилерами непереносимо. кроме того, оптимизатор может изменить структуру кода и очень.

    ов позволяет редактировать способы передачи и возврата и еще кое что. в том числе и создавать свои способы (pragma aux), что позволяет использовать его для связи объектников в разных идеологиях
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Это назвается whole program optimization. Даёт отмашку компилятору использовать любые подходящие способы для передачи аргументов.
    http://msdn.microsoft.com/en-us/magazine/cc301698.aspx
     
  6. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    В копилку фастколлов:
    TopSpeed c/c++ for Dos передавал 3 параметра через ax, bx, dx.
    Ultra c/c++ for os-9000 передает только 1-й параметр через eax, остальные через стек.
     
  7. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    __fastcall
    Microsoft specific argument-passing order: The first two DWORD or smaller arguments are passed in ECX and EDX registers; all other arguments are passed right to left.
    Дело не в том, чем прога собрана, а в том, чем компилирована. У Microsoft (VC) только через регстры ecx и edx, других вариантов нет, есть только вариации с короткими и длинными аргументами, если первый или второй аргумент длинный, то он идет через стек, а его место в регистре занимает короткий аргумент, если он есть.
     
  8. reversecode

    reversecode Guest

    Публикаций:
    0
    вот как раз таки у майкрософта (VC)
    и получаеться что по другому сделано
    я незнаю как оно там сомтимизировало функции
    но есть и по два регистра в паре остальное через стек
    есть и по три четыре регистара если аргументов 3 или 4
    так что возможно что это не fastcall
    а просто оптимизация VC
    которая предпочла выбрать на свое усмотрение как передать параметры
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Конечно, это не фасткол, а оптимизация.
     
  10. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    у gnu gcc 3.4.5 при использовании __fastcall параметры передаются также, как
    и в msvs 2008. проверял. Причем, в gcc параметры передаются в одних и тех же
    регистрах (ecx - первый, edx - второй. дальше - в стеке) независимо от уровня оптимизации.
     
  11. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    А насчет именования функций.
    допусим, функция
    Код (Text):
    1. int __fastcall test(int a, int b);
    и в gcc 3.4.5 и в msvs 2008 будет называтся одинаково:
    Код (Text):
    1. @test@8
     
  12. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    в win64 для winapi юзается fastcall, стоит задуматься...