Diff for /gforth/arch/mips/disasm.fs between versions 1.8 and 1.15

version 1.8, 2000/06/03 10:06:30 version 1.15, 2010/08/07 17:35:02
Line 1 Line 1
 \ disasm.fs     disassembler file (for MIPS R3000)  \ disasm.fs     disassembler file (for MIPS32)
 \  \
 \ Copyright (C) 1995-97 Martin Anton Ertl, Christian Pirker  \ Copyright (C) 2000,2007 Free Software Foundation, Inc.
 \  
 \ This file is part of RAFTS.  \ This file is part of Gforth.
 \  
 \       RAFTS is free software; you can redistribute it and/or  \ Gforth is free software; you can redistribute it and/or
 \       modify it under the terms of the GNU General Public License  \ modify it under the terms of the GNU General Public License
 \       as published by the Free Software Foundation; either version 2  \ as published by the Free Software Foundation, either version 3
 \       of the License, or (at your option) any later version.  \ of the License, or (at your option) any later version.
 \  
 \       This program is distributed in the hope that it will be useful,  \ This program is distributed in the hope that it will be useful,
 \       but WITHOUT ANY WARRANTY; without even the implied warranty of  \ but WITHOUT ANY WARRANTY; without even the implied warranty of
 \       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 \       GNU General Public License for more details.  \ GNU General Public License for more details.
 \  
 \       You should have received a copy of the GNU General Public License  \ You should have received a copy of the GNU General Public License
 \       along with this program; if not, write to the Free Software  \ along with this program. If not, see http://www.gnu.org/licenses/.
 \       Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
   
 \ this disassembler is based on data from the R4400 manual  \ this disassembler is based on data from the R4400 manual
 \ http://www.mips.com/Documentation/R4400_Uman_book_Ed2.pdf, in  \ http://www.mips.com/Documentation/R4400_Uman_book_Ed2.pdf, in
Line 24 Line 23
 \ it is limited to the R3000 (MIPS-I) architecture, though.  \ it is limited to the R3000 (MIPS-I) architecture, though.
   
 \ test this with  \ test this with
 \ gforth arch/mips/disasm.fs -e "here" arch/mips/testdisasm.fs -e "here over - disasm-dump bye" |sed 's/([^)]*) //'|diff -u - arch/mips/testasm.fs  \ gforth arch/mips/disasm.fs -e "here" arch/mips/testdisasm.fs -e "here over - disasm bye" |sed 's/([^)]*) //'|diff -u - arch/mips/testasm.fs
   
 get-current  get-current
 vocabulary disassembler  vocabulary disassembler
Line 80  does> ( u -- addr ) Line 79  does> ( u -- addr )
   
 $40 disasm-table opc-tab-entry     \ top-level decode table  $40 disasm-table opc-tab-entry     \ top-level decode table
 $40 disasm-table funct-tab-entry   \ special function table  $40 disasm-table funct-tab-entry   \ special function table
   $40 disasm-table funct-tab2-entry  \ special2 function table
 $20 disasm-table regimm-tab-entry  \ regim instructions rt table  $20 disasm-table regimm-tab-entry  \ regim instructions rt table
 $20 disasm-table copz-rs-tab-entry \ COPz instructions rs table  $20 disasm-table copz-rs-tab-entry \ COPz instructions rs table
 $20 disasm-table copz-rt-tab-entry \ COPz BC instructions rt table  $20 disasm-table copz-rt-tab-entry \ COPz BC instructions rt table
Line 94  dup set-current Line 94  dup set-current
     \G branch targets)      \G branch targets)
     dup disasm-op opc-tab-entry @ execute ;      dup disasm-op opc-tab-entry @ execute ;
   
 : disasm-dump ( addr u -- ) \ gforth  : disasm ( addr u -- ) \ gforth
     \G disassemble u aus starting at addr      \G disassemble u aus starting at addr
     bounds u+do      bounds u+do
         cr ." ( " i hex. ." ) " i i @ disasm-inst          cr ." ( " i hex. ." ) " i i ul@ disasm-inst
         1 cells +loop ;          4 +loop
       cr ;
   
   ' disasm IS discode
   
 definitions  definitions
   
Line 107  definitions Line 110  definitions
     dup disasm-funct funct-tab-entry @ execute ;      dup disasm-funct funct-tab-entry @ execute ;
 ' disasm-special 0 opc-tab-entry ! \ enter it for opcode special  ' disasm-special 0 opc-tab-entry ! \ enter it for opcode special
   
   : disasm-special2 ( addr w -- ) \ todo factor out!
       \ disassemble inst with opcode special2
       dup disasm-funct funct-tab2-entry @ execute ;
   ' disasm-special2 $1C opc-tab-entry ! \ enter it for opcode special
   
 : disasm-regimm ( addr w -- )  : disasm-regimm ( addr w -- )
     \ disassemble regimm inst      \ disassemble regimm inst
     dup disasm-rt regimm-tab-entry @ execute ;      dup disasm-rt regimm-tab-entry @ execute ;
Line 258  does> ( addr w -- ) Line 266  does> ( addr w -- )
 ' disasm-rd.         ' funct-tab-entry   define-format asm-special-rd  ' disasm-rd.         ' funct-tab-entry   define-format asm-special-rd
 ' disasm-rs,rt       ' funct-tab-entry   define-format asm-special-rs,rt  ' disasm-rs,rt       ' funct-tab-entry   define-format asm-special-rs,rt
 ' disasm-rd,rs,rt    ' funct-tab-entry   define-format asm-special-rd,rs,rt  ' disasm-rd,rs,rt    ' funct-tab-entry   define-format asm-special-rd,rs,rt
   ' disasm-rd,rs       ' funct-tab2-entry  define-format asm-special2-rd,rs
   ' disasm-rs,rt       ' funct-tab2-entry  define-format asm-special2-rs,rt
   ' disasm-rd,rs,rt    ' funct-tab2-entry  define-format asm-special2-rd,rs,rt
 ' disasm-I-rs,imm    ' regimm-tab-entry  define-format asm-regimm-rs,imm  ' disasm-I-rs,imm    ' regimm-tab-entry  define-format asm-regimm-rs,imm
 ' 2drop              ' cp0-tab-entry     define-format asm-copz0  ' 2drop              ' cp0-tab-entry     define-format asm-copz0
 ' disasm-rt,rd,z     ' copz-rs-tab-entry define-format asm-copz-rt,rd1  ' disasm-rt,rd,z     ' copz-rs-tab-entry define-format asm-copz-rt,rd1

Removed from v.1.8  
changed lines
  Added in v.1.15


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>