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

📄 xtensa.md

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 MD
📖 第 1 页 / 共 4 页
字号:
(define_insn "nsau"  [(set (match_operand:SI 0 "register_operand" "=a")	(unspec:SI [(match_operand:SI 1 "register_operand" "r")] UNSPEC_NSAU))]  "TARGET_NSA"  "nsau\t%0, %1"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")]);; Negation and one's complement.(define_insn "negsi2"  [(set (match_operand:SI 0 "register_operand" "=a")	(neg:SI (match_operand:SI 1 "register_operand" "r")))]  ""  "neg\t%0, %1"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")])(define_expand "one_cmplsi2"  [(set (match_operand:SI 0 "register_operand" "")	(not:SI (match_operand:SI 1 "register_operand" "")))]  ""{  rtx temp = gen_reg_rtx (SImode);  emit_insn (gen_movsi (temp, constm1_rtx));  emit_insn (gen_xorsi3 (operands[0], temp, operands[1]));  DONE;})(define_insn "negsf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(neg:SF (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "neg.s\t%0, %1"  [(set_attr "type"	"farith")   (set_attr "mode"	"SF")   (set_attr "length"	"3")]);; Logical instructions.(define_insn "andsi3"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(and:SI (match_operand:SI 1 "register_operand" "%r,r")		(match_operand:SI 2 "mask_operand" "P,r")))]  ""  "@   extui\t%0, %1, 0, %K2   and\t%0, %1, %2"  [(set_attr "type"	"arith,arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3,3")])(define_insn "iorsi3"  [(set (match_operand:SI 0 "register_operand" "=a")	(ior:SI (match_operand:SI 1 "register_operand" "%r")		(match_operand:SI 2 "register_operand" "r")))]  ""  "or\t%0, %1, %2"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")])(define_insn "xorsi3"  [(set (match_operand:SI 0 "register_operand" "=a")	(xor:SI (match_operand:SI 1 "register_operand" "%r")		(match_operand:SI 2 "register_operand" "r")))]  ""  "xor\t%0, %1, %2"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")]);; Zero-extend instructions.(define_insn "zero_extendhisi2"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(zero_extend:SI (match_operand:HI 1 "nonimmed_operand" "r,U")))]  ""  "@   extui\t%0, %1, 0, 16   l16ui\t%0, %1"  [(set_attr "type"	"arith,load")   (set_attr "mode"	"SI")   (set_attr "length"	"3,3")])(define_insn "zero_extendqisi2"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(zero_extend:SI (match_operand:QI 1 "nonimmed_operand" "r,U")))]  ""  "@   extui\t%0, %1, 0, 8   l8ui\t%0, %1"  [(set_attr "type"	"arith,load")   (set_attr "mode"	"SI")   (set_attr "length"	"3,3")]);; Sign-extend instructions.(define_expand "extendhisi2"  [(set (match_operand:SI 0 "register_operand" "")	(sign_extend:SI (match_operand:HI 1 "register_operand" "")))]  ""{  if (sext_operand (operands[1], HImode))    emit_insn (gen_extendhisi2_internal (operands[0], operands[1]));  else    xtensa_extend_reg (operands[0], operands[1]);  DONE;})(define_insn "extendhisi2_internal"  [(set (match_operand:SI 0 "register_operand" "=B,a")	(sign_extend:SI (match_operand:HI 1 "sext_operand" "r,U")))]  ""  "@   sext\t%0, %1, 15   l16si\t%0, %1"  [(set_attr "type"	"arith,load")   (set_attr "mode"	"SI")   (set_attr "length"	"3,3")])(define_expand "extendqisi2"  [(set (match_operand:SI 0 "register_operand" "")	(sign_extend:SI (match_operand:QI 1 "register_operand" "")))]  ""{  if (TARGET_SEXT)    emit_insn (gen_extendqisi2_internal (operands[0], operands[1]));  else    xtensa_extend_reg (operands[0], operands[1]);  DONE;})(define_insn "extendqisi2_internal"  [(set (match_operand:SI 0 "register_operand" "=B")	(sign_extend:SI (match_operand:QI 1 "register_operand" "r")))]  "TARGET_SEXT"  "sext\t%0, %1, 7"  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")]);; Field extract instructions.(define_expand "extv"  [(set (match_operand:SI 0 "register_operand" "")	(sign_extract:SI (match_operand:SI 1 "register_operand" "")			 (match_operand:SI 2 "const_int_operand" "")			 (match_operand:SI 3 "const_int_operand" "")))]  "TARGET_SEXT"{  if (!sext_fldsz_operand (operands[2], SImode))    FAIL;  /* We could expand to a right shift followed by SEXT but that's     no better than the standard left and right shift sequence.  */  if (!lsbitnum_operand (operands[3], SImode))    FAIL;  emit_insn (gen_extv_internal (operands[0], operands[1],				operands[2], operands[3]));  DONE;})(define_insn "extv_internal"  [(set (match_operand:SI 0 "register_operand" "=a")	(sign_extract:SI (match_operand:SI 1 "register_operand" "r")			 (match_operand:SI 2 "sext_fldsz_operand" "i")			 (match_operand:SI 3 "lsbitnum_operand" "i")))]  "TARGET_SEXT"{  int fldsz = INTVAL (operands[2]);  operands[2] = GEN_INT (fldsz - 1);  return "sext\t%0, %1, %2";}  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")])(define_expand "extzv"  [(set (match_operand:SI 0 "register_operand" "")	(zero_extract:SI (match_operand:SI 1 "register_operand" "")			 (match_operand:SI 2 "const_int_operand" "")			 (match_operand:SI 3 "const_int_operand" "")))]  ""{  if (!extui_fldsz_operand (operands[2], SImode))    FAIL;  emit_insn (gen_extzv_internal (operands[0], operands[1],				 operands[2], operands[3]));  DONE;})(define_insn "extzv_internal"  [(set (match_operand:SI 0 "register_operand" "=a")	(zero_extract:SI (match_operand:SI 1 "register_operand" "r")			 (match_operand:SI 2 "extui_fldsz_operand" "i")			 (match_operand:SI 3 "const_int_operand" "i")))]  ""{  int shift;  if (BITS_BIG_ENDIAN)    shift = (32 - (INTVAL (operands[2]) + INTVAL (operands[3]))) & 0x1f;  else    shift = INTVAL (operands[3]) & 0x1f;  operands[3] = GEN_INT (shift);  return "extui\t%0, %1, %3, %2";}  [(set_attr "type"	"arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3")]);; Conversions.(define_insn "fix_truncsfsi2"  [(set (match_operand:SI 0 "register_operand" "=a")	(fix:SI (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "trunc.s\t%0, %1, 0"  [(set_attr "type"	"fconv")   (set_attr "mode"	"SF")   (set_attr "length"	"3")])(define_insn "fixuns_truncsfsi2"  [(set (match_operand:SI 0 "register_operand" "=a")	(unsigned_fix:SI (match_operand:SF 1 "register_operand" "f")))]  "TARGET_HARD_FLOAT"  "utrunc.s\t%0, %1, 0"  [(set_attr "type"	"fconv")   (set_attr "mode"	"SF")   (set_attr "length"	"3")])(define_insn "floatsisf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(float:SF (match_operand:SI 1 "register_operand" "a")))]  "TARGET_HARD_FLOAT"  "float.s\t%0, %1, 0"  [(set_attr "type"	"fconv")   (set_attr "mode"	"SF")   (set_attr "length"	"3")])(define_insn "floatunssisf2"  [(set (match_operand:SF 0 "register_operand" "=f")	(unsigned_float:SF (match_operand:SI 1 "register_operand" "a")))]  "TARGET_HARD_FLOAT"  "ufloat.s\t%0, %1, 0"  [(set_attr "type"	"fconv")   (set_attr "mode"	"SF")   (set_attr "length"	"3")]);; Data movement instructions.;; 64-bit Integer moves(define_expand "movdi"  [(set (match_operand:DI 0 "nonimmed_operand" "")	(match_operand:DI 1 "general_operand" ""))]  ""{  if (CONSTANT_P (operands[1]) && !TARGET_CONST16)    operands[1] = force_const_mem (DImode, operands[1]);  if (!register_operand (operands[0], DImode)      && !register_operand (operands[1], DImode))    operands[1] = force_reg (DImode, operands[1]);  operands[1] = xtensa_copy_incoming_a7 (operands[1]);})(define_insn_and_split "movdi_internal"  [(set (match_operand:DI 0 "nonimmed_operand" "=a,W,a,a,U")	(match_operand:DI 1 "move_operand" "r,i,T,U,r"))]  "register_operand (operands[0], DImode)   || register_operand (operands[1], DImode)"  "#"  "reload_completed"  [(set (match_dup 0) (match_dup 2))   (set (match_dup 1) (match_dup 3))]{  xtensa_split_operand_pair (operands, SImode);  if (reg_overlap_mentioned_p (operands[0], operands[3]))    {      rtx tmp;      tmp = operands[0], operands[0] = operands[1], operands[1] = tmp;      tmp = operands[2], operands[2] = operands[3], operands[3] = tmp;    }});; 32-bit Integer moves(define_expand "movsi"  [(set (match_operand:SI 0 "nonimmed_operand" "")	(match_operand:SI 1 "general_operand" ""))]  ""{  if (xtensa_emit_move_sequence (operands, SImode))    DONE;})(define_insn "movsi_internal"  [(set (match_operand:SI 0 "nonimmed_operand" "=D,D,D,D,R,R,a,q,a,W,a,a,U,*a,*A")	(match_operand:SI 1 "move_operand" "M,D,d,R,D,d,r,r,I,i,T,U,r,*A,*r"))]  "xtensa_valid_move (SImode, operands)"  "@   movi.n\t%0, %x1   mov.n\t%0, %1   mov.n\t%0, %1   %v1l32i.n\t%0, %1   %v0s32i.n\t%1, %0   %v0s32i.n\t%1, %0   mov\t%0, %1   movsp\t%0, %1   movi\t%0, %x1   const16\t%0, %t1\;const16\t%0, %b1   %v1l32r\t%0, %1   %v1l32i\t%0, %1   %v0s32i\t%1, %0   rsr\t%0, 16 # ACCLO   wsr\t%1, 16 # ACCLO"  [(set_attr "type" "move,move,move,load,store,store,move,move,move,move,load,load,store,rsr,wsr")   (set_attr "mode"	"SI")   (set_attr "length"	"2,2,2,2,2,2,3,3,3,6,3,3,3,3,3")]);; 16-bit Integer moves(define_expand "movhi"  [(set (match_operand:HI 0 "nonimmed_operand" "")	(match_operand:HI 1 "general_operand" ""))]  ""{  if (xtensa_emit_move_sequence (operands, HImode))    DONE;})(define_insn "movhi_internal"  [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")	(match_operand:HI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]  "xtensa_valid_move (HImode, operands)"  "@   movi.n\t%0, %x1   mov.n\t%0, %1   mov\t%0, %1   movi\t%0, %x1   %v1l16ui\t%0, %1   %v0s16i\t%1, %0   rsr\t%0, 16 # ACCLO   wsr\t%1, 16 # ACCLO"  [(set_attr "type"	"move,move,move,move,load,store,rsr,wsr")   (set_attr "mode"	"HI")   (set_attr "length"	"2,2,3,3,3,3,3,3")]);; 8-bit Integer moves(define_expand "movqi"  [(set (match_operand:QI 0 "nonimmed_operand" "")	(match_operand:QI 1 "general_operand" ""))]  ""{  if (xtensa_emit_move_sequence (operands, QImode))    DONE;})(define_insn "movqi_internal"  [(set (match_operand:QI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")	(match_operand:QI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]  "xtensa_valid_move (QImode, operands)"  "@   movi.n\t%0, %x1   mov.n\t%0, %1   mov\t%0, %1   movi\t%0, %x1   %v1l8ui\t%0, %1   %v0s8i\t%1, %0   rsr\t%0, 16 # ACCLO   wsr\t%1, 16 # ACCLO"  [(set_attr "type"	"move,move,move,move,load,store,rsr,wsr")   (set_attr "mode"	"QI")   (set_attr "length"	"2,2,3,3,3,3,3,3")]);; 32-bit floating point moves(define_expand "movsf"  [(set (match_operand:SF 0 "nonimmed_operand" "")	(match_operand:SF 1 "general_operand" ""))]  ""{  if (!TARGET_CONST16 && CONSTANT_P (operands[1]))    operands[1] = force_const_mem (SFmode, operands[1]);  if ((!register_operand (operands[0], SFmode)       && !register_operand (operands[1], SFmode))      || (FP_REG_P (xt_true_regnum (operands[0]))	  && !(reload_in_progress | reload_completed)	  && (constantpool_mem_p (operands[1])	      || CONSTANT_P (operands[1]))))    operands[1] = force_reg (SFmode, operands[1]);  operands[1] = xtensa_copy_incoming_a7 (operands[1]);})(define_insn "movsf_internal"  [(set (match_operand:SF 0 "nonimmed_operand" "=f,f,U,D,D,R,a,f,a,W,a,a,U")	(match_operand:SF 1 "move_operand" "f,U,f,d,R,d,r,r,f,iF,T,U,r"))]  "((register_operand (operands[0], SFmode)     || register_operand (operands[1], SFmode))    && !(FP_REG_P (xt_true_regnum (operands[0]))         && (constantpool_mem_p (operands[1]) || CONSTANT_P (operands[1]))))"  "@   mov.s\t%0, %1   %v1lsi\t%0, %1   %v0ssi\t%1, %0   mov.n\t%0, %1   %v1l32i.n\t%0, %1   %v0s32i.n\t%1, %0   mov\t%0, %1   wfr\t%0, %1   rfr\t%0, %1   const16\t%0, %t1\;const16\t%0, %b1   %v1l32r\t%0, %1   %v1l32i\t%0, %1   %v0s32i\t%1, %0"  [(set_attr "type"	"farith,fload,fstore,move,load,store,move,farith,farith,move,load,load,store")   (set_attr "mode"	"SF")   (set_attr "length"	"3,3,3,2,2,2,3,3,3,6,3,3,3")])(define_insn "*lsiu"  [(set (match_operand:SF 0 "register_operand" "=f")	(mem:SF (plus:SI (match_operand:SI 1 "register_operand" "+a")			 (match_operand:SI 2 "fpmem_offset_operand" "i"))))   (set (match_dup 1)	(plus:SI (match_dup 1) (match_dup 2)))]  "TARGET_HARD_FLOAT"{  if (volatile_refs_p (PATTERN (insn)))    output_asm_insn ("memw", operands);  return "lsiu\t%0, %1, %2";}  [(set_attr "type"	"fload")   (set_attr "mode"	"SF")   (set_attr "length"	"3")])(define_insn "*ssiu"  [(set (mem:SF (plus:SI (match_operand:SI 0 "register_operand" "+a")			 (match_operand:SI 1 "fpmem_offset_operand" "i")))	(match_operand:SF 2 "register_operand" "f"))   (set (match_dup 0)	(plus:SI (match_dup 0) (match_dup 1)))]  "TARGET_HARD_FLOAT"{  if (volatile_refs_p (PATTERN (insn)))    output_asm_insn ("memw", operands);  return "ssiu\t%2, %0, %1";}  [(set_attr "type"	"fstore")   (set_attr "mode"	"SF")   (set_attr "length"	"3")]);; 64-bit floating point moves(define_expand "movdf"  [(set (match_operand:DF 0 "nonimmed_operand" "")	(match_operand:DF 1 "general_operand" ""))]  ""{  if (CONSTANT_P (operands[1]) && !TARGET_CONST16)    operands[1] = force_const_mem (DFmode, operands[1]);  if (!register_operand (operands[0], DFmode)      && !register_operand (operands[1], DFmode))    operands[1] = force_reg (DFmode, operands[1]);  operands[1] = xtensa_copy_incoming_a7 (operands[1]);})(define_insn_and_split "movdf_internal"  [(set (match_operand:DF 0 "nonimmed_operand" "=a,W,a,a,U")	(match_operand:DF 1 "move_operand" "r,iF,T,U,r"))]  "register_operand (operands[0], DFmode)   || register_operand (operands[1], DFmode)"  "#"  "reload_completed"  [(set (match_dup 0) (match_dup 2))   (set (match_dup 1) (match_dup 3))]{  xtensa_split_operand_pair (operands, SFmode);  if (reg_overlap_mentioned_p (operands[0], operands[3]))    {      rtx tmp;      tmp = operands[0], operands[0] = operands[1], operands[1] = tmp;      tmp = operands[2], operands[2] = operands[3], operands[3] = tmp;    }});; Block moves(define_expand "movmemsi"  [(parallel [(set (match_operand:BLK 0 "" "")		   (match_operand:BLK 1 "" ""))	      (use (match_operand:SI 2 "arith_operand" ""))	      (use (match_operand:SI 3 "const_int_operand" ""))])]  ""{  if (!xtensa_expand_block_move (operands))    FAIL;  DONE;});; Shift instructions.(define_expand "ashlsi3"  [(set (match_operand:SI 0 "register_operand" "")	(ashift:SI (match_operand:SI 1 "register_operand" "")		   (match_operand:SI 2 "arith_operand" "")))]  ""{  operands[1] = xtensa_copy_incoming_a7 (operands[1]);})(define_insn "ashlsi3_internal"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(ashift:SI (match_operand:SI 1 "register_operand" "r,r")		   (match_operand:SI 2 "arith_operand" "J,r")))]  ""        "@   slli\t%0, %1, %R2   ssl\t%2\;sll\t%0, %1"  [(set_attr "type"	"arith,arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3,6")])(define_insn "ashrsi3"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(ashiftrt:SI (match_operand:SI 1 "register_operand" "r,r")		     (match_operand:SI 2 "arith_operand" "J,r")))]  ""  "@   srai\t%0, %1, %R2   ssr\t%2\;sra\t%0, %1"  [(set_attr "type"	"arith,arith")   (set_attr "mode"	"SI")   (set_attr "length"	"3,6")])(define_insn "lshrsi3"  [(set (match_operand:SI 0 "register_operand" "=a,a")	(lshiftrt:SI (match_operand:SI 1 "register_operand" "r,r")

⌨️ 快捷键说明

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