From patchwork Mon Nov 16 03:14:37 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Frysinger X-Patchwork-Id: 9681 X-Patchwork-Delegate: vapier@gentoo.org Received: (qmail 60052 invoked by alias); 16 Nov 2015 03:19:00 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 59863 invoked by uid 89); 16 Nov 2015 03:18:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-HELO: smtp.gentoo.org Received: from smtp.gentoo.org (HELO smtp.gentoo.org) (140.211.166.183) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 16 Nov 2015 03:18:46 +0000 Received: from localhost.localdomain (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id 76F52340845 for ; Mon, 16 Nov 2015 03:18:44 +0000 (UTC) From: Mike Frysinger To: gdb-patches@sourceware.org Subject: [PATCH 1/6] sim: cr16: switch to common sim-reg [committed] Date: Sun, 15 Nov 2015 22:14:37 -0500 Message-Id: <1447643682-3812-1-git-send-email-vapier@gentoo.org> X-IsSubscribed: yes This is mostly to get us off the weird cr16 specific memory functions, but it's also a good clean up to move to the common core. --- sim/cr16/ChangeLog | 14 +++++++++++++ sim/cr16/Makefile.in | 1 + sim/cr16/interp.c | 59 ++++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 61 insertions(+), 13 deletions(-) diff --git a/sim/cr16/ChangeLog b/sim/cr16/ChangeLog index 86d730b..360b234 100644 --- a/sim/cr16/ChangeLog +++ b/sim/cr16/ChangeLog @@ -1,5 +1,19 @@ 2015-11-15 Mike Frysinger + * Makefile.in (SIM_OBJS): Add sim-reg.o. + * interp.c (cr16_reg_fetch, cr16_reg_store): Add prototypes. + (sim_open): Call CPU_REG_FETCH/CPU_REG_STORE. + (cr16_extract_unsigned_integer, cr16_store_unsigned_integer): + New helper functions. + (sim_fetch_register): Rename to ... + (cr16_reg_fetch): ... this. Use cr16_store_unsigned_integer + to write out the updated register values. + (sim_store_register): Rename to ... + (cr16_reg_store): ... this. Use cr16_extract_unsigned_integer + to read in the updated register values. + +2015-11-15 Mike Frysinger + * interp.c (sim_open): Delete sim_create_inferior call. 2015-11-14 Mike Frysinger diff --git a/sim/cr16/Makefile.in b/sim/cr16/Makefile.in index 5d1632d..07fa819 100644 --- a/sim/cr16/Makefile.in +++ b/sim/cr16/Makefile.in @@ -20,6 +20,7 @@ SIM_OBJS = \ $(SIM_NEW_COMMON_OBJS) \ sim-hload.o \ + sim-reg.o \ interp.o \ table.o \ simops.o \ diff --git a/sim/cr16/interp.c b/sim/cr16/interp.c index 278a5ab..981cff4 100644 --- a/sim/cr16/interp.c +++ b/sim/cr16/interp.c @@ -758,6 +758,9 @@ free_state (SIM_DESC sd) sim_state_free (sd); } +static int cr16_reg_fetch (SIM_CPU *, int, unsigned char *, int); +static int cr16_reg_store (SIM_CPU *, int, unsigned char *, int); + SIM_DESC trace_sd = NULL; SIM_DESC @@ -824,6 +827,8 @@ sim_open (SIM_OPEN_KIND kind, struct host_callback_struct *cb, struct bfd *abfd, { SIM_CPU *cpu = STATE_CPU (sd, i); + CPU_REG_FETCH (cpu) = cr16_reg_fetch; + CPU_REG_STORE (cpu) = cr16_reg_store; CPU_PC_FETCH (cpu) = cr16_pc_get; CPU_PC_STORE (cpu) = cr16_pc_set; } @@ -1178,8 +1183,38 @@ sim_stop_reason (SIM_DESC sd, enum sim_stop *reason, int *sigrc) stop_simulator = 0; } -int -sim_fetch_register (SIM_DESC sd, int rn, unsigned char *memory, int length) +static uint32 +cr16_extract_unsigned_integer (unsigned char *addr, int len) +{ + uint32 retval; + unsigned char * p; + unsigned char * startaddr = (unsigned char *)addr; + unsigned char * endaddr = startaddr + len; + + retval = 0; + + for (p = endaddr; p > startaddr;) + retval = (retval << 8) | *--p; + + return retval; +} + +static void +cr16_store_unsigned_integer (unsigned char *addr, int len, uint32 val) +{ + unsigned char *p; + unsigned char *startaddr = addr; + unsigned char *endaddr = startaddr + len; + + for (p = startaddr; p < endaddr;) + { + *p++ = val & 0xff; + val >>= 8; + } +} + +static int +cr16_reg_fetch (SIM_CPU *cpu, int rn, unsigned char *memory, int length) { int size; switch ((enum sim_cr16_regs) rn) @@ -1196,15 +1231,14 @@ sim_fetch_register (SIM_DESC sd, int rn, unsigned char *memory, int length) case SIM_CR16_R9_REGNUM: case SIM_CR16_R10_REGNUM: case SIM_CR16_R11_REGNUM: - WRITE_16 (memory, GPR (rn - SIM_CR16_R0_REGNUM)); + cr16_store_unsigned_integer (memory, 2, GPR (rn - SIM_CR16_R0_REGNUM)); size = 2; break; case SIM_CR16_R12_REGNUM: case SIM_CR16_R13_REGNUM: case SIM_CR16_R14_REGNUM: case SIM_CR16_R15_REGNUM: - //WRITE_32 (memory, GPR (rn - SIM_CR16_R0_REGNUM)); - write_longword (memory, GPR (rn - SIM_CR16_R0_REGNUM)); + cr16_store_unsigned_integer (memory, 4, GPR (rn - SIM_CR16_R0_REGNUM)); size = 4; break; case SIM_CR16_PC_REGNUM: @@ -1218,8 +1252,7 @@ sim_fetch_register (SIM_DESC sd, int rn, unsigned char *memory, int length) case SIM_CR16_DSR_REGNUM: case SIM_CR16_CAR0_REGNUM: case SIM_CR16_CAR1_REGNUM: - //WRITE_32 (memory, CREG (rn - SIM_CR16_PC_REGNUM)); - write_longword (memory, CREG (rn - SIM_CR16_PC_REGNUM)); + cr16_store_unsigned_integer (memory, 4, CREG (rn - SIM_CR16_PC_REGNUM)); size = 4; break; default: @@ -1228,9 +1261,9 @@ sim_fetch_register (SIM_DESC sd, int rn, unsigned char *memory, int length) } return size; } - -int -sim_store_register (SIM_DESC sd, int rn, unsigned char *memory, int length) + +static int +cr16_reg_store (SIM_CPU *cpu, int rn, unsigned char *memory, int length) { int size; switch ((enum sim_cr16_regs) rn) @@ -1247,14 +1280,14 @@ sim_store_register (SIM_DESC sd, int rn, unsigned char *memory, int length) case SIM_CR16_R9_REGNUM: case SIM_CR16_R10_REGNUM: case SIM_CR16_R11_REGNUM: - SET_GPR (rn - SIM_CR16_R0_REGNUM, READ_16 (memory)); + SET_GPR (rn - SIM_CR16_R0_REGNUM, cr16_extract_unsigned_integer (memory, 2)); size = 2; break; case SIM_CR16_R12_REGNUM: case SIM_CR16_R13_REGNUM: case SIM_CR16_R14_REGNUM: case SIM_CR16_R15_REGNUM: - SET_GPR32 (rn - SIM_CR16_R0_REGNUM, get_longword (memory)); + SET_GPR32 (rn - SIM_CR16_R0_REGNUM, cr16_extract_unsigned_integer (memory, 2)); size = 4; break; case SIM_CR16_PC_REGNUM: @@ -1268,7 +1301,7 @@ sim_store_register (SIM_DESC sd, int rn, unsigned char *memory, int length) case SIM_CR16_DSR_REGNUM: case SIM_CR16_CAR0_REGNUM: case SIM_CR16_CAR1_REGNUM: - SET_CREG (rn - SIM_CR16_PC_REGNUM, get_longword (memory)); + SET_CREG (rn - SIM_CR16_PC_REGNUM, cr16_extract_unsigned_integer (memory, 4)); size = 4; break; default: