From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5130 invoked by alias); 25 Nov 2002 03:14:09 -0000 Mailing-List: contact cgen-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sources.redhat.com Received: (qmail 5123 invoked from network); 25 Nov 2002 03:14:07 -0000 Received: from unknown (HELO hotmail.com) (207.68.162.118) by sources.redhat.com with SMTP; 25 Nov 2002 03:14:07 -0000 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Sun, 24 Nov 2002 19:14:07 -0800 X-Originating-IP: [61.152.127.213] From: "Jie Zhang" To: "Frank Ch. Eigler" Cc: References: <20021122161158.C1160@redhat.com> Subject: Re: Require some enhancement in CGEN for decoder of disassember Date: Sun, 24 Nov 2002 19:14:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Message-ID: X-OriginalArrivalTime: 25 Nov 2002 03:14:07.0035 (UTC) FILETIME=[B70F00B0:01C29430] X-SW-Source: 2002-q4/txt/msg00035.txt.bz2 ----- Original Message ----- From: "Frank Ch. Eigler" To: "Jie Zhang" Cc: > Hi - > > On Thu, Nov 21, 2002 at 11:59:13AM +0800, Jie Zhang wrote: > > I encounter a problem when I'm using CGEN to port binutils. > > In my target, there is a rather strange 4-bit field. > > There are two insns, A and B. This field is operand in insn A, > > but opcode for insn B. > > [...] > > In insn A, the value of the operand can range from 0 through 14. > > If this field is 15, then the insn is B. > > [...] > > One way to model this with CGEN is to act like the operand/opcode > field is opcode only, by replicating instruction A 15 times, each > with a different value (0..14) for the problematic field. You > might also need some custom operand parsers to assert that each > variant of A will match only if the given logical operand matches > the actual one. > > If the only piece of the toolchain producing incorrect behavior is > the disassembler, you may also be able to make it work by turning > off disassembly hashing (#define CGEN_DIS_HASH(buf,value) 0). > > > - FChE > Thank you! The first method is not feasible, because the field acts as operand in all insns (about 30) but one. We would have 30 * 15 insn descriptions if we replicated each insn 15 times. We tried the second method. The situation became better. But there are still some insns disassembled incorrectly. I expect that CGEN can find out such operand and generate some code to deal with it. -Jie Zhang