Commit bb60efd9 by James Greenhalgh Committed by James Greenhalgh

[AArch64] Remap neon vcmp functions to C/TREE

gcc/
	* config/aarch64/aarch64-builtins.c (BUILTIN_VALLDI): Define.
	(aarch64_fold_builtin): Add folding for cm<eq,ge,gt,tst>.
	* config/aarch64/aarch64-simd-builtins.def
	(cmeq): Update to BUILTIN_VALLDI.
	(cmgt): Likewise.
	(cmge): Likewise.
	(cmle): Likewise.
	(cmlt): Likewise.
	* config/aarch64/arm_neon.h
	(vc<eq, lt, le, gt, ge, tst><z><qsd>_<fpsu><8,16,32,64>): Remap
	to builtins or C as appropriate.

From-SVN: r198491
parent 889b9412
2013-05-01 James Greenhalgh <james.greenhalgh@arm.com> 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64-builtins.c (BUILTIN_VALLDI): Define.
(aarch64_fold_builtin): Add folding for cm<eq,ge,gt,tst>.
* config/aarch64/aarch64-simd-builtins.def
(cmeq): Update to BUILTIN_VALLDI.
(cmgt): Likewise.
(cmge): Likewise.
(cmle): Likewise.
(cmlt): Likewise.
* config/aarch64/arm_neon.h
(vc<eq, lt, le, gt, ge, tst><z><qsd>_<fpsu><8,16,32,64>): Remap
to builtins or C as appropriate.
2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to... * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
(cmgeu): ...This. (cmgeu): ...This.
(cmhi): Rename to... (cmhi): Rename to...
......
...@@ -191,6 +191,9 @@ typedef struct ...@@ -191,6 +191,9 @@ typedef struct
#define BUILTIN_VALL(T, N, MAP) \ #define BUILTIN_VALL(T, N, MAP) \
VAR10 (T, N, MAP, v8qi, v16qi, v4hi, v8hi, v2si, \ VAR10 (T, N, MAP, v8qi, v16qi, v4hi, v8hi, v2si, \
v4si, v2di, v2sf, v4sf, v2df) v4si, v2di, v2sf, v4sf, v2df)
#define BUILTIN_VALLDI(T, N, MAP) \
VAR11 (T, N, MAP, v8qi, v16qi, v4hi, v8hi, v2si, \
v4si, v2di, v2sf, v4sf, v2df, di)
#define BUILTIN_VB(T, N, MAP) \ #define BUILTIN_VB(T, N, MAP) \
VAR2 (T, N, MAP, v8qi, v16qi) VAR2 (T, N, MAP, v8qi, v16qi)
#define BUILTIN_VD(T, N, MAP) \ #define BUILTIN_VD(T, N, MAP) \
...@@ -1314,11 +1317,26 @@ aarch64_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args, ...@@ -1314,11 +1317,26 @@ aarch64_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args,
BUILTIN_VDQF (UNOP, abs, 2) BUILTIN_VDQF (UNOP, abs, 2)
return fold_build1 (ABS_EXPR, type, args[0]); return fold_build1 (ABS_EXPR, type, args[0]);
break; break;
BUILTIN_VALLDI (BINOP, cmge, 0)
return fold_build2 (GE_EXPR, type, args[0], args[1]);
break;
BUILTIN_VALLDI (BINOP, cmgt, 0)
return fold_build2 (GT_EXPR, type, args[0], args[1]);
break;
BUILTIN_VALLDI (BINOP, cmeq, 0)
return fold_build2 (EQ_EXPR, type, args[0], args[1]);
break;
BUILTIN_VSDQ_I_DI (BINOP, cmtst, 0)
{
tree and_node = fold_build2 (BIT_AND_EXPR, type, args[0], args[1]);
tree vec_zero_node = build_zero_cst (type);
return fold_build2 (NE_EXPR, type, and_node, vec_zero_node);
break;
}
VAR1 (UNOP, floatv2si, 2, v2sf) VAR1 (UNOP, floatv2si, 2, v2sf)
VAR1 (UNOP, floatv4si, 2, v4sf) VAR1 (UNOP, floatv4si, 2, v4sf)
VAR1 (UNOP, floatv2di, 2, v2df) VAR1 (UNOP, floatv2di, 2, v2df)
return fold_build1 (FLOAT_EXPR, type, args[0]); return fold_build1 (FLOAT_EXPR, type, args[0]);
break;
default: default:
break; break;
} }
......
...@@ -224,11 +224,11 @@ ...@@ -224,11 +224,11 @@
BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n, 0) BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n, 0)
/* Implemented by aarch64_cm<cmp><mode>. */ /* Implemented by aarch64_cm<cmp><mode>. */
BUILTIN_VSDQ_I_DI (BINOP, cmeq, 0) BUILTIN_VALLDI (BINOP, cmeq, 0)
BUILTIN_VSDQ_I_DI (BINOP, cmge, 0) BUILTIN_VALLDI (BINOP, cmge, 0)
BUILTIN_VSDQ_I_DI (BINOP, cmgt, 0) BUILTIN_VALLDI (BINOP, cmgt, 0)
BUILTIN_VSDQ_I_DI (BINOP, cmle, 0) BUILTIN_VALLDI (BINOP, cmle, 0)
BUILTIN_VSDQ_I_DI (BINOP, cmlt, 0) BUILTIN_VALLDI (BINOP, cmlt, 0)
/* Implemented by aarch64_cm<cmp><mode>. */ /* Implemented by aarch64_cm<cmp><mode>. */
BUILTIN_VSDQ_I_DI (BINOP, cmgeu, 0) BUILTIN_VSDQ_I_DI (BINOP, cmgeu, 0)
BUILTIN_VSDQ_I_DI (BINOP, cmgtu, 0) BUILTIN_VSDQ_I_DI (BINOP, cmgtu, 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment