66Fermer68
ThibautLe 06/05/2008 à 17:51
Godzil : C'est le code de ton émulateur ?

if (config->memory_stack_read != NULL) 
      cpu->memory_stack_read = config->memory_stack_read; 
else 
      cpu->memory_stack_read = config->memory_read; 
Selon la valeur de config->memory_stack_read, le processeur effectue :
• NULL : un test, puis un saut, puis une affectation
•!NULL : un test, puis une affectation, puis un saut
Les deux cas ont un temps de traitement visiblement identique.

Si on écrit ça :
cpu->memory_stack_read = config->memory_stack_read;
if (cpu->memory_stack_read == NULL)
      cpu->memory_stack_read = config->memory_read;
Selon la valeur de config->memory_stack_read, le processeur effectue :
•!NULL : une affectation, puis un test, puis un saut
• NULL : une affectation, puis un test, puis une affectation
Le premier cas est visiblement aussi rapide à traiter que dans l'écriture de départ.
Le second cas est peut-être plus rapide que le premier sur un 68000 ? (affectation plus rapide qu'un saut)

Sur d'autres processeurs, qui disposent d'un op-code pour réaliser l'inversion logique (c'est à dire qui effectuent !variable en 1 cycle machine), peut-être que cette solution serait encore plus rapide :
cpu->memory_stack_read= (config->memory_read & (!config->memory_stack_read)) | config->memory_stack_read;?