forked from KolibriOS/kolibrios
mtdbg fpu: 1)simplified code
2)two pass bcd to string converter 3)new output format git-svn-id: svn://kolibrios.org@4912 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
1fc27dcb6e
commit
324a77be90
@ -723,15 +723,21 @@ draw_register:
|
|||||||
draw_fpu_register_2:
|
draw_fpu_register_2:
|
||||||
|
|
||||||
.str_buf equ esp
|
.str_buf equ esp
|
||||||
.bcd_man equ .str_buf+32
|
.cvt_buf equ .str_buf+32
|
||||||
.bcd_exp equ .bcd_man+12
|
.bcd_man equ .cvt_buf+16
|
||||||
.exp equ .bcd_exp+12
|
.bcd_exp equ .bcd_man+10
|
||||||
|
.exp equ .bcd_exp+10
|
||||||
.tmp equ .exp+4
|
.tmp equ .exp+4
|
||||||
|
.lcl_end equ .tmp+4
|
||||||
|
|
||||||
sub esp, 32+12+12+4+4
|
sub esp, 32+16+10+10+4+4
|
||||||
|
|
||||||
mov eax, 0x20202020
|
|
||||||
mov edi, .str_buf
|
mov edi, .str_buf
|
||||||
|
shl ebp, 16
|
||||||
|
lea eax, ['ST0:'+ebp]
|
||||||
|
stosd
|
||||||
|
mov eax, 0x20202020
|
||||||
|
stosd
|
||||||
stosd
|
stosd
|
||||||
stosd
|
stosd
|
||||||
stosd
|
stosd
|
||||||
@ -740,43 +746,40 @@ draw_fpu_register_2:
|
|||||||
;int3
|
;int3
|
||||||
;nop
|
;nop
|
||||||
|
|
||||||
mov edx, ebp
|
|
||||||
shl edx, 4
|
|
||||||
|
|
||||||
movzx eax, word [_fsw]
|
movzx eax, word [_fsw]
|
||||||
shr eax, 11
|
shr eax, 11
|
||||||
add eax, ebp
|
add eax, ebp
|
||||||
|
shr ebp, 12
|
||||||
and eax, 7
|
and eax, 7
|
||||||
|
|
||||||
bt dword [_ftw], eax
|
bt dword [_ftw], eax
|
||||||
jc .A6M
|
jc .A6M
|
||||||
|
|
||||||
mov dword [.str_buf],' emp'
|
mov dword [.str_buf+8],' emp'
|
||||||
mov word [.str_buf+4],'ty'
|
mov word [.str_buf+8+4],'ty'
|
||||||
jmp .display
|
jmp .display
|
||||||
|
|
||||||
mov cx, [_st0+edx+8]
|
mov cx, [_st0+ebp+8]
|
||||||
and cx, 0x7FFF ;clear sign flag
|
and cx, 0x7FFF ;clear sign flag
|
||||||
jz .A6M
|
jz .A6M
|
||||||
|
|
||||||
cmp cx, 0x7FFF
|
cmp cx, 0x7FFF
|
||||||
jne .decode
|
jne .decode
|
||||||
|
|
||||||
mov dword [.str_buf], ' inv'
|
mov dword [.str_buf+6], ' inv'
|
||||||
mov dword [.str_buf+4], 'alid'
|
mov dword [.str_buf+6+4], 'alid'
|
||||||
jmp .display
|
jmp .display
|
||||||
|
|
||||||
.A6M:
|
.A6M:
|
||||||
|
|
||||||
mov eax, dword [_st0+edx]
|
mov eax, dword [_st0+ebp]
|
||||||
or eax, dword [_st0+edx+4]
|
or eax, dword [_st0+ebp+4]
|
||||||
jnz .decode
|
jnz .decode
|
||||||
|
|
||||||
mov dword [.str_buf], ' 0.0'
|
mov dword [.str_buf+10], ' 0.0'
|
||||||
jmp .display
|
jmp .display
|
||||||
|
|
||||||
.decode:
|
.decode:
|
||||||
fld tword [_st0+edx]
|
fld tword [_st0+ebp]
|
||||||
fabs
|
fabs
|
||||||
fld st0
|
fld st0
|
||||||
fldlg2
|
fldlg2
|
||||||
@ -814,133 +817,93 @@ draw_fpu_register_2:
|
|||||||
inc dword [.exp]
|
inc dword [.exp]
|
||||||
fild dword [.exp]
|
fild dword [.exp]
|
||||||
fld st0
|
fld st0
|
||||||
fbstp tword [.bcd_exp]
|
fbstp tword [.bcd_exp]
|
||||||
|
|
||||||
fldl2t
|
fldl2t
|
||||||
fmulp
|
fmulp
|
||||||
fld st0
|
fld st0
|
||||||
frndint
|
frndint
|
||||||
fxch
|
fxch
|
||||||
fsub st,st1
|
fsub st,st1
|
||||||
|
|
||||||
f2xm1
|
f2xm1
|
||||||
fld1
|
fld1
|
||||||
faddp
|
faddp
|
||||||
fscale
|
fscale
|
||||||
fstp st1
|
fstp st1
|
||||||
fdivp
|
fdivp
|
||||||
.done:
|
.done:
|
||||||
fimul dword [n_digits]
|
fimul dword [n_digits]
|
||||||
fbstp tword [.bcd_man]
|
fbstp tword [.bcd_man]
|
||||||
|
|
||||||
lea esi, [.bcd_man-1]
|
lea edi, [.cvt_buf]
|
||||||
mov edi, .str_buf
|
mov edx, dword [.bcd_man]
|
||||||
|
mov ecx, 8
|
||||||
mov ecx, 9
|
|
||||||
mov eax, 0x10000
|
|
||||||
|
|
||||||
mov al, [esi+ecx+1]
|
|
||||||
cmp al, 0x80 ; check for sign
|
|
||||||
jne .mantis_2_str
|
|
||||||
mov al, '-'
|
|
||||||
stosb
|
|
||||||
|
|
||||||
.mantis_2_str:
|
|
||||||
|
|
||||||
mov al, [esi+ecx]
|
|
||||||
test al, al
|
|
||||||
jnz @f
|
|
||||||
|
|
||||||
bt eax, 16
|
|
||||||
jc .skip_lb
|
|
||||||
@@:
|
@@:
|
||||||
mov ah, al
|
xor eax, eax
|
||||||
shr al, 4
|
shld eax, edx, 4
|
||||||
jnz .write_h
|
|
||||||
|
|
||||||
bt eax, 16
|
|
||||||
jc .skip_hb
|
|
||||||
|
|
||||||
.write_h:
|
|
||||||
add al, 0x30
|
|
||||||
stosb
|
stosb
|
||||||
btr eax, 16
|
shl edx, 4
|
||||||
jnc .skip_hb
|
loop @B
|
||||||
mov al, '.'
|
|
||||||
|
lea esi, [.cvt_buf+7]
|
||||||
|
lea edi, [.str_buf+13]
|
||||||
|
mov ecx, 7
|
||||||
|
mov ah, 0x30
|
||||||
|
std
|
||||||
|
.skip_z:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jnz .body
|
||||||
|
loop .skip_z
|
||||||
|
.body:
|
||||||
|
add al, ah
|
||||||
stosb
|
stosb
|
||||||
|
lodsb
|
||||||
.skip_hb:
|
jcxz .point
|
||||||
mov al, ah
|
loop .body
|
||||||
and al, 0x0F
|
.point:
|
||||||
jnz .write_lb
|
dec edi
|
||||||
|
add al, ah
|
||||||
bt eax, 16
|
mov ah, '.'
|
||||||
jc .skip_lb
|
|
||||||
|
|
||||||
.write_lb:
|
|
||||||
add al,0x30
|
|
||||||
stosb
|
|
||||||
btr eax, 16
|
|
||||||
jnc .skip_lb
|
|
||||||
mov al, '.'
|
|
||||||
stosb
|
|
||||||
|
|
||||||
.skip_lb:
|
|
||||||
loop .mantis_2_str
|
|
||||||
|
|
||||||
mov eax, [.exp]
|
|
||||||
test eax, eax
|
|
||||||
jz .display
|
|
||||||
|
|
||||||
mov ax, ' e'
|
|
||||||
stosw
|
stosw
|
||||||
|
|
||||||
lea esi, [.bcd_exp-1]
|
bt word [_st0+ebp+8], 15
|
||||||
mov ecx, 9
|
jnc .m_sign
|
||||||
mov eax,0x10000
|
|
||||||
mov al, [esi+ecx+1]
|
|
||||||
cmp al, 0x80
|
|
||||||
jne .exp_2_str
|
|
||||||
mov al, '-'
|
mov al, '-'
|
||||||
|
mov [edi+1], al
|
||||||
|
|
||||||
|
.m_sign:
|
||||||
|
cld
|
||||||
|
|
||||||
|
mov dx, word [.bcd_exp]
|
||||||
|
test dx, dx
|
||||||
|
jz .display
|
||||||
|
|
||||||
|
lea edi, [.str_buf+15]
|
||||||
|
mov ax, 'E '
|
||||||
|
cmp byte [.bcd_exp+9], 0x80
|
||||||
|
jne .w_e_sign
|
||||||
|
mov ax, 'E-'
|
||||||
|
|
||||||
|
.w_e_sign:
|
||||||
|
stosw
|
||||||
|
|
||||||
|
mov ecx, 4
|
||||||
|
.skip_lz:
|
||||||
|
xor eax, eax
|
||||||
|
shld ax,dx,4
|
||||||
|
shl dx, 4
|
||||||
|
test al, al
|
||||||
|
jnz .w_exp
|
||||||
|
loop .skip_lz
|
||||||
|
.w_exp:
|
||||||
|
add al, 0x30
|
||||||
stosb
|
stosb
|
||||||
|
xor eax, eax
|
||||||
.exp_2_str:
|
shld ax, dx, 4
|
||||||
mov al, [esi+ecx]
|
shl dx,4
|
||||||
test al, al
|
loop .w_exp
|
||||||
jnz @f
|
|
||||||
|
|
||||||
bt eax, 16
|
|
||||||
jc .skip_lb2
|
|
||||||
@@:
|
|
||||||
mov ah, al
|
|
||||||
shr al, 4
|
|
||||||
jnz .write_h2
|
|
||||||
|
|
||||||
bt eax, 16
|
|
||||||
jc .skip_hb2
|
|
||||||
|
|
||||||
.write_h2:
|
|
||||||
add al, 0x30
|
|
||||||
stosb
|
|
||||||
btr eax, 16
|
|
||||||
|
|
||||||
.skip_hb2:
|
|
||||||
|
|
||||||
mov al, ah
|
|
||||||
and al, 0x0F
|
|
||||||
jnz .write_lb2
|
|
||||||
|
|
||||||
bt eax, 16
|
|
||||||
jc .skip_lb2
|
|
||||||
|
|
||||||
.write_lb2:
|
|
||||||
|
|
||||||
add al, 0x30
|
|
||||||
stosb
|
|
||||||
btr eax, 16
|
|
||||||
|
|
||||||
.skip_lb2:
|
|
||||||
loop .exp_2_str
|
|
||||||
|
|
||||||
.display:
|
.display:
|
||||||
|
|
||||||
@ -952,16 +915,16 @@ draw_fpu_register_2:
|
|||||||
|
|
||||||
mov ecx, (COLOR_TXT_NORMAL or 0x40000000)
|
mov ecx, (COLOR_TXT_NORMAL or 0x40000000)
|
||||||
|
|
||||||
mov eax, dword [_st0+edx]
|
mov eax, dword [_st0+ebp]
|
||||||
cmp eax, dword [_st0+(oldcontext-context)+edx]
|
cmp eax, dword [_st0+(oldcontext-context)+ebp]
|
||||||
jne .scol
|
jne .scol
|
||||||
|
|
||||||
mov eax, dword [_st0+edx+4]
|
mov eax, dword [_st0+ebp+4]
|
||||||
cmp eax, dword [_st0+(oldcontext-context)+edx+4]
|
cmp eax, dword [_st0+(oldcontext-context)+ebp+4]
|
||||||
jne .scol
|
jne .scol
|
||||||
|
|
||||||
mov ax, word [_st0+edx+8]
|
mov ax, word [_st0+ebp+8]
|
||||||
cmp ax, word [_st0+(oldcontext-context)+edx+8]
|
cmp ax, word [_st0+(oldcontext-context)+ebp+8]
|
||||||
je .do_label
|
je .do_label
|
||||||
|
|
||||||
.scol:
|
.scol:
|
||||||
@ -971,18 +934,13 @@ draw_fpu_register_2:
|
|||||||
; draw a text string in the window
|
; draw a text string in the window
|
||||||
|
|
||||||
mov eax, 4
|
mov eax, 4
|
||||||
mov esi, eax
|
mov esi, 21
|
||||||
lea edx, [fpu_strs+ebp*4]
|
mov edx, .str_buf
|
||||||
mov edi, COLOR_BG_NORMAL
|
mov edi, COLOR_BG_NORMAL
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
mov esi, 16
|
shr ebp, 4
|
||||||
mov edx, .str_buf
|
add esp, 32+16+10+10+4+4
|
||||||
add ebx, 0x180000
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
sub ebx, 0x180000
|
|
||||||
add esp, 32+12+12+4+4
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@ -2304,16 +2304,6 @@ regs_strs:
|
|||||||
db 'EIP='
|
db 'EIP='
|
||||||
db 'EFLAGS='
|
db 'EFLAGS='
|
||||||
|
|
||||||
fpu_strs:
|
|
||||||
db 'ST0='
|
|
||||||
db 'ST1='
|
|
||||||
db 'ST2='
|
|
||||||
db 'ST3='
|
|
||||||
db 'ST4='
|
|
||||||
db 'ST5='
|
|
||||||
db 'ST6='
|
|
||||||
db 'ST7='
|
|
||||||
|
|
||||||
sse_strs:
|
sse_strs:
|
||||||
db '-XMM0-'
|
db '-XMM0-'
|
||||||
db '-XMM1-'
|
db '-XMM1-'
|
||||||
@ -2334,7 +2324,7 @@ avx_strs:
|
|||||||
db '-YMM7-'
|
db '-YMM7-'
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
n_digits dd 100000000
|
n_digits dd 10000000
|
||||||
debuggee_pid dd 0
|
debuggee_pid dd 0
|
||||||
bSuspended db 0
|
bSuspended db 0
|
||||||
bAfterGo db 0
|
bAfterGo db 0
|
||||||
|
Loading…
Reference in New Issue
Block a user