10Fermer12
Kevin KoflerLe 20/02/2008 à 16:44
Ce code est parfaitement valide, d'ailleurs dans la TIGCCLIB actuelle, il y a ça:
#define OSContrastAddress ({unsigned char* __addr; asm volatile ("moveq #4,%%d0; trap #9; move.l %%a0,%0" : "=a"(__addr):: "d0","a0"); __addr; })
C'est d'ailleurs encore plus strict, ça présuppose que seuls %d0 et %a0 sont détruits, ton code permet à l'OS de détruire aussi %d1, %d2 et %a1.

Il y a aussi kbd_queue qui présuppose depuis longtemps que le trap #9 ne détruit pas n'importe quels registres.

!call PpHd
--- Call : PpHd appelé(e) sur ce topic ...
PpHd, je suis désolé, mais ton "workaround pour Nebulus" est en fait le comportement correct, le trap #9 n'est pas censé détruire autre chose que %d0 et %a0.