*** empty log message ***

From-SVN: r234
This commit is contained in:
Richard Stallman 1992-01-23 19:10:22 +00:00
parent 235d6e4f73
commit 441e427cd5
1 changed files with 88 additions and 217 deletions

View File

@ -692,32 +692,38 @@
;; Generation of conditionals.
;; The first step is the emission of a standard-looking compare insn.
;; Then a standard-named conditional branch pattern is run.
;; That branch pattern looks back at the compare insn and deletes it.
;; It then emits a machine-specific compare insn and a branch-if-true
;; or a branch-if-false.
;; We save the compare operands in the cmpxx patterns and use then when
;; we generate the branch.
;; These patterns have `abort' because they are supposed to be deleted
;; in that fashion.
(define_insn "cmpsi"
(define_expand "cmpsi"
[(set (cc0) (compare (match_operand:SI 0 "register_operand" "")
(match_operand:SI 1 "compare_operand" "")))]
""
"* abort ();")
"
{ i860_compare_op0 = operands[0];
i860_compare_op1 = operands[1];
DONE;
}")
(define_insn "cmpsf"
(define_expand "cmpsf"
[(set (cc0) (compare (match_operand:SF 0 "register_operand" "")
(match_operand:SF 1 "register_operand" "")))]
""
"* abort ();")
"
{ i860_compare_op0 = operands[0];
i860_compare_op1 = operands[1];
DONE;
}")
(define_insn "cmpdf"
(define_expand "cmpdf"
[(set (cc0) (compare (match_operand:DF 0 "register_operand" "")
(match_operand:DF 1 "register_operand" "")))]
""
"* abort ();")
"
{ i860_compare_op0 = operands[0];
i860_compare_op1 = operands[1];
DONE;
}")
;; These are the standard-named conditional branch patterns.
;; Detailed comments are found in the first one only.
@ -731,42 +737,21 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
/* Get out of the sequence just started for us. */
end_sequence ();
prev = get_last_insn ();
/* Examine the preceding compare insn, and get rid of it. */
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
/* Now once again start a sequence for our new instructions. */
start_sequence ();
/* Emit a single-condition compare insn according to
the type of operands and the condition to be tested. */
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpeqsi (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmpeqsf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpeqdf (recog_operand[0], recog_operand[1]));
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
emit_insn (gen_cmpeqsi (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmpeqsf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpeqdf (i860_compare_op0, i860_compare_op1));
else
abort ();
/* Emit branch-if-true. */
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
DONE;
}")
@ -779,28 +764,16 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpeqsi (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmpeqsf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpeqdf (recog_operand[0], recog_operand[1]));
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
emit_insn (gen_cmpeqsi (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmpeqsf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpeqdf (i860_compare_op0, i860_compare_op1));
else
abort ();
emit_jump_insn (gen_flipped_cbranch (label));
emit_jump_insn (gen_flipped_cbranch (operands[0]));
DONE;
}")
@ -814,28 +787,16 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpgtsi (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmpgtsf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpgtdf (recog_operand[0], recog_operand[1]));
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
emit_insn (gen_cmpgtsi (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmpgtsf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpgtdf (i860_compare_op0, i860_compare_op1));
else
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
DONE;
}")
@ -848,28 +809,16 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpltsi (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmpltsf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpltdf (recog_operand[0], recog_operand[1]));
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
emit_insn (gen_cmpltsi (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmpltsf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpltdf (i860_compare_op0, i860_compare_op1));
else
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
DONE;
}")
@ -882,33 +831,20 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
{
emit_insn (gen_cmpgtsi (recog_operand[0], recog_operand[1]));
emit_jump_insn (gen_flipped_cbranch (label));
emit_insn (gen_cmpgtsi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_cbranch (operands[0]));
}
else
{
if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmplesf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpledf (recog_operand[0], recog_operand[1]));
if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmplesf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpledf (i860_compare_op0, i860_compare_op1));
else
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
}
DONE;
}")
@ -922,33 +858,20 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) == MODE_INT)
{
emit_insn (gen_cmpltsi (recog_operand[0], recog_operand[1]));
emit_jump_insn (gen_flipped_cbranch (label));
emit_insn (gen_cmpltsi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_cbranch (operands[0]));
}
else
{
if (code == CODE_FOR_cmpsf)
emit_insn (gen_cmpgesf (recog_operand[0], recog_operand[1]));
else if (code == CODE_FOR_cmpdf)
emit_insn (gen_cmpgedf (recog_operand[0], recog_operand[1]));
if (GET_MODE (i860_compare_op0) == SFmode)
emit_insn (gen_cmpgesf (i860_compare_op0, i860_compare_op1));
else if (GET_MODE (i860_compare_op0) == DFmode)
emit_insn (gen_cmpgedf (i860_compare_op0, i860_compare_op1));
else
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
}
DONE;
}")
@ -962,24 +885,11 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpleusi (recog_operand[0], recog_operand[1]));
else
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) != MODE_INT)
abort ();
emit_jump_insn (gen_flipped_cbranch (label));
emit_insn (gen_cmpleusi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_cbranch (operands[0]));
DONE;
}")
@ -992,24 +902,11 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpgeusi (recog_operand[0], recog_operand[1]));
else
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) != MODE_INT)
abort ();
emit_jump_insn (gen_flipped_cbranch (label));
emit_insn (gen_cmpgeusi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_cbranch (operands[0]));
DONE;
}")
@ -1022,24 +919,11 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpgeusi (recog_operand[0], recog_operand[1]));
else
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) != MODE_INT)
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_insn (gen_cmpgeusi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
DONE;
}")
@ -1052,24 +936,11 @@
""
"
{
rtx label = operands[0];
enum insn_code code;
rtx prev;
end_sequence ();
prev = get_last_insn ();
code = recog_memoized (prev);
insn_extract (prev);
NEXT_INSN (PREV_INSN (prev)) = 0;
set_last_insn (PREV_INSN (prev));
start_sequence ();
if (code == CODE_FOR_cmpsi)
emit_insn (gen_cmpleusi (recog_operand[0], recog_operand[1]));
else
if (GET_MODE_CLASS (GET_MODE (i860_compare_op0)) != MODE_INT)
abort ();
emit_jump_insn (gen_flipped_inverse_cbranch (label));
emit_insn (gen_cmpleusi (i860_compare_op0, i860_compare_op1));
emit_jump_insn (gen_flipped_inverse_cbranch (operands[0]));
DONE;
}")
@ -1847,8 +1718,8 @@
(define_insn "addsi3"
[(set (match_operand:SI 0 "register_operand" "=r,*f")
(plus:SI (match_operand:SI 1 "nonmemory_operand" "%r,!*f")
(match_operand:SI 2 "arith_operand" "rI,!*f")))]
(plus:SI (match_operand:SI 1 "nonmemory_operand" "%r,*f")
(match_operand:SI 2 "arith_operand" "rI,*f")))]
""
"*
{
@ -1867,8 +1738,8 @@
(define_insn "subsi3"
[(set (match_operand:SI 0 "register_operand" "=r,r,*f")
(minus:SI (match_operand:SI 1 "register_operand" "r,I,!*f")
(match_operand:SI 2 "arith_operand" "rI,r,!*f")))]
(minus:SI (match_operand:SI 1 "register_operand" "r,I,*f")
(match_operand:SI 2 "arith_operand" "rI,r,*f")))]
""
"*
{