skip to main content

kiesler.at

Alpha C Inline-Assembler
updated by rck, 2004-10-08

C war schon seit Anfang an eine sehr maschinennahe Programmiersprache. Dadurch entstanden einerseits Probleme wie Bufferoverflows ('effizientes' Speichermanagement). Andererseits wichtige Konzepte wie Inline-Assembler. Inline-Assembler ist oft nicht nur einfacher zu durchschauen, weil der C-Compiler das ,,Housekeeping'' (Adressen-Ausrichtung, etc.) macht. Sondern auch fast so effizient wie ,,pure Assembler''.
                     
1 | 2 | 3 | 4 | 5 | 6

Fazit

Seit ich das Inline-Assemblerkonzept kenne, habe ich mich immer wieder vor "purem" Assembler gedrückt. Bis jetzt jedes mal erfolgreich. Und die eingesparte Zeit kann man dann zB für das Schreiben solcher Tutorials verwenden... ;-)

Inline-Assembler spielt seine wahren Stärken bei Speicherzugriffen (Stichwort: Alignment) und Schleifen (Stichwort: Label) aus. Auch bei kleinen Aufgabenstellungen, für die ein "richtiges" Assemblerprogramm zu mühsam wäre, kann man mit Inline-Assembler Performance gewinnen (siehe asma).

Referenzen

High Performance Alpha Linux: Inline assembler sample code for gcc

Ein relativ langes Posting zum Thema High Performance Computing, in welchem ein umfangreiches Inline-Assemblerprogramm vorgestellt wird. Zeigt im wesentlichen, dass man mit Inline-Assembler nicht nur an Performance gewinnen sondern auch (drastisch) an Übersicht verlieren kann.


Linux-Alpha Archive: wh64 (slow)

Von der Codestruktur wird hier Alpha-Inlineassembler sehr überzeugend dargestellt. Meine Hauptwissensquelle für asma und asmb!


Using the GNU Compiler Collection (GCC): DEC Alpha Options

Hat mir den rechten Weg zu Compilerparametern gewiesen. Stichwort: gcc -mcpu=ev6


Viel Spaß mit Inline-Assembler // René C. Kiesler!
                     
1 | 2 | 3 | 4 | 5 | 6



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
  • Eleganter

    Posted on 2004-05-22 01:25:06 By rck[110]

    static inline long
    __attribute__ ((unused))
    count_population (volatile long val)
    {
    long ret;

    __asm__ __volatile__ (
    "ctpop %1,%0\n\t"
    : "=&r"(ret)
    : "r"(val));

    return ret;
    }

    So meinte ich das im Informatikforum. Wofür das attribute(unused) ist, weiß ich auch nicht genau, aber bei der glibc wird's immer so geschrieben, wird schon nicht so falsch sein.

    Und bei deinem ersten Beispiel würd ich das "not" weglassen und stattdessen bei den Eingangs-Constraints einfach ~a statt a schreiben - das gibt dem Compiler mehr Freiheit zu optimieren, wenn ihm danach ist.

    [Reply ]

RSSAll Articles
2008, 2007, 2006, 2005, 2004

What's Related

Documents

Übersetzerbau

Link Manager

Übersetzerbau
Programming

Article Manager

Übersetzerbau
Programming

FAQ

Übersetzerbau

Photo Albums

Programming

RSS News Feeds

Programming

Announcements

Programming

Web Pages

Programming

Latest Updates

AdministrativeTexts
updated by freddiemac1993, 2013-06-14
wiki

Re: adventures
created by brittdavis10, 2012-02-23 (1 rply, 3 views)
thread

Re: how to run phpwebsite...
created by alexander, 2011-08-25 (2 rpls, 3607 views)
thread

Re: Forum tags
created by HaroldFaragher, 2011-08-22 (3 rpls, 8488 views)
thread


Zu den KO2100 Foren