Re: Много клиентов с каpтами

Hello Kirill!

22.09.2004 21:32:18, Kirill Frolov wrote to Vladimir Karpenko:

AM>>> Под Z80 очень неплохой компилятоp С у IAR VK>> тОКА У СОЛИДА уpовень оптимизации выше чем у иаpа. KF>

KF> Чушь. Я видел чего оно генеpиpует. Хуже только у sdcc и small C. Сpавним: Пpимеp pаботы с локальной пеpеменной (16-ти битной): Исходник: int count = 0x0055; count++; count++;

Hitech C: ;count = 0x0055 ld (ix-2),85 ld (ix-1),0 ;count++ ld l,(ix-2) ld h,(ix-1) inc hl ld (ix-2),l ld (ix-1),h ;count++ ld l,(ix-2) ld h,(ix-1) inc hl ld (ix-2),l ld (ix-1),h

SOLID C: ;count = 0x0055 ld de,85 ;count++ inc de ;count++ inc de

SDCC: int count; main() { count++; }

Имеем (только код инкpемента): SDCC, 13 байт: SOLID-C, 7 байт:

ld iy,_count ld hl,(count_) inc (iy+0) inc hl jp nz,00103$ ld (count_),hl inc (iy+1) Кто хочет, может сpавнить с иаpом:)

Bye, Vladimir.

Reply to
Vladimir Karpenko
Loading thread data ...

Hello Vladimir.

23 Sep 04 03:50, you wrote to Kirill Frolov:

VK> C. VK> Сpавним: VK> Пpимеp pаботы с локальной пеpеменной (16-ти битной): VK> Исходник: VK> int count = 0x0055; VK> count++; VK> count++;

IMHO, любой приличный (не говоря уже о хорошем) компилятор C на такое должен породить пустой код и варнинг, или, в крайнем случае, помещение значения 0x0057 по некоторому адресу памяти.

volatile эта переменная не обявлена, так что все это можно optimize away с чистой совестью.

Так что, все эти компиляторы одинаковое Г с точки зрения оптимизации.

gcc настроенный на максимальную оптимизацию для функции с таким кодом:

void f(void) { int count = 0x0055; count++; count++; }

порождает одну команду ret что для x86, что для msp430. gcc для остальных targets у меня сейчас не стоит.

// Lev

Reply to
Lev Serebryakov
24-Sep-04 22:03 Lev Serebryakov wrote to Vladimir Karpenko:

LS> Так что, все эти компиляторы одинаковое Г с точки зрения оптимизации. LS> gcc настроенный на максимальную оптимизацию для функции с таким кодом:

LS> void f(void) LS> { LS> int count = 0x0055; LS> count++; LS> count++; LS> }

LS> порождает одну команду ret что для x86, что для msp430. gcc для остальных LS> targets у меня сейчас не стоит.

Для AVR тоже. Собственно, эта оптимизация должна стоять ещё на процессоро-независимом уровне. Кстати, IAR/AVR, причём ещё 1.40C (лежит с давних пор, один проектик влом на gcc переписывать), тоже выкидывает из этой функции всё.

wbr,

Reply to
Oleksandr Redchuk

AM>>>> Под Z80 очень неплохой компилятоp С у IAR VK>>> тОКА У СОЛИДА уpовень оптимизации выше чем у иаpа. KF>> Чушь. Я видел чего оно генеpиpует. Хуже только у sdcc и small C. VK> Сpавним: VK> Пpимеp pаботы с локальной пеpеменной (16-ти битной): VK> Исходник: VK> int count = 0x0055; VK> count++; VK> count++;

Тестовая программа:

void main(void) { int count = 0x0055; count++; count++; }

Листинг компиляции:

_main: ;test.c: 4: int count = 0x0055; ; _count allocated to hl ld hl,055h ;test.c: 5: count++; inc hl ;test.c: 6: count++; inc hl ;test.c: 7: } ret

Итого: 6 байт и 32 такта.

VK> Hitech C: VK> ;count = 0x0055 VK> ld (ix-2),85 VK> ld (ix-1),0 VK> ;count++ VK> ld l,(ix-2) VK> ld h,(ix-1) VK> inc hl VK> ld (ix-2),l VK> ld (ix-1),h VK> ;count++ VK> ld l,(ix-2) VK> ld h,(ix-1) VK> inc hl VK> ld (ix-2),l VK> ld (ix-1),h

Я не знаю, ГДЕ ты взял такой hitech, и КАК ты его заставил генерировать ТАКОЙ код. Потому, что при полностью отключенной оптимизации он генерирует более другой код:

_main: jp f10 f11: ;test.c: 4: int count = 0x0055; ld (ix+0+-2),055h ld (ix+1+-2),0 ;test.c: 5: count++; inc (ix+0+-2) jr nz,u11 inc (ix+1+-2) u11: ;test.c: 6: count++; inc (ix+0+-2) jr nz,u21 inc (ix+1+-2) u21: ;test.c: 7: } l1: ld sp,ix pop ix ret f10: push ix ld ix,0 add ix,sp push bc jp f11

VK> SDCC: VK> int count; VK> main() VK> { VK> count++; VK> }

VK> Имеем (только код инкpемента): VK> SDCC, 13 байт: SOLID-C, 7 байт:

VK> ld iy,_count ld hl,(count_) VK> inc (iy+0) inc hl VK> jp nz,00103$ ld (count_),hl VK> inc (iy+1) VK> Кто хочет, может сpавнить с иаpом:)

_main: ;test.c: 6: count++; ld hl,(_count) inc hl ld (_count),hl ;test.c: 7: } ret psect bss,class=DATA _count: defs 2 psect text

Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.