]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
This patch does three related things for the moxie port...
authorAnthony Green <green@moxielogic.com>
Thu, 3 Apr 2014 02:11:34 +0000 (02:11 +0000)
committerAnthony Green <green@gcc.gnu.org>
Thu, 3 Apr 2014 02:11:34 +0000 (02:11 +0000)
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.

From-SVN: r209047

gcc/ChangeLog
gcc/config/moxie/moxie.h
gcc/config/moxie/moxie.md

index 6a473c85d44dfc18d8a9133ecb70b20c2726cc1a..ec100b2b8bcff0bf919eea76b6fd9cf4cb0e97e0 100644 (file)
@@ -1,3 +1,10 @@
+2014-04-02  Anthony Green  <green@moxielogic.com>
+
+       * config/moxie/moxie.md (zero_extendqisi2, zero_extendhisi2)
+       (extendqisi2, extendhisi2): Define.
+       * config/moxie/moxie.h (DEFAULT_SIGNED_CHAR): Change to 0.
+       (WCHAR_TYPE): Change to unsigned int.
+
 2014-04-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        PR tree-optimization/60733
index 5379a431140b00de2c906644d0e7b1783586480f..3a01dbab46d6f7ec54af8f41421ecf7292ad63a4 100644 (file)
@@ -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
index 713f9b65dcf31583b5ecc38d4099ce48650c4b2f..edefef80b81d56b7cd908addb66d0ac008508066 100644 (file)
    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" ""))]