Annotation of qemu/tci-dis.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Tiny Code Interpreter for QEMU - disassembler
                      3:  *
                      4:  * Copyright (c) 2011 Stefan Weil
                      5:  *
                      6:  * This program is free software: you can redistribute it and/or modify
                      7:  * it under the terms of the GNU General Public License as published by
                      8:  * the Free Software Foundation, either version 2 of the License, or
                      9:  * (at your option) any later version.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     14:  * GNU General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     18:  */
                     19: 
                     20: #include "dis-asm.h"
                     21: #include "tcg/tcg.h"
                     22: 
                     23: /* Disassemble TCI bytecode. */
                     24: int print_insn_tci(bfd_vma addr, disassemble_info *info)
                     25: {
                     26:     int length;
                     27:     uint8_t byte;
                     28:     int status;
                     29:     TCGOpcode op;
                     30: 
                     31:     status = info->read_memory_func(addr, &byte, 1, info);
                     32:     if (status != 0) {
                     33:         info->memory_error_func(status, addr, info);
                     34:         return -1;
                     35:     }
                     36:     op = byte;
                     37: 
                     38:     addr++;
                     39:     status = info->read_memory_func(addr, &byte, 1, info);
                     40:     if (status != 0) {
                     41:         info->memory_error_func(status, addr, info);
                     42:         return -1;
                     43:     }
                     44:     length = byte;
                     45: 
                     46:     if (op >= tcg_op_defs_max) {
                     47:         info->fprintf_func(info->stream, "illegal opcode %d", op);
                     48:     } else {
                     49:         const TCGOpDef *def = &tcg_op_defs[op];
                     50:         int nb_oargs = def->nb_oargs;
                     51:         int nb_iargs = def->nb_iargs;
                     52:         int nb_cargs = def->nb_cargs;
                     53:         /* TODO: Improve disassembler output. */
                     54:         info->fprintf_func(info->stream, "%s\to=%d i=%d c=%d",
                     55:                            def->name, nb_oargs, nb_iargs, nb_cargs);
                     56:     }
                     57: 
                     58:     return length;
                     59: }

unix.superglobalmegacorp.com