📄 i370.md
字号:
emit_move_insn (gen_rtx_SUBREG (SImode, reg2, GET_MODE_SIZE (SImode)), len); /* Compare! */ emit_insn (gen_cmpmemsi_1 (result, reg1, reg2)); } DONE;}"); Compare a block that is less than 256 bytes in length.(define_insn "" [(set (match_operand:SI 0 "register_operand" "=d") (compare (match_operand:BLK 1 "s_operand" "m") (match_operand:BLK 2 "s_operand" "m"))) (use (match_operand:QI 3 "immediate_operand" "I"))] "((unsigned) INTVAL (operands[3]) < 256)" "*{ check_label_emit (); mvs_check_page (0, 22, 0); return \"LA %0,%1\;CLC %O1(%c3,%R1),%2\;BH *+12\;BL *+6\;SLR %0,%0\;LNR %0,%0\";}" [(set_attr "length" "22")]); Compare a block that is larger than 255 bytes in length.(define_insn "cmpmemsi_1" [(set (match_operand:SI 0 "register_operand" "+d") (compare (mem:BLK (subreg:SI (match_operand:DI 1 "register_operand" "+d") 0)) (mem:BLK (subreg:SI (match_operand:DI 2 "register_operand" "+d") 0)))) (use (match_dup 1)) (use (match_dup 2)) (clobber (match_dup 1)) (clobber (match_dup 2))] "" "*{ check_label_emit (); mvs_check_page (0, 18, 0); return \"LA %0,1(0,0)\;CLCL %1,%2\;BH *+12\;BL *+6\;SLR %0,%0\;LNR %0,%0\";}" [(set_attr "length" "18")]);;;;- Move instructions.;;;; movdi instruction pattern(s).;(define_insn "";; [(set (match_operand:DI 0 "r_or_s_operand" "=dm");; (match_operand:DI 1 "r_or_s_operand" "dim*fF"))] [(set (match_operand:DI 0 "r_or_s_operand" "=dS,m") (match_operand:DI 1 "r_or_s_operand" "diS*fF,d*fF"))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[0])) { if (FP_REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; } if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"LR %0,%1\;LR %N0,%N1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 4, 0); return \"SLR %0,%0\;SLR %N0,%N0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { CC_STATUS_INIT; mvs_check_page (0, 6, 0); return \"SLR %0,%0\;LA %N0,%c1(0,0)\"; } if (GET_CODE (operands[1]) == CONST_INT) { CC_STATUS_SET (operands[0], operands[1]); mvs_check_page (0, 8, 0); return \"L %0,%1\;SRDA %0,32\"; } mvs_check_page (0, 4, 0); return \"LM %0,%N0,%1\"; } else if (FP_REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STD %1,%0\"; } else if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STM %1,%N1,%0\"; } mvs_check_page (0, 6, 0); return \"MVC %O0(8,%R0),%W1\";}" [(set_attr "length" "8")])(define_insn "movdi";; [(set (match_operand:DI 0 "general_operand" "=d,dm");; (match_operand:DI 1 "general_operand" "dimF,*fd"))] [(set (match_operand:DI 0 "general_operand" "=d,dm") (match_operand:DI 1 "r_or_s_operand" "diSF,*fd"))] "" "*{ check_label_emit (); if (REG_P (operands[0])) { if (FP_REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STD %1,140(,13)\;LM %0,%N0,140(13)\"; } if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"LR %0,%1\;LR %N0,%N1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 4, 0); return \"SLR %0,%0\;SLR %N0,%N0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { CC_STATUS_INIT; mvs_check_page (0, 6, 0); return \"SLR %0,%0\;LA %N0,%c1(0,0)\"; } if (GET_CODE (operands[1]) == CONST_INT) { CC_STATUS_SET (operands[0], operands[1]); mvs_check_page (0, 8, 0); return \"L %0,%1\;SRDA %0,32\"; } mvs_check_page (0, 4, 0); return \"LM %0,%N0,%1\"; } else if (FP_REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STD %1,%0\"; } mvs_check_page (0, 4, 0); return \"STM %1,%N1,%0\";}" [(set_attr "length" "8")]);; we have got to provide a movdi alternative that will go from ;; register to memory & back in its full glory. However, we try to ;; discourage its use by listing this alternative last.;; The problem is that the instructions above only provide ;; S-form style (base + displacement) mem access, while the;; below provvides the full (base+index+displacement) RX-form.;; These are rarely needed, but when needed they're needed.(define_insn "" [(set (match_operand:DI 0 "general_operand" "=d,???m") (match_operand:DI 1 "general_operand" "???m,d"))] "" "*{ check_label_emit (); if (REG_P (operands[0])) { mvs_check_page (0, 8, 0); return \"LM %0,%N0,%1\"; } else if (REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STM %1,%N1,%0\"; } mvs_check_page (0, 6, 0); return \"MVC %O0(8,%R0),%1\";}" [(set_attr "length" "8")]);; movsi instruction pattern(s).;(define_insn "";; [(set (match_operand:SI 0 "r_or_s_operand" "=dm,d,dm");; (match_operand:SI 1 "r_or_s_operand" "diR,dim,*fF"))] [(set (match_operand:SI 0 "r_or_s_operand" "=d,dS,dm") (match_operand:SI 1 "general_operand" "dim,diS,di*fF"))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[0])) { if (FP_REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STE %1,140(,13)\;L %0,140(,13)\"; } if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } mvs_check_page (0, 4, 0); return \"L %0,%1\"; } else if (FP_REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STE %1,%0\"; } else if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"ST %1,%0\"; } mvs_check_page (0, 6, 0); return \"MVC %O0(4,%R0),%1\";}" [(set_attr "length" "8")])(define_insn "movsi" [(set (match_operand:SI 0 "general_operand" "=d,dm") (match_operand:SI 1 "general_operand" "dimF,*fd"))] "" "*{ check_label_emit (); if (REG_P (operands[0])) { if (FP_REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STE %1,140(,13)\;L %0,140(,13)\"; } if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } mvs_check_page (0, 4, 0); return \"L %0,%1\"; } else if (FP_REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STE %1,%0\"; } mvs_check_page (0, 4, 0); return \"ST %1,%0\";}" [(set_attr "length" "8")]);(define_expand "movsi"; [(set (match_operand:SI 0 "general_operand" "=d,dm"); (match_operand:SI 1 "general_operand" "dimF,*fd"))]; ""; ";{; rtx op0, op1;;; op0 = operands[0];; if (GET_CODE (op0) == CONST; && GET_CODE (XEXP (XEXP (op0, 0), 0)) == SYMBOL_REF; && SYMBOL_REF_FLAG (XEXP (XEXP (op0, 0), 0))); {; op0 = gen_rtx_MEM (SImode, copy_to_mode_reg (SImode, XEXP (op0, 0)));; };; op1 = operands[1];; if (GET_CODE (op1) == CONST; && GET_CODE (XEXP (XEXP (op1, 0), 0)) == SYMBOL_REF; && SYMBOL_REF_FLAG (XEXP (XEXP (op1, 0), 0))); {; op1 = gen_rtx_MEM (SImode, copy_to_mode_reg (SImode, XEXP (op1, 0)));; };; emit_insn (gen_rtx_SET (VOIDmode, op0, op1));; DONE;;}");; movhi instruction pattern(s).;(define_insn "" [(set (match_operand:HI 0 "r_or_s_operand" "=g") (match_operand:HI 1 "r_or_s_operand" "g"))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[0])) { if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } if (GET_CODE (operands[1]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"LH %0,%H1\"; } mvs_check_page (0, 4, 0); return \"LH %0,%1\"; } else if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STH %1,%0\"; } if (GET_CODE (operands[1]) == CONST_INT) { mvs_check_page (0, 6, 0); return \"MVC %O0(2,%R0),%H1\"; } mvs_check_page (0, 6, 0); return \"MVC %O0(2,%R0),%1\";}" [(set_attr "length" "6")])(define_insn "movhi" [(set (match_operand:HI 0 "general_operand" "=d,m") (match_operand:HI 1 "general_operand" "g,d"))] "" "*{ check_label_emit (); if (REG_P (operands[0])) { if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } if (GET_CODE (operands[1]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"LH %0,%H1\"; } mvs_check_page (0, 4, 0); return \"LH %0,%1\"; } mvs_check_page (0, 4, 0); return \"STH %1,%0\";}" [(set_attr "length" "4")]);; movqi instruction pattern(s).;(define_insn "" [(set (match_operand:QI 0 "r_or_s_operand" "=g") (match_operand:QI 1 "r_or_s_operand" "g"))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[0])) { if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT) { if ((INTVAL (operands[1]) >= 0) && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } mvs_check_page (0, 4, 0); return \"L %0,=F'%c1'\"; } mvs_check_page (0, 4, 0); return \"IC %0,%1\"; } else if (REG_P (operands[1])) { mvs_check_page (0, 4, 0); return \"STC %1,%0\"; } else if (GET_CODE (operands[1]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"MVI %0,%B1\"; } mvs_check_page (0, 6, 0); return \"MVC %O0(1,%R0),%1\";}" [(set_attr "length" "6")])(define_insn "movqi" [(set (match_operand:QI 0 "general_operand" "=d,m") (match_operand:QI 1 "general_operand" "g,d"))] "" "*{ check_label_emit (); if (REG_P (operands[0])) { if (REG_P (operands[1])) { mvs_check_page (0, 2, 0); return \"LR %0,%1\"; } if (operands[1] == const0_rtx) { CC_STATUS_INIT; mvs_check_page (0, 2, 0); return \"SLR %0,%0\"; } if (GET_CODE (operands[1]) == CONST_INT) { if ((INTVAL (operands[1]) >= 0) && (unsigned) INTVAL (operands[1]) < 4096) { mvs_check_page (0, 4, 0); return \"LA %0,%c1(0,0)\"; } mvs_check_page (0, 4, 0); return \"L %0,=F'%c1'\"; } mvs_check_page (0, 4, 0); return \"IC %0,%1\"; } mvs_check_page (0, 4, 0); return \"STC %1,%0\";}" [(set_attr "length" "4")]);; movstrictqi instruction pattern(s).;(define_insn "movstrictqi" [(set (strict_low_part (match_operand:QI 0 "general_operand" "+d")) (match_operand:QI 1 "general_operand" "g"))] "" "*{ check_label_emit (); if (REG_P (operands[1])) { mvs_check_page (0, 8, 0); return \"STC %1,140(,13)\;IC %0,140(,13)\"; } mvs_check_page (0, 4, 0); return \"IC %0,%1\";}" [(set_attr "length" "8")]);; movstricthi instruction pattern(s).;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -