machmode.def (PARTIAL_INT_MODE): Add precision and name.

* machmode.def (PARTIAL_INT_MODE): Add precision and name.
	* genmodes.c (PARTIAL_INT_MODE): Add precision and name.
	(make_vector_mode): Increase namebuf to 16.
	(emit_insn_modes_h): When processing BImode, don't
	also match partial int modes.
	(emit_class_narrowest_mode): Likewise.

	* config/bfin/bfin-modes.def: Add precision to PDI.
	* config/m32c/m32c-modes.def: Add precision to PSI.
	* config/msp430/msp430-modes.def: Add precision to PSI.
	* config/rs6000/rs6000-modes.def: Add precision to PTI.
	* config/sh/sh-modes.def: Add precision to PSI and PDI.

From-SVN: r204193
This commit is contained in:
Mike Stump 2013-10-30 03:02:00 +00:00 committed by Mike Stump
parent f0be72ea22
commit d8487c949a
8 changed files with 32 additions and 17 deletions

View File

@ -1,3 +1,18 @@
2013-10-29 Mike Stump <mikestump@comcast.net>
* machmode.def (PARTIAL_INT_MODE): Add precision and name.
* genmodes.c (PARTIAL_INT_MODE): Add precision and name.
(make_vector_mode): Increase namebuf to 16.
(emit_insn_modes_h): When processing BImode, don't
also match partial int modes.
(emit_class_narrowest_mode): Likewise.
* config/bfin/bfin-modes.def: Add precision to PDI.
* config/m32c/m32c-modes.def: Add precision to PSI.
* config/msp430/msp430-modes.def: Add precision to PSI.
* config/rs6000/rs6000-modes.def: Add precision to PTI.
* config/sh/sh-modes.def: Add precision to PSI and PDI.
2013-10-29 Oleg Endo <olegendo@gcc.gnu.org> 2013-10-29 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54236 PR target/54236

View File

@ -19,7 +19,7 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* PDImode for the 40-bit accumulators. */ /* PDImode for the 40-bit accumulators. */
PARTIAL_INT_MODE (DI); PARTIAL_INT_MODE (DI, 40, PDI);
/* Two of those - covering both accumulators for vector multiplications. */ /* Two of those - covering both accumulators for vector multiplications. */
VECTOR_MODE (INT, PDI, 2); VECTOR_MODE (INT, PDI, 2);

View File

@ -22,7 +22,7 @@
/*INT_MODE (PI, 3);*/ /*INT_MODE (PI, 3);*/
/* 24-bit pointers, in 32-bit units */ /* 24-bit pointers, in 32-bit units */
PARTIAL_INT_MODE (SI); PARTIAL_INT_MODE (SI, 24, PSI);
/* 48-bit MULEX result */ /* 48-bit MULEX result */
/* INT_MODE (MI, 6); */ /* INT_MODE (MI, 6); */

View File

@ -1,3 +1,3 @@
/* 20-bit address */ /* 20-bit address */
PARTIAL_INT_MODE (SI); PARTIAL_INT_MODE (SI, 20, PSI);

View File

@ -45,4 +45,4 @@ VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
/* Replacement for TImode that only is allowed in GPRs. We also use PTImode /* Replacement for TImode that only is allowed in GPRs. We also use PTImode
for quad memory atomic operations to force getting an even/odd register for quad memory atomic operations to force getting an even/odd register
combination. */ combination. */
PARTIAL_INT_MODE (TI); PARTIAL_INT_MODE (TI, 128, PTI);

View File

@ -18,9 +18,9 @@ along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* The SH uses a partial integer mode to represent the FPSCR register. */ /* The SH uses a partial integer mode to represent the FPSCR register. */
PARTIAL_INT_MODE (SI); PARTIAL_INT_MODE (SI, 22, PSI);
/* PDI mode is used to represent a function address in a target register. */ /* PDI mode is used to represent a function address in a target register. */
PARTIAL_INT_MODE (DI); PARTIAL_INT_MODE (DI, 64, PDI);
/* Vector modes. */ /* Vector modes. */
VECTOR_MODE (INT, QI, 2); /* V2QI */ VECTOR_MODE (INT, QI, 2); /* V2QI */

View File

@ -644,10 +644,10 @@ reset_float_format (const char *name, const char *format,
m->format = format; m->format = format;
} }
/* Partial integer modes are specified by relation to a full integer mode. /* Partial integer modes are specified by relation to a full integer
For now, we do not attempt to narrow down their bit sizes. */ mode. */
#define PARTIAL_INT_MODE(M) \ #define PARTIAL_INT_MODE(M,PREC,NAME) \
make_partial_integer_mode (#M, "P" #M, -1U, __FILE__, __LINE__) make_partial_integer_mode (#M, #NAME, PREC, __FILE__, __LINE__)
static void ATTRIBUTE_UNUSED static void ATTRIBUTE_UNUSED
make_partial_integer_mode (const char *base, const char *name, make_partial_integer_mode (const char *base, const char *name,
unsigned int precision, unsigned int precision,
@ -684,7 +684,7 @@ make_vector_mode (enum mode_class bclass,
struct mode_data *v; struct mode_data *v;
enum mode_class vclass = vector_class (bclass); enum mode_class vclass = vector_class (bclass);
struct mode_data *component = find_mode (base); struct mode_data *component = find_mode (base);
char namebuf[8]; char namebuf[16];
if (vclass == MODE_RANDOM) if (vclass == MODE_RANDOM)
return; return;
@ -932,7 +932,7 @@ enum machine_mode\n{");
end will try to use it for bitfields in structures and the end will try to use it for bitfields in structures and the
like, which we do not want. Only the target md file should like, which we do not want. Only the target md file should
generate BImode widgets. */ generate BImode widgets. */
if (first && first->precision == 1) if (first && first->precision == 1 && c == MODE_INT)
first = first->next; first = first->next;
if (first && last) if (first && last)
@ -1202,7 +1202,7 @@ emit_class_narrowest_mode (void)
/* Bleah, all this to get the comment right for MIN_MODE_INT. */ /* Bleah, all this to get the comment right for MIN_MODE_INT. */
tagged_printf ("MIN_%s", mode_class_names[c], tagged_printf ("MIN_%s", mode_class_names[c],
modes[c] modes[c]
? (modes[c]->precision != 1 ? ((c != MODE_INT || modes[c]->precision != 1)
? modes[c]->name ? modes[c]->name
: (modes[c]->next : (modes[c]->next
? modes[c]->next->name ? modes[c]->next->name

View File

@ -121,11 +121,11 @@ along with GCC; see the file COPYING3. If not see
to FORMAT. Use in an ARCH-modes.def to reset the format to FORMAT. Use in an ARCH-modes.def to reset the format
of one of the float modes defined in this file. of one of the float modes defined in this file.
PARTIAL_INT_MODE (MODE); PARTIAL_INT_MODE (MODE, PRECISION, NAME);
declares a mode of class PARTIAL_INT with the same size as declares a mode of class PARTIAL_INT with the same size as
MODE (which must be an INT mode). The name of the new mode MODE (which must be an INT mode) and precision PREC.
is made by prefixing a P to the name MODE. This statement Optionally, NAME is the new name of the mode. NAME is the
may grow a PRECISION argument in the future. name of the mode.
VECTOR_MODE (CLASS, MODE, COUNT); VECTOR_MODE (CLASS, MODE, COUNT);
Declare a vector mode whose component mode is MODE (of class Declare a vector mode whose component mode is MODE (of class