Commit c5d5d461 by Jeffrey A Law Committed by Jeff Law

except.c (start_catch_handler): Use emit_cmp_and_jump_insns.

        * except.c (start_catch_handler): Use emit_cmp_and_jump_insns.
        * explow.c (probe_stack_range): Likewise.
        * expmed.c (do_cmp_and_jump): Likewise.
        * expr.c (store_expr, expand_expr, expand_builtin): Likewise.
        (do_tablejump): Likewise.
        * stmt.c (expand_expr_stmt, expand_end_case): Likewise.
        (do_jump_if_equal, emit_case_nodes): Likewise.
        * optabs.c (emit_cmp_and_jump_insns): Clarify comments.  If UNSIGNEDP,
        then convert comparison to an unsigned code before emitting the jump.
        (expand_float, expand_fix): Use emit_cmp_and_jump_insns.

From-SVN: r25205
parent d4ddd7b9
Sun Feb 14 21:03:28 1999 Jeffrey A Law (law@cygnus.com)
* except.c (start_catch_handler): Use emit_cmp_and_jump_insns.
* explow.c (probe_stack_range): Likewise.
* expmed.c (do_cmp_and_jump): Likewise.
* expr.c (store_expr, expand_expr, expand_builtin): Likewise.
(do_tablejump): Likewise.
* stmt.c (expand_expr_stmt, expand_end_case): Likewise.
(do_jump_if_equal, emit_case_nodes): Likewise.
* optabs.c (emit_cmp_and_jump_insns): Clarify comments. If UNSIGNEDP,
then convert comparison to an unsigned code before emitting the jump.
(expand_float, expand_fix): Use emit_cmp_and_jump_insns.
Sun Feb 14 02:24:15 PST 1999 Jeff Law (law@cygnus.com) Sun Feb 14 02:24:15 PST 1999 Jeff Law (law@cygnus.com)
* version.c: Bump for snapshot. * version.c: Bump for snapshot.
......
...@@ -1767,9 +1767,9 @@ start_catch_handler (rtime) ...@@ -1767,9 +1767,9 @@ start_catch_handler (rtime)
0, SImode, 1, rtime_address, Pmode); 0, SImode, 1, rtime_address, Pmode);
/* Did the function return true? */ /* Did the function return true? */
emit_cmp_insn (call_rtx, const0_rtx, EQ, NULL_RTX, emit_cmp_and_jump_insns (call_rtx, const0_rtx, EQ, NULL_RTX,
GET_MODE (call_rtx), 0 ,0); GET_MODE (call_rtx), 0, 0,
emit_jump_insn (gen_beq (catchstack.top->entry->false_label)); catchstack.top->entry->false_label);
} }
} }
......
...@@ -1445,8 +1445,8 @@ probe_stack_range (first, size) ...@@ -1445,8 +1445,8 @@ probe_stack_range (first, size)
abort (); abort ();
emit_label (test_lab); emit_label (test_lab);
emit_cmp_insn (test_addr, last_addr, CMP_OPCODE, NULL_RTX, Pmode, 1, 0); emit_cmp_and_jump_insns (test_addr, last_addr, CMP_OPCODE,
emit_jump_insn ((*bcc_gen_fctn[(int) CMP_OPCODE]) (loop_lab)); NULL_RTX, Pmode, 1, 0, loop_lab);
emit_jump (end_lab); emit_jump (end_lab);
emit_note (NULL_PTR, NOTE_INSN_LOOP_END); emit_note (NULL_PTR, NOTE_INSN_LOOP_END);
emit_label (end_lab); emit_label (end_lab);
......
...@@ -4574,9 +4574,6 @@ do_cmp_and_jump (arg1, arg2, op, mode, label) ...@@ -4574,9 +4574,6 @@ do_cmp_and_jump (arg1, arg2, op, mode, label)
} }
else else
{ {
emit_cmp_insn(arg1, arg2, op, NULL_RTX, mode, 0, 0); emit_cmp_and_jump_insns (arg1, arg2, op, NULL_RTX, mode, 0, 0, label);
if (bcc_gen_fctn[(int) op] == 0)
abort ();
emit_jump_insn ((*bcc_gen_fctn[(int) op]) (label));
} }
} }
...@@ -3784,10 +3784,9 @@ store_expr (exp, target, want_value) ...@@ -3784,10 +3784,9 @@ store_expr (exp, target, want_value)
copy_size_rtx, NULL_RTX, 0, copy_size_rtx, NULL_RTX, 0,
OPTAB_LIB_WIDEN); OPTAB_LIB_WIDEN);
emit_cmp_insn (size, const0_rtx, LT, NULL_RTX,
GET_MODE (size), 0, 0);
label = gen_label_rtx (); label = gen_label_rtx ();
emit_jump_insn (gen_blt (label)); emit_cmp_and_jump_insns (size, const0_rtx, LT, NULL_RTX,
GET_MODE (size), 0, 0, label);
} }
if (size != const0_rtx) if (size != const0_rtx)
...@@ -6653,17 +6652,15 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6653,17 +6652,15 @@ expand_expr (exp, target, tmode, modifier)
if (! (GET_CODE (index_val) == CONST_INT if (! (GET_CODE (index_val) == CONST_INT
&& GET_CODE (lo_r) == CONST_INT)) && GET_CODE (lo_r) == CONST_INT))
{ {
emit_cmp_insn (index_val, lo_r, LT, NULL_RTX, emit_cmp_and_jump_insns (index_val, lo_r, LT, NULL_RTX,
GET_MODE (index_val), iunsignedp, 0); GET_MODE (index_val), iunsignedp, 0, op1);
emit_jump_insn (gen_blt (op1));
} }
if (! (GET_CODE (index_val) == CONST_INT if (! (GET_CODE (index_val) == CONST_INT
&& GET_CODE (hi_r) == CONST_INT)) && GET_CODE (hi_r) == CONST_INT))
{ {
emit_cmp_insn (index_val, hi_r, GT, NULL_RTX, emit_cmp_and_jump_insns (index_val, hi_r, GT, NULL_RTX,
GET_MODE (index_val), iunsignedp, 0); GET_MODE (index_val), iunsignedp, 0, op1);
emit_jump_insn (gen_bgt (op1));
} }
/* Calculate the element number of bit zero in the first word /* Calculate the element number of bit zero in the first word
...@@ -7361,9 +7358,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7361,9 +7358,8 @@ expand_expr (exp, target, tmode, modifier)
temp = copy_to_reg (temp); temp = copy_to_reg (temp);
op1 = gen_label_rtx (); op1 = gen_label_rtx ();
emit_cmp_insn (temp, const0_rtx, EQ, NULL_RTX, emit_cmp_and_jump_insns (temp, const0_rtx, EQ, NULL_RTX,
GET_MODE (temp), unsignedp, 0); GET_MODE (temp), unsignedp, 0, op1);
emit_jump_insn (gen_beq (op1));
emit_move_insn (temp, const1_rtx); emit_move_insn (temp, const1_rtx);
emit_label (op1); emit_label (op1);
return temp; return temp;
...@@ -8709,8 +8705,8 @@ expand_builtin (exp, target, subtarget, mode, ignore) ...@@ -8709,8 +8705,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
/* Test the result; if it is NaN, set errno=EDOM because /* Test the result; if it is NaN, set errno=EDOM because
the argument was not in the domain. */ the argument was not in the domain. */
emit_cmp_insn (target, target, EQ, 0, GET_MODE (target), 0, 0); emit_cmp_and_jump_insns (target, target, EQ, 0, GET_MODE (target),
emit_jump_insn (gen_beq (lab1)); 0, 0, lab1);
#ifdef TARGET_EDOM #ifdef TARGET_EDOM
{ {
...@@ -11562,8 +11558,8 @@ do_tablejump (index, mode, range, table_label, default_label) ...@@ -11562,8 +11558,8 @@ do_tablejump (index, mode, range, table_label, default_label)
or equal to the minimum value of the range and less than or equal to or equal to the minimum value of the range and less than or equal to
the maximum value of the range. */ the maximum value of the range. */
emit_cmp_insn (index, range, GTU, NULL_RTX, mode, 1, 0); emit_cmp_and_jump_insns (index, range, GTU, NULL_RTX, mode, 1,
emit_jump_insn (gen_bgtu (default_label)); 0, default_label);
/* If index is in range, it must fit in Pmode. /* If index is in range, it must fit in Pmode.
Convert to Pmode so we can index with it. */ Convert to Pmode so we can index with it. */
......
...@@ -2941,16 +2941,18 @@ emit_cmp_insn (x, y, comparison, size, mode, unsignedp, align) ...@@ -2941,16 +2941,18 @@ emit_cmp_insn (x, y, comparison, size, mode, unsignedp, align)
constant and Y is not a constant, then the comparison is swapped to constant and Y is not a constant, then the comparison is swapped to
ensure that the comparison RTL has the canonical form. ensure that the comparison RTL has the canonical form.
MODE is the mode of the inputs (in case they are const_int). UNSIGNEDP nonzero says that X and Y are unsigned; this matters if they
UNSIGNEDP nonzero says that X and Y are unsigned; need to be widened by emit_cmp_insn. UNSIGNEDP is also used to select
this matters if they need to be widened. the proper branch condition code.
If they have mode BLKmode, then SIZE specifies the size of both X and Y, If X and Y have mode BLKmode, then SIZE specifies the size of both X and Y,
and ALIGN specifies the known shared alignment of X and Y. and ALIGN specifies the known shared alignment of X and Y.
COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.). MODE is the mode of the inputs (in case they are const_int).
It is ignored for fixed-point and block comparisons;
it is used only for floating-point comparisons. */ COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.). It will
be passed unchanged to emit_cmp_insn, then potentially converted into an
unsigned variant based on UNSIGNEDP to select a proper jump instruction. */
void void
emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, label) emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, label)
...@@ -2978,6 +2980,9 @@ emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, label) ...@@ -2978,6 +2980,9 @@ emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, align, label)
op1 = y; op1 = y;
} }
emit_cmp_insn (op0, op1, comparison, size, mode, unsignedp, align); emit_cmp_insn (op0, op1, comparison, size, mode, unsignedp, align);
if (unsignedp)
comparison = unsigned_condition (comparison);
emit_jump_insn ((*bcc_gen_fctn[(int) comparison]) (label)); emit_jump_insn ((*bcc_gen_fctn[(int) comparison]) (label));
} }
...@@ -3701,8 +3706,8 @@ expand_float (to, from, unsignedp) ...@@ -3701,8 +3706,8 @@ expand_float (to, from, unsignedp)
correct its value by 2**bitwidth. */ correct its value by 2**bitwidth. */
do_pending_stack_adjust (); do_pending_stack_adjust ();
emit_cmp_insn (from, const0_rtx, GE, NULL_RTX, GET_MODE (from), 0, 0); emit_cmp_and_jump_insns (from, const0_rtx, GE, NULL_RTX, GET_MODE (from),
emit_jump_insn (gen_bge (label)); 0, 0, label);
/* On SCO 3.2.1, ldexp rejects values outside [0.5, 1). /* On SCO 3.2.1, ldexp rejects values outside [0.5, 1).
Rather than setting up a dconst_dot_5, let's hope SCO Rather than setting up a dconst_dot_5, let's hope SCO
...@@ -3909,8 +3914,8 @@ expand_fix (to, from, unsignedp) ...@@ -3909,8 +3914,8 @@ expand_fix (to, from, unsignedp)
/* See if we need to do the subtraction. */ /* See if we need to do the subtraction. */
do_pending_stack_adjust (); do_pending_stack_adjust ();
emit_cmp_insn (from, limit, GE, NULL_RTX, GET_MODE (from), 0, 0); emit_cmp_and_jump_insns (from, limit, GE, NULL_RTX, GET_MODE (from),
emit_jump_insn (gen_bge (lab1)); 0, 0, lab1);
/* If not, do the signed "fix" and branch around fixup code. */ /* If not, do the signed "fix" and branch around fixup code. */
expand_fix (to, from, 0); expand_fix (to, from, 0);
......
...@@ -1714,12 +1714,12 @@ expand_expr_stmt (exp) ...@@ -1714,12 +1714,12 @@ expand_expr_stmt (exp)
rtx lab = gen_label_rtx (); rtx lab = gen_label_rtx ();
/* Compare the value with itself to reference it. */ /* Compare the value with itself to reference it. */
emit_cmp_insn (last_expr_value, last_expr_value, EQ, emit_cmp_and_jump_insns (last_expr_value, last_expr_value, EQ,
expand_expr (TYPE_SIZE (last_expr_type), expand_expr (TYPE_SIZE (last_expr_type),
NULL_RTX, VOIDmode, 0), NULL_RTX, VOIDmode, 0),
BLKmode, 0, BLKmode, 0,
TYPE_ALIGN (last_expr_type) / BITS_PER_UNIT); TYPE_ALIGN (last_expr_type) / BITS_PER_UNIT,
emit_jump_insn ((*bcc_gen_fctn[(int) EQ]) (lab)); lab);
emit_label (lab); emit_label (lab);
} }
} }
...@@ -5188,8 +5188,8 @@ expand_end_case (orig_index) ...@@ -5188,8 +5188,8 @@ expand_end_case (orig_index)
index_expr, minval); index_expr, minval);
minval = integer_zero_node; minval = integer_zero_node;
index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0); index = expand_expr (index_expr, NULL_RTX, VOIDmode, 0);
emit_cmp_insn (rangertx, index, LTU, NULL_RTX, omode, 1, 0); emit_cmp_and_jump_insns (rangertx, index, LTU, NULL_RTX,
emit_jump_insn (gen_bltu (default_label)); omode, 1, 0, default_label);
/* Now we can safely truncate. */ /* Now we can safely truncate. */
index = convert_to_mode (index_mode, index, 0); index = convert_to_mode (index_mode, index, 0);
} }
...@@ -5358,8 +5358,8 @@ do_jump_if_equal (op1, op2, label, unsignedp) ...@@ -5358,8 +5358,8 @@ do_jump_if_equal (op1, op2, label, unsignedp)
enum machine_mode mode = GET_MODE (op1); enum machine_mode mode = GET_MODE (op1);
if (mode == VOIDmode) if (mode == VOIDmode)
mode = GET_MODE (op2); mode = GET_MODE (op2);
emit_cmp_insn (op1, op2, EQ, NULL_RTX, mode, unsignedp, 0); emit_cmp_and_jump_insns (op1, op2, EQ, NULL_RTX, mode, unsignedp,
emit_jump_insn (gen_beq (label)); 0, label);
} }
} }
...@@ -5768,10 +5768,6 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5768,10 +5768,6 @@ emit_case_nodes (index, node, default_label, index_type)
/* If INDEX has an unsigned type, we must make unsigned branches. */ /* If INDEX has an unsigned type, we must make unsigned branches. */
int unsignedp = TREE_UNSIGNED (index_type); int unsignedp = TREE_UNSIGNED (index_type);
typedef rtx rtx_fn (); typedef rtx rtx_fn ();
rtx_fn *gen_bgt_pat = unsignedp ? gen_bgtu : gen_bgt;
rtx_fn *gen_bge_pat = unsignedp ? gen_bgeu : gen_bge;
rtx_fn *gen_blt_pat = unsignedp ? gen_bltu : gen_blt;
rtx_fn *gen_ble_pat = unsignedp ? gen_bleu : gen_ble;
enum machine_mode mode = GET_MODE (index); enum machine_mode mode = GET_MODE (index);
/* See if our parents have already tested everything for us. /* See if our parents have already tested everything for us.
...@@ -5797,20 +5793,19 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5797,20 +5793,19 @@ emit_case_nodes (index, node, default_label, index_type)
if (node_is_bounded (node->right, index_type)) if (node_is_bounded (node->right, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0); GT, NULL_RTX, mode, unsignedp, 0,
label_rtx (node->right->code_label));
emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->code_label)));
emit_case_nodes (index, node->left, default_label, index_type); emit_case_nodes (index, node->left, default_label, index_type);
} }
else if (node_is_bounded (node->left, index_type)) else if (node_is_bounded (node->left, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
LT, NULL_RTX, mode, unsignedp, 0); LT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_blt_pat) (label_rtx (node->left->code_label))); label_rtx (node->left->code_label));
emit_case_nodes (index, node->right, default_label, index_type); emit_case_nodes (index, node->right, default_label, index_type);
} }
...@@ -5823,10 +5818,10 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5823,10 +5818,10 @@ emit_case_nodes (index, node, default_label, index_type)
= build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
/* See if the value is on the right. */ /* See if the value is on the right. */
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0); GT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_bgt_pat) (label_rtx (test_label))); label_rtx (test_label));
/* Value must be on the left. /* Value must be on the left.
Handle the left-hand subtree. */ Handle the left-hand subtree. */
...@@ -5854,10 +5849,11 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5854,10 +5849,11 @@ emit_case_nodes (index, node, default_label, index_type)
{ {
if (!node_has_low_bound (node, index_type)) if (!node_has_low_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high,
VOIDmode, 0), NULL_RTX,
LT, NULL_RTX, mode, unsignedp, 0); VOIDmode, 0),
emit_jump_insn ((*gen_blt_pat) (default_label)); LT, NULL_RTX, mode, unsignedp, 0,
default_label);
} }
emit_case_nodes (index, node->right, default_label, index_type); emit_case_nodes (index, node->right, default_label, index_type);
...@@ -5894,10 +5890,11 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5894,10 +5890,11 @@ emit_case_nodes (index, node, default_label, index_type)
{ {
if (!node_has_high_bound (node, index_type)) if (!node_has_high_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high,
VOIDmode, 0), NULL_RTX,
GT, NULL_RTX, mode, unsignedp, 0); VOIDmode, 0),
emit_jump_insn ((*gen_bgt_pat) (default_label)); GT, NULL_RTX, mode, unsignedp, 0,
default_label);
} }
emit_case_nodes (index, node->left, default_label, index_type); emit_case_nodes (index, node->left, default_label, index_type);
...@@ -5927,28 +5924,32 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5927,28 +5924,32 @@ emit_case_nodes (index, node, default_label, index_type)
then handle the two subtrees. */ then handle the two subtrees. */
tree test_label = 0; tree test_label = 0;
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0);
if (node_is_bounded (node->right, index_type)) if (node_is_bounded (node->right, index_type))
/* Right hand node is fully bounded so we can eliminate any /* Right hand node is fully bounded so we can eliminate any
testing and branch directly to the target code. */ testing and branch directly to the target code. */
emit_jump_insn ((*gen_bgt_pat) (label_rtx (node->right->code_label))); emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0,
label_rtx (node->right->code_label));
else else
{ {
/* Right hand node requires testing. /* Right hand node requires testing.
Branch to a label where we will handle it later. */ Branch to a label where we will handle it later. */
test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); test_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
emit_jump_insn ((*gen_bgt_pat) (label_rtx (test_label))); emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0,
label_rtx (test_label));
} }
/* Value belongs to this node or to the left-hand subtree. */ /* Value belongs to this node or to the left-hand subtree. */
emit_cmp_insn (index, expand_expr (node->low, NULL_RTX, VOIDmode, 0), emit_cmp_and_jump_insns (index, expand_expr (node->low, NULL_RTX,
GE, NULL_RTX, mode, unsignedp, 0); VOIDmode, 0),
emit_jump_insn ((*gen_bge_pat) (label_rtx (node->code_label))); GE, NULL_RTX, mode, unsignedp, 0,
label_rtx (node->code_label));
/* Handle the left-hand subtree. */ /* Handle the left-hand subtree. */
emit_case_nodes (index, node->left, default_label, index_type); emit_case_nodes (index, node->left, default_label, index_type);
...@@ -5972,18 +5973,18 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5972,18 +5973,18 @@ emit_case_nodes (index, node, default_label, index_type)
if they are possible. */ if they are possible. */
if (!node_has_low_bound (node, index_type)) if (!node_has_low_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->low, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->low, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
LT, NULL_RTX, mode, unsignedp, 0); LT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_blt_pat) (default_label)); default_label);
} }
/* Value belongs to this node or to the right-hand subtree. */ /* Value belongs to this node or to the right-hand subtree. */
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
LE, NULL_RTX, mode, unsignedp, 0); LE, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_ble_pat) (label_rtx (node->code_label))); label_rtx (node->code_label));
emit_case_nodes (index, node->right, default_label, index_type); emit_case_nodes (index, node->right, default_label, index_type);
} }
...@@ -5994,17 +5995,18 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -5994,17 +5995,18 @@ emit_case_nodes (index, node, default_label, index_type)
if they are possible. */ if they are possible. */
if (!node_has_high_bound (node, index_type)) if (!node_has_high_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0); GT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_bgt_pat) (default_label)); default_label);
} }
/* Value belongs to this node or to the left-hand subtree. */ /* Value belongs to this node or to the left-hand subtree. */
emit_cmp_insn (index, expand_expr (node->low, NULL_RTX, VOIDmode, 0), emit_cmp_and_jump_insns (index, expand_expr (node->low, NULL_RTX,
GE, NULL_RTX, mode, unsignedp, 0); VOIDmode, 0),
emit_jump_insn ((*gen_bge_pat) (label_rtx (node->code_label))); GE, NULL_RTX, mode, unsignedp, 0,
label_rtx (node->code_label));
emit_case_nodes (index, node->left, default_label, index_type); emit_case_nodes (index, node->left, default_label, index_type);
} }
...@@ -6017,18 +6019,18 @@ emit_case_nodes (index, node, default_label, index_type) ...@@ -6017,18 +6019,18 @@ emit_case_nodes (index, node, default_label, index_type)
if (!node_has_high_bound (node, index_type)) if (!node_has_high_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->high, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->high, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
GT, NULL_RTX, mode, unsignedp, 0); GT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_bgt_pat) (default_label)); default_label);
} }
if (!node_has_low_bound (node, index_type)) if (!node_has_low_bound (node, index_type))
{ {
emit_cmp_insn (index, expand_expr (node->low, NULL_RTX, emit_cmp_and_jump_insns (index, expand_expr (node->low, NULL_RTX,
VOIDmode, 0), VOIDmode, 0),
LT, NULL_RTX, mode, unsignedp, 0); LT, NULL_RTX, mode, unsignedp, 0,
emit_jump_insn ((*gen_blt_pat) (default_label)); default_label);
} }
emit_jump (label_rtx (node->code_label)); emit_jump (label_rtx (node->code_label));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment