Wo stehen denn alle Funktionen/Schlüsselwörter etc. die WinAVR per default kennt ?

OP #1335455
Lesenswert?

Hi,

in einem anderen Thread habe ich einen Hinweis auf "__builtin_ctz (x);" 
gefunden. Ich hätte das schon öfters brauchen können ...

Wo finde ich denn solche Sachen in der Doku ? Ich kenne zwar die 
libc-Doku aber da stehen ja nur die libc-Sachen drin ...

Wo gibts eine Liste/ÜBersicht o.ä. ???

Gruß

Andreas
Persönliche Seite #1335496
Lesenswert?

Mark Brandis schrieb:

> Ob man diese Sachen unbedingt verwenden sollte, ist die andere Frage -
> es ist eben kein Standard-C.

Ja und? Man kann doch trotzdem von einer effizienten Implementierung 
profitieren:
1
#if defined (__GNUC__) && !defined (__STRICT_ANSI__)
2
#define ctz(x) __builtin_ctz(x)
3
#else
4
static inline int ctz (int x)
5
{
6
   // ...
7
}
8
#endif
#1335510
Lesenswert?

Wenn Effizienz so aussieht:

>Built-in Function: int __builtin_ctz (unsigned int x)
>
>Returns the number of trailing 0-bits in x, starting at the least
>significant bit position. If x is 0, the result is undefined.

dann programmier ich's doch lieber gleich selbst. Ist einmal Arbeit und 
kann danach beliebig oft wiederverwendet werden.
Gast #1335519
Lesenswert?

>Wenn Effizienz so aussieht:

>>Built-in Function: int __builtin_ctz (unsigned int x)
>>
>>Returns the number of trailing 0-bits in x, starting at the least
>>significant bit position. If x is 0, the result is undefined.

>dann programmier ich's doch lieber gleich selbst. Ist einmal Arbeit und
>kann danach beliebig oft wiederverwendet werden.

Woraus erkennst Du da, das es ineffizient ist? Oder was soll "Wenn 
Effizienz so aussieht" heissen?
Persönliche Seite #1335543
Lesenswert?

Johann L. schrieb:
> Mark Brandis schrieb:
>
>> Ob man diese Sachen unbedingt verwenden sollte, ist die andere Frage -
>> es ist eben kein Standard-C.
>
> Ja und? Man kann doch trotzdem von einer effizienten Implementierung
> profitieren:
>
1
> #if defined (__GNUC__) && !defined (__STRICT_ANSI__)
2
> #define ctz(x) __builtin_ctz(x)
3
> #else
4
> static inline int ctz (int x)
5
> {
6
>    // ...
7
> }
8
> #endif
9
>

Jep, genau solche Wrapper verwende ich auch sehr gerne, wenn es darum 
geht Code, der nicht C-Standard kompatibel ist kompatibel zu machen.

Wenn man portiert, muss man sich halt darum kümmern. Statt der static 
inline funktion könnte man auch einfach ein #error Not compiled with GCC 
nehmen ;) ;) (Höhö!)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren