2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fcompare-debug" } */
4 /* { dg-options "-O2 -fcompare-debug -fno-short-enums" {target short_enums} } */
7 typedef struct rtx_def
*rtx
;
8 typedef const struct rtx_def
*const_rtx
;
10 typedef struct rtvec_def
*rtvec
;
11 extern int ix86_isa_flags
;
23 NUM_MACHINE_MODES
= MAX_MACHINE_MODE
25 extern unsigned char mode_size
[NUM_MACHINE_MODES
];
26 extern const unsigned char mode_inner
[NUM_MACHINE_MODES
];
27 extern const unsigned char mode_nunits
[NUM_MACHINE_MODES
];
41 typedef union rtunion_def rtunion
;
44 __extension__
enum rtx_code code
: 16;
46 __extension__
enum machine_mode mode
: 8;
55 extern int rtx_equal_p (const_rtx
, const_rtx
);
56 extern rtx
gen_reg_rtx (enum machine_mode
);
59 ix86_expand_vector_init_concat (enum machine_mode mode
,
60 rtx target
, rtx
*ops
, int n
);
63 ix86_expand_vector_init_general (unsigned char mmx_ok
, enum machine_mode mode
,
66 rtx ops
[32], op0
, op1
;
67 enum machine_mode half_mode
= VOIDmode
;
74 n
= mode_nunits
[mode
];
75 ix86_expand_vector_init_concat (mode
, target
, ops
, n
);
86 n
= mode_nunits
[mode
];
87 for (i
= 0; i
< n
; i
++)
88 ops
[i
] = (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
89 op0
= gen_reg_rtx (VOIDmode
);
93 if (!((ix86_isa_flags
& (1 << 19)) != 0))
97 if (!((ix86_isa_flags
& (1 << 17)) != 0))
100 n
= mode_nunits
[mode
];
101 for (i
= 0; i
< n
; i
++)
102 ops
[i
] = (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
112 n_words
= ((unsigned short) mode_size
[mode
]) / 4;
115 ix86_expand_vector_init_general (0, V4SImode
, 0, 0);
121 ix86_expand_vector_init (unsigned char mmx_ok
, rtx target
, rtx vals
)
123 enum machine_mode mode
= ((enum machine_mode
) (target
)->mode
);
124 enum machine_mode inner_mode
= ((enum machine_mode
) mode_inner
[mode
]);
125 int n_elts
= mode_nunits
[mode
];
126 int n_var
= 0, one_var
= -1;
127 unsigned char all_same
= 1, all_const_zero
= 1;
131 for (i
= 0; i
< n_elts
; ++i
)
133 x
= (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
134 if (!((((enum rtx_code
) (x
)->code
) == CONST_INT
)
135 || ((enum rtx_code
) (x
)->code
) == CONST_DOUBLE
136 || ((enum rtx_code
) (x
)->code
) == CONST_FIXED
))
137 n_var
++, one_var
= i
;
140 if (i
> 0 && !rtx_equal_p (x
, (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[0])))
160 ix86_expand_vector_init_general (mmx_ok
, mode
, target
, vals
);