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;?