Andrew Pinski 2c721ea947 [RISCV] Fix PR 106586: riscv32 vs ZBS
The problem here is two fold. With RISCV32, 32bit
const_int are always signed extended to 64bit in HWI.
So that means for SINGLE_BIT_MASK_OPERAND, it should
mask off the upper bits to see it is a single bit
for !TARGET_64BIT.
Plus there are a few locations which forget to call
trunc_int_for_mode when generating a SImode constant
so they are not sign extended correctly for HWI.
The predicates single_bit_mask_operand and
not_single_bit_mask_operand need get the same handling
as SINGLE_BIT_MASK_OPERAND so just use SINGLE_BIT_MASK_OPERAND.

OK? Built and tested on riscv32-linux-gnu and riscv64-linux-gnu with
--with-arch=rvNimafdc_zba_zbb_zbc_zbs where N is replaced with 32 or 64.

Thanks,
Andrew Pinski

gcc/ChangeLog:

	PR target/106586
	* config/riscv/predicates.md (single_bit_mask_operand):
	Use SINGLE_BIT_MASK_OPERAND instead of directly calling pow2p_hwi.
	(not_single_bit_mask_operand): Likewise.
	* config/riscv/riscv.cc (riscv_build_integer_1): Don't special case
	1<<31 for 32bits as it is already handled.
	Call trunc_int_for_mode on the upper part after the subtraction.
	(riscv_move_integer): Call trunc_int_for_mode before generating
	the integer just make sure the constant has been sign extended
	corectly.
	(riscv_emit_int_compare): Call trunc_int_for_mode after doing the
	addition for the new rhs.
	* config/riscv/riscv.h (SINGLE_BIT_MASK_OPERAND): If !TARGET64BIT,
	then mask off the upper 32bits of the HWI as it will be sign extended.
2022-08-24 12:15:33 -07:00
2022-03-19 00:16:22 +00:00
2022-08-02 00:16:51 +00:00
2022-08-20 00:16:26 +00:00
2022-02-28 00:16:17 +00:00
2022-08-24 12:15:33 -07:00
2022-02-14 00:16:23 +00:00
2022-07-13 00:16:33 +00:00
2022-01-03 10:42:10 +01:00
2022-08-09 00:16:47 +00:00
2022-07-09 00:16:54 +00:00
2022-06-28 00:16:58 +00:00
2022-06-04 00:16:27 +00:00
2022-05-21 00:16:32 +00:00
2022-08-17 00:17:17 +00:00
2022-08-18 00:16:43 +00:00
2022-07-30 10:35:23 -07:00
2022-08-18 00:16:43 +00:00
2022-07-23 00:16:27 +00:00
2022-06-03 00:16:40 +00:00
2022-01-03 10:42:10 +01:00
2022-07-05 00:16:36 +00:00
2022-08-04 00:16:49 +00:00
2022-01-12 00:16:39 +00:00
2022-01-03 10:42:10 +01:00
2022-01-03 10:42:10 +01:00
2022-08-02 00:16:51 +00:00
2022-07-29 00:16:21 +00:00
2021-12-17 00:16:20 +00:00
2022-07-19 17:07:04 +03:00
2022-08-19 00:16:27 +00:00
2021-12-21 09:10:57 +01:00
2022-08-04 13:38:28 -07:00

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.
Description
No description provided
Readme 2.1 GiB
Languages
C++ 31.9%
C 31.3%
Ada 12%
D 6.5%
Go 6.4%
Other 11.5%