optimize dos stub size to save 2 bytes (discovered by qkumba)

This commit is contained in:
5684185+vsariola@users.noreply.github.com
2023-01-26 20:16:28 +02:00
committed by exoticorn
parent 2eb8f230ba
commit f502bf4e28
3 changed files with 13 additions and 16 deletions

View File

@@ -105,15 +105,14 @@ upkr_decode_bit:
dec dx dec dx
jns upkr_load_bit jns upkr_load_bit
movzx ax, byte [bx] ; u16 prob = upkr_probs[context_index] movzx ax, byte [bx] ; u16 prob = upkr_probs[context_index]
neg byte [bx]
push ax ; save prob, tmp = prob push ax ; save prob, tmp = prob
cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit) cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit)
pushf ; save bit flags pushf ; save bit flags
jc .bit ; (skip if bit) jc .bit ; (skip if bit)
neg al ; tmp = 256 - tmp; xchg [bx], al ; tmp = 256 - tmp;
.bit: .bit:
mov [bx], al ; upkr_probs[context_index] = tmp + (256 - tmp + 8) >> 4; shr byte [bx], 4 ; upkr_probs[context_index] = tmp + (256 - tmp + 8) >> 4;
neg byte [bx]
shr byte [bx], 4
adc [bx], al adc [bx], al
mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255); mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255);
mov dh, 0 mov dh, 0

View File

@@ -95,16 +95,15 @@ upkr_decode_bit:
inc dx inc dx
dec dx ; inc dx, dec dx is used to test the top (sign) bit of dx dec dx ; inc dx, dec dx is used to test the top (sign) bit of dx
jns upkr_load_bit jns upkr_load_bit
movzx ax, byte [bx] ; int prob = upkr_probs[context_index] movzx ax, byte [bx] ; u16 prob = upkr_probs[context_index]
push ax ; save prob neg byte [bx]
push ax ; save prob, tmp = prob
cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit) cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit)
pushf ; save bit flags pushf ; save bit flags
jc .bit ; (skip if bit) jc .bit ; (skip if bit)
neg al ; tmp = 256 - tmp; xchg [bx], al ; tmp = 256 - tmp;
.bit: .bit:
mov [bx], al ; tmp_new = tmp + (256 - tmp + 8) >> 4; shr byte [bx], 4 ; upkr_probs[context_index] = tmp + (256 - tmp + 8) >> 4;
neg byte [bx]
shr byte [bx], 4
adc [bx], al adc [bx], al
mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255); mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255);
mov dh, 0 mov dh, 0

View File

@@ -98,16 +98,15 @@ upkr_decode_bit:
inc dx inc dx
dec dx ; or whatever other test for the top bit there is dec dx ; or whatever other test for the top bit there is
jns upkr_load_bit jns upkr_load_bit
movzx ax, byte [bx] ; int prob = upkr_probs[context_index] movzx ax, byte [bx] ; u16 prob = upkr_probs[context_index]
push ax ; save prob neg byte [bx]
push ax ; save prob, tmp = prob
cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit) cmp dl, al ; int bit = (upkr_state & 255) < prob ? 1 : 0; (carry = bit)
pushf ; save bit flags pushf ; save bit flags
jc .bit ; (skip if bit) jc .bit ; (skip if bit)
neg al ; tmp = 256 - tmp; xchg [bx], al ; tmp = 256 - tmp;
.bit: .bit:
mov [bx], al ; tmp += (256 - tmp + 8) >> 4; shr byte [bx], 4 ; upkr_probs[context_index] = tmp + (256 - tmp + 8) >> 4;
neg byte [bx]
shr byte [bx],4
adc [bx], al ; upkr_probs[context_index] = tmp; adc [bx], al ; upkr_probs[context_index] = tmp;
mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255); mul dh ; upkr_state = tmp * (upkr_state >> 8) + (upkr_state & 255);
mov dh, 0 mov dh, 0