This is the mail archive of the
cgen@sources.redhat.com
mailing list for the CGEN project.
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)"