Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Nick Clifton <nickc@redhat.com>
To: Andrew Cagney <ac131313@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: RFA: v850 simulator does not sign extend first operand to divh
Date: Sun, 06 Apr 2003 08:50:00 -0000	[thread overview]
Message-ID: <m3r88gyppo.fsf@workshop.nickc.cambridge.redhat.com> (raw)
In-Reply-To: <3E8F2760.6030005@redhat.com>

Hi Andrew,

> > 2003-04-03  Nick Clifton  <nickc@redhat.com>
> > 	* simops.c (OP_40): Make divh sign extend its first operand.
> >
> 
> Yes, but can you please put the fixed code directly in v850.igen
> (deleting OP_40):

I have applied the patch below to do this.

Why did you want the code moved ?

Cheers
        Nick

2003-04-06  Nick Clifton  <nickc@redhat.com>

	* simops.c (OP_40): Delete.  Move code to...
	* v850-igen.c (): ...Here. Sign extend the first operand.
	* simops.h (OP_40): Remove prototype.

Index: sim/v850/simops.c
===================================================================
RCS file: /cvs/src/src/sim/v850/simops.c,v
retrieving revision 1.6
diff -c -3 -p -w -r1.6 simops.c
*** sim/v850/simops.c	30 Nov 2002 18:01:30 -0000	1.6
--- sim/v850/simops.c	6 Apr 2003 08:46:41 -0000
*************** OP_6E0 ()
*** 771,820 ****
    return 4;
  }
  
- /* divh reg1, reg2 */
- int
- OP_40 ()
- {
-   unsigned int op0, op1, result, ov, s, z;
-   int temp;
- 
-   trace_input ("divh", OP_REG_REG, 0);
- 
-   /* Compute the result.  */
-   temp = EXTEND16 (State.regs[ OP[0] ]);
-   op0 = temp;
-   op1 = State.regs[OP[1]];
-   
-   if (op0 == 0xffffffff && op1 == 0x80000000)
-     {
-       result = 0x80000000;
-       ov = 1;
-     }
-   else if (op0 != 0)
-     {
-       result = op1 / op0;
-       ov = 0;
-     }
-   else
-     {
-       result = 0x0;
-       ov = 1;
-     }
-   
-   /* Compute the condition codes.  */
-   z = (result == 0);
-   s = (result & 0x80000000);
-   
-   /* Store the result and condition codes.  */
-   State.regs[OP[1]] = result;
-   PSW &= ~(PSW_Z | PSW_S | PSW_OV);
-   PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0)
- 	  | (ov ? PSW_OV : 0));
-   trace_output (OP_REG_REG);
- 
-   return 2;
- }
- 
  /* cmp reg, reg */
  int
  OP_1E0 ()
--- 771,776 ----

Index: sim/v850/simops.h
===================================================================
RCS file: /cvs/src/src/sim/v850/simops.h,v
retrieving revision 1.1
diff -c -3 -p -w -r1.1 simops.h
*** sim/v850/simops.h	2 Dec 2001 19:27:29 -0000	1.1
--- sim/v850/simops.h	6 Apr 2003 08:46:41 -0000
*************** int OP_180 (void);
*** 17,23 ****
  int OP_E0 (void);
  int OP_2E0 (void);
  int OP_6E0 (void);
- int OP_40 (void);
  int OP_1E0 (void);
  int OP_260 (void);
  int OP_7E0 (void);
--- 17,22 ----

Index: sim/v850/v850.igen
===================================================================
RCS file: /cvs/src/src/sim/v850/v850.igen,v
retrieving revision 1.5
diff -c -3 -p -w -r1.5 v850.igen
*** sim/v850/v850.igen	19 Sep 2002 07:52:02 -0000	1.5
--- sim/v850/v850.igen	6 Apr 2003 08:46:41 -0000
*************** rrrrr,111111,RRRRR + wwwww,01011000000:X
*** 332,338 ****
  rrrrr!0,000010,RRRRR!0:I:::divh
  "divh r<reg1>, r<reg2>"
  {
!   COMPAT_1 (OP_40 ());
  }
  
  rrrrr,111111,RRRRR + wwwww,01010000000:XI:::divh
--- 332,379 ----
  rrrrr!0,000010,RRRRR!0:I:::divh
  "divh r<reg1>, r<reg2>"
  {
!   unsigned32 ov, s, z;
!   signed long int op0, op1, result;
! 
!   trace_input ("divh", OP_REG_REG, 0);
! 
!   PC = cia;
!   OP[0] = instruction_0 & 0x1f;
!   OP[1] = (instruction_0 >> 11) & 0x1f;
! 
!   /* Compute the result.  */
!   op0 = EXTEND16 (State.regs[OP[0]]);
!   op1 = State.regs[OP[1]];
!   
!   if (op0 == 0xffffffff && op1 == 0x80000000)
!     {
!       result = 0x80000000;
!       ov = 1;
!     }
!   else if (op0 != 0)
!     {
!       result = op1 / op0;
!       ov = 0;
!     }
!   else
!     {
!       result = 0x0;
!       ov = 1;
!     }
!   
!   /* Compute the condition codes.  */
!   z = (result == 0);
!   s = (result & 0x80000000);
!   
!   /* Store the result and condition codes.  */
!   State.regs[OP[1]] = result;
!   PSW &= ~(PSW_Z | PSW_S | PSW_OV);
!   PSW |= ((z ? PSW_Z : 0) | (s ? PSW_S : 0) | (ov ? PSW_OV : 0));
! 
!   trace_output (OP_REG_REG);
! 
!   PC += 2;
!   nia = PC;
  }
  
  rrrrr,111111,RRRRR + wwwww,01010000000:XI:::divh


  reply	other threads:[~2003-04-06  8:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-03  7:29 Nick Clifton
2003-04-05 18:58 ` Andrew Cagney
2003-04-06  8:50   ` Nick Clifton [this message]
2003-04-06 14:21     ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3r88gyppo.fsf@workshop.nickc.cambridge.redhat.com \
    --to=nickc@redhat.com \
    --cc=ac131313@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox