Машинные команды в C

Тема в разделе "LANGS.C", создана пользователем Mingan, 20 мар 2007.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    IceStudent
    Есть нечто вроде declspec:
    Declaring Attributes of Functions
    С помощью этих свойств можно контролировать инлайны.

    Прагмы тоже поддерживаются, но аналога #pragma optimize нет пока.
     
  2. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    IceStudent
    Я имел ввиду именно функции, содержащие asm-вставки, т. е. оптимизицию их Си-части.
    Вставки - нет, но в принципе - кто запрещает?
     
  3. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    У меня был когда-то код:
    Код (Text):
    1. long MyAbs(long x)
    2. {
    3.  _asm
    4.   {
    5.     lbl:neg x
    6.     js lbl
    7.   }
    8.   return x;
    9. }
    Так VC8 его превратил в:
    Код (Text):
    1. mov eax,[esp+_x$]
    2. cdq
    3. xor eax,edx
    4. sub eax,edx
    И, кстати, для моего P4 это достойная замена ветвления на простейшие операции - так что оптимизировать хорошо он умеет))
     
  4. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    10110111
    И не только для P4 :)

    А VC7 так не умеет :dntknw: только что проверил :)))
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    вот это вот:
    Код (Text):
    1. mov eax,[esp+_x$]
    2. cdq
    3. xor eax,edx
    4. sub eax,edx
    достойная замена вот этому:
    Код (Text):
    1. long MyAbs(long x)
    2. {
    3.  _asm
    4.   {
    5.     lbl:neg x
    6.     js lbl
    7.   }
    8.   return x;
    9. }
    !!!????????????
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Конечно. Jmp плохо влияет на оптимизацию.
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а как же предсказание ветвлений?
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Nouzui
    ыыы. Я полный профан в этом, но всё таки думаю что предсказание ветвлений здесь не пройдёт.
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    n0name
    наверное..
    но все равно, странно как-то
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Nouzui
    50 на 50 при первом прохождении :) Причём для внесения этого бранча в таблицу предсказаний процессору придётся вытеснить оттуда данные другого бранча, который мог бы оказаться более значимым для общей производительности. Бранчи - зло, всегда и везде :)
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Nouzui
    скачаю сёдня VTune, и протестю :P