This is the mail archive of the cgen@sources.redhat.com mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: sh64-media.cpu : msad.ubq has unsigned inputs.


Doug Evans wrote:
> I _think_ the problem centers around the implicit widening
> in the original code.  The subtraction is done in QImode
> and a QImode value is subsequently added to a DImode value.

Well, it's more due to a missed explicit widening.

> [Digression:
> In a world in which Umodes don't exist, implicit widening operations
> should probably be disallowed, though part of me will loathe the extra
> amount of typing required.]

It would be unlogical to have to write zero-extensions different
from sign-extensions.  So, since the mode doesn't have signedness
information, implicit widening would be missing that information.

> I don't know the architecture, so I don't know what the desired effect
> of (abs DI (some-QI-value)) is.  Making a wild guess, what about
> something like:
> 
> -                (set acc (abs DI (sub (subword QI rm 0) (subword QI rn 0))))
> +                (set acc (zext DI (abs QI (sub (subword QI rm 0) (subword QI rn 0)))))
> 
> Or maybe it's
> -                (set acc (abs DI (sub (subword QI rm 0) (subword QI rn 0))))
> +                (set acc (zext DI (sub (subword QI rm 0) (subword QI rn 0))))
> 
> [and so on for the rest of the bytes]

No, the zero-extension should happen before the subtraction.
		
-- 
--------------------------
SuperH (UK) Ltd.
2410 Aztec West / Almondsbury / BRISTOL / BS32 4QX
T:+44 1454 465658
2003-05-21  J"orn Rennecke <joern.rennecke@superh.com>

	* sh64-media.cpu (msad.ubq): Inputs are unsigned bytes.

Index: sh64-media.cpu
===================================================================
RCS file: /cvs/src/src/cgen/cpu/sh64-media.cpu,v
retrieving revision 1.5
diff -p -r1.5 sh64-media.cpu
*** sh64-media.cpu	21 May 2003 14:10:46 -0000	1.5
--- sh64-media.cpu	21 May 2003 18:48:32 -0000
***************
*** 1,6 ****
  ; SuperH SHmedia instruction set description.  -*- Scheme -*-
  ; Copyright (C) 2000, 2001 Red Hat, Inc.
! ; Copyright (C) 2002 SuperH Ltd
  ; This file is part of CGEN.
  ; See file COPYING.CGEN for details.
  
--- 1,6 ----
  ; SuperH SHmedia instruction set description.  -*- Scheme -*-
  ; Copyright (C) 2000, 2001 Red Hat, Inc.
! ; Copyright (C) 2002, 2003 SuperH Ltd
  ; This file is part of CGEN.
  ; See file COPYING.CGEN for details.
  
***************
*** 1275,1290 ****
         ()
         "msad.ubq $rm, $rn, $rd"
         (+ (f-op 18) rm (f-ext 0) rn rd (f-rsvd 0))
!        (sequence ((DI acc))
! 		 (set acc (abs DI (sub (subword QI rm 0) (subword QI rn 0))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 1) (subword QI rn 1)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 2) (subword QI rn 2)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 3) (subword QI rn 3)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 4) (subword QI rn 4)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 5) (subword QI rn 5)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 6) (subword QI rn 6)))))
! 		 (set acc (add DI acc (abs (sub (subword QI rm 7) (subword QI rn 7)))))
! 		 (set rd (add rd acc))))
  
  (define-pmacro (-mshaldsl arg) (saturate SI 32 (sll DI arg (and rn 31))))
  (dshmi mshaldsl "Multimedia saturating arithmetic left shift (long word)"
--- 1275,1298 ----
         ()
         "msad.ubq $rm, $rn, $rd"
         (+ (f-op 18) rm (f-ext 0) rn rd (f-rsvd 0))
!        (sequence ((SI acc))
! 		 (set acc (abs (sub (zext SI (subword QI rm 0))
! 				    (zext SI (subword QI rn 0)))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 1))
! 					     (zext SI (subword QI rn 1))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 2))
! 					     (zext SI (subword QI rn 2))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 3))
! 					     (zext SI (subword QI rn 3))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 4))
! 					     (zext SI (subword QI rn 4))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 5))
! 					     (zext SI (subword QI rn 5))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 6))
! 					     (zext SI (subword QI rn 6))))))
! 		 (set acc (add acc (abs (sub (zext SI (subword QI rm 7))
! 					     (zext SI (subword QI rn 7))))))
! 		 (set rd (add rd (zext DI acc)))))
  
  (define-pmacro (-mshaldsl arg) (saturate SI 32 (sll DI arg (and rn 31))))
  (dshmi mshaldsl "Multimedia saturating arithmetic left shift (long word)"

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]