Commit 8f61415f by Dominik Vogt Committed by Andreas Krebbel

PR target/77822: Add helper macro EXTRACT_ARGS_IN_RANGE to system.h.

The macro can be used to validate the arguments of zero_extract and
sign_extract to fix this problem:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77822

gcc/ChangeLog:

2016-12-02  Dominik Vogt  <vogt@linux.vnet.ibm.com>

	PR target/77822
	* rtl.h (EXTRACT_ARGS_IN_RANGE): New.

From-SVN: r243159
parent 7f5fc633
2016-12-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/77822
* rtl.h (EXTRACT_ARGS_IN_RANGE): New.
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com> 2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc/config/s390/s390.c (s390_builtin_vectorization_cost): New * gcc/config/s390/s390.c (s390_builtin_vectorization_cost): New
...@@ -2694,6 +2694,16 @@ get_full_set_src_cost (rtx x, machine_mode mode, struct full_rtx_costs *c) ...@@ -2694,6 +2694,16 @@ get_full_set_src_cost (rtx x, machine_mode mode, struct full_rtx_costs *c)
} }
#endif #endif
/* A convenience macro to validate the arguments of a zero_extract
expression. It determines whether SIZE lies inclusively within
[1, RANGE], POS lies inclusively within between [0, RANGE - 1]
and the sum lies inclusively within [1, RANGE]. RANGE must be
>= 1, but SIZE and POS may be negative. */
#define EXTRACT_ARGS_IN_RANGE(SIZE, POS, RANGE) \
(IN_RANGE ((POS), 0, (unsigned HOST_WIDE_INT) (RANGE) - 1) \
&& IN_RANGE ((SIZE), 1, (unsigned HOST_WIDE_INT) (RANGE) \
- (unsigned HOST_WIDE_INT)(POS)))
/* In explow.c */ /* In explow.c */
extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, machine_mode); extern HOST_WIDE_INT trunc_int_for_mode (HOST_WIDE_INT, machine_mode);
extern rtx plus_constant (machine_mode, rtx, HOST_WIDE_INT, bool = false); extern rtx plus_constant (machine_mode, rtx, HOST_WIDE_INT, bool = false);
......
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