aaarrr 69 18 октября, 2005 Опубликовано 18 октября, 2005 · Жалоба Круто, только write-back не учитывается и выход кривоват :). Что интересно, ADS 1.2 городит такую же фигню, но с более прямым циклом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 18 октября, 2005 Опубликовано 18 октября, 2005 · Жалоба То же от 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iit 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба А что, писание на асме это "западло"? Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает. В чем С дает выигрыш? Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда. За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.) А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало. Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть". И вообще причем тут крылья - главное хвост! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба To aaarrr Больше сооптимизировать не удалось! :( Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.). Действия же компилятора в приведенном примере объясняются фиксированным распределением регистров процессора по функциям (например, в качестве указателей он выбирает, в первую очередь, lr, ip; параметры функции - r0,r1,... и т.п. ). Причем для разных компиляторов (а уж тем более процессоров это может быть по разному). Невнимательно прочитала последние сообщения. Конечно, пример от VladislavS для IAR - почти идеально Зато достоинства 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. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба 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-программерам :) <{POST_SNAPBACK}> Как получены эти цифры? Прошу ответить болле подробно. Меня интересует сравнение ARM и V850. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба А что, писание на асме это "западло"? в общем да Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает. Много вы видели? Те листинги, что приводились выше, чем ужасают? В чем С дает выигрыш? Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда. Не ерунда. Особенно о времени разработки и сопровождаемости. За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.) А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало. Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть". И вообще причем тут крылья - главное хвост! <{POST_SNAPBACK}> а вы знаете, что такое CVS, или SVN? Или тоже неприемлете, покуда нафиг не нужно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Quote - это лист содержания описания компилятора (цифры - номера страниц) Приношу извинения. Приведено для иллюстрации, что в рамках одного компилятора я могу использовать различные МС (из этого списка) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба То же от IAR. Оценивать хорошо это или плохо не бурусь. <{POST_SNAPBACK}> Это какой версией компилятора компилировалось? Какие опции оптимизации были установлены? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба To aaarrr Больше сооптимизировать не удалось! :( Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.). Да, memcpy умнее написана, хотя её ничего не стоит посадить в лужу невыравненным адресом. И написана она, конечно, на АСМе :) Это, в какой-то степени, и ответ всем asm-программерам :) Переход к новому типу МП происходит с более грамотных позиций. И еще - программирование на Си - использование более высокой технологии, которая в общем случае далее более качественный продукт с меньшими трудозатратами. Пример: кто как может обед разогревать на работе - на костре, кипятильником или в микроволновке. Извините, за легкий offtopic. <{POST_SNAPBACK}> Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. P.S. Всю эту дрянь из микроволновки я не ем © Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба To [/b]aaarrr Да, memcpy умнее написана, хотя её ничего не стоит посадить в лужу невыравненным адресом. И написана она, конечно, на АСМе Разумеется на asm-e, кто же спорит. Исходника нету? Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. Не надо путать в общую кучу квалификацию и технологию. Безусловно, для любой задачи прежде всего важна квалификация разработчика (разумеется не только программерская). Если пример с кулинарией Вам показался неудачным (спорить не буду, шашлык на костре все любят), то примеров новых технологий, появившихся совсем недавно, - множество (в строительстве, медицине, ...). Опять offtopic получается. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба 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); } Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. <{POST_SNAPBACK}> Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Точно также, как и вашу асмовскую функцию. Только 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 кривым компилером. Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует? <{POST_SNAPBACK}> Нет, я считаю, что квалификация программиста тем ниже, чем более низкоуровневый язык он не способен понять. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Хм, а в обратную сторону (повышения уровня)? Разве это не верно? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Добавление к квалификации и молодежного сленга "глючный компилятор" Файл внизу (переименован из string2.h, GNU C) string2.txt Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ken@t 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Ваш креатив - образчик мысли, слога, До Вас такого точно не писали! Вам будет зачтено пред ликом Бога, Что Вы его для нас публиковали... Вы же проффесионалы - доставайте сразу галстуки и меряйтесь. А теперь серьёзно , за сравнение вам зачёт. Теперь ни зачёт по пункту кровесмешения асма и сей и использование рам функций. Ни кто не сопротивляется по поводу иногда маразма компиляции. Пиши на асме, перекладывать ДСП функции на АРМ и хвалится тем что выжимаем максимум скорости - я считаю маразмом, потому что есть ОМАП двухядерный, нет желания - внешний ДСП ставте. С - повторное использование кода, ведь пользуетесь исли нет то горш цена. Что в сухом остатке 1. Сравнение кода генерируемого компилятором 2. Флейм. 3. Совместное использование асм и С. Впрочем об этом давно было известно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться