List Info

Thread: gdb (ARM processor) casting issues in iwmmxt.c




gdb (ARM processor) casting issues in iwmmxt.c
user name
2006-09-19 18:30:27
Are you on a branch?  The casts that you want to change
don't seem to be in my version of the source file (which
according to CVS, is up to date).

Michael


-----Original Message-----
From: gdb-ownersourceware.org on behalf of shanevolpegmail.com
Sent: Tue 9/19/2006 4:43 AM
To: gdbsourceware.org
Subject: gdb (ARM processor) casting issues in iwmmxt.c
 
All,
I tried compiling gdb client for the xscale processor and
all works
good but for some casting issues in iwmmxt.c  Here is what I
found:
There is casting occurring on the target:
 (unsigned long) s1 = a * b;
 I changed all the castings to only cast on the source and
not
target.. After my modifications everything compiled fine. 
Below is a
patch file with my changes.  I'm not sure if there is
something I'm
missing, I have never seen casting on the target before.

Patch:
--- gdb-6.3/sim/arm/iwmmxt~old.c    2003-03-27
12:13:33.000000000 -0500
+++ gdb-6.3/sim/arm/iwmmxt.c        2006-09-18
15:26:05.000000000 -0400
 -2114,7
+2114,7 

       s = (signed long) a * (signed long) b;

-      (signed long long) t += s;
+      t += (signed long long)s;
         }
       else
         {
 -2130,7
+2130,7 
     wR [BITS (12, 15)] = 0;

   if (BIT (21))    /* Signed.  */
-    (signed long long) wR[BITS (12, 15)] += (signed long
long) t;
+    wR[BITS (12, 15)] += (signed long long) t;
   else
     wR [BITS (12, 15)] += t;

 -2166,7
+2166,7 
       b = wRHALF (BITS (0, 3), i * 2);
       b = EXTEND16 (b);

-      (signed long) s1 = a * b;
+      s1 = (signed long)a * (signed long)b;

       a = wRHALF (BITS (16, 19), i * 2 + 1);
       a = EXTEND16 (a);
 -2174,7
+2174,7 
       b = wRHALF (BITS (0, 3), i * 2 + 1);
       b = EXTEND16 (b);

-      (signed long) s2 = a * b;
+      s2 = (signed long)a * (signed long)b;
         }
       else            /* Unsigned.  */
         {
 -2183,12
+2183,12 
       a = wRHALF (BITS (16, 19), i * 2);
       b = wRHALF (BITS ( 0,  3), i * 2);

-      (unsigned long) s1 = a * b;
+      s1 = (unsigned long)a *(unsigned long) b;

       a = wRHALF (BITS (16, 19), i * 2 + 1);
       b = wRHALF (BITS ( 0,  3), i * 2 + 1);

-      (signed long) s2 = a * b;
+      s2 = (signed long)a * (signed long)b;
         }

       r |= (ARMdword) ((s1 + s2) & 0xffffffff) <<
(i ? 32 : 0);




-- 
Registered Linux User: #293401

gdb (ARM processor) casting issues in iwmmxt.c
user name
2006-09-19 18:33:41
Michael,
I'm using 6.2 and 6.3, I will look at porting the cvs to
the embedded
platform I'm using (openembedded.org)
Regards,
Shane

On 9/19/06, Michael Snyder <Michael.Snyderpalmsource.com> wrote:
>
> Are you on a branch?  The casts that you want to change
> don't seem to be in my version of the source file
(which
> according to CVS, is up to date).
>
> Michael
>
>
> -----Original Message-----
> From: gdb-ownersourceware.org on behalf of shanevolpegmail.com
> Sent: Tue 9/19/2006 4:43 AM
> To: gdbsourceware.org
> Subject: gdb (ARM processor) casting issues in iwmmxt.c
>
> All,
> I tried compiling gdb client for the xscale processor
and all works
> good but for some casting issues in iwmmxt.c  Here is
what I found:
> There is casting occurring on the target:
>  (unsigned long) s1 = a * b;
>  I changed all the castings to only cast on the source
and not
> target.. After my modifications everything compiled
fine.  Below is a
> patch file with my changes.  I'm not sure if there is
something I'm
> missing, I have never seen casting on the target
before.
>
> Patch:
> --- gdb-6.3/sim/arm/iwmmxt~old.c    2003-03-27
12:13:33.000000000 -0500
> +++ gdb-6.3/sim/arm/iwmmxt.c        2006-09-18
15:26:05.000000000 -0400
>  -2114,7 +2114,7 
>
>        s = (signed long) a * (signed long) b;
>
> -      (signed long long) t += s;
> +      t += (signed long long)s;
>          }
>        else
>          {
>  -2130,7 +2130,7 
>      wR [BITS (12, 15)] = 0;
>
>    if (BIT (21))    /* Signed.  */
> -    (signed long long) wR[BITS (12, 15)] += (signed
long long) t;
> +    wR[BITS (12, 15)] += (signed long long) t;
>    else
>      wR [BITS (12, 15)] += t;
>
>  -2166,7 +2166,7 
>        b = wRHALF (BITS (0, 3), i * 2);
>        b = EXTEND16 (b);
>
> -      (signed long) s1 = a * b;
> +      s1 = (signed long)a * (signed long)b;
>
>        a = wRHALF (BITS (16, 19), i * 2 + 1);
>        a = EXTEND16 (a);
>  -2174,7 +2174,7 
>        b = wRHALF (BITS (0, 3), i * 2 + 1);
>        b = EXTEND16 (b);
>
> -      (signed long) s2 = a * b;
> +      s2 = (signed long)a * (signed long)b;
>          }
>        else            /* Unsigned.  */
>          {
>  -2183,12 +2183,12 
>        a = wRHALF (BITS (16, 19), i * 2);
>        b = wRHALF (BITS ( 0,  3), i * 2);
>
> -      (unsigned long) s1 = a * b;
> +      s1 = (unsigned long)a *(unsigned long) b;
>
>        a = wRHALF (BITS (16, 19), i * 2 + 1);
>        b = wRHALF (BITS ( 0,  3), i * 2 + 1);
>
> -      (signed long) s2 = a * b;
> +      s2 = (signed long)a * (signed long)b;
>          }
>
>        r |= (ARMdword) ((s1 + s2) & 0xffffffff)
<< (i ? 32 : 0);
>
>
>
>
> --
> Registered Linux User: #293401
>
>


-- 
Registered Linux User: #293401
gdb (ARM processor) casting issues in iwmmxt.c
user name
2006-09-19 18:35:03
On Tue, Sep 19, 2006 at 02:33:41PM -0400, shanevolpegmail.com
wrote:
> Michael,
> I'm using 6.2 and 6.3, I will look at porting the cvs
to the embedded
> platform I'm using (openembedded.org)

Good idea.  I can confirm that this was fixed since then.

-- 
Daniel Jacobowitz
CodeSourcery
[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )