]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sparc.c (sparc_vis_init_builtins): Retrieve the return mode from the builtin itself.
authorEric Botcazou <ebotcazou@libertysurf.fr>
Sun, 17 Jun 2007 11:17:10 +0000 (13:17 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 17 Jun 2007 11:17:10 +0000 (11:17 +0000)
* config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the
return mode from the builtin itself.
(sparc_fold_builtin): Fix cast of zero constant.

From-SVN: r125768

12 files changed:
gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/sparc/align.c
gcc/testsuite/gcc.target/sparc/combined-2.c
gcc/testsuite/gcc.target/sparc/fexpand.c
gcc/testsuite/gcc.target/sparc/fnot.c
gcc/testsuite/gcc.target/sparc/fpack16.c
gcc/testsuite/gcc.target/sparc/fpmerge.c
gcc/testsuite/gcc.target/sparc/fpmul.c
gcc/testsuite/gcc.target/sparc/noresult.c
gcc/testsuite/gcc.target/sparc/pdist.c

index 1994bf99d428785f7810f01491642cf067d0296e..30406dd62ded36b932faaa7072d9a1f3ae7d8d48 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the
+       return mode from the builtin itself.
+       (sparc_fold_builtin): Fix cast of zero constant.
+
 2007-06-16  Uros Bizjak  <ubizjak@gmail.com>
 
        * targhooks.c (default_builtin_reciprocal): New default target hook.
index 85b41cbbcf2e1c769c252091c27d566f394fbe7f..0c9989e3b63c66e30012d342dbef55ee15e2b336 100644 (file)
@@ -8031,8 +8031,10 @@ sparc_vis_init_builtins (void)
    Expand builtin functions for sparc intrinsics.  */
 
 static rtx
-sparc_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
-                     enum machine_mode tmode, int ignore ATTRIBUTE_UNUSED)
+sparc_expand_builtin (tree exp, rtx target,
+                     rtx subtarget ATTRIBUTE_UNUSED,
+                     enum machine_mode tmode ATTRIBUTE_UNUSED,
+                     int ignore ATTRIBUTE_UNUSED)
 {
   tree arg;
   call_expr_arg_iterator iter;
@@ -8042,14 +8044,13 @@ sparc_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
   enum machine_mode mode[4];
   int arg_count = 0;
 
-  mode[arg_count] = tmode;
-
-  if (target == 0
-      || GET_MODE (target) != tmode
-      || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
-    op[arg_count] = gen_reg_rtx (tmode);
+  mode[0] = insn_data[icode].operand[0].mode;
+  if (!target
+      || GET_MODE (target) != mode[0]
+      || ! (*insn_data[icode].operand[0].predicate) (target, mode[0]))
+    op[0] = gen_reg_rtx (mode[0]);
   else
-    op[arg_count] = target;
+    op[0] = target;
 
   FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
     {
@@ -8162,11 +8163,11 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
 {
   tree arg0, arg1, arg2;
   tree rtype = TREE_TYPE (TREE_TYPE (fndecl));
-  
 
-  if (ignore && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrsi_vis
+  if (ignore
+      && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrsi_vis
       && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrdi_vis)
-    return build_int_cst (rtype, 0);
+    return fold_convert (rtype, integer_zero_node);
 
   switch (DECL_FUNCTION_CODE (fndecl))
     {
@@ -8280,6 +8281,7 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore)
     default:
       break;
     }
+
   return NULL_TREE;
 }
 \f
index 83864348f78f67b95c382aa133ffdf5a2dba1752..2a69e6ae4ea6f857b1ea27c2517499f6564e34df 100644 (file)
@@ -1,3 +1,15 @@
+2007-06-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * gcc.target/sparc/align.c: Use 'unsigned char' as element type.
+       * gcc.target/sparc/combined-2.c: Likewise.
+       * gcc.target/sparc/fexpand.c : Likewise.
+       * gcc.target/sparc/fnot.c: Likewise.  Fix a couple of prototypes.
+       * gcc.target/sparc/fpack16.c : Likewise.
+       * gcc.target/sparc/fpmerge.c : Likewise.
+       * gcc.target/sparc/fpmul.c : Likewise.
+       * gcc.target/sparc/noresult.c : Likewise.
+       * gcc.target/sparc/pdist.c: Likewise.
+
 2007-06-16  Uros Bizjak  <ubizjak@gmail.com>
 
        PR middle-end/31723
index d9cc162e828fbd54f72b22de0a97fe6413a92dbf..804ca9397f3469faab64da6b98bef23b3e561a43 100644 (file)
@@ -1,10 +1,9 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
-
 typedef long long int64_t;
 typedef int vec32 __attribute__((vector_size(8)));
 typedef short vec16 __attribute__((vector_size(8)));
-typedef char vec8 __attribute__((vector_size(8)));
+typedef unsigned char vec8 __attribute__((vector_size(8)));
 
 vec16 foo1 (vec16 a, vec16 b) {
   return __builtin_vis_faligndatav4hi (a, b);
index 016e4fa6a6cb453cb2a6d4189e8738e89ae5c608..c4b70a55a2d4a3f3871b7fc59a94b5c73798d66c 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */
-typedef char pixel __attribute__((vector_size(4)));
-typedef char vec8 __attribute__((vector_size(8)));
+typedef unsigned char pixel __attribute__((vector_size(4)));
+typedef unsigned char vec8 __attribute__((vector_size(8)));
 typedef short vec16 __attribute__((vector_size(8)));
 
 vec16 foo (pixel a, pixel b) {
index 2483f4f7235e4d7a580af8a39a4b77a402b61ef1..21aeafff0b1a0b25fa07d583ab6a2c9aaa14cbe3 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
 typedef short vec16 __attribute__((vector_size(8)));
-typedef char vec8 __attribute__((vector_size(4)));
+typedef unsigned char vec8 __attribute__((vector_size(4)));
 
 vec16 foo (vec8 a) {
   return __builtin_vis_fexpand (a);
index e6f98d412a6b90eaf4c612e206ec45dbe0124b70..dceee52f7da4c72475ed440cdb3988ea1d7d6b14 100644 (file)
@@ -1,8 +1,8 @@
 /* { dg-do compile } */
 /* { dg-options "-O -mcpu=ultrasparc -mvis" } */
-typedef char  vec8 __attribute__((vector_size(8)));
+typedef unsigned char vec8 __attribute__((vector_size(8)));
 typedef short vec16 __attribute__((vector_size(8)));
-typedef int   vec32 __attribute__((vector_size(8)));
+typedef int vec32 __attribute__((vector_size(8)));
 
 extern vec8 foo1_8(void);
 extern void foo2_8(vec8);
@@ -21,7 +21,7 @@ vec8 fun8_2(vec8 a)
 #endif
 
 extern vec16 foo1_16(void);
-extern void foo2_16(vec8);
+extern void foo2_16(vec16);
 
 
 vec16 fun16(void)
@@ -38,7 +38,7 @@ vec16 fun16_2(vec16 a)
 #endif
 
 extern vec32 foo1_32(void);
-extern void foo2_32(vec8);
+extern void foo2_32(vec32);
 
 vec32 fun32(void)
 {
index 2f7aac5617135951157aef3e9a1efc031c8f5db5..79e0c4c1577b65eca1e39acd3a527d6190ea5a99 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
 typedef short vec16 __attribute__((vector_size(8)));
-typedef char vec8 __attribute__((vector_size(4)));
+typedef unsigned char vec8 __attribute__((vector_size(4)));
 
 vec8 foo (vec16 a) {
   return __builtin_vis_fpack16 (a);
index 013795cc6d77cf09e14798dc41deb2ac018f21d0..4d6a9c02382ec292b56ad3ada4e5ea7efcf3219d 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
-typedef char pixel __attribute__((vector_size(8)));
-typedef char vec8 __attribute__((vector_size(4)));
+typedef unsigned char pixel __attribute__((vector_size(8)));
+typedef unsigned char vec8 __attribute__((vector_size(4)));
 
 pixel foo (vec8 a, vec8 b) {
   return __builtin_vis_fpmerge (a, b);
index 991cc75d661dacbcf6e1fc07f28ec92c4ebe6dc1..71b3b17ac57a7ead773a930437f4baf49feb1651 100644 (file)
@@ -2,9 +2,9 @@
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
 typedef int vec32 __attribute__((vector_size(8)));
 typedef short vec16 __attribute__((vector_size(8)));
-typedef char pixel __attribute__((vector_size(4)));
+typedef unsigned char pixel __attribute__((vector_size(4)));
 typedef short pixel16 __attribute__((vector_size(4)));
-typedef char vec8 __attribute__((vector_size(8)));
+typedef unsigned char vec8 __attribute__((vector_size(8)));
 
 vec16 foo1 (pixel a, vec16 b) {
   return __builtin_vis_fmul8x16 (a, b);
index f32805d35476b573abfaf58a605896afa9f638c0..1be7458d2be8324adf5e5963070d746d93667e7b 100644 (file)
@@ -1,7 +1,6 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
 typedef short vec16 __attribute__((vector_size(8)));
-typedef char vec8 __attribute__((vector_size(4)));
 
 void foo (vec16 a) {
   __builtin_vis_fpack16 (a);
index 48ca0dbf1394d527d9f0673881783074f25e7540..6ecc20aa178c4aa576382bf4e2937c834eecf087 100644 (file)
@@ -1,8 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-mcpu=ultrasparc -mvis" } */
-
 typedef long long int64_t;
-typedef char vec8 __attribute__((vector_size(8)));
+typedef unsigned char vec8 __attribute__((vector_size(8)));
 
 int64_t foo (vec8 a, vec8 b) {
   int64_t d = 0;