⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs6000.c

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	    warning ("-mmultiple is not supported on little endian systems");	}      if (TARGET_STRING)	{	  target_flags &= ~MASK_STRING;	  if ((target_flags_explicit & MASK_STRING) != 0)	    warning ("-mstring is not supported on little endian systems");	}    }  /* Set debug flags */  if (rs6000_debug_name)    {      if (! strcmp (rs6000_debug_name, "all"))	rs6000_debug_stack = rs6000_debug_arg = 1;      else if (! strcmp (rs6000_debug_name, "stack"))	rs6000_debug_stack = 1;      else if (! strcmp (rs6000_debug_name, "arg"))	rs6000_debug_arg = 1;      else	error ("unknown -mdebug-%s switch", rs6000_debug_name);    }  if (rs6000_traceback_name)    {      if (! strncmp (rs6000_traceback_name, "full", 4))	rs6000_traceback = traceback_full;      else if (! strncmp (rs6000_traceback_name, "part", 4))	rs6000_traceback = traceback_part;      else if (! strncmp (rs6000_traceback_name, "no", 2))	rs6000_traceback = traceback_none;      else	error ("unknown -mtraceback arg %qs; expecting %<full%>, %<partial%> or %<none%>",	       rs6000_traceback_name);    }  /* Set size of long double */  rs6000_long_double_type_size = RS6000_DEFAULT_LONG_DOUBLE_SIZE;  if (rs6000_long_double_size_string)    {      char *tail;      int size = strtol (rs6000_long_double_size_string, &tail, 10);      if (*tail != '\0' || (size != 64 && size != 128))	error ("Unknown switch -mlong-double-%s",	       rs6000_long_double_size_string);      else	rs6000_long_double_type_size = size;    }  /* Set Altivec ABI as default for powerpc64 linux.  */  if (TARGET_ELF && TARGET_64BIT)    {      rs6000_altivec_abi = 1;      rs6000_altivec_vrsave = 1;    }  /* Set the Darwin64 ABI as default for 64-bit Darwin.  */  if (DEFAULT_ABI == ABI_DARWIN && TARGET_64BIT)    {      rs6000_darwin64_abi = 1;      /* Setting to empty string is same as "-mone-byte-bool".  */#if TARGET_MACHO      darwin_one_byte_bool = "";      /* APPLE LOCAL pragma reverse_bitfields */      darwin_reverse_bitfields = 0;#endif      /* Default to natural alignment, for better performance.  */      rs6000_alignment_flags = MASK_ALIGN_NATURAL;    }  /* Handle -mabi= options.  */  rs6000_parse_abi_options ();  /* Handle -malign-XXXXX option.  */  rs6000_parse_alignment_option ();  rs6000_parse_float_gprs_option ();  /* Handle generic -mFOO=YES/NO options.  */  rs6000_parse_yes_no_option ("vrsave", rs6000_altivec_vrsave_string,			      &rs6000_altivec_vrsave);  rs6000_parse_yes_no_option ("isel", rs6000_isel_string,			      &rs6000_isel);  rs6000_parse_yes_no_option ("spe", rs6000_spe_string, &rs6000_spe);  /* Handle -mtls-size option.  */  rs6000_parse_tls_size_option ();#ifdef SUBTARGET_OVERRIDE_OPTIONS  SUBTARGET_OVERRIDE_OPTIONS;#endif#ifdef SUBSUBTARGET_OVERRIDE_OPTIONS  SUBSUBTARGET_OVERRIDE_OPTIONS;#endif#ifdef SUB3TARGET_OVERRIDE_OPTIONS  SUB3TARGET_OVERRIDE_OPTIONS;#endif  if (TARGET_E500)    {      if (TARGET_ALTIVEC)	error ("AltiVec and E500 instructions cannot coexist");      /* The e500 does not have string instructions, and we set	 MASK_STRING above when optimizing for size.  */      if ((target_flags & MASK_STRING) != 0)	target_flags = target_flags & ~MASK_STRING;      /* No SPE means 64-bit long doubles, even if an E500.  */      if (rs6000_spe_string != 0	  && !strcmp (rs6000_spe_string, "no"))	rs6000_long_double_type_size = 64;    }  else if (rs6000_select[1].string != NULL)    {      /* For the powerpc-eabispe configuration, we set all these by	 default, so let's unset them if we manually set another	 CPU that is not the E500.  */      if (rs6000_abi_string == 0)	rs6000_spe_abi = 0;      if (rs6000_spe_string == 0)	rs6000_spe = 0;      if (rs6000_float_gprs_string == 0)	rs6000_float_gprs = 0;      if (rs6000_isel_string == 0)	rs6000_isel = 0;      if (rs6000_long_double_size_string == 0)	rs6000_long_double_type_size = RS6000_DEFAULT_LONG_DOUBLE_SIZE;    }  rs6000_always_hint = (rs6000_cpu != PROCESSOR_POWER4			&& rs6000_cpu != PROCESSOR_POWER5);  rs6000_sched_groups = (rs6000_cpu == PROCESSOR_POWER4			 || rs6000_cpu == PROCESSOR_POWER5);  /* Handle -m(no-)longcall option.  This is a bit of a cheap hack,     using TARGET_OPTIONS to handle a toggle switch, but we're out of     bits in target_flags so TARGET_SWITCHES cannot be used.     Assumption here is that rs6000_longcall_switch points into the     text of the complete option, rather than being a copy, so we can     scan back for the presence or absence of the no- modifier.  */  if (rs6000_longcall_switch)    {      const char *base = rs6000_longcall_switch;      while (base[-1] != 'm') base--;      if (*rs6000_longcall_switch != '\0')	error ("invalid option %qs", base);      rs6000_default_long_calls = (base[0] != 'n');    }  /* Handle -m(no-)warn-altivec-long similarly.  */  if (rs6000_warn_altivec_long_switch)    {      const char *base = rs6000_warn_altivec_long_switch;      while (base[-1] != 'm') base--;      if (*rs6000_warn_altivec_long_switch != '\0')	error ("invalid option %qs", base);      rs6000_warn_altivec_long = (base[0] != 'n');    }  /* Handle -mprioritize-restricted-insns option.  */  rs6000_sched_restricted_insns_priority    = (rs6000_sched_groups ? 1 : 0);  if (rs6000_sched_restricted_insns_priority_str)    rs6000_sched_restricted_insns_priority =      atoi (rs6000_sched_restricted_insns_priority_str);  /* APPLE LOCAL begin only consider true dependency for grouping */  /* Handle -msched-costly-dep option.  */  rs6000_sched_costly_dep    = (rs6000_sched_groups ? true_store_to_load_dep_costly : no_dep_costly);  /* APPLE LOCAL end only consider true dependency for grouping */  if (rs6000_sched_costly_dep_str)    {      if (! strcmp (rs6000_sched_costly_dep_str, "no"))	rs6000_sched_costly_dep = no_dep_costly;      else if (! strcmp (rs6000_sched_costly_dep_str, "all"))	rs6000_sched_costly_dep = all_deps_costly;      else if (! strcmp (rs6000_sched_costly_dep_str, "true_store_to_load"))	rs6000_sched_costly_dep = true_store_to_load_dep_costly;      else if (! strcmp (rs6000_sched_costly_dep_str, "store_to_load"))	rs6000_sched_costly_dep = store_to_load_dep_costly;      else	rs6000_sched_costly_dep = atoi (rs6000_sched_costly_dep_str);    }  /* Handle -minsert-sched-nops option.  */  rs6000_sched_insert_nops    = (rs6000_sched_groups ? sched_finish_regroup_exact : sched_finish_none);  if (rs6000_sched_insert_nops_str)    {      if (! strcmp (rs6000_sched_insert_nops_str, "no"))	rs6000_sched_insert_nops = sched_finish_none;      else if (! strcmp (rs6000_sched_insert_nops_str, "pad"))	rs6000_sched_insert_nops = sched_finish_pad_groups;      else if (! strcmp (rs6000_sched_insert_nops_str, "regroup_exact"))	rs6000_sched_insert_nops = sched_finish_regroup_exact;      else	rs6000_sched_insert_nops = atoi (rs6000_sched_insert_nops_str);    }#ifdef TARGET_REGNAMES  /* If the user desires alternate register names, copy in the     alternate names now.  */  if (TARGET_REGNAMES)    memcpy (rs6000_reg_names, alt_reg_names, sizeof (rs6000_reg_names));#endif  /* Set TARGET_AIX_STRUCT_RET last, after the ABI is determined.     If -maix-struct-return or -msvr4-struct-return was explicitly     used, don't override with the ABI default.  */  if ((target_flags_explicit & MASK_AIX_STRUCT_RET) == 0)    {      if (DEFAULT_ABI == ABI_V4 && !DRAFT_V4_STRUCT_RET)	target_flags = (target_flags & ~MASK_AIX_STRUCT_RET);      else	target_flags |= MASK_AIX_STRUCT_RET;    }  if (TARGET_LONG_DOUBLE_128      && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))    REAL_MODE_FORMAT (TFmode) = &ibm_extended_format;  /* Allocate an alias set for register saves & restores from stack.  */  rs6000_sr_alias_set = new_alias_set ();  if (TARGET_TOC)    ASM_GENERATE_INTERNAL_LABEL (toc_label_name, "LCTOC", 1);  /* We can only guarantee the availability of DI pseudo-ops when     assembling for 64-bit targets.  */  if (!TARGET_64BIT)    {      targetm.asm_out.aligned_op.di = NULL;      targetm.asm_out.unaligned_op.di = NULL;    }  /* Set branch target alignment, if not optimizing for size.  */  if (!optimize_size)    {      if (rs6000_sched_groups)	{	  if (align_functions <= 0)	    align_functions = 16;	  if (align_jumps <= 0)	    align_jumps = 16;	  if (align_loops <= 0)	    align_loops = 16;	}      if (align_jumps_max_skip <= 0)	align_jumps_max_skip = 15;      if (align_loops_max_skip <= 0)	align_loops_max_skip = 15;    }  /* Arrange to save and restore machine status around nested functions.  */  init_machine_status = rs6000_init_machine_status;  /* We should always be splitting complex arguments, but we can't break     Linux and Darwin ABIs at the moment.  For now, only AIX is fixed.  */  if (DEFAULT_ABI != ABI_AIX)    targetm.calls.split_complex_arg = NULL;  /* APPLE LOCAL begin AltiVec */  /* Enable '(vector signed int)(a, b, c, d)' vector literal notation.  */  if (TARGET_ALTIVEC)    targetm.cast_expr_as_vector_init = true;  /* APPLE LOCAL end AltiVec */  /* Initialize rs6000_cost with the appropriate target costs.  */  if (optimize_size)    rs6000_cost = TARGET_POWERPC64 ? &size64_cost : &size32_cost;  else    switch (rs6000_cpu)      {      case PROCESSOR_RIOS1:	rs6000_cost = &rios1_cost;	break;      case PROCESSOR_RIOS2:	rs6000_cost = &rios2_cost;	break;      case PROCESSOR_RS64A:	rs6000_cost = &rs64a_cost;	break;      case PROCESSOR_MPCCORE:	rs6000_cost = &mpccore_cost;	break;      case PROCESSOR_PPC403:	rs6000_cost = &ppc403_cost;	break;      case PROCESSOR_PPC405:	rs6000_cost = &ppc405_cost;	break;      case PROCESSOR_PPC440:	rs6000_cost = &ppc440_cost;	break;      case PROCESSOR_PPC601:	rs6000_cost = &ppc601_cost;	break;      case PROCESSOR_PPC603:	rs6000_cost = &ppc603_cost;	break;      case PROCESSOR_PPC604:	rs6000_cost = &ppc604_cost;	break;      case PROCESSOR_PPC604e:	rs6000_cost = &ppc604e_cost;	break;      case PROCESSOR_PPC620:	rs6000_cost = &ppc620_cost;	break;      case PROCESSOR_PPC630:	rs6000_cost = &ppc630_cost;	break;      case PROCESSOR_PPC750:      case PROCESSOR_PPC7400:	rs6000_cost = &ppc750_cost;	break;      case PROCESSOR_PPC7450:	rs6000_cost = &ppc7450_cost;	break;      case PROCESSOR_PPC8540:	rs6000_cost = &ppc8540_cost;	break;      case PROCESSOR_POWER4:      case PROCESSOR_POWER5:	rs6000_cost = &power4_cost;	break;      default:	abort ();      }}/* Implement targetm.vectorize.builtin_mask_for_load.  */static treers6000_builtin_mask_for_load (void){  if (TARGET_ALTIVEC)    return altivec_builtin_mask_for_load;  else    return 0;}/* APPLE LOCAL begin 4375453 *//* Return true iff, data reference of TYPE can reach vector alignment (16)   after applying N number of iterations. This routi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -