View Single Post
Old 30-01-2008, 09:56   #41
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
hai presente di cosa stiamo parlando?
i blocchi di assembly in mezzo al codice C sono cose che ormai non vengono più scritte nemmeno nei drivers!! (almeno per quanto riguarda Windows)
E come fai nei driver per Windows a effettuare una semplice memory barrier ad esempio? Chiami una funzione esterna?

Quote:
Per fortuna, sì, poi mettici anche che nel 50% dei casi le routines che ne contengono contengono solo quello (e quindi non resta un bel niente da "connettere" col codice C circostante)
mmm no. Un incremento atomico può essere ottenuto efficacemente solo tramite codice asm (a meno di funzioni esterne dedicate o costosi lock)
Quote:
e nel rimanente 50% sono dei blocchi talmente piccoli che la mancata ottimizzazione loro e delle due istruzioni circostanti a parer mio non è un grave problema.
Appunto perché sono in genere piccoli è importante dire al compilatore quali danni fanno e soprattutto quali non fanno. E possibilmente dire all'ottimizzatore quali gradi di libertà rimangono.
E proprio perché sono casi particolari non ci vedo niente di male a fare un pò di fatica in più per aiutare il compilatore.
Solo questo sto dicendo, non mi sembrava una affermazione stratosferica da metterci su una discussione...
Quote:
tutti quelli scervellamenti, imho, sono una soluzione eccessiva: una sintassi incomprensibile per un problema inesistente
Le soluzioni alternative quali sono? Il compilatore deve assumere che tutti i registri sono ormai invalidati? Il codice asm deve occuparsi di salvare e ripristinare tutti i registri che intende usare? Oppure si devono considerare invalidati tutti i registri che compaiono nel codice (come fa più o meno il Delphi)? Non so dimmi tu...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 30-01-2008 alle 10:00.
ilsensine è offline   Rispondi citando il messaggio o parte di esso