aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-18 10:31:51 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-18 10:31:51 -0400
commit711a5e64b825fa5e5591da0514b1839a07be301d (patch)
tree75dcbfb200596e9df01b0175c4880575cadb2b1c
parent572e10f482971d72bfe077c25063c26ece0c89b4 (diff)
downloadgcc-711a5e64b825fa5e5591da0514b1839a07be301d.zip
gcc-711a5e64b825fa5e5591da0514b1839a07be301d.tar.gz
gcc-711a5e64b825fa5e5591da0514b1839a07be301d.tar.bz2
(expand_shift): Don't try extzv for lshr.
From-SVN: r7514
-rw-r--r--gcc/expmed.c97
1 files changed, 4 insertions, 93 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index c0fe5f7..9abd372 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -1749,99 +1749,10 @@ expand_shift (code, mode, shifted, amount, target, unsignedp)
shifted, op1, target, unsignedp, methods1);
}
-#ifdef HAVE_extzv
- /* We can do a logical (unsigned) right shift with a bit-field
- extract insn. But first check if one of the above methods worked. */
- if (temp != 0)
- return temp;
-
- if (unsignedp && code == RSHIFT_EXPR && ! BITS_BIG_ENDIAN && HAVE_extzv)
- {
- enum machine_mode output_mode
- = insn_operand_mode[(int) CODE_FOR_extzv][0];
-
- if ((methods == OPTAB_DIRECT && mode == output_mode)
- || (methods == OPTAB_WIDEN
- && GET_MODE_SIZE (mode) < GET_MODE_SIZE (output_mode)))
- {
- rtx shifted1 = convert_modes (output_mode, mode,
- protect_from_queue (shifted, 0),
- 1);
- enum machine_mode length_mode
- = insn_operand_mode[(int) CODE_FOR_extzv][2];
- enum machine_mode pos_mode
- = insn_operand_mode[(int) CODE_FOR_extzv][3];
- rtx target1 = 0;
- rtx last = get_last_insn ();
- rtx width;
- rtx xop1 = op1;
- rtx pat;
-
- if (target != 0)
- target1 = protect_from_queue (target, 1);
-
- /* We define extract insns as having OUTPUT_MODE in a register
- and the mode of operand 1 in memory. Since we want
- OUTPUT_MODE, we will always force the operand into a
- register. At some point we might want to support MEM
- directly. */
- shifted1 = force_reg (output_mode, shifted1);
-
- /* If we don't have or cannot use a suggested target,
- make a place for the result, in the proper mode. */
- if (methods == OPTAB_WIDEN || target1 == 0
- || ! ((*insn_operand_predicate[(int) CODE_FOR_extzv][0])
- (target1, output_mode)))
- target1 = gen_reg_rtx (output_mode);
-
- xop1 = protect_from_queue (xop1, 0);
- xop1 = convert_modes (pos_mode, TYPE_MODE (TREE_TYPE (amount)),
- xop1, TREE_UNSIGNED (TREE_TYPE (amount)));
-
- /* If this machine's extzv insists on a register for
- operand 3 (position), arrange for that. */
- if (! ((*insn_operand_predicate[(int) CODE_FOR_extzv][3])
- (xop1, pos_mode)))
- xop1 = force_reg (pos_mode, xop1);
-
- /* WIDTH gets the width of the bit field to extract:
- wordsize minus # bits to shift by. */
- if (GET_CODE (xop1) == CONST_INT)
- width = GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1));
- else
- {
- /* Now get the width in the proper mode. */
- op1 = protect_from_queue (op1, 0);
- width = convert_to_mode (length_mode, op1,
- TREE_UNSIGNED (TREE_TYPE (amount)));
-
- width = expand_binop (length_mode, sub_optab,
- GEN_INT (GET_MODE_BITSIZE (mode)),
- width, NULL_RTX, 0, OPTAB_LIB_WIDEN);
- }
-
- /* If this machine's extzv insists on a register for
- operand 2 (length), arrange for that. */
- if (! ((*insn_operand_predicate[(int) CODE_FOR_extzv][2])
- (width, length_mode)))
- width = force_reg (length_mode, width);
-
- /* Now extract with WIDTH, omitting OP1 least sig bits. */
- pat = gen_extzv (target1, shifted1, width, xop1);
- if (pat)
- {
- emit_insn (pat);
- temp = convert_to_mode (mode, target1, 1);
- }
- else
- delete_insns_since (last);
- }
-
- /* Can also do logical shift with signed bit-field extract
- followed by inserting the bit-field at a different position.
- That strategy is not yet implemented. */
- }
-#endif /* HAVE_extzv */
+ /* We used to try extzv here for logical right shifts, but that was
+ only useful for one machine, the VAX, and caused poor code
+ generation there for lshrdi3, so the code was deleted and a
+ define_expand for lshrsi3 was added to vax.md. */
}
if (temp == 0)