Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/pa/pa.md @ 47:3bfb6c00c1e0
update it from 4.4.2 to 4.4.3.
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Feb 2010 17:44:34 +0900 |
parents | a06113de4d67 |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
46:b85a337e5837 | 47:3bfb6c00c1e0 |
---|---|
3189 { | 3189 { |
3190 if (emit_move_sequence (operands, HImode, 0)) | 3190 if (emit_move_sequence (operands, HImode, 0)) |
3191 DONE; | 3191 DONE; |
3192 }") | 3192 }") |
3193 | 3193 |
3194 ;; Handle HImode input reloads requiring a general register as a | |
3195 ;; scratch register. | |
3196 (define_expand "reload_inhi" | |
3197 [(set (match_operand:HI 0 "register_operand" "=Z") | |
3198 (match_operand:HI 1 "non_hard_reg_operand" "")) | |
3199 (clobber (match_operand:HI 2 "register_operand" "=&r"))] | |
3200 "" | |
3201 " | |
3202 { | |
3203 if (emit_move_sequence (operands, HImode, operands[2])) | |
3204 DONE; | |
3205 | |
3206 /* We don't want the clobber emitted, so handle this ourselves. */ | |
3207 emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); | |
3208 DONE; | |
3209 }") | |
3210 | |
3211 ;; Handle HImode output reloads requiring a general register as a | |
3212 ;; scratch register. | |
3213 (define_expand "reload_outhi" | |
3214 [(set (match_operand:HI 0 "non_hard_reg_operand" "") | |
3215 (match_operand:HI 1 "register_operand" "Z")) | |
3216 (clobber (match_operand:HI 2 "register_operand" "=&r"))] | |
3217 "" | |
3218 " | |
3219 { | |
3220 if (emit_move_sequence (operands, HImode, operands[2])) | |
3221 DONE; | |
3222 | |
3223 /* We don't want the clobber emitted, so handle this ourselves. */ | |
3224 emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); | |
3225 DONE; | |
3226 }") | |
3227 | |
3194 (define_insn "" | 3228 (define_insn "" |
3195 [(set (match_operand:HI 0 "move_dest_operand" | 3229 [(set (match_operand:HI 0 "move_dest_operand" |
3196 "=r,r,r,r,r,Q,!*q,!r") | 3230 "=r,r,r,r,r,Q,!*q,!r") |
3197 (match_operand:HI 1 "move_src_operand" | 3231 (match_operand:HI 1 "move_src_operand" |
3198 "r,J,N,K,RQ,rM,!rM,!*q"))] | 3232 "r,J,N,K,RQ,rM,!rM,!*q"))] |
3311 "" | 3345 "" |
3312 " | 3346 " |
3313 { | 3347 { |
3314 if (emit_move_sequence (operands, QImode, 0)) | 3348 if (emit_move_sequence (operands, QImode, 0)) |
3315 DONE; | 3349 DONE; |
3350 }") | |
3351 | |
3352 ;; Handle QImode input reloads requiring a general register as a | |
3353 ;; scratch register. | |
3354 (define_expand "reload_inqi" | |
3355 [(set (match_operand:QI 0 "register_operand" "=Z") | |
3356 (match_operand:QI 1 "non_hard_reg_operand" "")) | |
3357 (clobber (match_operand:QI 2 "register_operand" "=&r"))] | |
3358 "" | |
3359 " | |
3360 { | |
3361 if (emit_move_sequence (operands, QImode, operands[2])) | |
3362 DONE; | |
3363 | |
3364 /* We don't want the clobber emitted, so handle this ourselves. */ | |
3365 emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); | |
3366 DONE; | |
3367 }") | |
3368 | |
3369 ;; Handle QImode output reloads requiring a general register as a | |
3370 ;; scratch register. | |
3371 (define_expand "reload_outqi" | |
3372 [(set (match_operand:QI 0 "non_hard_reg_operand" "") | |
3373 (match_operand:QI 1 "register_operand" "Z")) | |
3374 (clobber (match_operand:QI 2 "register_operand" "=&r"))] | |
3375 "" | |
3376 " | |
3377 { | |
3378 if (emit_move_sequence (operands, QImode, operands[2])) | |
3379 DONE; | |
3380 | |
3381 /* We don't want the clobber emitted, so handle this ourselves. */ | |
3382 emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); | |
3383 DONE; | |
3316 }") | 3384 }") |
3317 | 3385 |
3318 (define_insn "" | 3386 (define_insn "" |
3319 [(set (match_operand:QI 0 "move_dest_operand" | 3387 [(set (match_operand:QI 0 "move_dest_operand" |
3320 "=r,r,r,r,r,Q,!*q,!r") | 3388 "=r,r,r,r,r,Q,!*q,!r") |
7501 operands[1] = force_reg (SImode, operands[1]); | 7569 operands[1] = force_reg (SImode, operands[1]); |
7502 emit_insn (gen_addsi3 (index, operands[0], operands[1])); | 7570 emit_insn (gen_addsi3 (index, operands[0], operands[1])); |
7503 operands[0] = index; | 7571 operands[0] = index; |
7504 } | 7572 } |
7505 | 7573 |
7506 /* In 64bit mode we must make sure to wipe the upper bits of the register | |
7507 just in case the addition overflowed or we had random bits in the | |
7508 high part of the register. */ | |
7509 if (TARGET_64BIT) | |
7510 { | |
7511 rtx index = gen_reg_rtx (DImode); | |
7512 | |
7513 emit_insn (gen_extendsidi2 (index, operands[0])); | |
7514 operands[0] = gen_rtx_SUBREG (SImode, index, 4); | |
7515 } | |
7516 | |
7517 if (!INT_5_BITS (operands[2])) | 7574 if (!INT_5_BITS (operands[2])) |
7518 operands[2] = force_reg (SImode, operands[2]); | 7575 operands[2] = force_reg (SImode, operands[2]); |
7519 | 7576 |
7520 /* This branch prevents us finding an insn for the delay slot of the | 7577 /* This branch prevents us finding an insn for the delay slot of the |
7521 following vectored branch. It might be possible to use the delay | 7578 following vectored branch. It might be possible to use the delay |
7527 then be worthwhile to split the casesi patterns to improve scheduling. | 7584 then be worthwhile to split the casesi patterns to improve scheduling. |
7528 However, it's not clear that all this extra complexity is worth | 7585 However, it's not clear that all this extra complexity is worth |
7529 the effort. */ | 7586 the effort. */ |
7530 emit_insn (gen_cmpsi (operands[0], operands[2])); | 7587 emit_insn (gen_cmpsi (operands[0], operands[2])); |
7531 emit_jump_insn (gen_bgtu (operands[4])); | 7588 emit_jump_insn (gen_bgtu (operands[4])); |
7589 | |
7590 /* In 64bit mode we must make sure to wipe the upper bits of the register | |
7591 just in case the addition overflowed or we had random bits in the | |
7592 high part of the register. */ | |
7593 if (TARGET_64BIT) | |
7594 { | |
7595 rtx index = gen_reg_rtx (DImode); | |
7596 | |
7597 emit_insn (gen_extendsidi2 (index, operands[0])); | |
7598 operands[0] = index; | |
7599 } | |
7532 | 7600 |
7533 if (TARGET_BIG_SWITCH) | 7601 if (TARGET_BIG_SWITCH) |
7534 { | 7602 { |
7535 if (TARGET_64BIT) | 7603 if (TARGET_64BIT) |
7536 emit_jump_insn (gen_casesi64p (operands[0], operands[3])); | 7604 emit_jump_insn (gen_casesi64p (operands[0], operands[3])); |
7588 (const_int 24)))]) | 7656 (const_int 24)))]) |
7589 | 7657 |
7590 ;;; 64-bit code, 32-bit relative branch table. | 7658 ;;; 64-bit code, 32-bit relative branch table. |
7591 (define_insn "casesi64p" | 7659 (define_insn "casesi64p" |
7592 [(set (pc) (mem:DI (plus:DI | 7660 [(set (pc) (mem:DI (plus:DI |
7593 (mult:DI (sign_extend:DI | 7661 (mult:DI (match_operand:DI 0 "register_operand" "r") |
7594 (match_operand:SI 0 "register_operand" "r")) | |
7595 (const_int 8)) | 7662 (const_int 8)) |
7596 (label_ref (match_operand 1 "" ""))))) | 7663 (label_ref (match_operand 1 "" ""))))) |
7597 (clobber (match_scratch:DI 2 "=&r")) | 7664 (clobber (match_scratch:DI 2 "=&r")) |
7598 (clobber (match_scratch:DI 3 "=&r"))] | 7665 (clobber (match_scratch:DI 3 "=&r"))] |
7599 "" | 7666 "" |