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

📄 optabs.c

📁 这是完整的gcc源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	      temp1 = gen_reg_rtx (GET_MODE (to));	      emit_unop_insn (icode, temp1, temp, FIX);	      temp = expand_binop (GET_MODE (to), add_optab, temp1,				   gen_rtx (CONST_INT, VOIDmode,					    1 << (bitsize - 1)),				   to, 1, OPTAB_LIB_WIDEN);	      if (temp != to)		emit_move_insn (to, temp);	      return;	    }	}#endif      icode = can_fix_p (DImode, GET_MODE (from), unsignedp, &must_trunc);      if (GET_MODE (to) != DImode && icode != CODE_FOR_nothing)	{	  register rtx temp = gen_reg_rtx (DImode);	  if (must_trunc)	    from = ftruncify (from);	  emit_unop_insn (icode, temp, from, FIX);	  convert_move (to, temp, unsignedp);	  return;	}      /* If FROM is not DFmode, convert to DFmode and try again from there.  */      if (GET_MODE (from) == DFmode)	break;      from = convert_to_mode (DFmode, from, 0);    }  /* We can't do it with an insn, so use a library call.     The mode of FROM is known to be DFmode.  */  to = protect_from_queue (to, 1);  from = protect_from_queue (from, 0);  if (flag_force_mem)    from = force_not_mem (from);  if (GET_MODE (to) != DImode)    {      emit_library_call (gen_rtx (SYMBOL_REF, Pmode,				  unsignedp ? "__fixunsdfsi"				  : "__fixdfsi"),			 0, SImode, 1, from, DFmode);      target = hard_libcall_value (SImode);    }  else    {      emit_library_call (gen_rtx (SYMBOL_REF, Pmode,				  unsignedp ? "__fixunsdfdi"				  : "__fixdfdi"),			 0, DImode, 1, from, DFmode);      target = hard_libcall_value (DImode);    }  if (GET_MODE (to) == GET_MODE (target))    emit_move_insn (to, target);  else    convert_move (to, target, 0);}static optabinit_optab (code)     enum rtx_code code;{  int i;  optab op = (optab) malloc (sizeof (struct optab));  op->code = code;  for (i = 0; i < NUM_MACHINE_MODES; i++)    {      op->handlers[i].insn_code = CODE_FOR_nothing;      op->handlers[i].lib_call = 0;    }  return op;}/* Call this once to initialize the contents of the optabs   appropriately for the current target machine.  */voidinit_optabs (){  init_fixtab ();  init_floattab ();  init_comparisons ();/*  init_extends (); */  add_optab = init_optab (PLUS);  sub_optab = init_optab (MINUS);  smul_optab = init_optab (MULT);  umul_optab = init_optab (UMULT);  smul_widen_optab = init_optab (MULT);  umul_widen_optab = init_optab (UMULT);  sdiv_optab = init_optab (DIV);  sdivmod_optab = init_optab (UNKNOWN);  udiv_optab = init_optab (UDIV);  udivmod_optab = init_optab (UNKNOWN);  smod_optab = init_optab (MOD);  umod_optab = init_optab (UMOD);  flodiv_optab = init_optab (DIV);  ftrunc_optab = init_optab (UNKNOWN);  and_optab = init_optab (AND);  andcb_optab = init_optab (UNKNOWN);  ior_optab = init_optab (IOR);  xor_optab = init_optab (XOR);  ashl_optab = init_optab (ASHIFT);  ashr_optab = init_optab (ASHIFTRT);  lshl_optab = init_optab (LSHIFT);  lshr_optab = init_optab (LSHIFTRT);  rotl_optab = init_optab (ROTATE);  rotr_optab = init_optab (ROTATERT);  mov_optab = init_optab (UNKNOWN);  movstrict_optab = init_optab (UNKNOWN);  cmp_optab = init_optab (UNKNOWN);  ucmp_optab = init_optab (UNKNOWN);  tst_optab = init_optab (UNKNOWN);  neg_optab = init_optab (NEG);  abs_optab = init_optab (ABS);  one_cmpl_optab = init_optab (NOT);  ffs_optab = init_optab (FFS);#ifdef HAVE_addqi3  if (HAVE_addqi3)    add_optab->handlers[(int) QImode].insn_code = CODE_FOR_addqi3;#endif#ifdef HAVE_addhi3  if (HAVE_addhi3)    add_optab->handlers[(int) HImode].insn_code = CODE_FOR_addhi3;#endif#ifdef HAVE_addsi3  if (HAVE_addsi3)    add_optab->handlers[(int) SImode].insn_code = CODE_FOR_addsi3;#endif#ifdef HAVE_adddi3  if (HAVE_adddi3)    add_optab->handlers[(int) DImode].insn_code = CODE_FOR_adddi3;#endif#ifdef HAVE_addsf3  if (HAVE_addsf3)    add_optab->handlers[(int) SFmode].insn_code = CODE_FOR_addsf3;#endif#ifdef HAVE_adddf3  if (HAVE_adddf3)    add_optab->handlers[(int) DFmode].insn_code = CODE_FOR_adddf3;#endif  add_optab->handlers[(int) DImode].lib_call = "__adddi3";  add_optab->handlers[(int) SFmode].lib_call = "__addsf3";  add_optab->handlers[(int) DFmode].lib_call = "__adddf3";#ifdef HAVE_subqi3  if (HAVE_subqi3)    sub_optab->handlers[(int) QImode].insn_code = CODE_FOR_subqi3;#endif#ifdef HAVE_subhi3  if (HAVE_subhi3)    sub_optab->handlers[(int) HImode].insn_code = CODE_FOR_subhi3;#endif#ifdef HAVE_subsi3  if (HAVE_subsi3)    sub_optab->handlers[(int) SImode].insn_code = CODE_FOR_subsi3;#endif#ifdef HAVE_subdi3  if (HAVE_subdi3)    sub_optab->handlers[(int) DImode].insn_code = CODE_FOR_subdi3;#endif#ifdef HAVE_subsf3  if (HAVE_subsf3)    sub_optab->handlers[(int) SFmode].insn_code = CODE_FOR_subsf3;#endif#ifdef HAVE_subdf3  if (HAVE_subdf3)    sub_optab->handlers[(int) DFmode].insn_code = CODE_FOR_subdf3;#endif  sub_optab->handlers[(int) DImode].lib_call = "__subdi3";  sub_optab->handlers[(int) SFmode].lib_call = "__subsf3";  sub_optab->handlers[(int) DFmode].lib_call = "__subdf3";#ifdef HAVE_mulqi3  if (HAVE_mulqi3)    smul_optab->handlers[(int) QImode].insn_code = CODE_FOR_mulqi3;#endif#ifdef HAVE_mulhi3  if (HAVE_mulhi3)    smul_optab->handlers[(int) HImode].insn_code = CODE_FOR_mulhi3;#endif#ifdef HAVE_mulsi3  if (HAVE_mulsi3)    smul_optab->handlers[(int) SImode].insn_code = CODE_FOR_mulsi3;#endif#ifdef HAVE_muldi3  if (HAVE_muldi3)    smul_optab->handlers[(int) DImode].insn_code = CODE_FOR_muldi3;#endif#ifdef HAVE_mulsf3  if (HAVE_mulsf3)    smul_optab->handlers[(int) SFmode].insn_code = CODE_FOR_mulsf3;#endif#ifdef HAVE_muldf3  if (HAVE_muldf3)    smul_optab->handlers[(int) DFmode].insn_code = CODE_FOR_muldf3;#endif#ifdef MULSI3_LIBCALL  smul_optab->handlers[(int) SImode].lib_call = MULSI3_LIBCALL;#else  smul_optab->handlers[(int) SImode].lib_call = "__mulsi3";#endif  smul_optab->handlers[(int) DImode].lib_call = "__muldi3";  smul_optab->handlers[(int) SFmode].lib_call = "__mulsf3";  smul_optab->handlers[(int) DFmode].lib_call = "__muldf3";#ifdef HAVE_mulqihi3  if (HAVE_mulqihi3)    smul_widen_optab->handlers[(int) HImode].insn_code = CODE_FOR_mulqihi3;#endif#ifdef HAVE_mulhisi3  if (HAVE_mulhisi3)    smul_widen_optab->handlers[(int) SImode].insn_code = CODE_FOR_mulhisi3;#endif#ifdef HAVE_mulsidi3  if (HAVE_mulsidi3)    smul_widen_optab->handlers[(int) DImode].insn_code = CODE_FOR_mulsidi3;#endif#ifdef HAVE_umulqi3  if (HAVE_umulqi3)    umul_optab->handlers[(int) QImode].insn_code = CODE_FOR_umulqi3;#endif#ifdef HAVE_umulhi3  if (HAVE_umulhi3)    umul_optab->handlers[(int) HImode].insn_code = CODE_FOR_umulhi3;#endif#ifdef HAVE_umulsi3  if (HAVE_umulsi3)    umul_optab->handlers[(int) SImode].insn_code = CODE_FOR_umulsi3;#endif#ifdef HAVE_umuldi3  if (HAVE_umuldi3)    umul_optab->handlers[(int) DImode].insn_code = CODE_FOR_umuldi3;#endif#ifdef HAVE_umulsf3  if (HAVE_umulsf3)    umul_optab->handlers[(int) SFmode].insn_code = CODE_FOR_umulsf3;#endif#ifdef HAVE_umuldf3  if (HAVE_umuldf3)    umul_optab->handlers[(int) DFmode].insn_code = CODE_FOR_umuldf3;#endif#ifdef UMULSI3_LIBCALL  umul_optab->handlers[(int) SImode].lib_call = UMULSI3_LIBCALL;#else  umul_optab->handlers[(int) SImode].lib_call = "__umulsi3";#endif  umul_optab->handlers[(int) DImode].lib_call = "__umuldi3";  umul_optab->handlers[(int) SFmode].lib_call = "__umulsf3";  umul_optab->handlers[(int) DFmode].lib_call = "__umuldf3";#ifdef HAVE_umulqihi3  if (HAVE_umulqihi3)    umul_widen_optab->handlers[(int) HImode].insn_code = CODE_FOR_umulqihi3;#endif#ifdef HAVE_umulhisi3  if (HAVE_umulhisi3)    umul_widen_optab->handlers[(int) SImode].insn_code = CODE_FOR_umulhisi3;#endif#ifdef HAVE_umulsidi3  if (HAVE_umulsidi3)    umul_widen_optab->handlers[(int) DImode].insn_code = CODE_FOR_umulsidi3;#endif#ifdef HAVE_divqi3  if (HAVE_divqi3)    sdiv_optab->handlers[(int) QImode].insn_code = CODE_FOR_divqi3;#endif#ifdef HAVE_divhi3  if (HAVE_divhi3)    sdiv_optab->handlers[(int) HImode].insn_code = CODE_FOR_divhi3;#endif#ifdef HAVE_divsi3  if (HAVE_divsi3)    sdiv_optab->handlers[(int) SImode].insn_code = CODE_FOR_divsi3;#endif#ifdef HAVE_divdi3  if (HAVE_divdi3)    sdiv_optab->handlers[(int) DImode].insn_code = CODE_FOR_divdi3;#endif#ifdef DIVSI3_LIBCALL  sdiv_optab->handlers[(int) SImode].lib_call = DIVSI3_LIBCALL;#else  sdiv_optab->handlers[(int) SImode].lib_call = "__divsi3";#endif  sdiv_optab->handlers[(int) DImode].lib_call = "__divdi3";#ifdef HAVE_udivqi3  if (HAVE_udivqi3)    udiv_optab->handlers[(int) QImode].insn_code = CODE_FOR_udivqi3;#endif#ifdef HAVE_udivhi3  if (HAVE_udivhi3)    udiv_optab->handlers[(int) HImode].insn_code = CODE_FOR_udivhi3;#endif#ifdef HAVE_udivsi3  if (HAVE_udivsi3)    udiv_optab->handlers[(int) SImode].insn_code = CODE_FOR_udivsi3;#endif#ifdef HAVE_udivdi3  if (HAVE_udivdi3)    udiv_optab->handlers[(int) DImode].insn_code = CODE_FOR_udivdi3;#endif#ifdef UDIVSI3_LIBCALL  udiv_optab->handlers[(int) SImode].lib_call = UDIVSI3_LIBCALL;#else  udiv_optab->handlers[(int) SImode].lib_call = "__udivsi3";#endif  udiv_optab->handlers[(int) DImode].lib_call = "__udivdi3";#ifdef HAVE_divmodqi4  if (HAVE_divmodqi4)    sdivmod_optab->handlers[(int) QImode].insn_code = CODE_FOR_divmodqi4;#endif#ifdef HAVE_divmodhi4  if (HAVE_divmodhi4)    sdivmod_optab->handlers[(int) HImode].insn_code = CODE_FOR_divmodhi4;#endif#ifdef HAVE_divmodsi4  if (HAVE_divmodsi4)    sdivmod_optab->handlers[(int) SImode].insn_code = CODE_FOR_divmodsi4;#endif#ifdef HAVE_divmoddi4  if (HAVE_divmoddi4)    sdivmod_optab->handlers[(int) DImode].insn_code = CODE_FOR_divmoddi4;#endif#ifdef HAVE_udivmodqi4  if (HAVE_udivmodqi4)    udivmod_optab->handlers[(int) QImode].insn_code = CODE_FOR_udivmodqi4;#endif#ifdef HAVE_udivmodhi4  if (HAVE_udivmodhi4)    udivmod_optab->handlers[(int) HImode].insn_code = CODE_FOR_udivmodhi4;#endif#ifdef HAVE_udivmodsi4  if (HAVE_udivmodsi4)    udivmod_optab->handlers[(int) SImode].insn_code = CODE_FOR_udivmodsi4;#endif#ifdef HAVE_udivmoddi4  if (HAVE_udivmoddi4)    udivmod_optab->handlers[(int) DImode].insn_code = CODE_FOR_udivmoddi4;#endif#ifdef HAVE_modqi3  if (HAVE_modqi3)    smod_optab->handlers[(int) QImode].insn_code = CODE_FOR_modqi3;#endif#ifdef HAVE_modhi3  if (HAVE_modhi3)    smod_optab->handlers[(int) HImode].insn_code = CODE_FOR_modhi3;#endif#ifdef HAVE_modsi3  if (HAVE_modsi3)    smod_optab->handlers[(int) SImode].insn_code = CODE_FOR_modsi3;#endif#ifdef HAVE_moddi3  if (HAVE_moddi3)    smod_optab->handlers[(int) DImode].insn_code = CODE_FOR_moddi3;#endif#ifdef MODSI3_LIBCALL  smod_optab->handlers[(int) SImode].lib_call = MODSI3_LIBCALL;#else  smod_optab->handlers[(int) SImode].lib_call = "__modsi3";#endif  smod_optab->handlers[(int) DImode].lib_call = "__moddi3";#ifdef HAVE_umodqi3  if (HAVE_umodqi3)    umod_optab->handlers[(int) QImode].insn_code = CODE_FOR_umodqi3;#endif#ifdef HAVE_umodhi3  if (HAVE_umodhi3)    umod_optab->handlers[(int) HImode].insn_code = CODE_FOR_umodhi3;#endif#ifdef HAVE_umodsi3  if (HAVE_umodsi3)    umod_optab->handlers[(int) SImode].insn_code = CODE_FOR_umodsi3;#endif#ifdef HAVE_umoddi3  if (HAVE_umoddi3)    umod_optab->handlers[(int) DImode].insn_code = CODE_FOR_umoddi3;#endif#ifdef UMODSI3_LIBCALL  umod_optab->handlers[(int) SImode].lib_call = UMODSI3_LIBCALL;#else  umod_optab->handlers[(int) SImode].lib_call = "__umodsi3";#endif  umod_optab->handlers[(int) DImode].lib_call = "__umoddi3";#ifdef HAVE_divsf3  if (HAVE_divsf3)    flodiv_optab->handlers[(int) SFmode].insn_code = CODE_FOR_divsf3;#endif#ifdef HAVE_divdf3  if (HAVE_divdf3)    flodiv_optab->handlers[(int) DFmode].insn_code = CODE_FOR_divdf3;#endif  flodiv_optab->handlers[(int) SFmode].lib_call = "__divsf3";  flodiv_optab->handlers[(int) DFmode].lib_call = "__divdf3";#ifdef HAVE_ftruncsf2  if (HAVE_ftruncsf2)    ftrunc_optab->handlers[(int) SFmode].insn_code = CODE_FOR_ftruncsf2;#endif#ifdef HAVE_ftruncdf2  if (HAVE_ftruncdf2)    ftrunc_optab->handlers[(int) DFmode].insn_code = CODE_FOR_ftruncdf2;#endif#ifdef HAVE_andqi3  if (HAVE_andqi3)    and_optab->handlers[(int) QImode].insn_code = CODE_FOR_andqi3;#endif#ifdef HAVE_andhi3  if (HAVE_andhi3)    and_optab->handlers[(int) HImode].insn_code = CODE_FOR_andhi3;#endif#ifdef HAVE_andsi3  if (HAVE_andsi3)    and_optab->handlers[(int) SImode].insn_code = CODE_FOR_andsi3;#endif#ifdef HAVE_anddi3  if (HAVE_anddi3)    and_optab->handlers[(int) DImode].insn_code = CODE_FOR_anddi3;#endif  and_optab->handlers[(int) DImode].lib_call = "__anddi3";#ifdef HAVE_andcbqi3  if (HAVE_andcbqi3)    andcb_optab->handlers[(int) QImode].insn_code = CODE_FOR_andcbqi3;#endif#ifdef HAVE_andcbhi3

⌨️ 快捷键说明

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