1. Assembler / Говнокод #3194

    +225

    1. 1
    2. 2
    fstp qword [tmp]
    fild qword [tmp]

    суровое округление через память

    Запостил: 3.14159265, 11 Мая 2010

    Комментарии (26) RSS

    • тама fistp заместо fstp
      Ответить
    • Это фигня, высер дельфийского компилера круче.
      e2 := round(e1);
      fld tbyte ptr e1
      call @ROUND
      mov [ebp-$18], eax
      mov [ebp-$14], edx
      fild qword ptr [ebp-$18]
      fstp tbyte ptr e2
      wait

      Это, блять, при включённой оптимизации.
      Впрочем, я об этом говорил в своём говнокоде. И никакой демагог не докажет мне, что дельфа адекватна с вещественными числами.
      Ответить
    • мой говнокод - это творчество MS VC++
      вообще я давно понял, что в критичных к скорости местах лучше написать руками асм-код - до 10 раз быстрее получается, чем у всяких "оптимизированых" компилеров ))
      Ответить
      • >MS VC++
        Это древний компилер, поэтому оптимизирует плохо, да и MS не самые оптимизирующие компиляторы пишет.
        Ответить
        • набор команд FPU еще древнее, времен i486
          судя по посту TarasB, да и вообще по некоторым говнокодам Botland пишет компилеры еще херовей
          Ответить
          • >набор команд FPU еще древнее, времен i486
            Это же не мешает компиляторам генерить неоптимальный код. Его люди пишут. Искуство оптимизации компиляторов вылизывается годами.
            Ответить
        • >>>оптимизирует плохо
          ну в отличии от того же BotLanda при включении флага /QIfist
          он генит адекватный код без вызовов процедур и таких перебросок через память
          кстати до VC7 он генил еще большее говно
          >>>Это древний компилер
          и c каких это пор он древний?
          Ответить
          • У меня уже есть MS VS 2010 года.
            По оптимизации - посмотри в сторону компилятора Intel.
            Ответить
          • >VC7
            Это тот, что 1997 года?
            Ответить
            • 7 - это номер версии студии в которой он зарелизен
              VC6==VC98
              VC7==VC2003
              VC8==VC2005
              VC9==VC2008
              итд

              Ответить
          • Компилятор GNU получше оптимизирует, чем Микрософсткий.
            Ответить
            • Хз, смотрел как-то какие-то тесты/сравнения, Майкрософтовский уделывал гнушный (mingw).
              Может быть, сравнения были написаны сотрудниками империи зла, не помню
              Ответить
            • смотря что сравнивать.. гнусный компилятор очень плохо дружит со сверткой выражений, и иногда константы (особенно флоат) вычисляет в рантайме... буквально недавно возился с траблой, когда при инициализации статик обжекта константы были неинициализированы, пришлось выносить инициализацию в main...
              Ответить
              • дифайны не рулят?
                Ответить
                • дефайны не засунешь в неймспейсы и члены классов, они так и будут висеть глобально... сейчас все чаще пытаюсь применить практику: задефайнил, использовал, раздефайни... в коде появляется кое какой порядок... хотя есть ситуации когда лучше с дефайном чем без него...
                  Ответить
                  • >хотя есть ситуации когда лучше с дефайном чем без него...
                    Например?
                    Ответить
                    • #define DBG_NEW new(_FILE_, _LINE_)
                      #define new DBG_NEW
                      при использовании инлайна _FILE_ и _LINE_ будут указывать на инлайн... а не на строку использования...
                      Ответить
                  • > они так и будут висеть глобально
                    > раздефайни

                    А сложно сделать псевдопрефикс? MYNAMESPACE_MYCLASS_CONSTNAME. Вероятность name collision будет стремиться к нулю.
                    Ответить
                    • name collision тут не причем, это из эстетических соображений...
                      Ответить
                      • я бы из эстетических соображений к с++ вообще не притрагивался.
                        Ответить
                        • показать все, что скрытоя не встречал более эстетичных языков чем С++...
                          Ответить
                          • а я не встречал более уродливых. такого неортогонального алогичного костылеуродца ещё поискать надо.

                            ява и сишарп куда стройнее и эстетичнее.

                            я уж молчу про функциональные языки.
                            Ответить
                            • у нас разное понимание о эстетике, мне не нравится ни ява ни шарп...
                              Ответить
                              • Ну вот что может быть уродливее смеси андерскоров со знаками больше и меньше?
                                Ответить
              • Может у вас старый гнусный компилятор?

                >и иногда константы (особенно флоат) вычисляет в рантайме...
                Интересно чем они руководствовались... Сохранение возможных исключений для результирующей платформы? О_о

                Интересно... Когда в GNU компиляторах появится векторизация... О_о
                Ответить
      • поставь флаг /fp:fast и все будет немного по другому, так как по умолчанию стоит /fp:precission, что вынуждает все операции над флоатами делать через память, чтоб обрезать лишнюю точность...
        при флаге CodeAnalyse будет варнинг, при попытке инлайна функции...
        Ответить

    Добавить комментарий