From: Alex M. <ale...@us...> - 2007-05-02 05:54:04
|
Update of /cvsroot/win32forth/win32forth-stc/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv27231 Modified Files: dis486.f Log Message: arm: further minor optimisations to disassembler Index: dis486.f =================================================================== RCS file: /cvsroot/win32forth/win32forth-stc/src/dis486.f,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** dis486.f 11 Apr 2007 20:20:28 -0000 1.17 --- dis486.f 2 May 2007 05:53:57 -0000 1.18 *************** *** 76,80 **** 0 value dis.16bit \ start in 32 bit mode 0 value dis.base-addr \ no offset by default ! 0 value dis.size \ size of immediate 0 value dis.data16 \ 16 bit data 0 value dis.addr16 \ 16 bit address --- 76,80 ---- 0 value dis.16bit \ start in 32 bit mode 0 value dis.base-addr \ no offset by default ! 0 value dis.size \ size of data in opcode 0 value dis.data16 \ 16 bit data 0 value dis.addr16 \ 16 bit address *************** *** 124,134 **** : .far ." far " ; : .al, ." al, " ; : .ax, ." ax, " ; : .eax, ." eax, " ; : .dx ." dx" ; ! ! : .# ( -- ) ." # " ; ! : ., ( -- ) ." , " ; : ??? ( n1 -- ) .sop" ???" drop ; --- 124,135 ---- : .far ." far " ; + : .# ( -- ) ." # " ; + : ., ( -- ) ." , " ; + : .al, ." al, " ; : .ax, ." ax, " ; : .eax, ." eax, " ; : .dx ." dx" ; ! : .,cl ." , cl" ; : ??? ( n1 -- ) .sop" ???" drop ; *************** *** 152,155 **** --- 153,157 ---- : bits3-5 ( n -- n' ) 3 rshift bits0-2 ; inline \ isolate bits 3 thru 5 : bits3-4 ( n -- n' ) 3 rshift bits0-1 ; inline \ isolate bits 3 thru 4 + : bits4-5 ( n -- n' ) 4 rshift bits0-1 ; inline \ isolate bits 4 thru 5 : bit3 ( n -- f ) %1000 and %1000 = ; : bit2 ( n -- f ) %0100 and %0100 = ; *************** *** 252,257 **** : r,r/m ( adr -- adr' ) ! count dup bits3-5 ( op/reg->reg/m ) ! .reg ., mod-r/m ; : r/m,r ( adr -- adr' ) --- 254,258 ---- : r,r/m ( adr -- adr' ) ! count dup bits3-5 .reg ., mod-r/m ; ( op/reg->reg/m ) : r/m,r ( adr -- adr' ) *************** *** 330,338 **** pre rep "repz " pre lok "lock" ! pre d16a "d16:" ! pre a16a "a16:" ! : d16 ( adr code -- adr' ) d16a true to dis.data16 ; ! : a16 ( adr code -- adr' ) a16a true to dis.addr16 ; : aam ( adr code -- adr' ) .sop" aam" drop count drop ; --- 331,339 ---- pre rep "repz " pre lok "lock" ! \ pre d16a "d16:" ! \ pre a16a "a16:" ! : d16 ( adr code -- adr' ) drop true to dis.prefix-op true to dis.data16 ; ! : a16 ( adr code -- adr' ) drop true to dis.prefix-op true to dis.addr16 ; : aam ( adr code -- adr' ) .sop" aam" drop count drop ; *************** *** 416,419 **** --- 417,423 ---- \ -------------------- Move -------------------- + : .mov ( addr op -- addr' n m ) + .sop-mov drop count dup ; + : mov ( addr op -- addr' ) .sop-mov r/m ; : mri ( addr op -- addr' ) *************** *** 425,429 **** : mvi ( adr op -- adr' ) ( mov mem, imm ) .sop-mov drop count mod-r/m ., ! dis.size IF .imm16/32 ELSE .imm8 --- 429,433 ---- : mvi ( adr op -- adr' ) ( mov mem, imm ) .sop-mov drop count mod-r/m ., ! dis.size \ \\\\ IF .imm16/32 ELSE .imm8 *************** *** 433,440 **** : mrs ( addr op -- addr' ) dis.data16 ! IF .sop-mov drop ! 1 to dis.size ! count dup mod-r/m ., ! .sreg ELSE ??? THEN ; --- 437,441 ---- : mrs ( addr op -- addr' ) dis.data16 ! IF .mov r/m16/32 ., .sreg ELSE ??? THEN ; *************** *** 442,458 **** : msr ( addr op -- addr' ) dis.data16 ! IF .sop-mov drop ! 1 to dis.size ! count dup .sreg ., ! mod-r/m ELSE ??? THEN ; ! : mrc ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .creg ; ! : mcr ( addr op -- addr' ) .sop-mov drop count dup .creg ., .reg32 ; ! : mrd ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .dreg ; ! : mdr ( addr op -- addr' ) .sop-mov drop count dup .dreg ., .reg32 ; ! : mrt ( addr op -- addr' ) .sop-mov drop count dup .reg32 ., .treg ; \ obsolete ! : mtr ( addr op -- addr' ) .sop-mov drop count dup .treg ., .reg32 ; \ obsolete : mv1 ( addr op -- addr' ) --- 443,456 ---- : msr ( addr op -- addr' ) dis.data16 ! IF .mov .sreg ., r/m16/32 ELSE ??? THEN ; ! : mrc ( addr op -- addr' ) .mov .reg32 ., .creg ; ! : mcr ( addr op -- addr' ) .mov .creg ., .reg32 ; ! : mrd ( addr op -- addr' ) .mov .reg32 ., .dreg ; ! : mdr ( addr op -- addr' ) .mov .dreg ., .reg32 ; ! : mrt ( addr op -- addr' ) .mov .reg32 ., .treg ; \ obsolete ! : mtr ( addr op -- addr' ) .mov .treg ., .reg32 ; \ obsolete : mv1 ( addr op -- addr' ) *************** *** 481,488 **** : mli ( addr op -- addr' ) 1 to dis.size ! .sop" imul" 0x69 = ! IF r,r/m .imm16/32 ! ELSE r,r/m .imm8 ! THEN ; \ -------------------- Jumps and Calls -------------------- --- 479,483 ---- : mli ( addr op -- addr' ) 1 to dis.size ! .sop" imul" swap r,r/m ., bit1 if .imm8 else .imm16/32 then ; \ -------------------- Jumps and Calls -------------------- *************** *** 766,773 **** then ; ! : .btx(XXXN-NXXX) ( n -- ) bits3-4 z" bt btsbtrbtc" 3 .ss ; : gp8 ( addr op -- addr' ) ! drop count dup .btx(XXXN-NXXX) r/m16/32 .imm8 ; --- 761,768 ---- then ; ! : .btx ( n -- ) bits3-4 z" bt btsbtrbtc" 3 .ss ; : gp8 ( addr op -- addr' ) ! drop count dup .btx r/m16/32 .imm8 ; *************** *** 792,799 **** : sli ( addr op -- addr' ) sld .imm8 ; : sri ( addr op -- addr' ) srd .imm8 ; ! : slc ( addr op -- addr' ) sld ." , cl" ; ! : src ( addr op -- addr' ) srd ." , cl" ; ! : btx ( addr op -- addr' ) .btx(XXXN-NXXX) r/m,r ; : cxc ( addr op -- addr' ) .sop" cmpxchg" bit0 to dis.size r/m,r ; : xad ( addr op -- addr' ) .sop" xadd" bit0 to dis.size r/m,r ; --- 787,794 ---- : sli ( addr op -- addr' ) sld .imm8 ; : sri ( addr op -- addr' ) srd .imm8 ; ! : slc ( addr op -- addr' ) sld .,cl ; ! : src ( addr op -- addr' ) srd .,cl ; ! : btx ( addr op -- addr' ) .btx r/m,r ; : cxc ( addr op -- addr' ) .sop" cmpxchg" bit0 to dis.size r/m,r ; : xad ( addr op -- addr' ) .sop" xadd" bit0 to dis.size r/m,r ; *************** *** 864,873 **** : set ( adr op -- ) ! oper-col ." set" .cond opnd-col ! count r/m8 ; : cmv ( adr op -- ) ! oper-col ." cmov" .cond opnd-col ! r,r/m ; \ --------------------- MMX Operations ----------------- --- 859,868 ---- : set ( adr op -- ) ! oper-col ." set" .cond opnd-col count r/m8 ; ! : cmv ( adr op -- ) ! oper-col ." cmov" .cond opnd-col r,r/m ; ! \ --------------------- MMX Operations ----------------- *************** *** 879,883 **** : uph ( adr op -- adr' ) bits0-1 z" punpckhbwpunpckhwdpunpckhdq" 9 .ss r,r/m ; ! : .psx(XXNN-XXXX) ( op -- ) 0x30 and case --- 874,878 ---- : uph ( adr op -- adr' ) bits0-1 z" punpckhbwpunpckhwdpunpckhdq" 9 .ss r,r/m ; ! : .psx ( op -- ) 0x30 and case *************** *** 888,896 **** endcase ; ! : shx ( adr op -- adr' ) dup .psx(XXNN-XXXX) mmx-size r,r/m ; : gpa ( adr op -- adr' ) \ xx00-xxxx -> ??? ! >r count dup .psx(XXNN-XXXX) r> mmx-size .regm ., .imm8 ; : mpd ( adr op -- adr' ) --- 883,891 ---- endcase ; ! : shx ( adr op -- adr' ) dup .psx mmx-size r,r/m ; : gpa ( adr op -- adr' ) \ xx00-xxxx -> ??? ! >r count dup .psx r> mmx-size .regm ., .imm8 ; : mpd ( adr op -- adr' ) *************** *** 939,943 **** : ops 0x10 0 do ' , loop ; ! create op2-table2 \ 0 1 2 3 4 5 6 7 8 9 A B C D E F --- 934,938 ---- : ops 0x10 0 do ' , loop ; ! create op2-table \ 0 1 2 3 4 5 6 7 8 9 A B C D E F *************** *** 968,972 **** drop count dup dup 0x70 and 0x50 0x80 within to dis.mmx-reg? ! cells op2-table2 + perform 0 to dis.mmx-reg? ; --- 963,967 ---- drop count dup dup 0x70 and 0x50 0x80 within to dis.mmx-reg? ! cells op2-table + perform 0 to dis.mmx-reg? ; |