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

asmb Assemblercode

Der dazugeh�rige Assemblercode:

         .file 1 "optimize.6.c"
         .set noat
         .set noreorder
         .arch ev6
.text
         .align 5
         .globl mem0s
         .ent mem0s
mem0s:
         .frame $30,0,$26,0
$mem0s..ng:
         .prologue 0
         mov $31,$0
         mov $31,$2
         cmpule $17,8,$1
         bne $1,$L12
         .align 4
$L5:
         not $3, $3
         ctpop $3, $3
         addq $0, $3

         addq $2,8,$2
         addq $2,8,$1
         cmpult $1,$17,$1
         bne $1,$L5
         br $31,$L12
         .align 4
$L9:
         addq $16,$2,$1
         ldbu $3,0($1)
         not $3, $3
         and $3, 255, $3
         ctpop $3, $3
         addq $0, $3

         addq $2,1,$2
$L12:
         cmpult $2,$17,$1
         bne $1,$L9
         ret $31,($26),1
         .end mem0s
         .ident "GCC: (GNU) 2.95.2 19991024 (release)"

Ganz nebenbei hat uns GCC s�mtliches Label-Handling abgenommen, auch sind Speicherzugriffe fix-fertig ausgerichtet. Mit dieser Methode kann man sicher etliche graue Haare einsparen...

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