builtins.c (apply_args_size): Handle vector arguments.
* builtins.c (apply_args_size): Handle vector arguments. (apply_result_size): Same. * machmode.def: Set WIDER mode field for all vector entries. From-SVN: r46718
This commit is contained in:
parent
729e3d3f01
commit
9016e54390
2 changed files with 52 additions and 17 deletions
|
@ -836,6 +836,22 @@ apply_args_size ()
|
|||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
if (best_mode == VOIDmode)
|
||||
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
|
||||
mode != VOIDmode;
|
||||
mode = GET_MODE_WIDER_MODE (mode))
|
||||
if (HARD_REGNO_MODE_OK (regno, mode)
|
||||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
if (best_mode == VOIDmode)
|
||||
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
|
||||
mode != VOIDmode;
|
||||
mode = GET_MODE_WIDER_MODE (mode))
|
||||
if (HARD_REGNO_MODE_OK (regno, mode)
|
||||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
mode = best_mode;
|
||||
if (mode == VOIDmode)
|
||||
abort ();
|
||||
|
@ -892,6 +908,22 @@ apply_result_size ()
|
|||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
if (best_mode == VOIDmode)
|
||||
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
|
||||
mode != VOIDmode;
|
||||
mode = GET_MODE_WIDER_MODE (mode))
|
||||
if (HARD_REGNO_MODE_OK (regno, mode)
|
||||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
if (best_mode == VOIDmode)
|
||||
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
|
||||
mode != VOIDmode;
|
||||
mode = GET_MODE_WIDER_MODE (mode))
|
||||
if (HARD_REGNO_MODE_OK (regno, mode)
|
||||
&& have_insn_for (SET, mode))
|
||||
best_mode = mode;
|
||||
|
||||
mode = best_mode;
|
||||
if (mode == VOIDmode)
|
||||
abort ();
|
||||
|
|
|
@ -108,30 +108,33 @@ DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, BITS_PER_UNIT*64, 64, 32, VOIDmo
|
|||
/* Vector modes. */
|
||||
/* There are no V1xx vector modes. These are equivalent to normal
|
||||
scalar modes. */
|
||||
DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, BITS_PER_UNIT*2, 2, 1, VOIDmode)
|
||||
DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 2, VOIDmode)
|
||||
DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 4, VOIDmode)
|
||||
DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 8, VOIDmode)
|
||||
/* The wider mode field for vectors follows in order of increasing bit
|
||||
size with QI coming before HI, HI before SI, and SI before DF
|
||||
within same bit sizes. */
|
||||
DEF_MACHMODE (V2QImode, "V2QI", MODE_VECTOR_INT, BITS_PER_UNIT*2, 2, 1, V4QImode)
|
||||
DEF_MACHMODE (V2HImode, "V2HI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 2, V8QImode)
|
||||
DEF_MACHMODE (V2SImode, "V2SI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 4, V16QImode)
|
||||
DEF_MACHMODE (V2DImode, "V2DI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 8, V8SImode)
|
||||
|
||||
DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 1, VOIDmode)
|
||||
DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 2, VOIDmode)
|
||||
DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 4, VOIDmode)
|
||||
DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 8, VOIDmode)
|
||||
DEF_MACHMODE (V4QImode, "V4QI", MODE_VECTOR_INT, BITS_PER_UNIT*4, 4, 1, V2HImode)
|
||||
DEF_MACHMODE (V4HImode, "V4HI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 2, V2SImode)
|
||||
DEF_MACHMODE (V4SImode, "V4SI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 4, V2DImode)
|
||||
DEF_MACHMODE (V4DImode, "V4DI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 8, V8DImode)
|
||||
|
||||
DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 1, VOIDmode)
|
||||
DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 2, VOIDmode)
|
||||
DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 4, VOIDmode)
|
||||
DEF_MACHMODE (V8QImode, "V8QI", MODE_VECTOR_INT, BITS_PER_UNIT*8, 8, 1, V4HImode)
|
||||
DEF_MACHMODE (V8HImode, "V8HI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 2, V4SImode)
|
||||
DEF_MACHMODE (V8SImode, "V8SI", MODE_VECTOR_INT, BITS_PER_UNIT*32, 32, 4, V4DImode)
|
||||
DEF_MACHMODE (V8DImode, "V8DI", MODE_VECTOR_INT, BITS_PER_UNIT*64, 64, 8, VOIDmode)
|
||||
|
||||
DEF_MACHMODE (V16QImode, "V16QI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 1, VOIDmode)
|
||||
DEF_MACHMODE (V16QImode, "V16QI", MODE_VECTOR_INT, BITS_PER_UNIT*16, 16, 1, V8HImode)
|
||||
|
||||
DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*8, 8, 4, VOIDmode)
|
||||
DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 8, VOIDmode)
|
||||
DEF_MACHMODE (V2SFmode, "V2SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*8, 8, 4, V4SFmode)
|
||||
DEF_MACHMODE (V2DFmode, "V2DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 8, V8SFmode)
|
||||
|
||||
DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 4, VOIDmode)
|
||||
DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 8, VOIDmode)
|
||||
DEF_MACHMODE (V4SFmode, "V4SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*16, 16, 4, V2DFmode)
|
||||
DEF_MACHMODE (V4DFmode, "V4DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 8, V8DFmode)
|
||||
|
||||
DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 4, VOIDmode)
|
||||
DEF_MACHMODE (V8SFmode, "V8SF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*32, 32, 4,V4DFmode)
|
||||
DEF_MACHMODE (V8DFmode, "V8DF", MODE_VECTOR_FLOAT, BITS_PER_UNIT*64, 64, 8, VOIDmode)
|
||||
|
||||
/* BLKmode is used for structures, arrays, etc.
|
||||
|
|
Loading…
Add table
Reference in a new issue