fk0 пиздун, а GCC - гавно

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby TS-Labs » 21 Jun 2012, 16:52

ГовноЦЦ:
Code: Select all
d:\>avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../gcc-4.3.3/configure --enable-win32-registry=WinAVR-20100110
--with-gmp=/usr/local --with-mpfr=/usr/local --prefix=/c/WinAVR --target=avr --e
nable-languages=c,c++,objc --with-dwarf2 --enable-doc --disable-shared --disable
-libada --disable-libssp --disable-nls --with-pkgversion='WinAVR 20100110' --wit
h-bugurl='URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=br
owse'
Thread model: single
gcc version 4.3.3 (WinAVR 20100110)


Опциы компиляции:
Code: Select all
avr-gcc.exe -Wall -gdwarf-2 -Os -fsigned-char -ffunction-sections -MD -MP -MT $(OUTPUT)/$(*F).o -MF $(OUTPUT)/dep/$(@F).d -c $< -o $(OUTPUT)/$(@F)


Незамысловатый соретс:
Code: Select all
void trace_u8( U8 val )
{
   printf("%u",val);
}

U32 y;

int main(void)
{
   
   U8 a1, a2, a3, a4;

   a1 = y;
   a2 = y >> 8;
   a3 = y >> 16;
   a4 = y >> 24;
   
   trace_u8(a1);
   trace_u8(a2);
   trace_u8(a3);
   trace_u8(a4);
}


Вот в такое ГовнеЦЦо он компайлится:
Code: Select all
@0000020D: trace_u8
92:       {
+0000020D:   D000        RCALL     PC+0x0001      Relative call subroutine
+0000020E:   D000        RCALL     PC+0x0001      Relative call subroutine
+0000020F:   B7ED        IN        R30,0x3D       In from I/O location
+00000210:   B7FE        IN        R31,0x3E       In from I/O location
+00000211:   9631        ADIW      R30,0x01       Add immediate to word
+00000212:   E123        LDI       R18,0x13       Load immediate
+00000213:   E031        LDI       R19,0x01       Load immediate
+00000214:   B7AD        IN        R26,0x3D       In from I/O location
+00000215:   B7BE        IN        R27,0x3E       In from I/O location
+00000216:   9612        ADIW      R26,0x02       Add immediate to word
+00000217:   933C        ST        X,R19          Store indirect
+00000218:   932E        ST        -X,R18         Store indirect and predecrement
+00000219:   9711        SBIW      R26,0x01       Subtract immediate from word
+0000021A:   8382        STD       Z+2,R24        Store indirect with displacement
+0000021B:   8213        STD       Z+3,R1         Store indirect with displacement
+0000021C:   940E0CE7    CALL      0x00000CE7     Call subroutine
+0000021E:   900F        POP       R0             Pop register from stack
+0000021F:   900F        POP       R0             Pop register from stack
+00000220:   900F        POP       R0             Pop register from stack
+00000221:   900F        POP       R0             Pop register from stack
94:       }
+00000222:   9508        RET                      Subroutine return



---- main.c ----

156:      {
+00000223:   92EF        PUSH      R14            Push register on stack
+00000224:   92FF        PUSH      R15            Push register on stack
+00000225:   930F        PUSH      R16            Push register on stack
+00000226:   931F        PUSH      R17            Push register on stack
160:         a1 = y;
+00000227:   90E00157    LDS       R14,0x0157     Load direct from data space
+00000229:   90F00158    LDS       R15,0x0158     Load direct from data space
+0000022B:   91000159    LDS       R16,0x0159     Load direct from data space
+0000022D:   9110015A    LDS       R17,0x015A     Load direct from data space
165:         trace_u8(a1);
+0000022F:   2D8E        MOV       R24,R14        Copy register
+00000230:   DFDC        RCALL     PC-0x0023      Relative call subroutine
166:         trace_u8(a2);
+00000231:   27BB        CLR       R27            Clear Register
+00000232:   2FA1        MOV       R26,R17        Copy register
+00000233:   2F90        MOV       R25,R16        Copy register
+00000234:   2D8F        MOV       R24,R15        Copy register
+00000235:   DFD7        RCALL     PC-0x0028      Relative call subroutine
167:         trace_u8(a3);
+00000236:   01C8        MOVW      R24,R16        Copy register pair
+00000237:   27AA        CLR       R26            Clear Register
+00000238:   27BB        CLR       R27            Clear Register
+00000239:   DFD3        RCALL     PC-0x002C      Relative call subroutine
168:         trace_u8(a4);
+0000023A:   2EE1        MOV       R14,R17        Copy register
+0000023B:   24FF        CLR       R15            Clear Register
+0000023C:   2700        CLR       R16            Clear Register
+0000023D:   2711        CLR       R17            Clear Register
+0000023E:   2D8E        MOV       R24,R14        Copy register
+0000023F:   DFCD        RCALL     PC-0x0032      Relative call subroutine


Сам распарсишь, или тебе разжевать? К распарсиванию как минимум 2 момента говнооптимизации.
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby fk0 » 21 Jun 2012, 17:59

Code: Select all
   .file   "test1.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__CCP__ = 0x34
__tmp_reg__ = 0
__zero_reg__ = 1
   .data
.LC0:
   .string   "%u"
   .text
.global   trace_u8
   .type   trace_u8, @function
trace_u8:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
   rcall .
   rcall .
   in r30,__SP_L__
   in r31,__SP_H__
   adiw r30,1
   ldi r18,lo8(.LC0)
   ldi r19,hi8(.LC0)
   in r26,__SP_L__
   in r27,__SP_H__
   adiw r26,1+1
   st X,r19
   st -X,r18
   sbiw r26,1
   std Z+2,r24
   std Z+3,__zero_reg__
   rcall printf
   pop __tmp_reg__
   pop __tmp_reg__
   pop __tmp_reg__
   pop __tmp_reg__
/* epilogue start */
   ret
   .size   trace_u8, .-trace_u8
.global   main
   .type   main, @function
main:
   push r15
   push r16
   push r17
/* prologue: function */
/* frame size = 0 */
/* stack size = 3 */
.L__stack_usage = 3
   lds r24,y
   lds r15,y+1
   lds r16,y+2
   lds r17,y+3
   rcall trace_u8
   mov r24,r15
   rcall trace_u8
   mov r24,r16
   rcall trace_u8
   mov r24,r17
   rcall trace_u8
/* epilogue start */
   pop r17
   pop r16
   pop r15
   ret
   .size   main, .-main
   .comm y,4,1
.global __do_copy_data
.global __do_clear_bss


Как бы совсем другой расклад. К чему бы то?

TSlabs, ты совсем запизделся.

Ещё раз -- ПИЗДАБОЛ!
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 21 Jun 2012, 18:03

Причём, вдогонку, отмечу:
Code: Select all
main:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
        lds r24,y
        rcall trace_u8
        lds r24,y+1
        rcall trace_u8
        lds r24,y+2
        rcall trace_u8
        lds r24,y+3
        rcall trace_u8
/* epilogue start */
        ret
        .size   main, .-main
        .comm y,4,1
.global __do_clear_bss


Мало того, что пиздабол, так ещё и клинический идиот. U08 всякие там, U32. За тебя, дурака, давно всё придумали, google://ISO9899
И если не пытаться обмануть самого себя выписывая всякие там U08 и др. идиотскую 8-битную псевдооптимизацию, то компилятор это делает ЛУЧШЕ тебя.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 21 Jun 2012, 18:04

PS: код забыл, он прост как валенок:
Code: Select all
int main(void)

   trace_u8(y);
   trace_u8(y>>8);
   trace_u8(y>>16);
   trace_u8(y>>24);
}
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 21 Jun 2012, 18:06

$ avr-gcc --version
avr-gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Да, не с торрентов своровано. Просто сказано apt-get install avr-gcc. Наверное, всё дело в этом...
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby TS-Labs » 21 Jun 2012, 18:45

fk0 wrote:TSlabs, ты совсем запизделся.

Тебе предоставили выхлоп гцц со всеми параметрами. Он не мой, я только разместил копипасту.
О чюдо гений СМС-ок, дай мне сирому свой волшепный конь пилятор! А то мну забанили его собирать из сорцов самому.
fk0 wrote:google://ISO9899

Клинический чромо-дрочер.
fk0 wrote:U08 всякие там, U32

CHRV, он тоже "клинический идиот"?
http://pentevo.googlecode.com/svn/avr/current/mytypes.h
fk0 wrote:И если не пытаться обмануть самого себя выписывая всякие там U08 и др. идиотскую 8-битную псевдооптимизацию

Ты кретин и тебе не поможет даже биореактор. Ты кроме себя ничего не слышишь. Иди нахуй, дарагой )
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby fk0 » 21 Jun 2012, 19:26

Мне предоставили кусок говна с каким-то дизассемблером. Я разбираться в этом говнокоде не буду. Я gcc -S умею.
Где взять не знаю, я из сорцов собирал. Да, мучался... Я уже отвечал -- это плата, за "бесплатность". Не такое оно уж и бесплатное.
Нужен бинарник последней версии под виндовс и не умеешь собрать -- есть коммерческие сборки. В этом суть GPL. Ищи на торрентах дальше.

Таки да, я весьма нелестного мнения о всех, кто изобретает собственные типы данных на ровном месте. Особенно восьмибитные. Обычно это означает, что люди не имеют представляения, что они вообще и зачем делают, не в курсе что до них и за них в этом направлении уже сделано и как поступать следовало бы по-хорошему. А 8-битные типы на 16/32-битных архитектурах особенно хороши... Тип int задуман переменной ширины совсем не просто так. И всюду, где можно использовать знаковые числа именно они используются тоже не просто так (vs беззнаковые, дающие качественные грабли с арифметикой на ровном месте, ибо алгебраическая логика, привычная для человека, уже не работает).

Кретин ты. Слил, всё точка. "Я говорил не то, не это, и вообще AVR имел ввиду..." Вот тебе Биореактор им. Луговского точно поможет.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby TS-Labs » 21 Jun 2012, 19:42

fk0 wrote:Мне предоставили кусок говна с каким-то дизассемблером. Я разбираться в этом говнокоде не буду.

"Я умею пиздеть что я неебический спец."
А между тем, разжевать видимо придетсо:
a2 = y >> 8;
Да, микс типов. у 32 бита, а - 8 бит. И что? Компилятор ниасиливает truncate?
А вот его говнокод:
166: trace_u8(a2);
+00000231: 27BB CLR R27 Clear Register
+00000232: 2FA1 MOV R26,R17 Copy register
+00000233: 2F90 MOV R25,R16 Copy register

+00000234: 2D8F MOV R24,R15 Copy register
+00000235: DFD7 RCALL PC-0x0028 Relative call subroutine
Выделено красьненьким. Шоб видно было. Напомню, ф-ция принимает 8 битный ансайнэд.
Это нормальная оптимизация, да?

Ну и собсно если есть какой то мегаключ, который сделает из этого говна конфетку - готов его опробовать.
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby lvd » 21 Jun 2012, 20:27

TS-Labs wrote:CHRV, он тоже "клинический идиот"?
http://pentevo.googlecode.com/svn/avr/current/mytypes.h

Бугага, это не чрв, это лвд. Названия причём, спижжены с амиго-цэ.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby fk0 » 21 Jun 2012, 20:34

TS-Labs wrote:А между тем, разжевать видимо придетсо:
a2 = y >> 8;


Да, учиться выражать свои мысли точно придётся. a2=y>>8. И что? 42. Это ответ.

Да, микс типов. у 32 бита, а - 8 бит. И что? Компилятор ниасиливает truncate?


Нет, программист идиот. Объяснять почему нет ни сил, ни желания. Не truncate (это что?), а sign extension при каждом доступе к переменной
Есть такой ресурс eetimes.com. А ещё edn.com. Там есть статьи на эти темы применительно к переучиванию с программирования 8-битных контроллеров на 32-битные. Иди и читай.

А вот его говнокод:


Это твой говнокод. Даже читать не буду, незачем. Я выше пример привёл, если нормально писать, без самодельной "псевдооптимизации", как есть так и писать, надо long, пиши long, без раскладывания на 8 бит, и если взять современную, а не начала 2000-х, версию компилятора, то всё работает идеально.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Next

Return to Coding

Who is online

Users browsing this forum: No registered users and 3 guests

cron