📄 dsp16xx.md
字号:
(umod:QI (match_operand:QI 1 "register_operand" "") (match_operand:QI 2 "nonmemory_operand" "")))] "" "{ if (!dsp16xx_umodqi3_libcall) dsp16xx_umodqi3_libcall = gen_rtx_SYMBOL_REF (Pmode, UMODQI3_LIBCALL); emit_library_call (dsp16xx_umodqi3_libcall, 1, QImode, 2, operands[1], QImode, operands[2], QImode); emit_move_insn (operands[0], hard_libcall_value(QImode)); DONE;}")(define_expand "divhf3" [(set (match_operand:HF 0 "register_operand" "") (div:HF (match_operand:HF 1 "register_operand" "") (match_operand:HF 2 "nonmemory_operand" "")))] "" "{ if (!dsp16xx_divhf3_libcall) dsp16xx_divhf3_libcall = gen_rtx_SYMBOL_REF (Pmode, DIVHF3_LIBCALL); emit_library_call (dsp16xx_divhf3_libcall, 1, HFmode, 2, operands[1], HFmode, operands[2], HFmode); emit_move_insn (operands[0], hard_libcall_value(HFmode)); DONE;}");;;; ********************;;;; Logical Instructions;;(define_split [(set (match_operand:HI 0 "register_operand" "") (and:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !AND_LOW_16(INTVAL(operands[2])) && !AND_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) == REGNO (operands[1]))" [(parallel [(set (match_dup 3) (and:QI (match_dup 4) (match_dup 5))) (clobber (match_scratch:QI 6 ""))]) (parallel [(set (match_dup 7) (and:QI (match_dup 8) (match_dup 9))) (clobber (match_scratch:QI 10 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_highpart(QImode, operands[0]); operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_split [(set (match_operand:HI 0 "register_operand" "") (and:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !AND_LOW_16(INTVAL(operands[2])) && !AND_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) != REGNO (operands[1]))" [(parallel [(set (match_dup 3) (and:QI (match_dup 4) (match_dup 5))) (clobber (match_dup 6))]) (parallel [(set (match_dup 6) (and:QI (match_dup 7) (match_dup 8))) (clobber (match_scratch:QI 9 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[6] = gen_highpart(QImode, operands[0]); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_insn "andhi3" [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") (and:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") (match_operand:HI 2 "nonmemory_operand" "Z,A,O,P,i")))] "" "@ %0=%1&%2 %0=%1&%2 %0=%w1&%H2 %0=%b1&%U2 %0=%w1&%H2\;%0=%b0&%U2" [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")])(define_insn "andqi3" [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") (and:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] "" "@ %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%1&%H2 %m0=%1&%H2 %m0=%1&%H2 %m0=%1&%H2 %m0=%m1&%m2 %m0=%m1&%m2 %m0=%b1&%H2 %m0=%b1&%H2 %m0=%b1&%H2 %m0=%b1&%H2 %m0=%m1&%m2 %m0=%m1&%m2" [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")])(define_split [(set (match_operand:HI 0 "register_operand" "") (ior:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && !ADD_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) == REGNO (operands[1]))" [(parallel [(set (match_dup 3) (ior:QI (match_dup 4) (match_dup 5))) (clobber (match_scratch:QI 6 ""))]) (parallel [(set (match_dup 7) (ior:QI (match_dup 8) (match_dup 9))) (clobber (match_scratch:QI 10 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_highpart(QImode, operands[0]); operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_split [(set (match_operand:HI 0 "register_operand" "") (ior:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && !ADD_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) != REGNO (operands[1]))" [(parallel [(set (match_dup 3) (ior:QI (match_dup 4) (match_dup 5))) (clobber (match_dup 6))]) (parallel [(set (match_dup 6) (ior:QI (match_dup 7) (match_dup 8))) (clobber (match_scratch:QI 9 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[6] = gen_highpart(QImode, operands[0]); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_insn "iorhi3" [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") (ior:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") (match_operand:HI 2 "nonmemory_operand" "Z,A,I,M,i")))] "" "@ %0=%u1|%u2 %0=%u1|%u2 %0=%w1|%H2 %0=%b1|%U2 %0=%w1|%H2\;%0=%b0|%U2" [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")])(define_insn "iorqi3" [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") (ior:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] "" "@ %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%1|%H2 %m0=%1|%H2 %m0=%1|%H2 %m0=%1|%H2 %m0=%m1|%m2 %m0=%m1|%m2 %m0=%b1|%H2 %m0=%b1|%H2 %m0=%b1|%H2 %m0=%b1|%H2 %m0=%m1|%m2 %m0=%m1|%m2" [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")])(define_split [(set (match_operand:HI 0 "register_operand" "") (xor:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && !ADD_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) == REGNO (operands[1]))" [(parallel [(set (match_dup 3) (xor:QI (match_dup 4) (match_dup 5))) (clobber (match_scratch:QI 6 ""))]) (parallel [(set (match_dup 7) (xor:QI (match_dup 8) (match_dup 9))) (clobber (match_scratch:QI 10 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_highpart(QImode, operands[0]); operands[9] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_split [(set (match_operand:HI 0 "register_operand" "") (xor:HI (match_operand:HI 1 "register_operand" "") (match_operand:HI 2 "const_int_operand" "")))] "reload_completed && !SMALL_INTVAL(INTVAL(operands[2])) && !ADD_HIGH_16(INTVAL(operands[2])) && (REGNO (operands[0]) != REGNO (operands[1]))" [(parallel [(set (match_dup 3) (xor:QI (match_dup 4) (match_dup 5))) (clobber (match_dup 6))]) (parallel [(set (match_dup 6) (xor:QI (match_dup 7) (match_dup 8))) (clobber (match_scratch:QI 9 ""))])] "{ operands[3] = gen_lowpart(QImode, operands[0]); operands[4] = gen_lowpart(QImode, operands[1]); operands[5] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); operands[6] = gen_highpart(QImode, operands[0]); operands[7] = gen_highpart(QImode, operands[0]); operands[8] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[2]) & 0xffff0000) >> 16) & 0xffff));}")(define_insn "xorhi3" [(set (match_operand:HI 0 "register_operand" "=A,A,A,A,?A") (xor:HI (match_operand:HI 1 "register_operand" "%A,!A,A,A,A") (match_operand:HI 2 "nonmemory_operand" "Z,A,I,M,i")))] "" "@ %0=%1^%2 %0=%1^%2 %0=%w1^%H2 %0=%b1^%U2 %0=%w1^%H2\;%0=%b0^%U2" [(set_attr "type" "f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i_mult")])(define_insn "xorqi3" [(set (match_operand:QI 0 "register_operand" "=k,u,!k,!u,k,u,k,u,j,q,j,q,j,q,!j,!q") (xor:QI (match_operand:QI 1 "register_operand" "%uk,uk,uk,uk,0,0,u,k,jq,jq,0,0,q,j,jq,jq") (match_operand:QI 2 "nonmemory_operand" "wz,wz,uk,uk,i,i,i,i,yv,yv,i,i,i,i,jq,jq"))) (clobber (match_scratch:QI 3 "=j,q,j,q,X,X,j,q,k,u,X,X,k,u,k,u"))] "" "@ %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%1^%H2 %m0=%1^%H2 %m0=%1^%H2 %m0=%1^%H2 %m0=%m1^%m2 %m0=%m1^%m2 %m0=%b1^%H2 %m0=%b1^%H2 %m0=%b1^%H2 %m0=%b1^%H2 %m0=%m1^%m2 %m0=%m1^%m2" [(set_attr "type" "f3_alu,f3_alu,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu,f3_alu")])(define_insn "one_cmplhi2" [(set (match_operand:HI 0 "register_operand" "=A") (not:HI (match_operand:HI 1 "register_operand" "A")))] "" "%0= ~%1" [(set_attr "type" "special")])(define_insn "one_cmplqi2" [(set (match_operand:QI 0 "register_operand" "=k,k,u,u,j,j,q,q") (not:QI (match_operand:QI 1 "register_operand" "0,u,0,q,0,q,0,j"))) (clobber (match_scratch:QI 2 "=X,j,X,q,X,k,X,u"))] "" "@ %m0= %1 ^ 0xffff %m0= %1 ^ 0xffff %m0= %1 ^ 0xffff %m0= %1 ^ 0xffff %m0= %b1 ^ 0xffff %m0= %b1 ^ 0xffff %m0= %b1 ^ 0xffff %m0= %b1 ^ 0xffff" [(set_attr "type" "f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i,f3_alu_i")]);;;; MOVE INSTRUCTIONS;;(define_split [(set (mem:HI (match_operand:QI 0 "register_operand" "")) (match_operand:HI 1 "register_operand" ""))] "reload_completed && (operands[0] != stack_pointer_rtx)" [(set (mem:QI (post_inc:QI (match_dup 0))) (match_dup 2)) (set (mem:QI (post_dec:QI (match_dup 0))) (match_dup 3))] "{ operands[2] = gen_highpart(QImode, operands[1]); operands[3] = gen_lowpart(QImode, operands[1]);}")(define_split [(set (match_operand:HI 0 "register_operand" "") (mem:HI (match_operand:QI 1 "register_operand" "")))] "reload_completed && (operands[1] != stack_pointer_rtx)" [(set (match_dup 2) (mem:QI (post_inc:QI (match_dup 1)))) (set (match_dup 3) (mem:QI (post_dec:QI (match_dup 1))))] "{ operands[2] = gen_highpart(QImode, operands[0]); operands[3] = gen_lowpart(QImode, operands[0]);}")(define_split [(set (mem:HI (post_inc:HI (match_operand:QI 0 "register_operand" ""))) (match_operand:HI 1 "register_operand" ""))] "reload_completed" [(set (mem:QI (post_inc:QI (match_dup 0))) (match_dup 2)) (set (mem:QI (post_inc:QI (match_dup 0))) (match_dup 3))] "{ operands[2] = gen_highpart(QImode, operands[1]); operands[3] = gen_lowpart(QImode, operands[1]);}")(define_split [(set (match_operand:HI 0 "register_operand" "") (mem:HI (post_inc:HI (match_operand:QI 1 "register_operand" ""))))] "reload_completed" [(set (match_dup 2) (mem:QI (post_inc:QI (match_dup 1)))) (set (match_dup 3) (mem:QI (post_inc:QI (match_dup 1))))] "{ operands[2] = gen_highpart(QImode, operands[0]); operands[3] = gen_lowpart(QImode, operands[0]);}")(define_split [(set (match_operand:HI 0 "register_operand" "") (match_operand:HI 1 "register_operand" ""))] "reload_completed && !(IS_ACCUM_REG (REGNO(operands[0])) && (REGNO(operands[1]) == REG_PROD || REGNO(operands[1]) == REG_Y))" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))] "{ operands[2] = gen_highpart(QImode, operands[0]); operands[3] = gen_highpart(QImode, operands[1]); operands[4] = gen_lowpart(QImode, operands[0]); operands[5] = gen_lowpart(QImode, operands[1]);}")(define_split [(set (match_operand:HI 0 "register_operand" "") (match_operand:HI 1 "const_int_operand" ""))] "reload_completed" [(set (match_dup 2) (match_dup 3)) (set (match_dup 4) (match_dup 5))] "{ operands[2] = gen_lowpart(QImode, operands[0]); operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); operands[4] = gen_highpart(QImode, operands[0]); operands[5] = gen_rtx (CONST_INT, VOIDmode, (((INTVAL (operands[1]) & 0xffff0000) >> 16) & 0xffff));}")(define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") (match_operand:HI 1 "general_operand" ""))] "" "{ if (emit_move_sequence (operands, HImode)) DONE;}")(define_insn "match_movhi1" [(set (match_operand:HI 0 "nonimmediate_operand" "=A,Z,A,d,d,m,?d,*Y,t,f") (match_operand:HI 1 "general_operand" "d,A,K,i,m,d,*Y,?d,t,f"))] "register_operand(operands[0], HImode) || register_operand(operands[1], HImode)" "*{ switch (which_alternative) { /* register to accumulator */ case 0: return \"%0=%1\"; case 1: return \"%u0=%u1\;%w0=%w1\"; case 2: return \"%0=%0^%0\"; case 3: return \"%u0=%U1\;%w0=%H1\"; case 4: double_reg_from_memory(operands); return \"\"; case 5: double_reg_to_memory(operands); return \"\";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -