Асм вставка-64 в язык высокого уровня

Тема в разделе "WASM.X64", создана пользователем persicum, 9 ноя 2008.

  1. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Прошу прощение за создание новой темы!
    Просто хочется по быстрому получить ответы на все вопросы...

    Вдоволь наигрался с асмовыми вставками команд MMX и SSE2 в Дельфи 6.
    Теперь хочу попробывать вставить асм 64 в простую 32-прогу

    1) Какая версия Дельфи может работать с регистрами RAX, RBX и т.д.?

    2) Какой код может определить, поддерживается ли 64-бадья данным процом?

    3) Не повесит ли асмовая вставочка-64 простую Винду-32?
    Что должно лежать в старших половинах регистров по выходу из процедуры?

    4) Есть ли четкий стандарт на 64-бит инструкции, или у AMD свое, Intel свое?

    5) Доп регистры R8-R16 везде есть?
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    persicum
    карачун
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    persicum
    Нда а ещё спрашивают почему тут дельфи не разрешено...
    x64 работает только в вин 64 и только в приложениях x64. Если даже вин 64, а запущенная прога x32 то асм вставка х64 работать не будет. Ответ на этот вопрос гуглится в 5 мин.
     
  4. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Спасибо всем ответившим!
    Я знал что бить будут больно...

    Тока не пойму я, чтобы быстро перемножить два числа 64-бит за одну команду, мне че Висту64 ставить нужно 0:
    Не ожидал я такого западла...
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    ХР x64 тоже существует :)) но чтобы 2 числа перемножить придётся всю прогу x64 делать ;)
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Y_Mur
    Нормальные вопросы. Если человек только начал заниматься с 64 битами.
    У вас вон сишники ничуть не лучше.

    persicum
    1) Не знаю я выше 7 не ставил. Вроде в 2009 планируется.
    А так можешь FreePascal поставить он вроде держит.

    4) AMD и Intel как всегда договорились. Так что расхождений нет.
    Есть IA-32e это тоже самое что AMD64,то же самое x86-64.
    А вот IA64 это уже другая линейка Intel и там все по-другому.
    5) В есть x86-64=AMD64=IA-32e

    3) Повеситься. Вообще тут так. Есть 32битный код и 64битный смешивать можно только в разных процессах. В одном процессе смешивать нельзя. Поэтому программа может быть или целиком 32 битная или целиком 64 битная.
    2) Если у нас exe-64 битный, то и проверять не нужно. Винда проверит за нас. В любом случаи для запуска 64битной программы нужна 64 битная ОСь.
    А если 32 битный и хочется проверить, то скорее всего есть какой-то API просто я не знаю это в MSDN смотреть надо.
    А так обычно проверяется через CPUID.
     
  7. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Выходит, делать x64 асм-вставочки для ускорения вычислений на подобии MMX в простую 32-разрядную прогу невозможно?
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    persicum
    Как с mmx не выйдет они пошли по другому пути -не совместимости. Вернее частично оставили в виде запуска 32 и 64 битных процессов/потоков. А в одном потоке нельзя совмещать 32 и 64 код.
    Оказывается дельфи 2009 пока 64 не держит. Нужно ждать comador или как-то так.
     
  9. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Можно добавить, что 64х-битные dll в 32-х разрядных процессах всё же есть - это, например, ntdll.dll и wow64.dll.