__int128 mit gcc 3.3.3 auf x86_64-Plattform benutzen



  • Auf x86_64 ist der 128-Bit-integer laut http://www.x86-64.org/documentation/abi.pdf (unsigned) __int128. Wenn ich diesen aber verwende, gibt der gcc 3.3.3 eine Fehlermeldung aus. Muss ich also noch eine Headerdatei einbinden oder unterstützt der gcc 3.3.3 den Datentyp noch nicht? Bei mir läuft Gentoo 2004.2 für AMD64 und mit objdump sehe ich, dass der gcc auch wirklich AMD64-Code erzeugt (64-Bit-Register). Auch unsigned long ist korrekterweise 64 Bit lang.



  • ich rate jetzt einfach mal. also bei mir ist ein "unsigned long" 32bit lang. ist ja schliesslich auch ein 32bit system. wenn ich einen 64bit typ haben will dann schreib ich im gcc "(unsigned) long long". vielleicht ist der "long long" auf einem 64bit system 128bit lang...



  • also ich hab zwar (leider) nur ein 32Bit System und auch kein Header wo irgend wie ein __int128 oder ein int128 deklariert ist.

    Probier mal folgendes aus

    > find /usr/include /usr/local/include -exec grep -Hn int128 \{} \;
    

    das sollte nach int128 in allen Header Dateien suchen (wobei /usr/local/include unwahrscheinlich ist :))

    Ansonsten probier mal long long aus, auch wenn ich dachte, dass sei immer 64Bit.

    In der ABI Doku steht ja auch "Optional" bei __int128. Schau auch mal in die GCC Doku, was da zu AMD64 steht

    http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/



  • kingruedi schrieb:

    Ansonsten probier mal long long aus, auch wenn ich dachte, dass sei immer 64Bit.

    Nein, (unsigned) long long ist 64-Bit. Siehe http://gcc.gnu.org/ml/gcc/2004-03/msg01235.html.

    http://gcc.gnu.org/ml/gcc/2004-03/msg01251.html schrieb:

    Best current practice appears to be to provide an "extended integral
    type" __int128. This doesn't have the problems of 'long long' because
    it's not a *basic* integral type (in particular, it cannot be used for
    size_t).

    http://gcc.gnu.org/ml/gcc/2000-09/msg00416.html schrieb:

    When HOST_BITS_PER_WIDE_INT >= 64, gcc has some support for 128-bit
    integer types (`int __attribute__((__mode__(__TI__)))' and `unsigned int
    __attribute__((__mode__(__TI__)))').

    At present, using __attribute__((__mode__(__TI__))) or
    __int128_t/__uint128_t depends on knowing the compiler and target
    architecture, there is no architecture-independent way I know of to
    identify that these types are usable.

    Ich probier mal das:

    typedef unsigned __uint128_t __attribute__ (( __mode__ (__TI__)));
    

    Wo ist in der Dokumentation __mode__ erklärt?

    <edit=kingruedi>hab mal die Zitate korrigiert, da es irgend wie ein Problem mit den Tags gibt, wenn man die Quelle nicht mit "" einschließt</edit>



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Andere Compiler verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Es geht jetzt mit dem internen Datentyp __uint128_t.


Log in to reply