Перейти к содержанию
    

Круто, только write-back не учитывается и выход кривоват :). Что интересно, ADS 1.2 городит такую же фигню, но с более прямым циклом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То же от IAR. Оценивать хорошо это или плохо не бурусь.

 

ARM

a:
     DS8 4096
`b`:
     DS8 4096

copy0:
     STMDB       SP!,{R4-R11}      ;; Push
     MOV         R2,#+0x80
??copy0_0:
     MOV         R3,R1
     MOV         R12,R0
     LDMIA       R12,{R4-R11}
     STMIA       R3,{R4-R11}
     ADD         R0,R0,#+0x20
     ADD         R1,R1,#+0x20
     SUBS        R2,R2,#+0x1
     BNE         ??copy0_0
     LDMIA       SP!,{R4-R11}      ;; Pop
     BX          LR                ;; return

main:
      STR         LR,[SP, #-4]!    ;; Push
      LDR         R0,??main_0      ;; a
      ADD         R1,R0,#+0x1000
      BL          copy0
      LDR         LR,[SP], #+0x4    ;; Pop
      BX          LR                ;; return
??main_0:
      DC32        a

 

Thumb

a:
      DS8 4096
`b`:
      DS8 4096
      PUSH        {R4,LR}
      MOV         R2,#+0x80
??copy0_0:
      MOV         R4,#+0x20
??copy0_1:
      SUB         R4,R4,#+0x4
      LDR         R3,[R0, R4]
      STR         R3,[R1, R4]
      BNE         ??copy0_1
      ADD         R0,#+0x20
      ADD         R1,#+0x20
      SUB         R2,R2,#+0x1
      BNE         ??copy0_0 
      POP         {R4}
      POP         {R0}
      BX          R0                ;; return

main:
       PUSH        {LR}
       LDR         R0,??main_0       ;; a
       MOV         R1,#+0x80
       LSL         R1,R1,#+0x5       ;; #+0x1000
       ADD         R1,R0,R1
       BL          copy0

       POP         {R0}
       BX          R0                ;; return
       NOP         
??main_0:
       DC32        a

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что, писание на асме это "западло"?

Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает.

В чем С дает выигрыш?

Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда.

За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.)

А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало.

Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть".

И вообще причем тут крылья - главное хвост!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To aaarrr

 

Больше сооптимизировать не удалось! :(

Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.).

 

Действия же компилятора в приведенном примере объясняются фиксированным распределением регистров процессора по функциям (например, в качестве указателей он выбирает, в первую очередь, lr, ip; параметры функции - r0,r1,... и т.п. ). Причем для разных компиляторов (а уж тем более процессоров это может быть по разному).

 

Невнимательно прочитала последние сообщения. Конечно, пример от VladislavS для IAR - почти идеально :blush:

 

Зато достоинства GNU компилятора (здесь немного :bb-offtopic: ) вот в этом

Hardware Models and Configurations.

AMD 29K Options

ARC Options...78

ARM/StrongARM Options ........................78

ARM THUMB Options ..........83

Clipper Options .............85

DEC Alpha Options ..........85

Hitachi H8/300 Options ..............89

Hitachi SH Options ....................90

HPPA Options.............................90

IBM RS/6000 and PowerPC Options......................92

IBM RT Options .........................101

Intel x86 Options........................102

Intel 960 Options...........................105

Matsushita MN10200 Options ...................107

Matsushita MN10300/AM33 Options .....................107

MIPS Options..................................107

Mitsubishi D10V Options .......................112

Mitsubishi M32R/D/X Options..................................113

Motorola 68000 Options .......................................................114

Motorola 88000 Options ......................................................116

NEC V850 Options .................................119

SPARC Options ....................120

System V Options .........................................124

 

Это, в какой-то степени, и ответ всем asm-программерам :)

Переход к новому типу МП происходит с более грамотных позиций. И еще - программирование на Си - использование более высокой технологии, которая в общем случае далее более качественный продукт с меньшими трудозатратами. Пример: кто как может обед разогревать на работе - на костре, кипятильником или в микроволновке. Извините, за легкий offtopic.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To aaarrr

 

 

Зато достоинства GNU компилятора (здесь немного  :bb-offtopic: ) вот в этом

Hardware Models and Configurations.

AMD 29K Options

ARC Options...78

ARM/StrongARM Options ........................78

ARM THUMB Options ..........83

Clipper Options .............85

DEC Alpha Options ..........85

Hitachi H8/300 Options ..............89

Hitachi SH Options ....................90

HPPA Options.............................90

IBM RS/6000 and PowerPC Options......................92

IBM RT Options .........................101

Intel x86 Options........................102

Intel 960 Options...........................105

Matsushita MN10200 Options ...................107

Matsushita MN10300/AM33 Options .....................107

MIPS Options..................................107

Mitsubishi D10V Options .......................112

Mitsubishi M32R/D/X Options..................................113

Motorola 68000 Options .......................................................114

Motorola 88000 Options ......................................................116

NEC V850 Options .................................119

SPARC Options ....................120

System V Options .........................................124

 

Это, в какой-то степени, и ответ всем asm-программерам :)

 

 

Как получены эти цифры?

Прошу ответить болле подробно. Меня интересует сравнение ARM и V850.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что, писание на асме это "западло"?

в общем да

 

Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает.

Много вы видели? Те листинги, что приводились выше, чем ужасают?

 

В чем С дает выигрыш?

Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда.

Не ерунда. Особенно о времени разработки и сопровождаемости.

 

За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.)

А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало.

Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть".

И вообще причем тут крылья - главное хвост!

а вы знаете, что такое CVS, или SVN? Или тоже неприемлете, покуда нафиг не нужно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote - это лист содержания описания компилятора (цифры - номера страниц)

Приношу извинения.

 

Приведено для иллюстрации, что в рамках одного компилятора я могу использовать различные МС (из этого списка) :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То же от IAR. Оценивать хорошо это или плохо не бурусь.

 

Это какой версией компилятора компилировалось? Какие опции оптимизации были установлены?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To aaarrr

 

Больше сооптимизировать не удалось!  :(

Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.).

 

Да, memcpy умнее написана, хотя её ничего не стоит посадить в

лужу невыравненным адресом. И написана она, конечно, на АСМе :)

 

Это, в какой-то степени, и ответ всем asm-программерам  :)

Переход к новому типу МП происходит с более грамотных позиций. И еще - программирование на Си - использование более высокой технологии, которая в общем случае далее более качественный продукт с меньшими трудозатратами. Пример:  кто как может обед разогревать на работе - на костре, кипятильником или в микроволновке. Извините, за легкий offtopic.

 

Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только.

 

P.S. Всю эту дрянь из микроволновки я не ем ©

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To [/b]aaarrr

Да, memcpy умнее написана, хотя её ничего не стоит посадить в

лужу невыравненным адресом. И написана она, конечно, на АСМе

 

Разумеется на asm-e, кто же спорит. Исходника нету?

 

Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только.

 

Не надо путать в общую кучу квалификацию и технологию. Безусловно, для любой задачи прежде всего важна квалификация разработчика (разумеется не только программерская).

 

Если пример с кулинарией Вам показался неудачным (спорить не буду, шашлык на костре все любят), то примеров новых технологий, появившихся совсем недавно, - множество (в строительстве, медицине, ...). Опять offtopic получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To aaarrr

 

Больше сооптимизировать не удалось!  :(

Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.).

 

Да, memcpy умнее написана, хотя её ничего не стоит посадить в

лужу невыравненным адресом.

Точно также, как и вашу асмовскую функцию. Только memcpy это точно все корректно отыграет, пусть даже создав менее оптимальный код, копирующий байтами, а не словами. А использование вашей функции с невыровненными адресами приведет к непредсказуемым эффектам.

 

 

И написана она, конечно, на АСМе :)

 

Например, в IAR memcpy написана нак inline функция в string.h

    #pragma inline 
   void *memcpy(void *s1, const void *s2, size_t n)
     /* Copied from memcpy.c */
   {       /* copy char s2[n] to s1[n] in any order */
     char *su1 = (char *)s1;
     const char *su2 = (const char *)s2;
 
     for (; 0 < n; ++su1, ++su2, --n)
       *su1 = *su2;
     return (s1);
   }

 

Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только.

Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точно также, как и вашу асмовскую функцию. Только memcpy это точно все корректно отыграет, пусть даже создав менее оптимальный код, копирующий байтами, а не словами. А использование вашей функции с невыровненными адресами приведет к непредсказуемым эффектам.

 

А кто ее будет так использовать? Ежели это моя функция, то вызывать её буду только я и правильно.

 

Например, в IAR memcpy написана нак inline функция в string.h

    #pragma inline 
   void *memcpy(void *s1, const void *s2, size_t n)
     /* Copied from memcpy.c */
   {       /* copy char s2[n] to s1[n] in any order */
     char *su1 = (char *)s1;
     const char *su2 = (const char *)s2;
 
     for (; 0 < n; ++su1, ++su2, --n)
       *su1 = *su2;
     return (s1);
   }

 

Ужасно! Всегда считал IAR кривым компилером.

 

Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует?

 

Нет, я считаю, что квалификация программиста тем ниже, чем более низкоуровневый язык он не способен понять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм, а в обратную сторону (повышения уровня)? Разве это не верно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавление к квалификации и молодежного сленга "глючный компилятор"

Файл внизу (переименован из string2.h, GNU C)

string2.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш креатив - образчик мысли, слога,

До Вас такого точно не писали!

Вам будет зачтено пред ликом Бога,

Что Вы его для нас публиковали...

 

 

Вы же проффесионалы - доставайте сразу галстуки и меряйтесь.

А теперь серьёзно , за сравнение вам зачёт.

Теперь ни зачёт по пункту кровесмешения асма и сей и использование рам функций.

Ни кто не сопротивляется по поводу иногда маразма компиляции. Пиши на асме, перекладывать ДСП функции на АРМ и хвалится тем что выжимаем максимум скорости - я считаю маразмом, потому что есть ОМАП двухядерный, нет желания - внешний ДСП ставте.

С - повторное использование кода, ведь пользуетесь исли нет то горш цена.

 

Что в сухом остатке

1. Сравнение кода генерируемого компилятором

2. Флейм.

3. Совместное использование асм и С.

 

Впрочем об этом давно было известно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...