4138e37f01de77151fad60f572515a4d2fc3f0f3
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fcompare-debug" } */
6 typedef struct rtx_def
*rtx
;
7 typedef const struct rtx_def
*const_rtx
;
9 typedef struct rtvec_def
*rtvec
;
10 extern int ix86_isa_flags
;
22 NUM_MACHINE_MODES
= MAX_MACHINE_MODE
24 extern unsigned char mode_size
[NUM_MACHINE_MODES
];
25 extern const unsigned char mode_inner
[NUM_MACHINE_MODES
];
26 extern const unsigned char mode_nunits
[NUM_MACHINE_MODES
];
40 typedef union rtunion_def rtunion
;
43 __extension__
enum rtx_code code
: 16;
45 __extension__
enum machine_mode mode
: 8;
54 extern int rtx_equal_p (const_rtx
, const_rtx
);
55 extern rtx
gen_reg_rtx (enum machine_mode
);
58 ix86_expand_vector_init_concat (enum machine_mode mode
,
59 rtx target
, rtx
*ops
, int n
);
62 ix86_expand_vector_init_general (unsigned char mmx_ok
, enum machine_mode mode
,
65 rtx ops
[32], op0
, op1
;
66 enum machine_mode half_mode
= VOIDmode
;
73 n
= mode_nunits
[mode
];
74 ix86_expand_vector_init_concat (mode
, target
, ops
, n
);
85 n
= mode_nunits
[mode
];
86 for (i
= 0; i
< n
; i
++)
87 ops
[i
] = (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
88 op0
= gen_reg_rtx (VOIDmode
);
92 if (!((ix86_isa_flags
& (1 << 19)) != 0))
96 if (!((ix86_isa_flags
& (1 << 17)) != 0))
99 n
= mode_nunits
[mode
];
100 for (i
= 0; i
< n
; i
++)
101 ops
[i
] = (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
111 n_words
= ((unsigned short) mode_size
[mode
]) / 4;
114 ix86_expand_vector_init_general (0, V4SImode
, 0, 0);
120 ix86_expand_vector_init (unsigned char mmx_ok
, rtx target
, rtx vals
)
122 enum machine_mode mode
= ((enum machine_mode
) (target
)->mode
);
123 enum machine_mode inner_mode
= ((enum machine_mode
) mode_inner
[mode
]);
124 int n_elts
= mode_nunits
[mode
];
125 int n_var
= 0, one_var
= -1;
126 unsigned char all_same
= 1, all_const_zero
= 1;
130 for (i
= 0; i
< n_elts
; ++i
)
132 x
= (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[i
]);
133 if (!((((enum rtx_code
) (x
)->code
) == CONST_INT
)
134 || ((enum rtx_code
) (x
)->code
) == CONST_DOUBLE
135 || ((enum rtx_code
) (x
)->code
) == CONST_FIXED
))
136 n_var
++, one_var
= i
;
139 if (i
> 0 && !rtx_equal_p (x
, (((((vals
)->u
.fld
[0]).rt_rtvec
))->elem
[0])))
159 ix86_expand_vector_init_general (mmx_ok
, mode
, target
, vals
);