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

📄 ns32k.md

📁 GUN开源阻止下的编译器GCC
💻 MD
📖 第 1 页 / 共 5 页
字号:
(define_insn "movstrictqi"  [(set (strict_low_part (match_operand:QI 0 "general_operand" "+r"))	(match_operand:QI 1 "general_operand" "g"))]  ""  "*{  if (GET_CODE (operands[1]) == CONST_INT      && INTVAL(operands[1]) < 8 && INTVAL(operands[1]) > -9)    return \"movqb %1,%0\";  return \"movb %1,%0\";}");; This is here to accept 4 arguments and pass the first 3 along;; to the movstrsi1 pattern that really does the work.(define_expand "movstrsi"  [(set (match_operand:BLK 0 "general_operand" "=g")	(match_operand:BLK 1 "general_operand" "g"))   (use (match_operand:SI 2 "general_operand" "rmn"))   (match_operand 3 "" "")]  ""  "  emit_insn (gen_movstrsi1 (operands[0], operands[1], operands[2]));  DONE;");; The definition of this insn does not really explain what it does,;; but it should suffice;; that anything generated as this insn will be recognized as one;; and that it won't successfully combine with anything.(define_insn "movstrsi1"  [(set (match_operand:BLK 0 "general_operand" "=g")	(match_operand:BLK 1 "general_operand" "g"))   (use (match_operand:SI 2 "general_operand" "rmn"))   (clobber (reg:SI 0))   (clobber (reg:SI 1))   (clobber (reg:SI 2))]  ""  "*{  if (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)    abort ();  operands[0] = XEXP (operands[0], 0);  operands[1] = XEXP (operands[1], 0);  if (GET_CODE (operands[0]) == MEM)    if (GET_CODE (operands[1]) == MEM)      output_asm_insn (\"movd %0,r2\;movd %1,r1\", operands);    else      output_asm_insn (\"movd %0,r2\;addr %a1,r1\", operands);  else if (GET_CODE (operands[1]) == MEM)    output_asm_insn (\"addr %a0,r2\;movd %1,r1\", operands);  else    output_asm_insn (\"addr %a0,r2\;addr %a1,r1\", operands);#ifdef UTEK_ASM  if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0x3) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) >> 2);      if ((unsigned) INTVAL (operands[2]) <= 7)	return \"movqd %2,r0\;movsd $0\";      else 	return \"movd %2,r0\;movsd $0\";    }  else    {      return \"movd %2,r0\;movsb $0\";    }#else  if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) & 0x3) == 0)    {      operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) >> 2);      if ((unsigned) INTVAL (operands[2]) <= 7)	return \"movqd %2,r0\;movsd\";      else 	return \"movd %2,r0\;movsd\";    }  else    {      return \"movd %2,r0\;movsb\";    }#endif}");; Extension and truncation insns.;; Those for integer source operand;; are ordered widest source type first.(define_insn "truncsiqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(truncate:QI (match_operand:SI 1 "nonimmediate_operand" "rmn")))]  ""  "movb %1,%0")(define_insn "truncsihi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(truncate:HI (match_operand:SI 1 "nonimmediate_operand" "rmn")))]  ""  "movw %1,%0")(define_insn "trunchiqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))]  ""  "movb %1,%0")(define_insn "extendhisi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]  ""  "movxwd %1,%0")(define_insn "extendqihi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]  ""  "movxbw %1,%0")(define_insn "extendqisi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]  ""  "movxbd %1,%0")(define_insn "extendsfdf2"  [(set (match_operand:DF 0 "general_operand" "=fm<")	(float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))]  "TARGET_32081"  "movfl %1,%0")(define_insn "truncdfsf2"  [(set (match_operand:SF 0 "general_operand" "=fm<")	(float_truncate:SF (match_operand:DF 1 "general_operand" "fmF")))]  "TARGET_32081"  "movlf %1,%0")(define_insn "zero_extendhisi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]  ""  "movzwd %1,%0")(define_insn "zero_extendqihi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]  ""  "movzbw %1,%0")(define_insn "zero_extendqisi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]  ""  "movzbd %1,%0");; Fix-to-float conversion insns.;; Note that the ones that start with SImode come first.;; That is so that an operand that is a CONST_INT;; (and therefore lacks a specific machine mode).;; will be recognized as SImode (which is always valid);; rather than as QImode or HImode.;; Rumor has it that the National part does not correctly convert;; constant ints to floats.  This conversion is therefore disabled.;; A register must be used to perform the conversion.(define_insn "floatsisf2"  [(set (match_operand:SF 0 "general_operand" "=fm<")	(float:SF (match_operand:SI 1 "general_operand" "rm")))]  "TARGET_32081"  "movdf %1,%0")(define_insn "floatsidf2"  [(set (match_operand:DF 0 "general_operand" "=fm<")	(float:DF (match_operand:SI 1 "general_operand" "rm")))]  "TARGET_32081"  "movdl %1,%0")(define_insn "floathisf2"  [(set (match_operand:SF 0 "general_operand" "=fm<")	(float:SF (match_operand:HI 1 "general_operand" "rm")))]  "TARGET_32081"  "movwf %1,%0")(define_insn "floathidf2"  [(set (match_operand:DF 0 "general_operand" "=fm<")	(float:DF (match_operand:HI 1 "general_operand" "rm")))]  "TARGET_32081"  "movwl %1,%0")(define_insn "floatqisf2"  [(set (match_operand:SF 0 "general_operand" "=fm<")	(float:SF (match_operand:QI 1 "general_operand" "rm")))]  "TARGET_32081"  "movbf %1,%0"); Some assemblers warn that this insn doesn't work.; Maybe they know something we don't.;(define_insn "floatqidf2";  [(set (match_operand:DF 0 "general_operand" "=fm<");	(float:DF (match_operand:QI 1 "general_operand" "rm")))];  "TARGET_32081";  "movbl %1,%0");; Float-to-fix conversion insns.;; The sequent compiler always generates "trunc" insns.(define_insn "fixsfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfb %1,%0")(define_insn "fixsfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfw %1,%0")(define_insn "fixsfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfd %1,%0")(define_insn "fixdfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "trunclb %1,%0")(define_insn "fixdfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "trunclw %1,%0")(define_insn "fixdfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncld %1,%0");; Unsigned(define_insn "fixunssfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(unsigned_fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfb %1,%0")(define_insn "fixunssfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(unsigned_fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfw %1,%0")(define_insn "fixunssfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(unsigned_fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncfd %1,%0")(define_insn "fixunsdfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(unsigned_fix:QI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "trunclb %1,%0")(define_insn "fixunsdfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(unsigned_fix:HI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "trunclw %1,%0")(define_insn "fixunsdfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(unsigned_fix:SI (fix:DF (match_operand:DF 1 "general_operand" "fm"))))]  "TARGET_32081"  "truncld %1,%0");;; These are not yet used by GCC(define_insn "fix_truncsfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(fix:QI (match_operand:SF 1 "general_operand" "fm")))]  "TARGET_32081"  "truncfb %1,%0")(define_insn "fix_truncsfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(fix:HI (match_operand:SF 1 "general_operand" "fm")))]  "TARGET_32081"  "truncfw %1,%0")(define_insn "fix_truncsfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(fix:SI (match_operand:SF 1 "general_operand" "fm")))]  "TARGET_32081"  "truncfd %1,%0")(define_insn "fix_truncdfqi2"  [(set (match_operand:QI 0 "general_operand" "=g<")	(fix:QI (match_operand:DF 1 "general_operand" "fm")))]  "TARGET_32081"  "trunclb %1,%0")(define_insn "fix_truncdfhi2"  [(set (match_operand:HI 0 "general_operand" "=g<")	(fix:HI (match_operand:DF 1 "general_operand" "fm")))]  "TARGET_32081"  "trunclw %1,%0")(define_insn "fix_truncdfsi2"  [(set (match_operand:SI 0 "general_operand" "=g<")	(fix:SI (match_operand:DF 1 "general_operand" "fm")))]  "TARGET_32081"  "truncld %1,%0");;- All kinds of add instructions.(define_insn "adddf3"  [(set (match_operand:DF 0 "general_operand" "=fm")	(plus:DF (match_operand:DF 1 "general_operand" "%0")		 (match_operand:DF 2 "general_operand" "fmF")))]  "TARGET_32081"  "addl %2,%0")(define_insn "addsf3"  [(set (match_operand:SF 0 "general_operand" "=fm")	(plus:SF (match_operand:SF 1 "general_operand" "%0")		 (match_operand:SF 2 "general_operand" "fmF")))]  "TARGET_32081"  "addf %2,%0")(define_insn ""  [(set (reg:SI 17)	(plus:SI (reg:SI 17)		 (match_operand:SI 0 "immediate_operand" "i")))]  "GET_CODE (operands[0]) == CONST_INT"  "*{#ifndef SEQUENT_ADJUST_STACK  if (TARGET_32532)    if (INTVAL (operands[0]) == 8)      return \"cmpd tos,tos\";  if (TARGET_32532 || TARGET_32332)    if (INTVAL (operands[0]) == 4)      return \"cmpqd %$0,tos\";#endif  if (! TARGET_32532)    {      if (INTVAL (operands[0]) < 64 && INTVAL (operands[0]) > -64)        return \"adjspb %$%n0\";      else if (INTVAL (operands[0]) < 8192 && INTVAL (operands[0]) >= -8192)        return \"adjspw %$%n0\";    }  return \"adjspd %$%n0\";}")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=g<")	(plus:SI (reg:SI 16)		 (match_operand:SI 1 "immediate_operand" "i")))]  "GET_CODE (operands[1]) == CONST_INT"  "addr %c1(fp),%0")(define_insn ""  [(set (match_operand:SI 0 "general_operand" "=g<")	(plus:SI (reg:SI 17)		 (match_operand:SI 1 "immediate_operand" "i")))]  "GET_CODE (operands[1]) == CONST_INT"  "addr %c1(sp),%0")(define_insn "addsi3"  [(set (match_operand:SI 0 "general_operand" "=g,=g&<")	(plus:SI (match_operand:SI 1 "general_operand" "%0,r")		 (match_operand:SI 2 "general_operand" "rmn,n")))]  ""  "*{  if (which_alternative == 1)    {      int i = INTVAL (operands[2]);      if (NS32K_DISPLACEMENT_P (i))	return \"addr %c2(%1),%0\";      else	return \"movd %1,%0\;addd %2,%0\";    }  if (GET_CODE (operands[2]) == CONST_INT)    {      int i = INTVAL (operands[2]);      if (i <= 7 && i >= -8)	return \"addqd %2,%0\";      else if (! TARGET_32532 && GET_CODE (operands[0]) == REG	       && i <= 0x1fffffff && i >= -0x20000000)	return \"addr %c2(%0),%0\";    }  return \"addd %2,%0\";}")(define_insn "addhi3"  [(set (match_operand:HI 0 "general_operand" "=g")	(plus:HI (match_operand:HI 1 "general_operand" "%0")		 (match_operand:HI 2 "general_operand" "g")))]  ""  "*{ if (GET_CODE (operands[2]) == CONST_INT)    {      int i = INTVAL (operands[2]);      if (i <= 7 && i >= -8)	return \"addqw %2,%0\";    }  return \"addw %2,%0\";}")(define_insn ""  [(set (strict_low_part (match_operand:HI 0 "general_operand" "=r"))	(plus:HI (match_operand:HI 1 "general_operand" "0")		 (match_operand:HI 2 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[1]) == CONST_INT      && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)    return \"addqw %2,%0\";  return \"addw %2,%0\";}")(define_insn "addqi3"  [(set (match_operand:QI 0 "general_operand" "=g")	(plus:QI (match_operand:QI 1 "general_operand" "%0")		 (match_operand:QI 2 "general_operand" "g")))]  ""  "*{ if (GET_CODE (operands[2]) == CONST_INT)    {      int i = INTVAL (operands[2]);      if (i <= 7 && i >= -8)	return \"addqb %2,%0\";    }  return \"addb %2,%0\";}")(define_insn ""  [(set (strict_low_part (match_operand:QI 0 "general_operand" "=r"))	(plus:QI (match_operand:QI 1 "general_operand" "0")		 (match_operand:QI 2 "general_operand" "g")))]  ""  "*{  if (GET_CODE (operands[1]) == CONST_INT      && INTVAL (operands[1]) >-9 && INTVAL(operands[1]) < 8)    return \"addqb %2,%0\";  return \"addb %2,%0\";}");;- All kinds of subtract instructions.(define_insn "subdf3"  [(set (match_operand:DF 0 "general_operand" "=fm")	(minus:DF (match_operand:DF 1 "general_operand" "0")		  (match_operand:DF 2 "general_operand" "fmF")))]  "TARGET_32081"  "subl %2,%0")(define_insn "subsf3"  [(set (match_operand:SF 0 "general_operand" "=fm")	(minus:SF (match_operand:SF 1 "general_operand" "0")		  (match_operand:SF 2 "general_operand" "fmF")))]  "TARGET_32081"  "subf %2,%0")(define_insn ""  [(set (reg:SI 17)	(minus:SI (reg:SI 17)		  (match_operand:SI 0 "immediate_operand" "i")))]  "GET_CODE (operands[0]) == CONST_INT"  "*{  if (! TARGET_32532 && GET_CODE(operands[0]) == CONST_INT       && INTVAL(operands[0]) < 64 && INTVAL(operands[0]) > -64)    return \"adjspb %$%0\";  return \"adjspd %$%0\";}")(define_insn "subsi3"  [(set (match_operand:SI 0 "general_operand" "=g")	(minus:SI (match_operand:SI 1 "general_operand" "0")		  (match_operand:SI 2 "general_operand" "rmn")))]  ""

⌨️ 快捷键说明

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