- register which produces false dependencies */
- ia32_cg_config.use_incdec = !FLAGS(opt_arch, arch_netburst | arch_nocona | arch_geode) || opt_size;
- ia32_cg_config.use_sse2 = use_sse2;
- ia32_cg_config.use_ffreep = FLAGS(opt_arch, arch_athlon_plus);
- ia32_cg_config.use_ftst = !FLAGS(arch, arch_feature_p6_insn);
- ia32_cg_config.use_femms = FLAGS(opt_arch, arch_athlon_plus) &&
- FLAGS(arch, arch_feature_mmx | arch_all_amd);
- ia32_cg_config.use_fucomi = FLAGS(arch, arch_feature_p6_insn);
- ia32_cg_config.use_cmov = FLAGS(arch, arch_feature_p6_insn);
- ia32_cg_config.use_modeD_moves = FLAGS(opt_arch, arch_athlon_plus | arch_geode | arch_ppro |
- arch_netburst | arch_nocona | arch_core2 | arch_generic32);
- ia32_cg_config.use_add_esp_4 = FLAGS(opt_arch, arch_geode | arch_athlon_plus |
- arch_netburst | arch_nocona | arch_core2 | arch_generic32) &&
- !opt_size;
- ia32_cg_config.use_add_esp_8 = FLAGS(opt_arch, arch_geode | arch_athlon_plus |
- arch_i386 | arch_i486 | arch_ppro | arch_netburst |
- arch_nocona | arch_core2 | arch_generic32) &&
- !opt_size;
- ia32_cg_config.use_sub_esp_4 = FLAGS(opt_arch, arch_athlon_plus | arch_ppro |
- arch_netburst | arch_nocona | arch_core2 | arch_generic32) &&
- !opt_size;
- ia32_cg_config.use_sub_esp_8 = FLAGS(opt_arch, arch_athlon_plus | arch_i386 | arch_i486 |
- arch_ppro | arch_netburst | arch_nocona | arch_core2 | arch_generic32) &&
- !opt_size;
- ia32_cg_config.use_imul_mem_imm32 = !FLAGS(opt_arch, arch_k8 | arch_k10) || opt_size;
- ia32_cg_config.use_pxor = FLAGS(opt_arch, arch_netburst);
- ia32_cg_config.use_mov_0 = FLAGS(opt_arch, arch_k6) && !opt_size;
- ia32_cg_config.use_pad_return = FLAGS(opt_arch, arch_athlon_plus | arch_core2 | arch_generic32) && !opt_size;
- ia32_cg_config.use_bt = FLAGS(opt_arch, arch_core2 | arch_athlon_plus) || opt_size;
- ia32_cg_config.optimize_cc = opt_cc;
- ia32_cg_config.use_unsafe_floatconv = opt_unsafe_floatconv;
-
- ia32_cg_config.function_alignment = arch_costs->function_alignment;
- ia32_cg_config.label_alignment = arch_costs->label_alignment;
- ia32_cg_config.label_alignment_max_skip = arch_costs->label_alignment_max_skip;
-
- if (opt_arch & (arch_i386 | arch_i486)) {
- ia32_cg_config.label_alignment_factor = 0;
- } else if (opt_arch & arch_all_amd) {
- ia32_cg_config.label_alignment_factor = 3;
- } else {
- ia32_cg_config.label_alignment_factor = 2;
- }
+ * register which produces false dependencies */
+ c->use_incdec = !FLAGS(opt_arch, arch_netburst | arch_nocona | arch_core2 | arch_geode) || opt_size;
+ c->use_sse2 = use_sse2 && FLAGS(arch, arch_feature_sse2);
+ c->use_ffreep = FLAGS(opt_arch, arch_athlon_plus);
+ c->use_ftst = !FLAGS(arch, arch_feature_p6_insn);
+ /* valgrind can't cope with femms yet and the usefulness of the optimization
+ * is questionable anyway */
+#if 0
+ c->use_femms = FLAGS(opt_arch, arch_athlon_plus) &&
+ FLAGS(arch, arch_feature_mmx | arch_all_amd);
+#else
+ c->use_femms = 0;
+#endif
+ c->use_fucomi = FLAGS(arch, arch_feature_p6_insn);
+ c->use_cmov = FLAGS(arch, arch_feature_p6_insn);
+ c->use_modeD_moves = FLAGS(opt_arch, arch_generic32 | arch_athlon_plus | arch_netburst | arch_nocona | arch_core2 | arch_ppro | arch_geode);
+ c->use_add_esp_4 = FLAGS(opt_arch, arch_generic32 | arch_athlon_plus | arch_netburst | arch_nocona | arch_core2 | arch_geode) && !opt_size;
+ c->use_add_esp_8 = FLAGS(opt_arch, arch_generic32 | arch_athlon_plus | arch_netburst | arch_nocona | arch_core2 | arch_ppro | arch_geode | arch_i386 | arch_i486) && !opt_size;
+ c->use_sub_esp_4 = FLAGS(opt_arch, arch_generic32 | arch_athlon_plus | arch_netburst | arch_nocona | arch_core2 | arch_ppro) && !opt_size;
+ c->use_sub_esp_8 = FLAGS(opt_arch, arch_generic32 | arch_athlon_plus | arch_netburst | arch_nocona | arch_core2 | arch_ppro | arch_i386 | arch_i486) && !opt_size;
+ c->use_imul_mem_imm32 = !FLAGS(opt_arch, arch_k8 | arch_k10) || opt_size;
+ c->use_pxor = FLAGS(opt_arch, arch_netburst);
+ c->use_mov_0 = FLAGS(opt_arch, arch_k6) && !opt_size;
+ c->use_short_sex_eax = !FLAGS(opt_arch, arch_k6) && !opt_size;
+ c->use_pad_return = FLAGS(opt_arch, arch_athlon_plus | arch_core2 | arch_generic32) && !opt_size;
+ c->use_bt = FLAGS(opt_arch, arch_core2 | arch_athlon_plus) || opt_size;
+ c->use_fisttp = FLAGS(opt_arch & arch, arch_feature_sse3);
+ c->use_sse_prefetch = FLAGS(arch, (arch_feature_3DNowE | arch_feature_sse1));
+ c->use_3dnow_prefetch = FLAGS(arch, arch_feature_3DNow);
+ c->use_popcnt = FLAGS(arch, (arch_feature_sse4_2 | arch_feature_sse4a));
+ c->use_i486 = (arch & arch_mask) >= arch_i486;
+ c->optimize_cc = opt_cc;
+ c->use_unsafe_floatconv = opt_unsafe_floatconv;
+ c->emit_machcode = emit_machcode;
+
+ c->function_alignment = arch_costs->function_alignment;
+ c->label_alignment = arch_costs->label_alignment;
+ c->label_alignment_max_skip = arch_costs->label_alignment_max_skip;
+
+ c->label_alignment_factor =
+ FLAGS(opt_arch, arch_i386 | arch_i486) || opt_size ? 0 :
+ opt_arch & arch_all_amd ? 3 :
+ 2;