📄 ns32k.md
字号:
(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 + -