From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32013 invoked by alias); 8 Apr 2003 06:24:29 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 32005 invoked from network); 8 Apr 2003 06:24:29 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 8 Apr 2003 06:24:29 -0000 Received: from int-mx2.corp.redhat.com (nat-pool-rdu-dmz.redhat.com [172.16.52.200] (may be forged)) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h386OSe27811 for ; Tue, 8 Apr 2003 02:24:28 -0400 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h386ORW16939; Tue, 8 Apr 2003 02:24:27 -0400 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id h386OQ500721; Mon, 7 Apr 2003 23:24:26 -0700 Message-ID: <3E926B1A.879C98CC@redhat.com> Date: Tue, 08 Apr 2003 06:24:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: gdb-patches@sources.redhat.com CC: kazu@cs.umass.edu, dvenkat@noida.hcltech.com, avolkov@transas.com Subject: [PATCH/RFA] h8300 sim: add daa and das insns Content-Type: multipart/mixed; boundary="------------0AAFEC58865F81F12AB62AB9" X-SW-Source: 2003-04/txt/msg00126.txt.bz2 This is a multi-part message in MIME format. --------------0AAFEC58865F81F12AB62AB9 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-length: 36 Here's my implementation of daa/das: --------------0AAFEC58865F81F12AB62AB9 Content-Type: text/plain; charset=us-ascii; name="daa.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="daa.diff" Content-length: 3063 2003-04-07 Michael Snyder * compile.c (sim_resume): Implement daa and das insns. Index: compile.c =================================================================== RCS file: /cvs/cvsfiles/devo/sim/h8300/compile.c,v retrieving revision 1.70 diff -p -r1.70 compile.c *** compile.c 2003/03/27 22:01:29 1.70 --- compile.c 2003/04/08 06:20:31 *************** sim_resume (SIM_DESC sd, int step, int s *** 2138,2143 **** --- 2146,2202 ---- } goto next; + case O (O_DAA, SB): + /* Decimal Adjust Addition. This is for BCD arithmetic. */ + res = GET_B_REG (code->src.reg); + if (!c && (0 <= (res >> 4) && (res >> 4) <= 9) && + !h && (0 <= (res & 0xf) && (res & 0xf) <= 9)) + res = res; /* Value added == 0. */ + else if (!c && (0 <= (res >> 4) && (res >> 4) <= 8) && + !h && (10 <= (res & 0xf) && (res & 0xf) <= 15)) + res = res + 0x6; /* Value added == 6. */ + else if (!c && (0 <= (res >> 4) && (res >> 4) <= 9) && + h && (0 <= (res & 0xf) && (res & 0xf) <= 3)) + res = res + 0x6; /* Value added == 6. */ + else if (!c && (10 <= (res >> 4) && (res >> 4) <= 15) && + !h && (0 <= (res & 0xf) && (res & 0xf) <= 9)) + res = res + 0x60; /* Value added == 60. */ + else if (!c && (9 <= (res >> 4) && (res >> 4) <= 15) && + !h && (10 <= (res & 0xf) && (res & 0xf) <= 15)) + res = res + 0x66; /* Value added == 66. */ + else if (!c && (10 <= (res >> 4) && (res >> 4) <= 15) && + h && (0 <= (res & 0xf) && (res & 0xf) <= 3)) + res = res + 0x66; /* Value added == 66. */ + else if ( c && (1 <= (res >> 4) && (res >> 4) <= 2) && + !h && (0 <= (res & 0xf) && (res & 0xf) <= 9)) + res = res + 0x60; /* Value added == 60. */ + else if ( c && (1 <= (res >> 4) && (res >> 4) <= 2) && + !h && (10 <= (res & 0xf) && (res & 0xf) <= 15)) + res = res + 0x66; /* Value added == 66. */ + else if (c && (1 <= (res >> 4) && (res >> 4) <= 3) && + h && (0 <= (res & 0xf) && (res & 0xf) <= 3)) + res = res + 0x66; /* Value added == 66. */ + + goto alu8; + + case O (O_DAS, SB): + /* Decimal Adjust Subtraction. This is for BCD arithmetic. */ + res = GET_B_REG (code->src.reg); /* FIXME fetch, fetch2... */ + if (!c && (0 <= (res >> 4) && (res >> 4) <= 9) && + !h && (0 <= (res & 0xf) && (res & 0xf) <= 9)) + res = res; /* Value added == 0. */ + else if (!c && (0 <= (res >> 4) && (res >> 4) <= 8) && + h && (6 <= (res & 0xf) && (res & 0xf) <= 15)) + res = res + 0xfa; /* Value added == 0xfa. */ + else if ( c && (7 <= (res >> 4) && (res >> 4) <= 15) && + !h && (0 <= (res & 0xf) && (res & 0xf) <= 9)) + res = res + 0xa0; /* Value added == 0xa0. */ + else if (c && (6 <= (res >> 4) && (res >> 4) <= 15) && + h && (6 <= (res & 0xf) && (res & 0xf) <= 15)) + res = res + 0x9a; /* Value added == 0x9a. */ + + goto alu8; + default: illegal: cpu.state = SIM_STATE_STOPPED; --------------0AAFEC58865F81F12AB62AB9--