📄 i370.md
字号:
(match_operand:SI 2 "general_operand" "")))] "" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"DR %0,%2\"; } mvs_check_page (0, 4, 0); return \"D %0,%2\";}");; divdf3 instruction pattern(s).;(define_insn "divdf3" [(set (match_operand:DF 0 "general_operand" "=f") (div:DF (match_operand:DF 1 "general_operand" "0") (match_operand:DF 2 "general_operand" "fmF")))] "" "*{ check_label_emit (); if (FP_REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"DDR %0,%2\"; } mvs_check_page (0, 4, 0); return \"DD %0,%2\";}");; divsf3 instruction pattern(s).;(define_insn "divsf3" [(set (match_operand:SF 0 "general_operand" "=f") (div:SF (match_operand:SF 1 "general_operand" "0") (match_operand:SF 2 "general_operand" "fmF")))] "" "*{ check_label_emit (); if (FP_REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"DER %0,%2\"; } mvs_check_page (0, 4, 0); return \"DE %0,%2\";}");;;;- Modulo instructions.;;;; modsi3 instruction pattern(s).;(define_expand "modsi3" [(set (match_operand:SI 0 "general_operand" "") (mod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "" "{ rtx r = gen_reg_rtx (DImode); emit_insn (gen_extendsidi2 (r, operands[1])); emit_insn (gen_rtx (SET, VOIDmode, r, gen_rtx (MOD, SImode, r, operands[2]))); emit_insn (gen_rtx (SET, VOIDmode, operands[0], gen_rtx (SUBREG, SImode, r, 0))); DONE;}");; umodsi3 instruction pattern(s).;(define_expand "umodsi3" [(set (match_operand:SI 0 "general_operand" "") (umod:SI (match_operand:SI 1 "general_operand" "") (match_operand:SI 2 "general_operand" "")))] "" "{ rtx dr = gen_reg_rtx (DImode); rtx dr_0 = gen_rtx (SUBREG, SImode, dr, 0); rtx dr_1 = gen_rtx (SUBREG, SImode, dr, 1); emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); if (GET_CODE (operands[2]) == CONST_INT) { if (INTVAL (operands[2]) > 0) { emit_insn (gen_rtx (SET, VOIDmode, dr, gen_rtx (LSHIFTRT, DImode, dr, GEN_INT (32)))); emit_insn (gen_rtx (SET, VOIDmode, dr, gen_rtx (MOD, SImode, dr, operands[2]))); } else { rtx label1 = gen_label_rtx (); rtx sr = gen_reg_rtx (SImode); emit_insn (gen_rtx (SET, VOIDmode, sr, operands[2])); emit_insn (gen_cmpsi (dr_0, sr)); emit_jump_insn (gen_bltu (label1)); emit_insn (gen_rtx (SET, VOIDmode, sr, gen_rtx (ABS, SImode, sr))); emit_insn (gen_rtx (SET, VOIDmode, dr_0, gen_rtx (PLUS, SImode, dr_0, sr))); emit_label (label1); } } else { rtx label1 = gen_label_rtx (); rtx label2 = gen_label_rtx (); rtx label3 = gen_label_rtx (); rtx sr = gen_reg_rtx (SImode); emit_insn (gen_rtx (SET, VOIDmode, dr_0, operands[1])); emit_insn (gen_rtx (SET, VOIDmode, sr, operands[2])); emit_insn (gen_cmpsi (sr, dr_0)); emit_jump_insn (gen_bgtu (label3)); emit_insn (gen_cmpsi (sr, const1_rtx)); emit_jump_insn (gen_blt (label2)); emit_jump_insn (gen_beq (label1)); emit_insn (gen_rtx (SET, VOIDmode, dr, gen_rtx (LSHIFTRT, DImode, dr, GEN_INT (32)))); emit_insn (gen_rtx (SET, VOIDmode, dr, gen_rtx (MOD, SImode, dr, sr))); emit_jump_insn (gen_jump (label3)); emit_label (label1); emit_insn (gen_rtx (SET, VOIDmode, dr_0, const0_rtx)); emit_jump_insn (gen_jump (label3)); emit_label (label2); emit_insn (gen_rtx (SET, VOIDmode, dr_0, gen_rtx (MINUS, SImode, dr_0, sr))); emit_label (label3); } emit_insn (gen_rtx (SET, VOIDmode, operands[0], dr_0)); DONE;}"); This is used by modsi3 & umodsi3.(define_insn "" [(set (match_operand:DI 0 "register_operand" "=d") (mod:DI (match_operand:DI 1 "register_operand" "0") (match_operand:SI 2 "general_operand" "")))] "" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"DR %0,%2\"; } mvs_check_page (0, 4, 0); return \"D %0,%2\";}");;;;- And instructions.;;;; anddi3 instruction pattern(s).;;(define_expand "anddi3"; [(set (match_operand:DI 0 "general_operand" ""); (and:DI (match_operand:DI 1 "general_operand" ""); (match_operand:DI 2 "general_operand" "")))]; ""; ";{; rtx gen_andsi3();;; emit_insn (gen_andsi3 (operand_subword (operands[0], 0, 1, DImode),; operand_subword (operands[1], 0, 1, DImode),; operand_subword (operands[2], 0, 1, DImode)));; emit_insn (gen_andsi3 (gen_lowpart (SImode, operands[0]),; gen_lowpart (SImode, operands[1]),; gen_lowpart (SImode, operands[2])));; DONE;;}");; andsi3 instruction pattern(s).;(define_insn "" [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") (and:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") (match_operand:SI 2 "r_or_s_operand" "g,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"NR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"N %0,%2\"; } CC_STATUS_INIT; mvs_check_page (0, 6, 0); return \"NC %O0(4,%R0),%2\";}")(define_insn "andsi3" [(set (match_operand:SI 0 "general_operand" "=d") (and:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_operand" "g")))] "" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"NR %0,%2\"; } mvs_check_page (0, 4, 0); return \"N %0,%2\";}");; andhi3 instruction pattern(s).;(define_insn "" [(set (match_operand:HI 0 "r_or_s_operand" "=d,m") (and:HI (match_operand:HI 1 "r_or_s_operand" "%0,0") (match_operand:HI 2 "r_or_s_operand" "di,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"NR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"N %0,%2\"; } CC_STATUS_INIT; if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 6, 0); return \"NC %O0(2,%R0),%H2\"; } mvs_check_page (0, 6, 0); return \"NC %O0(2,%R0),%2\";}")(define_insn "andhi3" [(set (match_operand:HI 0 "general_operand" "=d") (and:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_operand" "di")))] "" "*{ check_label_emit (); if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"N %0,%2\"; } mvs_check_page (0, 2, 0); return \"NR %0,%2\";}");; andqi3 instruction pattern(s).;(define_insn "" [(set (match_operand:QI 0 "r_or_s_operand" "=d,m") (and:QI (match_operand:QI 1 "r_or_s_operand" "%0,0") (match_operand:QI 2 "r_or_s_operand" "di,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); CC_STATUS_INIT; if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"NR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"N %0,%2\"; } if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"NI %0,%B2\"; } mvs_check_page (0, 6, 0); return \"NC %O0(1,%R0),%2\";}")(define_insn "andqi3" [(set (match_operand:QI 0 "general_operand" "=d") (and:QI (match_operand:QI 1 "general_operand" "%0") (match_operand:QI 2 "general_operand" "di")))] "" "*{ check_label_emit (); CC_STATUS_INIT; if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"N %0,%2\"; } mvs_check_page (0, 2, 0); return \"NR %0,%2\";}");;;;- Bit set (inclusive or) instructions.;;;; iordi3 instruction pattern(s).;;(define_expand "iordi3"; [(set (match_operand:DI 0 "general_operand" ""); (ior:DI (match_operand:DI 1 "general_operand" ""); (match_operand:DI 2 "general_operand" "")))]; ""; ";{; rtx gen_iorsi3();;; emit_insn (gen_iorsi3 (operand_subword (operands[0], 0, 1, DImode),; operand_subword (operands[1], 0, 1, DImode),; operand_subword (operands[2], 0, 1, DImode)));; emit_insn (gen_iorsi3 (gen_lowpart (SImode, operands[0]),; gen_lowpart (SImode, operands[1]),; gen_lowpart (SImode, operands[2])));; DONE;;}");; iorsi3 instruction pattern(s).;(define_insn "" [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") (ior:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") (match_operand:SI 2 "r_or_s_operand" "g,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"OR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"O %0,%2\"; } CC_STATUS_INIT; mvs_check_page (0, 6, 0); return \"OC %O0(4,%R0),%2\";}")(define_insn "iorsi3" [(set (match_operand:SI 0 "general_operand" "=d") (ior:SI (match_operand:SI 1 "general_operand" "%0") (match_operand:SI 2 "general_operand" "g")))] "" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"OR %0,%2\"; } mvs_check_page (0, 4, 0); return \"O %0,%2\";}");; iorhi3 instruction pattern(s).;(define_insn "" [(set (match_operand:HI 0 "r_or_s_operand" "=d,m") (ior:HI (match_operand:HI 1 "r_or_s_operand" "%0,0") (match_operand:HI 2 "r_or_s_operand" "di,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"OR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"O %0,%2\"; } CC_STATUS_INIT; if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 6, 0); return \"OC %O0(2,%R0),%H2\"; } mvs_check_page (0, 6, 0); return \"OC %O0(2,%R0),%2\";}")(define_insn "iorhi3" [(set (match_operand:HI 0 "general_operand" "=d") (ior:HI (match_operand:HI 1 "general_operand" "%0") (match_operand:HI 2 "general_operand" "di")))] "" "*{ check_label_emit (); if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"O %0,%2\"; } mvs_check_page (0, 2, 0); return \"OR %0,%2\";}");; iorqi3 instruction pattern(s).;(define_insn "" [(set (match_operand:QI 0 "r_or_s_operand" "=d,m") (ior:QI (match_operand:QI 1 "r_or_s_operand" "%0,0") (match_operand:QI 2 "r_or_s_operand" "di,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); CC_STATUS_INIT; if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"OR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"O %0,%2\"; } CC_STATUS_INIT; if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"OI %0,%B2\"; } mvs_check_page (0, 6, 0); return \"OC %O0(1,%R0),%2\";}")(define_insn "iorqi3" [(set (match_operand:QI 0 "general_operand" "=d") (ior:QI (match_operand:QI 1 "general_operand" "%0") (match_operand:QI 2 "general_operand" "di")))] "" "*{ check_label_emit (); CC_STATUS_INIT; if (GET_CODE (operands[2]) == CONST_INT) { mvs_check_page (0, 4, 0); return \"O %0,%2\"; } mvs_check_page (0, 2, 0); return \"OR %0,%2\";}");;;;- Xor instructions.;;;; xordi3 instruction pattern(s).;;(define_expand "xordi3"; [(set (match_operand:DI 0 "general_operand" ""); (xor:DI (match_operand:DI 1 "general_operand" ""); (match_operand:DI 2 "general_operand" "")))]; ""; ";{; rtx gen_xorsi3();;; emit_insn (gen_xorsi3 (operand_subword (operands[0], 0, 1, DImode),; operand_subword (operands[1], 0, 1, DImode),; operand_subword (operands[2], 0, 1, DImode)));; emit_insn (gen_xorsi3 (gen_lowpart (SImode, operands[0]),; gen_lowpart (SImode, operands[1]),; gen_lowpart (SImode, operands[2])));; DONE;;}");; xorsi3 instruction pattern(s).;(define_insn "" [(set (match_operand:SI 0 "r_or_s_operand" "=d,m") (xor:SI (match_operand:SI 1 "r_or_s_operand" "%0,0") (match_operand:SI 2 "r_or_s_operand" "g,mi")))] "TARGET_CHAR_INSTRUCTIONS" "*{ check_label_emit (); if (REG_P (operands[2])) { mvs_check_page (0, 2, 0); return \"XR %0,%2\"; } if (REG_P (operands[0])) { mvs_check_page (0, 4, 0); return \"X %0,%2\"; } CC_STATUS_INIT; mvs_check_page (0, 6, 0); return \"XC %O0(4,%R0),%2\";}")(define_insn "xorsi3" [(set (match_operand:SI 0 "general_operand" "=d") (xor:SI (match_ope
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -