-
X-Received: by 10.49.16.168 with SMTP id h8mr2181327qed.2.1386231743337; Thu, 05 Dec
2013 00:22:23 -0800 (PST)
X-Received: by 10.49.16.168 with SMTP id h8mr2181327qed.2.1386231743337; Thu, 05 Dec
2013 00:22:23 -0800 (PST)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!
news-out.readnews.com!transit4.readnews.com!209.85.216.88.MISMATCH!p15no5287473
qaj.0!news-out.google.com!p7ni9990qat.0!nntp.google.com!p15no5287465qaj.0!postn
ews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Thu, 5 Dec 2013 00:22:23 -0800 (PST)
In-Reply-To: <l7oijc$ilg$1@node2.news.atman.pl>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.184.107.52;
posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 5.184.107.52
References: <5...@g...com>
<l7nqcc$q5f$1@node2.news.atman.pl>
<5...@g...com>
<l7nt2e$so1$1@node2.news.atman.pl>
<5...@g...com>
<l7o5nr$5v8$1@node2.news.atman.pl>
<7...@g...com>
<l7oijc$ilg$1@node2.news.atman.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0...@g...com>
Subject: Re: minmax(a,b,c)
From: firr <p...@g...com>
Injection-Date: Thu, 05 Dec 2013 08:22:23 +0000
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:204762
[ ukryj nagłówki ]W dniu czwartek, 5 grudnia 2013 01:48:57 UTC+1 użytkownik bartekltg napisał:
> W dniu 2013-12-04 23:16, Wojciech Muła pisze:
>
> > On Wednesday, December 4, 2013 10:09:28 PM UTC+1, bartekltg wrote:
>
> >> ciało funkcji:
>
> >> cmp edx, r8d
>
> >> jge SHORT $LN7@minmax3
>
> >> mov eax, edx //WTF
>
> >> mov edx, r8d //tu było swap(a,b)
>
> >> mov r8d, eax //czemu nie po prostu xchg?
>
> >>
>
> >> $LN7@minmax3:
>
> >>
>
> >> cmp r9d, edx
>
> >> jle SHORT $LN3@minmax3
>
> >> mov edx, r9d
>
> >> mov DWORD PTR [rcx+4], r8d
>
> >> mov rax, rcx
>
> >> mov DWORD PTR [rcx], edx
>
> >>
>
> >
>
> > Bez sensu te skoki. Porządny kompilator uprości to do przesłań
>
> > warunkowych, bo na nowszych architekturach będzie szybsze od skoków.
>
> >
>
> > Nieliniowa zmiana przepływu sterowania to złoooo! :)
>
>
>
> Nakarmiłem lepszy kompilator (gcc 4.8.1)
>
>
>
> funkcja:
>
> pair <int,int> minmax3 (int a, int b, int c)
>
> {
>
> if (a<b)
>
> swap(a,b);
>
> if (c>a)
>
> a=c;
>
> else if (c<b)
>
> b=c;
>
>
>
> return make_pair(a,b);
>
>
>
> }
>
>
>
> BTW, wie ktoś, jak uzyskiwać ładniejszy plik asm w gcc?
>
> W tej chwili dodaje -g -fverbose-asm -Wa,-adhls=test.s
>
>
>
>
>
> 872:../rozne2/main.cpp **** w = minmax3(a,b,c);
>
> 18998 008c 8B542430 movl 48(%rsp),%edx
>
> 18999 0090 8B44242C movl 44(%rsp),%eax
>
> 19001 0094 8B5C2440 movl 64(%rsp),%ebx
>
>
>
> 829:../rozne2/main.cpp **** if (a<b) swap(a,b);
>
> 19005 .loc 1 829 0
>
> 19006 0098 39C2 cmpl %eax,%edx
>
>
>
> 19007 009a 7F06 jg .L1161
>
> 19008 009c 89D1 movl %edx,%ecx
>
> 19009 009e 89C2 movl %eax,%edx
>
> 19010 .LVL1838:
>
> 19011 00a0 89C8 movl %ecx,%eax
>
> 19012 .LVL1839:
>
> 19013 .L1161:
>
> 831:../rozne2/main.cpp **** if (c>a)
>
> 19014 .loc 1 831 0
>
> 19015 00a2 39D3 cmpl %edx,%ebx
>
> 19016 00a4 7F07 jg .L1162
>
> 19017 00a6 39D8 cmpl %ebx,%eax
>
> 19018 00a8 0F4FC3 cmovg %ebx,%eax
>
> 19019 .LVL1840:
>
> 19020 00ab 89D3 movl %edx,%ebx
>
> 19021 .LVL1841:
>
> 19022 .L1162:
>
> ...
>
>
>
> cmov użył dopiero dla ostatniego warunku/przypisania.
>
>
>
> Wersja z poprzedneigo posta też używa tylko raz:
>
> w = minmax2(a,b,c);
>
> 18995 .loc 1 889 0
>
> 18996 0053 8B542430 movl 48(%rsp),%edx
>
> 18997 0057 8B44242C movl 44(%rsp),%eax
>
> 18998 .LVL1833:
>
> 18999 005b 8B5C2440 movl 64(%rsp),%ebx
>
> 19000 .LVL1834:
>
> 19001 .LBB13789:
>
> 19002 .LBB13790:
>
> 842:../rozne2/main.cpp **** if (a>b)
>
> 19003 .loc 1 842 0
>
> 19004 005f 39C2 cmpl %eax,%edx
>
> 19005 0061 7D06 jge .L1162
>
> 19006 0063 89D1 movl %edx,%ecx
>
> 19007 0065 89C2 movl %eax,%edx
>
> 19008 .LVL1835:
>
> 19009 0067 89C8 movl %ecx,%eax
>
> 19010 .LVL1836:
>
> 19011 .L1162:
>
> 853:../rozne2/main.cpp **** if (c>M)
>
> 19012 .loc 1 853 0
>
> 19013 0069 39D3 cmpl %edx,%ebx
>
> 19014 006b 7F07 jg .L1163
>
> 19015 006d 39D8 cmpl %ebx,%eax
>
> 19016 006f 0F4FC3 cmovg %ebx,%eax
>
> 19017 .LVL1837:
>
> 19018 0072 89D3 movl %edx,%ebx
>
>
>
> Nawet po zamianie
>
> if (c>M) M=c;
>
> else if (c<m) m=c;
>
> na
>
> if (c>M) M=c;
>
> if (c<m) m=c;
>
>
>
> Jednak te skoki nie są takie straszne, czy kompilator
>
> za głupi? cmov to chyba już pentium pro.
>
>
>
>
>
> I też używają trzech instrukcji i dodatkowego rejestru
>
> na swap. Czyżby jednak było to szybsze niż xchg?
>
> Internet twierdzi, że nie.
>
> A CMPXCHG?
>
>
>
a jaki ustawiasz docelowy procesor pod
kompilacje bo warto ustawic jawnie (najlepiej ze
dwa i porownac wyniki) xchg moze byc wolne
i para czy tam navet trojka movow moze byc szybsza
zalezy od procka
Następne wpisy z tego wątku
- 05.12.13 10:05 firr
- 05.12.13 10:23 g...@g...com
- 05.12.13 10:44 firr
- 05.12.13 11:08 g...@g...com
- 05.12.13 11:54 firr
- 05.12.13 12:18 intuicjonista
- 05.12.13 13:18 firr
- 05.12.13 13:42 firr
- 05.12.13 15:07 firr
- 06.12.13 13:07 firr
- 06.12.13 13:15 firr
- 07.12.13 16:16 firr
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-11 Wyważanie kół rowerowych
- 2024-11-11 Kosz, gdzie??
- 2024-11-11 Coraz mniej ludzi robi prawo jazdy
- 2024-11-11 Opole => SAP HANA Cloud Dev / Data Engineer <=
- 2024-11-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-11-11 Lublin => Senior PHP Developer <=
- 2024-11-11 Marki => Senior PHP Symfony Developer <=
- 2024-11-11 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-11 Gliwice => Specjalista ds. public relations <=
- 2024-11-11 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-11 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-11-11 Warszawa => Sales Development Representative (in German) <=
- 2024-11-11 Marsz niepodległości
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa