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

📄 vfp.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 2 页
字号:
(define_insn "*muldf3_vfp"  [(set (match_operand:DF	   0 "s_register_operand" "+w")	(mult:DF (match_operand:DF 1 "s_register_operand" "w")		 (match_operand:DF 2 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmuld%?\\t%P0, %P1, %P2"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")])(define_insn "*mulsf3negsf_vfp"  [(set (match_operand:SF		   0 "s_register_operand" "+w")	(mult:SF (neg:SF (match_operand:SF 1 "s_register_operand" "w"))		 (match_operand:SF	   2 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmuls%?\\t%0, %1, %2"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*muldf3negdf_vfp"  [(set (match_operand:DF		   0 "s_register_operand" "+w")	(mult:DF (neg:DF (match_operand:DF 1 "s_register_operand" "w"))		 (match_operand:DF	   2 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmuld%?\\t%P0, %P1, %P2"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")]);; Multiply-accumulate insns;; 0 = 1 * 2 + 0(define_insn "*mulsf3addsf_vfp"  [(set (match_operand:SF		    0 "s_register_operand" "=w")	(plus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "w")			  (match_operand:SF 3 "s_register_operand" "w"))		 (match_operand:SF	    1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmacs%?\\t%0, %2, %3"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*muldf3adddf_vfp"  [(set (match_operand:DF		    0 "s_register_operand" "=w")	(plus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w")			  (match_operand:DF 3 "s_register_operand" "w"))		 (match_operand:DF	    1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmacd%?\\t%P0, %P2, %P3"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")]);; 0 = 1 * 2 - 0(define_insn "*mulsf3subsf_vfp"  [(set (match_operand:SF		     0 "s_register_operand" "=w")	(minus:SF (mult:SF (match_operand:SF 2 "s_register_operand" "w")			   (match_operand:SF 3 "s_register_operand" "w"))		  (match_operand:SF	     1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmscs%?\\t%0, %2, %3"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*muldf3subdf_vfp"  [(set (match_operand:DF		     0 "s_register_operand" "=w")	(minus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w")			   (match_operand:DF 3 "s_register_operand" "w"))		  (match_operand:DF	     1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmscd%?\\t%P0, %P2, %P3"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")]);; 0 = -(1 * 2) + 0(define_insn "*mulsf3negsfaddsf_vfp"  [(set (match_operand:SF		     0 "s_register_operand" "=w")	(minus:SF (match_operand:SF	     1 "s_register_operand" "0")		  (mult:SF (match_operand:SF 2 "s_register_operand" "w")			   (match_operand:SF 3 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmacs%?\\t%0, %2, %3"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*fmuldf3negdfadddf_vfp"  [(set (match_operand:DF		     0 "s_register_operand" "=w")	(minus:DF (match_operand:DF	     1 "s_register_operand" "0")		  (mult:DF (match_operand:DF 2 "s_register_operand" "w")			   (match_operand:DF 3 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmacd%?\\t%P0, %P2, %P3"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")]);; 0 = -(1 * 2) - 0(define_insn "*mulsf3negsfsubsf_vfp"  [(set (match_operand:SF		      0 "s_register_operand" "=w")	(minus:SF (mult:SF		    (neg:SF (match_operand:SF 2 "s_register_operand" "w"))		    (match_operand:SF	      3 "s_register_operand" "w"))		  (match_operand:SF	      1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmscs%?\\t%0, %2, %3"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*muldf3negdfsubdf_vfp"  [(set (match_operand:DF		      0 "s_register_operand" "=w")	(minus:DF (mult:DF		    (neg:DF (match_operand:DF 2 "s_register_operand" "w"))		    (match_operand:DF	      3 "s_register_operand" "w"))		  (match_operand:DF	      1 "s_register_operand" "0")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fnmscd%?\\t%P0, %P2, %P3"  [(set_attr "predicable" "yes")   (set_attr "type" "fmul")]);; Conversion routines(define_insn "*extendsfdf2_vfp"  [(set (match_operand:DF		   0 "s_register_operand" "=w")	(float_extend:DF (match_operand:SF 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fcvtds%?\\t%P0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*truncdfsf2_vfp"  [(set (match_operand:SF		   0 "s_register_operand" "=w")	(float_truncate:SF (match_operand:DF 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fcvtsd%?\\t%0, %P1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*truncsisf2_vfp"  [(set (match_operand:SI		  0 "s_register_operand" "=w")	(fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "ftosizs%?\\t%0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*truncsidf2_vfp"  [(set (match_operand:SI		  0 "s_register_operand" "=w")	(fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "ftosizd%?\\t%0, %P1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "fixuns_truncsfsi2"  [(set (match_operand:SI		  0 "s_register_operand" "=w")	(unsigned_fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "ftouizs%?\\t%0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "fixuns_truncdfsi2"  [(set (match_operand:SI		  0 "s_register_operand" "=w")	(unsigned_fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "w"))))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "ftouizd%?\\t%0, %P1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*floatsisf2_vfp"  [(set (match_operand:SF	    0 "s_register_operand" "=w")	(float:SF (match_operand:SI 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fsitos%?\\t%0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "*floatsidf2_vfp"  [(set (match_operand:DF	    0 "s_register_operand" "=w")	(float:DF (match_operand:SI 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fsitod%?\\t%P0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "floatunssisf2"  [(set (match_operand:SF	    0 "s_register_operand" "=w")	(unsigned_float:SF (match_operand:SI 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fuitos%?\\t%0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")])(define_insn "floatunssidf2"  [(set (match_operand:DF	    0 "s_register_operand" "=w")	(unsigned_float:DF (match_operand:SI 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fuitod%?\\t%P0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "farith")]);; Sqrt insns.(define_insn "*sqrtsf2_vfp"  [(set (match_operand:SF	   0 "s_register_operand" "=w")	(sqrt:SF (match_operand:SF 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fsqrts%?\\t%0, %1"  [(set_attr "predicable" "yes")   (set_attr "type" "fdivs")])(define_insn "*sqrtdf2_vfp"  [(set (match_operand:DF	   0 "s_register_operand" "=w")	(sqrt:DF (match_operand:DF 1 "s_register_operand" "w")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fsqrtd%?\\t%P0, %P1"  [(set_attr "predicable" "yes")   (set_attr "type" "fdivd")]);; Patterns to split/copy vfp condition flags.(define_insn "*movcc_vfp"  [(set (reg CC_REGNUM)	(reg VFPCC_REGNUM))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "fmstat%?"  [(set_attr "conds" "set")   (set_attr "type" "ffarith")])(define_insn_and_split "*cmpsf_split_vfp"  [(set (reg:CCFP CC_REGNUM)	(compare:CCFP (match_operand:SF 0 "s_register_operand"  "w")		      (match_operand:SF 1 "vfp_compare_operand" "wG")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "#"  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  [(set (reg:CCFP VFPCC_REGNUM)	(compare:CCFP (match_dup 0)		      (match_dup 1)))   (set (reg:CCFP CC_REGNUM)	(reg:CCFP VFPCC_REGNUM))]  "")(define_insn_and_split "*cmpsf_trap_split_vfp"  [(set (reg:CCFPE CC_REGNUM)	(compare:CCFPE (match_operand:SF 0 "s_register_operand"  "w")		       (match_operand:SF 1 "vfp_compare_operand" "wG")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "#"  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  [(set (reg:CCFPE VFPCC_REGNUM)	(compare:CCFPE (match_dup 0)		       (match_dup 1)))   (set (reg:CCFPE CC_REGNUM)	(reg:CCFPE VFPCC_REGNUM))]  "")(define_insn_and_split "*cmpdf_split_vfp"  [(set (reg:CCFP CC_REGNUM)	(compare:CCFP (match_operand:DF 0 "s_register_operand"  "w")		      (match_operand:DF 1 "vfp_compare_operand" "wG")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "#"  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  [(set (reg:CCFP VFPCC_REGNUM)	(compare:CCFP (match_dup 0)		       (match_dup 1)))   (set (reg:CCFP CC_REGNUM)	(reg:CCFPE VFPCC_REGNUM))]  "")(define_insn_and_split "*cmpdf_trap_split_vfp"  [(set (reg:CCFPE CC_REGNUM)	(compare:CCFPE (match_operand:DF 0 "s_register_operand"  "w")		       (match_operand:DF 1 "vfp_compare_operand" "wG")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "#"  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  [(set (reg:CCFPE VFPCC_REGNUM)	(compare:CCFPE (match_dup 0)		       (match_dup 1)))   (set (reg:CCFPE CC_REGNUM)	(reg:CCFPE VFPCC_REGNUM))]  "");; Comparison patterns(define_insn "*cmpsf_vfp"  [(set (reg:CCFP VFPCC_REGNUM)	(compare:CCFP (match_operand:SF 0 "s_register_operand"  "w,w")		      (match_operand:SF 1 "vfp_compare_operand" "w,G")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "@   fcmps%?\\t%0, %1   fcmpzs%?\\t%0"  [(set_attr "predicable" "yes")   (set_attr "type" "ffarith")])(define_insn "*cmpsf_trap_vfp"  [(set (reg:CCFPE VFPCC_REGNUM)	(compare:CCFPE (match_operand:SF 0 "s_register_operand"  "w,w")		       (match_operand:SF 1 "vfp_compare_operand" "w,G")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "@   fcmpes%?\\t%0, %1   fcmpezs%?\\t%0"  [(set_attr "predicable" "yes")   (set_attr "type" "ffarith")])(define_insn "*cmpdf_vfp"  [(set (reg:CCFP VFPCC_REGNUM)	(compare:CCFP (match_operand:DF 0 "s_register_operand"  "w,w")		      (match_operand:DF 1 "vfp_compare_operand" "w,G")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "@   fcmpd%?\\t%P0, %P1   fcmpzd%?\\t%P0"  [(set_attr "predicable" "yes")   (set_attr "type" "ffarith")])(define_insn "*cmpdf_trap_vfp"  [(set (reg:CCFPE VFPCC_REGNUM)	(compare:CCFPE (match_operand:DF 0 "s_register_operand"  "w,w")		       (match_operand:DF 1 "vfp_compare_operand" "w,G")))]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "@   fcmped%?\\t%P0, %P1   fcmpezd%?\\t%P0"  [(set_attr "predicable" "yes")   (set_attr "type" "ffarith")]);; Store multiple insn used in function prologue.(define_insn "*push_multi_vfp"  [(match_parallel 2 "multi_register_push"    [(set (match_operand:BLK 0 "memory_operand" "=m")	  (unspec:BLK [(match_operand:DF 1 "s_register_operand" "w")]		      UNSPEC_PUSH_MULT))])]  "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP"  "* return vfp_output_fstmx (operands);"  [(set_attr "type" "f_store")]);; Unimplemented insns:;; fldm*;; fstm*;; fmdhr et al (VFPv1);; Support for xD (single precision only) variants.;; fmrrs, fmsrr

⌨️ 快捷键说明

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