Zdar, no my taky musíme pracovat, na rozdíl od vás ve Velké modré :-)
Je to takto: ten typ __float128 je podporovaný z pohledu C (!!!) jen na některých platformách, ale patří sem i Intel, ARM i RISC-V (takže většina světa je s tím v pohodě, na druhou stranu to ovšem nepojede řekněme na M68k). Ovšem podpora v tomto kontextu znamená, že to můžeš použít ve zdrojácích. Interně se to bude počítat čistě v SW voláním subrutin (to bylo v tom assemblerovským výpisu). Pokud vím, tak jen na RISC-V je ten typ podporovaný nativně, tj. například __float128+__float128 se přeloží do jediné instrukce.
Ono taky se už pár let neprogramuje v assembleru. Takže proč prodražovat hardware. Mimochodem zrovna ARM už v počátcích řešil to, že kompilace C/C++ prokládala load operace s ostatními, protože trvaly 2 cykly, tak aby byly "za jeden cykl" tím, že je udělá o 1 cykl dopředu. Tedy už v počátcích ARMu by musel assembler programátor řešit věci specifické pro danou platformu (tehdy aby měl výkon). x86 je víc highlevel a nemusel a víc toho řešil sám uvnitř v mikrokódu.
Je to emulovano softwarove, mikrokod x86-64 toto aktualne neda ze dvou duvodu: za prve na to nejsou k dispozici/v dosahu 128 bit registry (rax atd. nejdou skladat po dvojicich, FPU ma 80 bitu, SSE... nejsou dotazene k FPU) a za druhe FPU aritmetika je 80bitova a jeji rozsireni na 128 by potrebovalo docela dost kremiku navic (predevsim gon. fce apod.) - mikrokodem rozsirena presnost mantisy je vzhledem k moznostem mikrokodu nerealna.
SW emulace napr. v gcc pouziva libquadmath knihovnu, kde funkce sleduji pattern:
1. Natahnuti operandu z pameti do dvojic 64-bit registru (treba rdx:rax)
2. Dekompozice znamenkoveho bitu, exponentu a mantisy v prac. registrech
3. Provedeni operace (treba u scitani komparace exponentu, shift mantisy, soucet, vypocet exponentu, normalizace
4. Repack znamenka, exponentu a mantisy do 128 bitu
5. Ulozeni do pameti
Treba takova sw emulace i jen scitani __addtf3(__float128, __float128) se vsemi pozadovanymi zaokrouhlenimi, NANy, +/- zero atd. spotrebuje nekolik set instrukci, takze muze byt az cca 100x pomalejsi nez double add v FPU.
Jeste horsi je to u goniometrickych funkci, kde je to postaveno na tabulkach a vypoctu Cebysevovych polynomu (a tady to dost brzdi docela dost soucinu 128bit * 128bit).
Ale existuji i ruzne "triky", např. takova odmocnina si prvni odhad vypocita v FPU v double a zbytek se dojede iterativne Newton-Raphsonem.