📄 fx80.md
字号:
operands[2] = tmp; } /* These insns can result from reloads to access stack slots over 64k from the frame pointer. */ if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000) return \"mov%.l %2,%0\;add%.l %1,%0\"; if (GET_CODE (operands[2]) == REG) return \"lea %1@[%2:L:B],%0\"; else return \"lea %1@(%c2),%0\"; } if (GET_CODE (operands[2]) == CONST_INT) { if (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 8) return (ADDRESS_REG_P (operands[0]) ? \"addq%.w %2,%0\" : \"addq%.l %2,%0\"); if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) >= -8) { operands[2] = GEN_INT (- INTVAL (operands[2])); return (ADDRESS_REG_P (operands[0]) ? \"subq%.w %2,%0\" : \"subq%.l %2,%0\"); } if (ADDRESS_REG_P (operands[0]) && INTVAL (operands[2]) >= -0x8000 && INTVAL (operands[2]) < 0x8000) return \"add%.w %2,%0\"; } return \"add%.l %2,%0\";}")(define_insn "" [(set (match_operand:SI 0 "general_operand" "=a") (plus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "rmn"))))] "" "add%.w %2,%0")(define_insn "addhi3" [(set (match_operand:HI 0 "general_operand" "=mr,mr,m,r") (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0") (match_operand:HI 2 "general_operand" "I,L,dn,rmn")))] "" "@ addq%.w %2,%0 subq%.w #%n2,%0 add%.w %2,%0 add%.w %2,%0")(define_insn "" [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (plus:HI (match_dup 0) (match_operand:HI 1 "general_operand" "dn,rmn")))] "" "add%.w %1,%0")(define_insn "addqi3" [(set (match_operand:QI 0 "general_operand" "=md,mr,m,d") (plus:QI (match_operand:QI 1 "general_operand" "%0,0,0,0") (match_operand:QI 2 "general_operand" "I,L,dn,dmn")))] "" "@ addq%.b %2,%0 subq%.b #%n2,%0 add%.b %2,%0 add%.b %2,%0")(define_insn "" [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (plus:QI (match_dup 0) (match_operand:QI 1 "general_operand" "dn,dmn")))] "" "add%.b %1,%0")(define_insn "adddf3" [(set (match_operand:DF 0 "register_operand" "=f") (plus:DF (match_operand:DF 1 "nonimmediate_operand" "%f") (match_operand:DF 2 "nonimmediate_operand" "fm")))] "TARGET_CE" "fadd%.d %2,%1,%0")(define_insn "addsf3" [(set (match_operand:SF 0 "register_operand" "=f") (plus:SF (match_operand:SF 1 "nonimmediate_operand" "%f") (match_operand:SF 2 "nonimmediate_operand" "fm")))] "TARGET_CE" "fadd%.s %2,%1,%0");; subtract instructions(define_insn "subsi3" [(set (match_operand:SI 0 "general_operand" "=m,r,!a,?d") (minus:SI (match_operand:SI 1 "general_operand" "0,0,a,mrIKs") (match_operand:SI 2 "general_operand" "dIKs,mrIKs,J,0")))] "" "*{ if (! operands_match_p (operands[0], operands[1])) { if (operands_match_p (operands[0], operands[2])) { if (GET_CODE (operands[1]) == CONST_INT) { if (INTVAL (operands[1]) > 0 && INTVAL (operands[1]) <= 8) return \"subq%.l %1,%0\;neg%.l %0\"; } return \"sub%.l %1,%0\;neg%.l %0\"; } /* This case is matched by J, but negating -0x8000 in an lea would give an invalid displacement. So do this specially. */ if (INTVAL (operands[2]) == -0x8000) return \"mov%.l %1,%0\;sub%.l %2,%0\"; return \"lea %1@(%n2),%0\"; } if (GET_CODE (operands[2]) == CONST_INT) { if (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) <= 8) return \"subq%.l %2,%0\"; if (ADDRESS_REG_P (operands[0]) && INTVAL (operands[2]) >= -0x8000 && INTVAL (operands[2]) < 0x8000) return \"sub%.w %2,%0\"; } return \"sub%.l %2,%0\";}")(define_insn "" [(set (match_operand:SI 0 "general_operand" "=a") (minus:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "rmn"))))] "" "sub%.w %2,%0")(define_insn "subhi3" [(set (match_operand:HI 0 "general_operand" "=m,r") (minus:HI (match_operand:HI 1 "general_operand" "0,0") (match_operand:HI 2 "general_operand" "dn,rmn")))] "" "sub%.w %2,%0")(define_insn "" [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d")) (minus:HI (match_dup 0) (match_operand:HI 1 "general_operand" "dn,rmn")))] "" "sub%.w %1,%0")(define_insn "subqi3" [(set (match_operand:QI 0 "general_operand" "=m,d") (minus:QI (match_operand:QI 1 "general_operand" "0,0") (match_operand:QI 2 "general_operand" "dn,dmn")))] "" "sub%.b %2,%0")(define_insn "" [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d")) (minus:QI (match_dup 0) (match_operand:QI 1 "general_operand" "dn,dmn")))] "" "sub%.b %1,%0")(define_insn "subdf3" [(set (match_operand:DF 0 "register_operand" "=f,f,f") (minus:DF (match_operand:DF 1 "nonimmediate_operand" "f,f,m") (match_operand:DF 2 "nonimmediate_operand" "f,m,f")))] "TARGET_CE" "@ fsub%.d %2,%1,%0 fsub%.d %2,%1,%0 frsub%.d %1,%2,%0")(define_insn "subsf3" [(set (match_operand:SF 0 "register_operand" "=f,f,f") (minus:SF (match_operand:SF 1 "nonimmediate_operand" "f,f,m") (match_operand:SF 2 "nonimmediate_operand" "f,m,f")))] "TARGET_CE" "@ fsub%.s %2,%1,%0 fsub%.s %2,%1,%0 frsub%.s %1,%2,%0");; multiply instructions(define_insn "mulhi3" [(set (match_operand:HI 0 "general_operand" "=d") (mult:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_operand" "dmn")))] "" "muls %2,%0")(define_insn "mulhisi3" [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm"))))] "" "muls %2,%0")(define_insn "" [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] "" "muls %2,%0")(define_insn "mulsi3" [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_operand" "dmsK")))] "TARGET_68020" "muls%.l %2,%0")(define_insn "umulhisi3" [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm"))))] "" "mulu %2,%0")(define_insn "" [(set (match_operand:SI 0 "general_operand" "=d") (mult:SI (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "%0")) (match_operand:SI 2 "const_int_operand" "n")))] "" "mulu %2,%0")(define_insn "muldf3" [(set (match_operand:DF 0 "register_operand" "=f") (mult:DF (match_operand:DF 1 "nonimmediate_operand" "%f") (match_operand:DF 2 "nonimmediate_operand" "fm")))] "TARGET_CE" "fmul%.d %2,%1,%0")(define_insn "mulsf3" [(set (match_operand:SF 0 "register_operand" "=f") (mult:SF (match_operand:SF 1 "nonimmediate_operand" "%f") (match_operand:SF 2 "nonimmediate_operand" "fm")))] "TARGET_CE" "fmul%.s %2,%1,%0");; divide instructions(define_insn "divhi3" [(set (match_operand:HI 0 "general_operand" "=d") (div:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_operand" "dmn")))] "" "extl %0\;divs %2,%0")(define_insn "divhisi3" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (div:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))] "" "divs %2,%0")(define_insn "" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (div:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "const_int_operand" "n"))))] "" "divs %2,%0")(define_insn "divsi3" [(set (match_operand:SI 0 "general_operand" "=d") (div:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_operand" "dmsK")))] "TARGET_68020" "divs%.l %2,%0,%0")(define_insn "udivhi3" [(set (match_operand:HI 0 "general_operand" "=d") (udiv:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_operand" "dmn")))] "" "and%.l %#0xFFFF,%0\;divu %2,%0")(define_insn "udivhisi3" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (udiv:SI (match_operand:SI 1 "general_operand" "0") (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))] "" "divu %2,%0")(define_insn "" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (udiv:SI (match_operand:SI 1 "nonimmediate_operand" "0") (match_operand:HI 2 "const_int_operand" "n"))))] "" "divu %2,%0")(define_insn "udivsi3" [(set (match_operand:SI 0 "general_operand" "=d") (udiv:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_operand" "dmsK")))] "TARGET_68020" "divu%.l %2,%0,%0")(define_insn "divdf3" [(set (match_operand:DF 0 "register_operand" "=f,f,f") (div:DF (match_operand:DF 1 "nonimmediate_operand" "f,f,m") (match_operand:DF 2 "nonimmediate_operand" "f,m,f")))] "TARGET_CE" "@ fdiv%.d %2,%1,%0 fdiv%.d %2,%1,%0 frdiv%.d %1,%2,%0")(define_insn "divsf3" [(set (match_operand:SF 0 "register_operand" "=f,f,f") (div:SF (match_operand:SF 1 "nonimmediate_operand" "f,f,m") (match_operand:SF 2 "nonimmediate_operand" "f,m,f")))] "TARGET_CE" "@ fdiv%.s %2,%1,%0 fdiv%.s %2,%1,%0 frdiv%.s %1,%2,%0");; Remainder instructions.(define_insn "modhi3" [(set (match_operand:HI 0 "general_operand" "=d") (mod:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_operand" "dmn")))] "" "extl %0\;divs %2,%0\;swap %0")(define_insn "modhisi3" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (mod:SI (match_operand:SI 1 "general_operand" "0") (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))] "" "divs %2,%0\;swap %0")(define_insn "" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (mod:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "const_int_operand" "n"))))] "" "divs %2,%0\;swap %0")(define_insn "umodhi3" [(set (match_operand:HI 0 "general_operand" "=d") (umod:HI (match_operand:HI 1 "general_operand" "0") (match_operand:HI 2 "general_operand" "dmn")))] "" "and%.l %#0xFFFF,%0\;divu %2,%0\;swap %0")(define_insn "umodhisi3" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (umod:SI (match_operand:SI 1 "general_operand" "0") (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))] "" "divu %2,%0\;swap %0")(define_insn "" [(set (match_operand:HI 0 "general_operand" "=d") (truncate:HI (umod:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "const_int_operand" "n"))))] "" "divu %2,%0\;swap %0")(define_insn "divmodsi4" [(set (match_operand:SI 0 "general_operand" "=d") (div:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_operand" "dmsK"))) (set (match_operand:SI 3 "general_operand" "=d") (mod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020" "divs%.l %2,%0,%3")(define_insn "udivmodsi4" [(set (match_operand:SI 0 "general_operand" "=d") (udiv:SI (match_operand:SI 1 "general_operand" "0") (match_operand:SI 2 "general_operand" "dmsK"))) (set (match_operand:SI 3 "general_operand" "=d") (umod:SI (match_dup 1) (match_dup 2)))] "TARGET_68020" "divu%.l %2,%0,%3");; logical-and instructions(define_insn "andsi3" [(set (match_operand:SI 0 "general_operand" "=m,d") (and:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "dKs,dmKs")))] "" "*{ if (GET_CODE (operands[2]) == CONST_INT && (INTVAL (operands[2]) | 0xffff) == 0xffffffff && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0]))) { if (GET_CODE (operands[0]) != REG) operands[0] = adj_offsettable_operand (operands[0], 2); operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffff); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; if (operands[2] == const0_rtx) return \"clr%.w %0\"; return \"and%.w %2,%0\"; } return \"and%.l %2,%0\";}")(define_insn "andhi3" [(set (match_operand:HI 0 "general_operand" "=m,d") (and:HI (match_operand:HI 1 "general_operand" "%0,0") (match_operand:HI 2 "general_operand" "dn,dmn")))] "" "and%.w %2,%0")(define_insn "andqi3" [(set (match_operand:QI 0 "general_operand" "=m,d") (and:QI (match_operand:QI 1 "general_operand" "%0,0") (match_operand:QI 2 "general_operand" "dn,dmn")))] "" "and%.b %2,%0");; inclusive-or instructions(define_insn "iorsi3" [(set (match_operand:SI 0 "general_operand" "=m,d") (ior:SI (match_operand:SI 1 "general_operand" "%0,0") (match_operand:SI 2 "general_operand" "dKs,dmKs")))] "" "*{ register int logval; if (GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) >> 16 == 0 && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0]))) { if (GET_CODE (operands[0]) != REG) operands[0] = adj_offsettable_operand (operands[0], 2); /* Do not delete a following tstl %0 insn; that would be incorrect. */ CC_STATUS_INIT; return \"or%.w %2,%0\"; } if (GET_CODE (operands[2]) == CONST_INT && (logval = exact_log2 (INTVAL (operands[2]))) >= 0 && (DATA_REG_P (operands[0]) || offsettable_memref_p (operands[0])))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -