📄 s390.md
字号:
le\t%0,%1 ste\t%1,%0 ear\t%0,%1 sar\t%0,%1 stam\t%1,%1,%S0 lam\t%0,%0,%S1 #" [(set_attr "op_type" "RI,RR,RX,RX,RR,RX,RX,RRE,RRE,RS,RS,SS") (set_attr "type" "*,lr,load,store,floadsf,floadsf,fstoresf,*,*,*,*,*")])(define_peephole2 [(set (match_operand:SI 0 "register_operand" "") (mem:SI (match_operand 1 "address_operand" "")))] "!FP_REG_P (operands[0]) && GET_CODE (operands[1]) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (operands[1]) && get_pool_mode (operands[1]) == SImode && legitimate_reload_constant_p (get_pool_constant (operands[1]))" [(set (match_dup 0) (match_dup 2))] "operands[2] = get_pool_constant (operands[1]);")(define_insn "*la_31" [(set (match_operand:SI 0 "register_operand" "=d,d") (match_operand:QI 1 "address_operand" "U,W"))] "!TARGET_64BIT && legitimate_la_operand_p (operands[1])" "@ la\t%0,%a1 lay\t%0,%a1" [(set_attr "op_type" "RX,RXY") (set_attr "type" "la")])(define_peephole2 [(parallel [(set (match_operand:SI 0 "register_operand" "") (match_operand:QI 1 "address_operand" "")) (clobber (reg:CC CC_REGNUM))])] "!TARGET_64BIT && preferred_la_operand_p (operands[1], const0_rtx)" [(set (match_dup 0) (match_dup 1))] "")(define_peephole2 [(set (match_operand:SI 0 "register_operand" "") (match_operand:SI 1 "register_operand" "")) (parallel [(set (match_dup 0) (plus:SI (match_dup 0) (match_operand:SI 2 "nonmemory_operand" ""))) (clobber (reg:CC CC_REGNUM))])] "!TARGET_64BIT && !reg_overlap_mentioned_p (operands[0], operands[2]) && preferred_la_operand_p (operands[1], operands[2])" [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 2)))] "")(define_insn "*la_31_and" [(set (match_operand:SI 0 "register_operand" "=d,d") (and:SI (match_operand:QI 1 "address_operand" "U,W") (const_int 2147483647)))] "!TARGET_64BIT" "@ la\t%0,%a1 lay\t%0,%a1" [(set_attr "op_type" "RX,RXY") (set_attr "type" "la")])(define_insn_and_split "*la_31_and_cc" [(set (match_operand:SI 0 "register_operand" "=d") (and:SI (match_operand:QI 1 "address_operand" "p") (const_int 2147483647))) (clobber (reg:CC CC_REGNUM))] "!TARGET_64BIT" "#" "&& reload_completed" [(set (match_dup 0) (and:SI (match_dup 1) (const_int 2147483647)))] "" [(set_attr "op_type" "RX") (set_attr "type" "la")])(define_insn "force_la_31" [(set (match_operand:SI 0 "register_operand" "=d,d") (match_operand:QI 1 "address_operand" "U,W")) (use (const_int 0))] "!TARGET_64BIT" "@ la\t%0,%a1 lay\t%0,%a1" [(set_attr "op_type" "RX") (set_attr "type" "la")])(define_expand "reload_insi" [(parallel [(match_operand:SI 0 "register_operand" "=a") (match_operand:SI 1 "s390_plus_operand" "") (match_operand:SI 2 "register_operand" "=&a")])] "!TARGET_64BIT"{ s390_expand_plus_operand (operands[0], operands[1], operands[2]); DONE;});; movhi instruction pattern(s).;(define_expand "movhi" [(set (match_operand:HI 0 "nonimmediate_operand" "") (match_operand:HI 1 "general_operand" ""))] ""{ /* Make it explicit that loading a register from memory always sign-extends (at least) to SImode. */ if (optimize && !no_new_pseudos && register_operand (operands[0], VOIDmode) && GET_CODE (operands[1]) == MEM) { rtx tmp = gen_reg_rtx (SImode); rtx ext = gen_rtx_SIGN_EXTEND (SImode, operands[1]); emit_insn (gen_rtx_SET (VOIDmode, tmp, ext)); operands[1] = gen_lowpart (HImode, tmp); }})(define_insn "*movhi" [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,d,R,T,?Q") (match_operand:HI 1 "general_operand" "d,n,R,T,d,d,?Q"))] "" "@ lr\t%0,%1 lhi\t%0,%h1 lh\t%0,%1 lhy\t%0,%1 sth\t%1,%0 sthy\t%1,%0 #" [(set_attr "op_type" "RR,RI,RX,RXY,RX,RXY,SS") (set_attr "type" "lr,*,*,*,store,store,*")])(define_peephole2 [(set (match_operand:HI 0 "register_operand" "") (mem:HI (match_operand 1 "address_operand" "")))] "GET_CODE (operands[1]) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (operands[1]) && get_pool_mode (operands[1]) == HImode && GET_CODE (get_pool_constant (operands[1])) == CONST_INT" [(set (match_dup 0) (match_dup 2))] "operands[2] = get_pool_constant (operands[1]);");; movqi instruction pattern(s).;(define_expand "movqi" [(set (match_operand:QI 0 "nonimmediate_operand" "") (match_operand:QI 1 "general_operand" ""))] ""{ /* On z/Architecture, zero-extending from memory to register is just as fast as a QImode load. */ if (TARGET_ZARCH && optimize && !no_new_pseudos && register_operand (operands[0], VOIDmode) && GET_CODE (operands[1]) == MEM) { rtx tmp = gen_reg_rtx (word_mode); rtx ext = gen_rtx_ZERO_EXTEND (word_mode, operands[1]); emit_insn (gen_rtx_SET (VOIDmode, tmp, ext)); operands[1] = gen_lowpart (QImode, tmp); }})(define_insn "*movqi" [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,d,R,T,Q,S,?Q") (match_operand:QI 1 "general_operand" "d,n,R,T,d,d,n,n,?Q"))] "" "@ lr\t%0,%1 lhi\t%0,%b1 ic\t%0,%1 icy\t%0,%1 stc\t%1,%0 stcy\t%1,%0 mvi\t%S0,%b1 mviy\t%S0,%b1 #" [(set_attr "op_type" "RR,RI,RX,RXY,RX,RXY,SI,SIY,SS") (set_attr "type" "lr,*,*,*,store,store,store,store,*")])(define_peephole2 [(set (match_operand:QI 0 "nonimmediate_operand" "") (mem:QI (match_operand 1 "address_operand" "")))] "GET_CODE (operands[1]) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (operands[1]) && get_pool_mode (operands[1]) == QImode && GET_CODE (get_pool_constant (operands[1])) == CONST_INT" [(set (match_dup 0) (match_dup 2))] "operands[2] = get_pool_constant (operands[1]);");; movstrictqi instruction pattern(s).;(define_insn "*movstrictqi" [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d,d")) (match_operand:QI 1 "memory_operand" "R,T"))] "" "@ ic\t%0,%1 icy\t%0,%1" [(set_attr "op_type" "RX,RXY")]);; movstricthi instruction pattern(s).;(define_insn "*movstricthi" [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d,d")) (match_operand:HI 1 "memory_operand" "Q,S")) (clobber (reg:CC CC_REGNUM))] "" "@ icm\t%0,3,%S1 icmy\t%0,3,%S1" [(set_attr "op_type" "RS,RSY")]);; movstrictsi instruction pattern(s).;(define_insn "movstrictsi" [(set (strict_low_part (match_operand:SI 0 "register_operand" "+d,d,d,d")) (match_operand:SI 1 "general_operand" "d,R,T,t"))] "TARGET_64BIT" "@ lr\t%0,%1 l\t%0,%1 ly\t%0,%1 ear\t%0,%1" [(set_attr "op_type" "RR,RX,RXY,RRE") (set_attr "type" "lr,load,load,*")]);; movtf instruction pattern(s).;(define_expand "movtf" [(set (match_operand:TF 0 "nonimmediate_operand" "") (match_operand:TF 1 "general_operand" ""))] "" "")(define_insn "*movtf_64" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,f,f,o,d,QS,d,o,Q") (match_operand:TF 1 "general_operand" "G,f,o,f,QS,d,dm,d,Q"))] "TARGET_64BIT" "@ lzxr\t%0 lxr\t%0,%1 # # lmg\t%0,%N0,%S1 stmg\t%1,%N1,%S0 # # #" [(set_attr "op_type" "RRE,RRE,*,*,RSY,RSY,*,*,*") (set_attr "type" "fsimptf,fsimptf,*,*,lm,stm,*,*,*")])(define_insn "*movtf_31" [(set (match_operand:TF 0 "nonimmediate_operand" "=f,f,f,o,Q") (match_operand:TF 1 "general_operand" "G,f,o,f,Q"))] "!TARGET_64BIT" "@ lzxr\t%0 lxr\t%0,%1 # # #" [(set_attr "op_type" "RRE,RRE,*,*,*") (set_attr "type" "fsimptf,fsimptf,*,*,*")]); TFmode in GPRs splitters(define_split [(set (match_operand:TF 0 "nonimmediate_operand" "") (match_operand:TF 1 "general_operand" ""))] "TARGET_64BIT && reload_completed && s390_split_ok_p (operands[0], operands[1], TFmode, 0)" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = operand_subword (operands[0], 0, 0, TFmode); operands[3] = operand_subword (operands[0], 1, 0, TFmode); operands[4] = operand_subword (operands[1], 0, 0, TFmode); operands[5] = operand_subword (operands[1], 1, 0, TFmode);})(define_split [(set (match_operand:TF 0 "nonimmediate_operand" "") (match_operand:TF 1 "general_operand" ""))] "TARGET_64BIT && reload_completed && s390_split_ok_p (operands[0], operands[1], TFmode, 1)" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = operand_subword (operands[0], 1, 0, TFmode); operands[3] = operand_subword (operands[0], 0, 0, TFmode); operands[4] = operand_subword (operands[1], 1, 0, TFmode); operands[5] = operand_subword (operands[1], 0, 0, TFmode);})(define_split [(set (match_operand:TF 0 "register_operand" "") (match_operand:TF 1 "memory_operand" ""))] "TARGET_64BIT && reload_completed && !FP_REG_P (operands[0]) && !s_operand (operands[1], VOIDmode)" [(set (match_dup 0) (match_dup 1))]{ rtx addr = operand_subword (operands[0], 1, 0, DFmode); s390_load_address (addr, XEXP (operands[1], 0)); operands[1] = replace_equiv_address (operands[1], addr);}); TFmode in FPRs splitters(define_split [(set (match_operand:TF 0 "register_operand" "") (match_operand:TF 1 "memory_operand" ""))] "reload_completed && offsettable_memref_p (operands[1]) && FP_REG_P (operands[0])" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = simplify_gen_subreg (DFmode, operands[0], TFmode, 0); operands[3] = simplify_gen_subreg (DFmode, operands[0], TFmode, 8); operands[4] = adjust_address_nv (operands[1], DFmode, 0); operands[5] = adjust_address_nv (operands[1], DFmode, 8);})(define_split [(set (match_operand:TF 0 "memory_operand" "") (match_operand:TF 1 "register_operand" ""))] "reload_completed && offsettable_memref_p (operands[0]) && FP_REG_P (operands[1])" [(set (match_dup 2) (match_dup 4)) (set (match_dup 3) (match_dup 5))]{ operands[2] = adjust_address_nv (operands[0], DFmode, 0); operands[3] = adjust_address_nv (operands[0], DFmode, 8); operands[4] = simplify_gen_subreg (DFmode, operands[1], TFmode, 0); operands[5] = simplify_gen_subreg (DFmode, operands[1], TFmode, 8);})(define_expand "reload_outtf" [(parallel [(match_operand:TF 0 "" "") (match_operand:TF 1 "register_operand" "f") (match_operand:SI 2 "register_operand" "=&a")])] ""{ rtx addr = gen_lowpart (Pmode, operands[2]); gcc_assert (MEM_P (operands[0])); s390_load_address (addr, find_replacement (&XEXP (operands[0], 0))); operands[0] = replace_equiv_address (operands[0], addr); emit_move_insn (operands[0], operands[1]); DONE;})(define_expand "reload_intf" [(parallel [(match_operand:TF 0 "register_operand" "=f") (match_operand:TF 1 "" "") (match_operand:SI 2 "register_operand" "=&a")])] ""{ rtx addr = gen_lowpart (Pmode, operands[2]); gcc_assert (MEM_P (operands[1])); s390_load_address (addr, find_replacement (&XEXP (operands[1], 0))); operands[1] = replace_equiv_address (operands[1], addr); emit_move_insn (operands[0], operands[1]); DONE;});; movdf instruction pattern(s).;(define_expand "movdf" [(set (match_operand:DF 0 "nonimmediate_operand" "") (match_operand:DF 1 "general_operand" ""))] "" "")(define_insn "*movdf_64" [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,f,R,T,d,d,m,?Q") (match_operand:DF 1 "general_operand" "G,f,R,T,f,f,d,m,d,?Q"))] "TARGET_64BIT" "@ lzdr\t%0 ldr\t%0,%1 ld\t%0,%1 ldy\t%0,%1 std\t%1,%0 stdy\t%1,%0 lgr\t%0,%1 lg\t%0,%1 stg\t%1,%0 #" [(set_attr "op_type" "RRE,RR,RX,RXY,RX,RXY,RRE,RXY,RXY,SS") (set_attr "type" "fsimpdf,floaddf,floaddf,floaddf,fstoredf,fstoredf,lr,load,store,*")])(define_insn "*movdf_31" [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,f,f,R,T,d,d,Q,S,d,o,Q") (match_operand:DF 1 "general_operand" "G,f,R,T,f,f,Q,S,d,d,dPm,d,Q"))] "!TARGET_64BIT" "@ lzdr\t%0 ldr\t%0,%1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -