[moxie,sim] Add new sign-extension instructions

Message ID 87ppkzjbsd.fsf@moxielogic.com
State Committed
Headers

Commit Message

Anthony Green April 3, 2014, 4:07 a.m. UTC
  I'm committing the following patch that adds support for two new
sign-extension instructions to the moxie simulator.  Binutils and GCC
changes have already been committed.

Thanks,

AG

2014-04-02  Anthony Green  <green@moxielogic.com>

	* interp.c (sim_resume): Add new sign-extend instructions.
  

Comments

Joel Brobecker April 7, 2014, 4:48 p.m. UTC | #1
> I'm committing the following patch that adds support for two new
> sign-extension instructions to the moxie simulator.  Binutils and GCC
> changes have already been committed.
> 
> Thanks,
> 
> AG
> 
> 2014-04-02  Anthony Green  <green@moxielogic.com>
> 
> 	* interp.c (sim_resume): Add new sign-extend instructions.

Small comment: Would you mind adding an empty line between the local
variable declarations and the first statement after that? This is
part of the GDB Coding Style and the sim code is part of GDB.  Eg:

> -	    case 0x10: /* bad */
> -	    case 0x11: /* bad */
> +	    case 0x10: /* sex.b */
> +	      {
> +		int a = (inst >> 4) & 0xf;
> +		int b = inst & 0xf;
> +		signed char bv = cpu.asregs.regs[b];

Add an empty line here.

> +		TRACE("sex.b");
> +		cpu.asregs.regs[a] = (int) bv;
> +	      }
> +	      break;
> +	    case 0x11: /* sex.s */
> +	      {
> +		int a = (inst >> 4) & 0xf;
> +		int b = inst & 0xf;
> +		signed short bv = cpu.asregs.regs[b];

And here as well.

> +		TRACE("sex.s");
> +		cpu.asregs.regs[a] = (int) bv;
> +	      }
> +	      break;
>  	    case 0x12: /* bad */
>  	    case 0x13: /* bad */
>  	    case 0x14: /* bad */

Thank you!
  
Mike Frysinger April 8, 2014, 11:15 p.m. UTC | #2
looks like Joel covered everything.  lgtm after the style fixes.
-mike
  

Patch

diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c
index a3f238a..4362c66 100644
--- a/sim/moxie/interp.c
+++ b/sim/moxie/interp.c
@@ -586,8 +586,24 @@  sim_resume (sd, step, siggnal)
 	      break;
 	    case 0x0f: /* nop */
 	      break;
-	    case 0x10: /* bad */
-	    case 0x11: /* bad */
+	    case 0x10: /* sex.b */
+	      {
+		int a = (inst >> 4) & 0xf;
+		int b = inst & 0xf;
+		signed char bv = cpu.asregs.regs[b];
+		TRACE("sex.b");
+		cpu.asregs.regs[a] = (int) bv;
+	      }
+	      break;
+	    case 0x11: /* sex.s */
+	      {
+		int a = (inst >> 4) & 0xf;
+		int b = inst & 0xf;
+		signed short bv = cpu.asregs.regs[b];
+		TRACE("sex.s");
+		cpu.asregs.regs[a] = (int) bv;
+	      }
+	      break;
 	    case 0x12: /* bad */
 	    case 0x13: /* bad */
 	    case 0x14: /* bad */