📄 s390.md
字号:
(define_insn "*tsthiCCT_cconly" [(set (reg 33) (compare (match_operand:HI 0 "nonimmediate_operand" "Q,S,d") (match_operand:HI 1 "const0_operand" ""))) (clobber (match_scratch:HI 2 "=d,d,X"))] "s390_match_ccmode(insn, CCTmode)" "@ icm\t%2,3,%S0 icmy\t%2,3,%S0 tml\t%0,65535" [(set_attr "op_type" "RS,RSY,RI")])(define_insn "*tsthi" [(set (reg 33) (compare (match_operand:HI 0 "s_operand" "Q,S") (match_operand:HI 1 "const0_operand" ""))) (set (match_operand:HI 2 "register_operand" "=d,d") (match_dup 0))] "s390_match_ccmode(insn, CCSmode)" "@ icm\t%2,3,%S0 icmy\t%2,3,%S0" [(set_attr "op_type" "RS,RSY")])(define_insn "*tsthi_cconly" [(set (reg 33) (compare (match_operand:HI 0 "s_operand" "Q,S") (match_operand:HI 1 "const0_operand" ""))) (clobber (match_scratch:HI 2 "=d,d"))] "s390_match_ccmode(insn, CCSmode)" "@ icm\t%2,3,%S0 icmy\t%2,3,%S0" [(set_attr "op_type" "RS,RSY")])(define_insn "*tstqiCCT" [(set (reg 33) (compare (match_operand:QI 0 "nonimmediate_operand" "?Q,?S,d") (match_operand:QI 1 "const0_operand" ""))) (set (match_operand:QI 2 "register_operand" "=d,d,0") (match_dup 0))] "s390_match_ccmode(insn, CCTmode)" "@ icm\t%2,1,%S0 icmy\t%2,1,%S0 tml\t%0,255" [(set_attr "op_type" "RS,RSY,RI")])(define_insn "*tstqiCCT_cconly" [(set (reg 33) (compare (match_operand:QI 0 "nonimmediate_operand" "?Q,?S,d") (match_operand:QI 1 "const0_operand" "")))] "s390_match_ccmode(insn, CCTmode)" "@ cli\t%S0,0 cliy\t%S0,0 tml\t%0,255" [(set_attr "op_type" "SI,SIY,RI")])(define_insn "*tstqi" [(set (reg 33) (compare (match_operand:QI 0 "s_operand" "Q,S") (match_operand:QI 1 "const0_operand" ""))) (set (match_operand:QI 2 "register_operand" "=d,d") (match_dup 0))] "s390_match_ccmode(insn, CCSmode)" "@ icm\t%2,1,%S0 icmy\t%2,1,%S0" [(set_attr "op_type" "RS,RSY")])(define_insn "*tstqi_cconly" [(set (reg 33) (compare (match_operand:QI 0 "s_operand" "Q,S") (match_operand:QI 1 "const0_operand" ""))) (clobber (match_scratch:QI 2 "=d,d"))] "s390_match_ccmode(insn, CCSmode)" "@ icm\t%2,1,%S0 icmy\t%2,1,%S0" [(set_attr "op_type" "RS,RSY")]); Compare (equality) instructions(define_insn "*cmpdi_cct" [(set (reg 33) (compare (match_operand:DI 0 "nonimmediate_operand" "%d,d,d,Q") (match_operand:DI 1 "general_operand" "d,K,m,BQ")))] "s390_match_ccmode (insn, CCTmode) && TARGET_64BIT" "@ cgr\t%0,%1 cghi\t%0,%h1 cg\t%0,%1 #" [(set_attr "op_type" "RRE,RI,RXY,SS")])(define_insn "*cmpsi_cct" [(set (reg 33) (compare (match_operand:SI 0 "nonimmediate_operand" "%d,d,d,d,Q") (match_operand:SI 1 "general_operand" "d,K,R,T,BQ")))] "s390_match_ccmode (insn, CCTmode)" "@ cr\t%0,%1 chi\t%0,%h1 c\t%0,%1 cy\t%0,%1 #" [(set_attr "op_type" "RR,RI,RX,RXY,SS")]); Compare (signed) instructions(define_insn "*cmpdi_ccs_sign" [(set (reg 33) (compare (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,m")) (match_operand:DI 0 "register_operand" "d,d")))] "s390_match_ccmode(insn, CCSRmode) && TARGET_64BIT" "@ cgfr\t%0,%1 cgf\t%0,%1" [(set_attr "op_type" "RRE,RXY")])(define_insn "*cmpdi_ccs" [(set (reg 33) (compare (match_operand:DI 0 "register_operand" "d,d,d") (match_operand:DI 1 "general_operand" "d,K,m")))] "s390_match_ccmode(insn, CCSmode) && TARGET_64BIT" "@ cgr\t%0,%1 cghi\t%0,%h1 cg\t%0,%1" [(set_attr "op_type" "RRE,RI,RXY")])(define_insn "*cmpsi_ccs_sign" [(set (reg 33) (compare (sign_extend:SI (match_operand:HI 1 "memory_operand" "R,T")) (match_operand:SI 0 "register_operand" "d,d")))] "s390_match_ccmode(insn, CCSRmode)" "@ ch\t%0,%1 chy\t%0,%1" [(set_attr "op_type" "RX,RXY")])(define_insn "*cmpsi_ccs" [(set (reg 33) (compare (match_operand:SI 0 "register_operand" "d,d,d,d") (match_operand:SI 1 "general_operand" "d,K,R,T")))] "s390_match_ccmode(insn, CCSmode)" "@ cr\t%0,%1 chi\t%0,%h1 c\t%0,%1 cy\t%0,%1" [(set_attr "op_type" "RR,RI,RX,RXY")]); Compare (unsigned) instructions(define_insn "*cmpdi_ccu_zero" [(set (reg 33) (compare (zero_extend:DI (match_operand:SI 1 "nonimmediate_operand" "d,m")) (match_operand:DI 0 "register_operand" "d,d")))] "s390_match_ccmode (insn, CCURmode) && TARGET_64BIT" "@ clgfr\t%0,%1 clgf\t%0,%1" [(set_attr "op_type" "RRE,RXY")])(define_insn "*cmpdi_ccu" [(set (reg 33) (compare (match_operand:DI 0 "nonimmediate_operand" "d,d,Q,BQ") (match_operand:DI 1 "general_operand" "d,m,BQ,Q")))] "s390_match_ccmode (insn, CCUmode) && TARGET_64BIT" "@ clgr\t%0,%1 clg\t%0,%1 # #" [(set_attr "op_type" "RRE,RXY,SS,SS")])(define_insn "*cmpsi_ccu" [(set (reg 33) (compare (match_operand:SI 0 "nonimmediate_operand" "d,d,d,Q,BQ") (match_operand:SI 1 "general_operand" "d,R,T,BQ,Q")))] "s390_match_ccmode (insn, CCUmode)" "@ clr\t%0,%1 cl\t%0,%1 cly\t%0,%1 # #" [(set_attr "op_type" "RR,RX,RXY,SS,SS")])(define_insn "*cmphi_ccu" [(set (reg 33) (compare (match_operand:HI 0 "nonimmediate_operand" "d,d,Q,BQ") (match_operand:HI 1 "general_operand" "Q,S,BQ,Q")))] "s390_match_ccmode (insn, CCUmode) && !register_operand (operands[1], HImode)" "@ clm\t%0,3,%S1 clmy\t%0,3,%S1 # #" [(set_attr "op_type" "RS,RSY,SS,SS")])(define_insn "*cmpqi_ccu" [(set (reg 33) (compare (match_operand:QI 0 "nonimmediate_operand" "d,d,Q,S,Q,BQ") (match_operand:QI 1 "general_operand" "Q,S,n,n,BQ,Q")))] "s390_match_ccmode (insn, CCUmode) && !register_operand (operands[1], QImode)" "@ clm\t%0,1,%S1 clmy\t%0,1,%S1 cli\t%S0,%b1 cliy\t%S0,%b1 # #" [(set_attr "op_type" "RS,RSY,SI,SIY,SS,SS")]); Block compare (CLC) instruction patterns.(define_insn "*clc" [(set (reg 33) (compare (match_operand:BLK 0 "memory_operand" "Q") (match_operand:BLK 1 "memory_operand" "Q"))) (use (match_operand 2 "const_int_operand" "n"))] "s390_match_ccmode (insn, CCUmode) && INTVAL (operands[2]) >= 1 && INTVAL (operands[2]) <= 256" "clc\t%O0(%2,%R0),%S1" [(set_attr "op_type" "SS")])(define_split [(set (reg 33) (compare (match_operand 0 "memory_operand" "") (match_operand 1 "memory_operand" "")))] "reload_completed && s390_match_ccmode (insn, CCUmode) && GET_MODE (operands[0]) == GET_MODE (operands[1]) && GET_MODE_SIZE (GET_MODE (operands[0])) > 0" [(parallel [(set (match_dup 0) (match_dup 1)) (use (match_dup 2))])]{ operands[2] = GEN_INT (GET_MODE_SIZE (GET_MODE (operands[0]))); operands[0] = adjust_address (operands[0], BLKmode, 0); operands[1] = adjust_address (operands[1], BLKmode, 0); operands[1] = gen_rtx_COMPARE (GET_MODE (SET_DEST (PATTERN (curr_insn))), operands[0], operands[1]); operands[0] = SET_DEST (PATTERN (curr_insn));}); DF instructions(define_insn "*cmpdf_ccs_0" [(set (reg 33) (compare (match_operand:DF 0 "register_operand" "f") (match_operand:DF 1 "const0_operand" "")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" "ltdbr\t%0,%0" [(set_attr "op_type" "RRE") (set_attr "type" "fsimpd")])(define_insn "*cmpdf_ccs_0_ibm" [(set (reg 33) (compare (match_operand:DF 0 "register_operand" "f") (match_operand:DF 1 "const0_operand" "")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" "ltdr\t%0,%0" [(set_attr "op_type" "RR") (set_attr "type" "fsimpd")])(define_insn "*cmpdf_ccs" [(set (reg 33) (compare (match_operand:DF 0 "register_operand" "f,f") (match_operand:DF 1 "general_operand" "f,R")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" "@ cdbr\t%0,%1 cdb\t%0,%1" [(set_attr "op_type" "RRE,RXE") (set_attr "type" "fsimpd")])(define_insn "*cmpdf_ccs_ibm" [(set (reg 33) (compare (match_operand:DF 0 "register_operand" "f,f") (match_operand:DF 1 "general_operand" "f,R")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" "@ cdr\t%0,%1 cd\t%0,%1" [(set_attr "op_type" "RR,RX") (set_attr "type" "fsimpd")]); SF instructions(define_insn "*cmpsf_ccs_0" [(set (reg 33) (compare (match_operand:SF 0 "register_operand" "f") (match_operand:SF 1 "const0_operand" "")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" "ltebr\t%0,%0" [(set_attr "op_type" "RRE") (set_attr "type" "fsimps")])(define_insn "*cmpsf_ccs_0_ibm" [(set (reg 33) (compare (match_operand:SF 0 "register_operand" "f") (match_operand:SF 1 "const0_operand" "")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" "lter\t%0,%0" [(set_attr "op_type" "RR") (set_attr "type" "fsimps")])(define_insn "*cmpsf_ccs" [(set (reg 33) (compare (match_operand:SF 0 "register_operand" "f,f") (match_operand:SF 1 "general_operand" "f,R")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IEEE_FLOAT" "@ cebr\t%0,%1 ceb\t%0,%1" [(set_attr "op_type" "RRE,RXE") (set_attr "type" "fsimps")])(define_insn "*cmpsf_ccs" [(set (reg 33) (compare (match_operand:SF 0 "register_operand" "f,f") (match_operand:SF 1 "general_operand" "f,R")))] "s390_match_ccmode(insn, CCSmode) && TARGET_HARD_FLOAT && TARGET_IBM_FLOAT" "@ cer\t%0,%1 ce\t%0,%1" [(set_attr "op_type" "RR,RX") (set_attr "type" "fsimps")]);;;;- Move instructions.;;;; movti instruction pattern(s).;(define_insn "movti" [(set (match_operand:TI 0 "nonimmediate_operand" "=d,QS,d,o,Q") (match_operand:TI 1 "general_operand" "QS,d,dKm,d,Q"))] "TARGET_64BIT" "@ lmg\t%0,%N0,%S1 stmg\t%1,%N1,%S0 # # #" [(set_attr "op_type" "RSY,RSY,*,*,SS") (set_attr "type" "lm,stm,*,*,*")])(define_split [(set (match_operand:TI 0 "nonimmediate_operand" "") (match_operand:TI 1 "general_operand" ""))] "TARGET_64BIT && reload_completed && s390_split_ok_p (operands[0], operands[1], TImode, 0)" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = operand_subword (operands[0], 0, 0, TImode); operands[3] = operand_subword (operands[0], 1, 0, TImode); operands[4] = operand_subword (operands[1], 0, 0, TImode); operands[5] = operand_subword (operands[1], 1, 0, TImode);})(define_split [(set (match_operand:TI 0 "nonimmediate_operand" "") (match_operand:TI 1 "general_operand" ""))] "TARGET_64BIT && reload_completed && s390_split_ok_p (operands[0], operands[1], TImode, 1)" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = operand_subword (operands[0], 1, 0, TImode); operands[3] = operand_subword (operands[0], 0, 0, TImode); operands[4] = operand_subword (operands[1], 1, 0, TImode); operands[5] = operand_subword (operands[1], 0, 0, TImode);})(define_split [(set (match_operand:TI 0 "register_operand" "") (match_operand:TI 1 "memory_operand" ""))] "TARGET_64BIT && reload_completed && !s_operand (operands[1], VOIDmode)" [(set (match_dup 0) (match_dup 1))]{ rtx addr = operand_subword (operands[0], 1, 0, TImode); s390_load_address (addr, XEXP (operands[1], 0)); operands[1] = replace_equiv_address (operands[1], addr);})(define_expand "reload_outti" [(parallel [(match_operand:TI 0 "" "") (match_operand:TI 1 "register_operand" "d") (match_operand:DI 2 "register_operand" "=&a")])] "TARGET_64BIT"{ gcc_assert (MEM_P (operands[0])); s390_load_address (operands[2], find_replacement (&XEXP (operands[0], 0))); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); DONE;});; movdi instruction pattern(s).;(define_expand "movdi"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -