[PATCH] : For SH target, generate warning if Destination register is same for parallel insns

Dhananjay R. Deshpande dhananjayd@kpit.com
Wed Jun 19 06:11:00 GMT 2002


Hi,
Arati is currently on leave. 

The patch below reverts the earlier patch and implements your suggestion to generate
warning if destination register is same for padd /psub and pmuls.

If you find this patch appropriate, please apply it otherwise you can revert the 
earlier patch.

Regards,
Dhananjay Deshpande

====================================================================================
--- tc-sh.c.orig	Wed Jun 19 16:24:41 2002
+++ tc-sh.c	Wed Jun 19 16:23:32 2002
@@ -1566,27 +1566,6 @@
 	  sh_operand_info *user = operands + n;
 	  sh_arg_type arg = this_try->arg[n];
 
- 	  /* If this is a parallel insn check to see if both
-	     parts have the same destination register.  */
- 	  if ((n == 2) && (this_try->nibbles[0] == PPI))
-	    {
-	      static boolean bIsPPI = false;
-	      static int nLastDestReg;
-
-	      if (!bIsPPI)
-		{
-		  bIsPPI = true;
-		  nLastDestReg = user->reg;
-		}
-	      else /* Second insn.  */
-		{
-		  if (nLastDestReg == user->reg)
-		    as_warn (_("destination register is same for parallel insns"));
-
-		  bIsPPI = false;
-		}
-	    }
-
 	  switch (arg)
 	    {
 	    case A_DISP_PC:
@@ -2257,6 +2236,15 @@
 		default:
 		  as_bad (_("bad padd / psub pmuls output operand"));
 		}
+		/* Generate waring if destination register for padd / psub 
+		   and pmuls is same ( only for A0 or A1 )
+		   If last nibble is 1010 then A0 is used in both padd / psub
+		   and pmuls. If it is 1111 then A1 is used as destination 
+		   register in both padd / psub and pmuls */
+
+		if ((((field_b | reg_efg) & 0x000F) == 0x000A ) 
+			|| (((field_b | reg_efg) & 0x000F) == 0x000F ))
+			as_warn (_("destination register is same for parallel insns"));
 	    }
 	  field_b += 0x4000 + reg_efg;
 	  break;
====================================================================================
> 
> -----Original Message-----
> From: Joern Rennecke [mailto:joern.rennecke@superh.com]
> Sent: Friday, June 14, 2002 9:15 PM
> To: Arati Dikey
> Cc: binutils@sources.redhat.com
> Subject: Re: [PATCH] : For SH target, generate warning if Destination
> register is same for parallel insns
> 
> 
> Arati Dikey wrote:
> > 
> > Hi !
> > 
> > The SH assembler currently does not generate a warning if the same
> > destination register is used in parallel instructions. As 
> this can lead
> > to unexpected results, the user needs to be warned as
> > is done in other commercial assemblers.
> > 
> > For example,
> >         PADD X0,Y0,A0 PMULS A1,X0,A0
> > The following patch generates the warning. I have also 
> verified that it
> > does not cause any
> > side effect on other DSP instructions.
> 
> Apparently you didn't test a lot of combinations.
> > 
> > Regards,
> > Arati Dikey
> > 
> > Changelog
> > 2002-01-23  Arati Dikey <aratid@kpit.com>
> > 
> >         * tc-sh.c (get_specific): Generate warning if the same
> > destination register is used in                   parallel 
> instructions.
> 
> > +   static boolean bIsPPI = false ;
> > +   static int nLastDestReg ;
> 	
> This patch is incorrect.  It makes gas complain about using the same
> destination register in separate three-operand parallel processing.
> Moreover, get_specific is a bad choice for this hack, since it is
> used for every instruction, thus you slow down the assembler 
> needlessly.
> Please back oput this patch.
> 
> A much better place to do this check is in assemble_ppi.  This final
> check can be done in the PMUL / if (field_b) case.
> The first register can be either decodes from field_b, or 
> stored beforehand
> in the PPIC case.
> 
> -- 
> --------------------------
> SuperH
> 2430 Aztec West / Almondsbury / BRISTOL / BS32 4AQ
> T:+44 1454 462330
> 



More information about the Binutils mailing list