Duda condicional relativamente absoluta

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Responder
Avatar de Usuario
Haplo
Mensajes: 366
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Duda condicional relativamente absoluta

Mensaje por Haplo » 24 May 2016, 17:40

De vez en cuando le doy una vuelta a las rutinas para ver si le puedo arañar algunos ciclos a medida que voy aprendiendo trucos.
El caso es que hoy me ha surgido una duda que no acabo de verla bien resuelta en los sitios que he consultado. Se trata de la diferencia de velocidad entre JR cc,x y JP cc,xx. Tengo varias tablas de consulta de mnemónicos donde se indican que estas instrucciones consumen 12/7 y 10/1 ciclos respectivamente, es decir que JP cc,xx es más rápido tanto si la condición es cierta como si no... ¿esto es correcto?
Lo digo porque he leído en varios sitios que JR es más rápida cuando la condición no es cierta (7 t) :shock:

Código: Seleccionar todo

    LD E, H  ; H is the 2nd factor
    LD HL,0
    LD D, L  ; DE => H

    ;LD A, (NUM1) ;; Not needed, already done
LOOP:
    ;; RR A ; (Divide A by 2 - copying the 1's column bit into the carry flag.)
    RRA ; 1 byte, 4 T-states; RR A => 2 bytes, 8T-States and are equivalent!

    ; NOTE: JR is 3 T-States faster than JP when the condition is not met
    ; In this case, it's most likely numbers will be little ones (containing more 0s than 1s), so JP
    JP NC, JP1; (Jump over the add if we have to) ;
    ADD HL,DE ; 11 T-states

JP1:
    RET Z ; (Leave when we finish - A has gone to zero) ; 5 T-States if condition not met, 10 if met
    SLA E  ; 8 T-states
    ; RL D   ;; Multiply DE*2 ; Needless in 8 bit, only E is needed!
    JP LOOP ; 2 T-States faster

La diferencia sería más que notable...

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Duda condicional relativamente absoluta

Mensaje por antoniovillena » 24 May 2016, 18:24

JR y sus condicionales es más rápido (7 ciclos) cuano el salto no se toma. Pero la mayoría de las veces se ejecuta el salto tomado, por tanto la opción lenta, por lo que JP suele ser más rápido (10 ciclos frente a 12 de JR).

Avatar de Usuario
Haplo
Mensajes: 366
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Re: Duda condicional relativamente absoluta

Mensaje por Haplo » 24 May 2016, 18:33

Entonces JP condicional siempre son 10 t???? :shock: Porqué me aparece como 10/1?

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Duda condicional relativamente absoluta

Mensaje por antoniovillena » 24 May 2016, 18:42

Haplo escribió:Entonces JP condicional siempre son 10 t???? :shock: Porqué me aparece como 10/1?
Sí, son siempre 10 ciclos. Lo del 1 será una errata porque ninguna instrucción tarda 1 ciclo en completarse, el mínimo es 4

Avatar de Usuario
Haplo
Mensajes: 366
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Re: Duda condicional relativamente absoluta

Mensaje por Haplo » 24 May 2016, 19:34

Ya decía yo que no me cuadraban las cuentas cuando calculaba el tiempo de las rutinas...
Qué tonto leñe, no me había percatado de ese detalle del mínimo de 4 ciclos, ni que fuera un RISC :D .
Pues iré corrigiendo las erratas en el listado de mnemónicos que saqué hace tiempo, ahora no recuerdo bien dónde la encontré, pero que hice un copy/paste sí que estoy seguro.

Responder