diff options
author | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-25 19:38:54 +0000 |
---|---|---|
committer | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-25 19:38:54 +0000 |
commit | e7196bd722eed51e5a23d3f97af1ef5bdf850754 (patch) | |
tree | 30b5ae60a5a44c7834136d3b07ad68825229669b /gcc/config/sh | |
parent | afa91c4cf04b3bf43d76005d07e3cddb97b147e1 (diff) | |
download | gcc-e7196bd722eed51e5a23d3f97af1ef5bdf850754.tar.gz |
* sh.h (LOAD_EXTEND_OP): QImode zero-extends on SHmedia.
* sh.md (truncdiqi2, movqi_media): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55757 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/sh')
-rw-r--r-- | gcc/config/sh/sh.h | 5 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 12 |
2 files changed, 9 insertions, 8 deletions
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index fc1cfb41610..3002c3ea772 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -2623,9 +2623,12 @@ while (0) will either zero-extend or sign-extend. The value of this macro should be the code that says which one of the two operations is implicitly done, NIL if none. */ +/* For SHmedia, we can truncate to QImode easier using zero extension. */ /* FP registers can load SImode values, but don't implicitly sign-extend them to DImode. */ -#define LOAD_EXTEND_OP(MODE) ((MODE) != SImode ? SIGN_EXTEND : NIL) +#define LOAD_EXTEND_OP(MODE) \ + (((MODE) == QImode && TARGET_SHMEDIA) ? ZERO_EXTEND \ + : (MODE) != SImode ? SIGN_EXTEND : NIL) /* Define if loading short immediate values into registers sign extends. */ #define SHORT_IMMEDIATES_SIGN_EXTEND diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 48ae813354c..aa64bf5cb81 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -3382,17 +3382,15 @@ [(set_attr "type" "arith_media,store_media") (set_attr "length" "8,4")]) -; N.B. we want sign-extension here because -; - we need to be consistent with LOAD_EXTEND_OP and movqi -; - only sign extension allows us to do signed compares transparently. -; unsigned compares don't care about the kind of extension as long as -; it's consistent. +; N.B. This should agree with LOAD_EXTEND_OP and movqi. +; Because we use zero extension, we can't provide signed QImode compares +; using a simple compare or conditional banch insn. (define_insn "truncdiqi2" [(set (match_operand:QI 0 "general_movdst_operand" "=r,m") (truncate:QI (match_operand:DI 1 "register_operand" "r,r")))] "TARGET_SHMEDIA" "@ - ori %1, -256, %0 + and %1, 255, %0 st%M0.b %m0, %1" [(set_attr "type" "arith_media,store")]) @@ -3741,7 +3739,7 @@ "@ add.l %1, r63, %0 movi %1, %0 - ld%M1.b %m1, %0 + ld%M1.ub %m1, %0 st%M0.b %m0, %1" [(set_attr "type" "arith_media,arith_media,load_media,store_media")]) |