diff mbox

[AArch64,1/4,Fix,vtbx1] Allow signed and unsigned versions of intrinsics to coexist.

Message ID 1385133102-19231-2-git-send-email-james.greenhalgh@arm.com
State New
Headers show

Commit Message

James Greenhalgh Nov. 22, 2013, 3:11 p.m. UTC
Hi,

One oversight in the design for the AArch64 Simd Builtins type
building foo I put in this week is that you cannot have both
signed and unsigned versions of the same builtin.

Although I solved the problem at a user level by appending a "type"
string to the builtin name, I didn't manage to solve it internally
for the aarch64_builtins enum.

This patch fixes that by appending the TYPE parameter to each
of these enum names.

Thus:
  AARCH64_SIMD_BUILTIN_my_builtin
Becomes:
  AARCH64_SIMD_BUILTIN_BINOP_my_builtin

And if we also wanted an unsigned variant we would see:
  AARCH64_SIMD_BUILTIN_BINOP_U_my_builtin

Regression tested on aarch64-none-elf with no regressions.

OK?

Thanks,
James

---
gcc/

2013-11-22  James Greenhalgh  <james.greenhalgh@arm.com>

	* config/aarch64/aarch64-builtins.c
	(VAR1): Use new naming scheme for aarch64_builtins.
	(aarch64_builtin_vectorized_function): Use new
	aarch64_builtins names.

Comments

Marcus Shawcroft Nov. 26, 2013, 9:48 a.m. UTC | #1
On 22 November 2013 15:11, James Greenhalgh <james.greenhalgh@arm.com> wrote:


> gcc/
>
> 2013-11-22  James Greenhalgh  <james.greenhalgh@arm.com>
>
>         * config/aarch64/aarch64-builtins.c
>         (VAR1): Use new naming scheme for aarch64_builtins.
>         (aarch64_builtin_vectorized_function): Use new
>         aarch64_builtins names.

OK /Marcus
diff mbox

Patch

diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
index fec7b22..cabef23 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -309,7 +309,7 @@  static aarch64_simd_builtin_datum aarch64_simd_builtin_data[] = {
 
 #undef VAR1
 #define VAR1(T, N, MAP, A) \
-  AARCH64_SIMD_BUILTIN_##N##A,
+  AARCH64_SIMD_BUILTIN_##T##_##N##A,
 
 enum aarch64_builtins
 {
@@ -886,11 +886,11 @@  aarch64_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in)
 #define AARCH64_CHECK_BUILTIN_MODE(C, N) 1
 #define AARCH64_FIND_FRINT_VARIANT(N) \
   (AARCH64_CHECK_BUILTIN_MODE (2, D) \
-    ? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_##N##v2df] \
+    ? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_UNOP_##N##v2df] \
     : (AARCH64_CHECK_BUILTIN_MODE (4, S) \
-	? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_##N##v4sf] \
+	? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_UNOP_##N##v4sf] \
 	: (AARCH64_CHECK_BUILTIN_MODE (2, S) \
-	   ? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_##N##v2sf] \
+	   ? aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_UNOP_##N##v2sf] \
 	   : NULL_TREE)))
   if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
     {
@@ -926,7 +926,7 @@  aarch64_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in)
         case BUILT_IN_CLZ:
           {
             if (AARCH64_CHECK_BUILTIN_MODE (4, S))
-              return aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_clzv4si];
+              return aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_UNOP_clzv4si];
             return NULL_TREE;
           }
 #undef AARCH64_CHECK_BUILTIN_MODE
@@ -936,47 +936,47 @@  aarch64_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in)
 	case BUILT_IN_LFLOOR:
 	case BUILT_IN_IFLOORF:
 	  {
-	    tree new_tree = NULL_TREE;
+	    enum aarch64_builtins builtin;
 	    if (AARCH64_CHECK_BUILTIN_MODE (2, D))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lfloorv2dfv2di];
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lfloorv2dfv2di;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (4, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lfloorv4sfv4si];
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lfloorv4sfv4si;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (2, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lfloorv2sfv2si];
-	    return new_tree;
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lfloorv2sfv2si;
+	    else
+	      return NULL_TREE;
+
+	    return aarch64_builtin_decls[builtin];
 	  }
 	case BUILT_IN_LCEIL:
 	case BUILT_IN_ICEILF:
 	  {
-	    tree new_tree = NULL_TREE;
+	    enum aarch64_builtins builtin;
 	    if (AARCH64_CHECK_BUILTIN_MODE (2, D))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lceilv2dfv2di];
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lceilv2dfv2di;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (4, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lceilv4sfv4si];
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lceilv4sfv4si;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (2, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lceilv2sfv2si];
-	    return new_tree;
+	      builtin = AARCH64_SIMD_BUILTIN_UNOP_lceilv2sfv2si;
+	    else
+	      return NULL_TREE;
+
+	    return aarch64_builtin_decls[builtin];
 	  }
 	case BUILT_IN_LROUND:
 	case BUILT_IN_IROUNDF:
 	  {
-	    tree new_tree = NULL_TREE;
+	    enum aarch64_builtins builtin;
 	    if (AARCH64_CHECK_BUILTIN_MODE (2, D))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lroundv2dfv2di];
+	      builtin =	AARCH64_SIMD_BUILTIN_UNOP_lroundv2dfv2di;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (4, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lroundv4sfv4si];
+	      builtin =	AARCH64_SIMD_BUILTIN_UNOP_lroundv4sfv4si;
 	    else if (AARCH64_CHECK_BUILTIN_MODE (2, S))
-	      new_tree =
-		aarch64_builtin_decls[AARCH64_SIMD_BUILTIN_lroundv2sfv2si];
-	    return new_tree;
+	      builtin =	AARCH64_SIMD_BUILTIN_UNOP_lroundv2sfv2si;
+	    else
+	      return NULL_TREE;
+
+	    return aarch64_builtin_decls[builtin];
 	  }
 
 	default:
@@ -989,7 +989,7 @@  aarch64_builtin_vectorized_function (tree fndecl, tree type_out, tree type_in)
 
 #undef VAR1
 #define VAR1(T, N, MAP, A) \
-  case AARCH64_SIMD_BUILTIN_##N##A:
+  case AARCH64_SIMD_BUILTIN_##T##_##N##A:
 
 tree
 aarch64_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args,