diff options
author | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-03 02:11:34 +0000 |
---|---|---|
committer | green <green@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-03 02:11:34 +0000 |
commit | 92364a368fbbe4cdfd3b59d2e26fe2ad4c54fbd0 (patch) | |
tree | a5a55568c37cbe8202d239c644d3780405a87c21 /gcc/config/moxie | |
parent | b7f2fb73958bf812b95a94de970c609401399261 (diff) | |
download | gcc-92364a368fbbe4cdfd3b59d2e26fe2ad4c54fbd0.tar.gz |
This patch does three related things for the moxie port...
1. Changes char to be unsigned by default
2. Changes WCHAR_TYPE from long int to unsigned int
3. Zero- and sign-extends values properly, sometimes using the new
sign-extension instructions.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209047 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/moxie')
-rw-r--r-- | gcc/config/moxie/moxie.h | 4 | ||||
-rw-r--r-- | gcc/config/moxie/moxie.md | 50 |
2 files changed, 52 insertions, 2 deletions
diff --git a/gcc/config/moxie/moxie.h b/gcc/config/moxie/moxie.h index 5379a431140..3a01dbab46d 100644 --- a/gcc/config/moxie/moxie.h +++ b/gcc/config/moxie/moxie.h @@ -59,7 +59,7 @@ #define DOUBLE_TYPE_SIZE 64 #define LONG_DOUBLE_TYPE_SIZE 64 -#define DEFAULT_SIGNED_CHAR 1 +#define DEFAULT_SIGNED_CHAR 0 #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" @@ -68,7 +68,7 @@ #define PTRDIFF_TYPE "int" #undef WCHAR_TYPE -#define WCHAR_TYPE "long int" +#define WCHAR_TYPE "unsigned int" #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE BITS_PER_WORD diff --git a/gcc/config/moxie/moxie.md b/gcc/config/moxie/moxie.md index 713f9b65dcf..edefef80b81 100644 --- a/gcc/config/moxie/moxie.md +++ b/gcc/config/moxie/moxie.md @@ -239,6 +239,56 @@ ldo.l %0, %1" [(set_attr "length" "2,2,6,2,6,2,6,6,6")]) +(define_insn_and_split "zero_extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0,W,A,B")))] + "" + "@ + ; + ld.b %0, %1 + lda.b %0, %1 + ldo.b %0, %1 + "reload_completed" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (zero_extend:SI (match_dup 2)))] +{ + operands[2] = gen_lowpart (QImode, operands[0]); +} + [(set_attr "length" "0,2,6,6")]) + +(define_insn_and_split "zero_extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "0,W,A,B")))] + "" + "@ + ; + ld.s %0, %1 + lda.s %0, %1 + ldo.s %0, %1 + "reload_completed" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (zero_extend:SI (match_dup 2)))] +{ + operands[2] = gen_lowpart (HImode, operands[0]); +} + [(set_attr "length" "0,2,6,6")]) + +(define_insn "extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r")))] + "" + "@ + sex.b %0, %1" + [(set_attr "length" "2")]) + +(define_insn "extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r")))] + "" + "@ + sex.s %0, %1" + [(set_attr "length" "2")]) + (define_expand "movqi" [(set (match_operand:QI 0 "general_operand" "") (match_operand:QI 1 "general_operand" ""))] |