Commit 3a94c984 by Kazu Hirata Committed by Jeff Law

* expr.c: Fix formatting.

From-SVN: r35523
parent e50f5f3d
2000-08-06 Kazu Hirata <kazu@hxi.com>
* expr.c: Fix formatting.
2000-08-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2000-08-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* rs6000.c (rs6000_maybe_dead): Prototype. * rs6000.c (rs6000_maybe_dead): Prototype.
......
...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to ...@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "machmode.h" #include "machmode.h"
...@@ -34,7 +33,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -34,7 +33,7 @@ Boston, MA 02111-1307, USA. */
#include "insn-flags.h" #include "insn-flags.h"
#include "insn-codes.h" #include "insn-codes.h"
#include "insn-config.h" #include "insn-config.h"
/* Include expr.h after insn-config.h so we get HAVE_conditional_move. */ /* Include expr.h after insn-config.h so we get HAVE_conditional_move. */
#include "expr.h" #include "expr.h"
#include "recog.h" #include "recog.h"
#include "reload.h" #include "reload.h"
...@@ -68,7 +67,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -68,7 +67,7 @@ Boston, MA 02111-1307, USA. */
#ifdef PUSH_ROUNDING #ifdef PUSH_ROUNDING
#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD) #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
#define PUSH_ARGS_REVERSED /* If it's last to first */ #define PUSH_ARGS_REVERSED /* If it's last to first. */
#endif #endif
#endif #endif
...@@ -196,13 +195,13 @@ static char direct_store[NUM_MACHINE_MODES]; ...@@ -196,13 +195,13 @@ static char direct_store[NUM_MACHINE_MODES];
#if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti) #if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti)
#define MOVE_RATIO 2 #define MOVE_RATIO 2
#else #else
/* If we are optimizing for space (-Os), cut down the default move ratio */ /* If we are optimizing for space (-Os), cut down the default move ratio. */
#define MOVE_RATIO (optimize_size ? 3 : 15) #define MOVE_RATIO (optimize_size ? 3 : 15)
#endif #endif
#endif #endif
/* This macro is used to determine whether move_by_pieces should be called /* This macro is used to determine whether move_by_pieces should be called
to perform a structure copy. */ to perform a structure copy. */
#ifndef MOVE_BY_PIECES_P #ifndef MOVE_BY_PIECES_P
#define MOVE_BY_PIECES_P(SIZE, ALIGN) \ #define MOVE_BY_PIECES_P(SIZE, ALIGN) \
(move_by_pieces_ninsns (SIZE, ALIGN) < MOVE_RATIO) (move_by_pieces_ninsns (SIZE, ALIGN) < MOVE_RATIO)
...@@ -549,7 +548,7 @@ convert_move (to, from, unsignedp) ...@@ -549,7 +548,7 @@ convert_move (to, from, unsignedp)
{ {
if (GET_MODE_BITSIZE (from_mode) != GET_MODE_BITSIZE (to_mode)) if (GET_MODE_BITSIZE (from_mode) != GET_MODE_BITSIZE (to_mode))
abort (); abort ();
if (VECTOR_MODE_P (to_mode)) if (VECTOR_MODE_P (to_mode))
from = gen_rtx_SUBREG (to_mode, from, 0); from = gen_rtx_SUBREG (to_mode, from, 0);
else else
...@@ -576,7 +575,7 @@ convert_move (to, from, unsignedp) ...@@ -576,7 +575,7 @@ convert_move (to, from, unsignedp)
return; return;
} }
} }
#ifdef HAVE_trunchfqf2 #ifdef HAVE_trunchfqf2
if (HAVE_trunchfqf2 && from_mode == HFmode && to_mode == QFmode) if (HAVE_trunchfqf2 && from_mode == HFmode && to_mode == QFmode)
{ {
...@@ -738,7 +737,7 @@ convert_move (to, from, unsignedp) ...@@ -738,7 +737,7 @@ convert_move (to, from, unsignedp)
case TFmode: case TFmode:
libcall = extendsftf2_libfunc; libcall = extendsftf2_libfunc;
break; break;
default: default:
break; break;
} }
...@@ -758,7 +757,7 @@ convert_move (to, from, unsignedp) ...@@ -758,7 +757,7 @@ convert_move (to, from, unsignedp)
case TFmode: case TFmode:
libcall = extenddftf2_libfunc; libcall = extenddftf2_libfunc;
break; break;
default: default:
break; break;
} }
...@@ -774,7 +773,7 @@ convert_move (to, from, unsignedp) ...@@ -774,7 +773,7 @@ convert_move (to, from, unsignedp)
case DFmode: case DFmode:
libcall = truncxfdf2_libfunc; libcall = truncxfdf2_libfunc;
break; break;
default: default:
break; break;
} }
...@@ -790,12 +789,12 @@ convert_move (to, from, unsignedp) ...@@ -790,12 +789,12 @@ convert_move (to, from, unsignedp)
case DFmode: case DFmode:
libcall = trunctfdf2_libfunc; libcall = trunctfdf2_libfunc;
break; break;
default: default:
break; break;
} }
break; break;
default: default:
break; break;
} }
...@@ -932,7 +931,7 @@ convert_move (to, from, unsignedp) ...@@ -932,7 +931,7 @@ convert_move (to, from, unsignedp)
return; return;
} }
/* Handle pointer conversion */ /* SPEE 900220 */ /* Handle pointer conversion. */ /* SPEE 900220. */
if (to_mode == PQImode) if (to_mode == PQImode)
{ {
if (from_mode != QImode) if (from_mode != QImode)
...@@ -1093,13 +1092,13 @@ convert_move (to, from, unsignedp) ...@@ -1093,13 +1092,13 @@ convert_move (to, from, unsignedp)
} }
/* No suitable intermediate mode. /* No suitable intermediate mode.
Generate what we need with shifts. */ Generate what we need with shifts. */
shift_amount = build_int_2 (GET_MODE_BITSIZE (to_mode) shift_amount = build_int_2 (GET_MODE_BITSIZE (to_mode)
- GET_MODE_BITSIZE (from_mode), 0); - GET_MODE_BITSIZE (from_mode), 0);
from = gen_lowpart (to_mode, force_reg (from_mode, from)); from = gen_lowpart (to_mode, force_reg (from_mode, from));
tmp = expand_shift (LSHIFT_EXPR, to_mode, from, shift_amount, tmp = expand_shift (LSHIFT_EXPR, to_mode, from, shift_amount,
to, unsignedp); to, unsignedp);
tmp = expand_shift (RSHIFT_EXPR, to_mode, tmp, shift_amount, tmp = expand_shift (RSHIFT_EXPR, to_mode, tmp, shift_amount,
to, unsignedp); to, unsignedp);
if (tmp != to) if (tmp != to)
emit_move_insn (to, tmp); emit_move_insn (to, tmp);
...@@ -1107,7 +1106,7 @@ convert_move (to, from, unsignedp) ...@@ -1107,7 +1106,7 @@ convert_move (to, from, unsignedp)
} }
} }
/* Support special truncate insns for certain modes. */ /* Support special truncate insns for certain modes. */
if (from_mode == DImode && to_mode == SImode) if (from_mode == DImode && to_mode == SImode)
{ {
...@@ -1303,7 +1302,7 @@ convert_modes (mode, oldmode, x, unsignedp) ...@@ -1303,7 +1302,7 @@ convert_modes (mode, oldmode, x, unsignedp)
if (GET_MODE (x) != VOIDmode) if (GET_MODE (x) != VOIDmode)
oldmode = GET_MODE (x); oldmode = GET_MODE (x);
if (mode == oldmode) if (mode == oldmode)
return x; return x;
...@@ -1375,13 +1374,12 @@ convert_modes (mode, oldmode, x, unsignedp) ...@@ -1375,13 +1374,12 @@ convert_modes (mode, oldmode, x, unsignedp)
return temp; return temp;
} }
/* This macro is used to determine what the largest unit size that /* This macro is used to determine what the largest unit size that
move_by_pieces can use is. */ move_by_pieces can use is. */
/* MOVE_MAX_PIECES is the number of bytes at a time which we can /* MOVE_MAX_PIECES is the number of bytes at a time which we can
move efficiently, as opposed to MOVE_MAX which is the maximum move efficiently, as opposed to MOVE_MAX which is the maximum
number of bytes we can move with a single instruction. */ number of bytes we can move with a single instruction. */
#ifndef MOVE_MAX_PIECES #ifndef MOVE_MAX_PIECES
#define MOVE_MAX_PIECES MOVE_MAX #define MOVE_MAX_PIECES MOVE_MAX
...@@ -1431,7 +1429,7 @@ move_by_pieces (to, from, len, align) ...@@ -1431,7 +1429,7 @@ move_by_pieces (to, from, len, align)
if (!(data.autinc_from && data.autinc_to) if (!(data.autinc_from && data.autinc_to)
&& move_by_pieces_ninsns (len, align) > 2) && move_by_pieces_ninsns (len, align) > 2)
{ {
/* Find the mode of the largest move... */ /* Find the mode of the largest move... */
for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT);
tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode)) tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode))
if (GET_MODE_SIZE (tmode) < max_size) if (GET_MODE_SIZE (tmode) < max_size)
...@@ -1702,7 +1700,7 @@ emit_block_move (x, y, size, align) ...@@ -1702,7 +1700,7 @@ emit_block_move (x, y, size, align)
To avoid this problem we go ahead and emit code to copy X, Y & To avoid this problem we go ahead and emit code to copy X, Y &
SIZE into new pseudos. We can then place those new pseudos SIZE into new pseudos. We can then place those new pseudos
into an RTL_EXPR and use them later, even after a call to into an RTL_EXPR and use them later, even after a call to
emit_queue. emit_queue.
Note this is not strictly needed for library calls since they Note this is not strictly needed for library calls since they
do not call emit_queue before loading their arguments. However, do not call emit_queue before loading their arguments. However,
...@@ -1728,7 +1726,7 @@ emit_block_move (x, y, size, align) ...@@ -1728,7 +1726,7 @@ emit_block_move (x, y, size, align)
examine the return value from memcpy. examine the return value from memcpy.
For targets where libcalls and normal calls have different conventions For targets where libcalls and normal calls have different conventions
for returning pointers, we could end up generating incorrect code. for returning pointers, we could end up generating incorrect code.
So instead of using a libcall sequence we build up a suitable So instead of using a libcall sequence we build up a suitable
CALL_EXPR and expand the call in the normal fashion. */ CALL_EXPR and expand the call in the normal fashion. */
...@@ -1744,7 +1742,7 @@ emit_block_move (x, y, size, align) ...@@ -1744,7 +1742,7 @@ emit_block_move (x, y, size, align)
fntype = build_pointer_type (void_type_node); fntype = build_pointer_type (void_type_node);
fntype = build_function_type (fntype, NULL_TREE); fntype = build_function_type (fntype, NULL_TREE);
fn = build_decl (FUNCTION_DECL, fn, fntype); fn = build_decl (FUNCTION_DECL, fn, fntype);
ggc_add_tree_root (&fn, 1); ggc_add_tree_root (&fn, 1);
DECL_EXTERNAL (fn) = 1; DECL_EXTERNAL (fn) = 1;
TREE_PUBLIC (fn) = 1; TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1; DECL_ARTIFICIAL (fn) = 1;
...@@ -1753,7 +1751,7 @@ emit_block_move (x, y, size, align) ...@@ -1753,7 +1751,7 @@ emit_block_move (x, y, size, align)
pop_obstacks (); pop_obstacks ();
} }
/* We need to make an argument list for the function call. /* We need to make an argument list for the function call.
memcpy has three arguments, the first two are void * addresses and memcpy has three arguments, the first two are void * addresses and
the last is a size_t byte count for the copy. */ the last is a size_t byte count for the copy. */
...@@ -1798,7 +1796,7 @@ move_block_to_reg (regno, x, nregs, mode) ...@@ -1798,7 +1796,7 @@ move_block_to_reg (regno, x, nregs, mode)
{ {
int i; int i;
#ifdef HAVE_load_multiple #ifdef HAVE_load_multiple
rtx pat; rtx pat;
rtx last; rtx last;
#endif #endif
...@@ -1834,7 +1832,6 @@ move_block_to_reg (regno, x, nregs, mode) ...@@ -1834,7 +1832,6 @@ move_block_to_reg (regno, x, nregs, mode)
The number of registers to be filled is NREGS. SIZE indicates the number The number of registers to be filled is NREGS. SIZE indicates the number
of bytes in the object X. */ of bytes in the object X. */
void void
move_block_from_reg (regno, x, nregs, size) move_block_from_reg (regno, x, nregs, size)
int regno; int regno;
...@@ -1844,7 +1841,7 @@ move_block_from_reg (regno, x, nregs, size) ...@@ -1844,7 +1841,7 @@ move_block_from_reg (regno, x, nregs, size)
{ {
int i; int i;
#ifdef HAVE_store_multiple #ifdef HAVE_store_multiple
rtx pat; rtx pat;
rtx last; rtx last;
#endif #endif
enum machine_mode mode; enum machine_mode mode;
...@@ -1858,7 +1855,7 @@ move_block_from_reg (regno, x, nregs, size) ...@@ -1858,7 +1855,7 @@ move_block_from_reg (regno, x, nregs, size)
gen_rtx_REG (mode, regno)); gen_rtx_REG (mode, regno));
return; return;
} }
/* Blocks smaller than a word on a BYTES_BIG_ENDIAN machine must be aligned /* Blocks smaller than a word on a BYTES_BIG_ENDIAN machine must be aligned
to the left before storing to memory. Note that the previous test to the left before storing to memory. Note that the previous test
doesn't handle all cases (e.g. SIZE == 3). */ doesn't handle all cases (e.g. SIZE == 3). */
...@@ -1936,7 +1933,7 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -1936,7 +1933,7 @@ emit_group_load (dst, orig_src, ssize, align)
else else
start = 1; start = 1;
tmps = (rtx *) alloca (sizeof(rtx) * XVECLEN (dst, 0)); tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (dst, 0));
/* If we won't be loading directly from memory, protect the real source /* If we won't be loading directly from memory, protect the real source
from strange tricks we might play. */ from strange tricks we might play. */
...@@ -2000,7 +1997,7 @@ emit_group_load (dst, orig_src, ssize, align) ...@@ -2000,7 +1997,7 @@ emit_group_load (dst, orig_src, ssize, align)
tmps[i], 0, OPTAB_WIDEN); tmps[i], 0, OPTAB_WIDEN);
} }
emit_queue(); emit_queue ();
/* Copy the extracted pieces into the proper (probable) hard regs. */ /* Copy the extracted pieces into the proper (probable) hard regs. */
for (i = start; i < XVECLEN (dst, 0); i++) for (i = start; i < XVECLEN (dst, 0); i++)
...@@ -2030,7 +2027,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2030,7 +2027,7 @@ emit_group_store (orig_dst, src, ssize, align)
else else
start = 1; start = 1;
tmps = (rtx *) alloca (sizeof(rtx) * XVECLEN (src, 0)); tmps = (rtx *) alloca (sizeof (rtx) * XVECLEN (src, 0));
/* Copy the (probable) hard regs into pseudos. */ /* Copy the (probable) hard regs into pseudos. */
for (i = start; i < XVECLEN (src, 0); i++) for (i = start; i < XVECLEN (src, 0); i++)
...@@ -2039,7 +2036,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2039,7 +2036,7 @@ emit_group_store (orig_dst, src, ssize, align)
tmps[i] = gen_reg_rtx (GET_MODE (reg)); tmps[i] = gen_reg_rtx (GET_MODE (reg));
emit_move_insn (tmps[i], reg); emit_move_insn (tmps[i], reg);
} }
emit_queue(); emit_queue ();
/* If we won't be storing directly into memory, protect the real destination /* If we won't be storing directly into memory, protect the real destination
from strange tricks we might play. */ from strange tricks we might play. */
...@@ -2111,7 +2108,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2111,7 +2108,7 @@ emit_group_store (orig_dst, src, ssize, align)
mode, tmps[i], align, ssize); mode, tmps[i], align, ssize);
} }
emit_queue(); emit_queue ();
/* Copy from the pseudo into the (probable) hard reg. */ /* Copy from the pseudo into the (probable) hard reg. */
if (GET_CODE (dst) == REG) if (GET_CODE (dst) == REG)
...@@ -2125,7 +2122,7 @@ emit_group_store (orig_dst, src, ssize, align) ...@@ -2125,7 +2122,7 @@ emit_group_store (orig_dst, src, ssize, align)
The primary purpose of this routine is to handle functions The primary purpose of this routine is to handle functions
that return BLKmode structures in registers. Some machines that return BLKmode structures in registers. Some machines
(the PA for example) want to return all small structures (the PA for example) want to return all small structures
in registers regardless of the structure's alignment. */ in registers regardless of the structure's alignment. */
rtx rtx
copy_blkmode_from_reg (tgtblk, srcreg, type) copy_blkmode_from_reg (tgtblk, srcreg, type)
...@@ -2144,7 +2141,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type) ...@@ -2144,7 +2141,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type)
MEM_SET_IN_STRUCT_P (tgtblk, AGGREGATE_TYPE_P (type)); MEM_SET_IN_STRUCT_P (tgtblk, AGGREGATE_TYPE_P (type));
preserve_temp_slots (tgtblk); preserve_temp_slots (tgtblk);
} }
/* This code assumes srcreg is at least a full word. If it isn't, /* This code assumes srcreg is at least a full word. If it isn't,
copy it into a new pseudo which is a full word. */ copy it into a new pseudo which is a full word. */
if (GET_MODE (srcreg) != BLKmode if (GET_MODE (srcreg) != BLKmode
...@@ -2160,7 +2157,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type) ...@@ -2160,7 +2157,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type)
= (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT)); = (BITS_PER_WORD - ((bytes % UNITS_PER_WORD) * BITS_PER_UNIT));
/* Copy the structure BITSIZE bites at a time. /* Copy the structure BITSIZE bites at a time.
We could probably emit more efficient code for machines which do not use We could probably emit more efficient code for machines which do not use
strict alignment, but it doesn't seem worth the effort at the current strict alignment, but it doesn't seem worth the effort at the current
time. */ time. */
...@@ -2168,7 +2165,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type) ...@@ -2168,7 +2165,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type)
bitpos < bytes * BITS_PER_UNIT; bitpos < bytes * BITS_PER_UNIT;
bitpos += bitsize, xbitpos += bitsize) bitpos += bitsize, xbitpos += bitsize)
{ {
/* We need a new source operand each time xbitpos is on a /* We need a new source operand each time xbitpos is on a
word boundary and when xbitpos == big_endian_correction word boundary and when xbitpos == big_endian_correction
(the first time through). */ (the first time through). */
if (xbitpos % BITS_PER_WORD == 0 if (xbitpos % BITS_PER_WORD == 0
...@@ -2179,7 +2176,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type) ...@@ -2179,7 +2176,7 @@ copy_blkmode_from_reg (tgtblk, srcreg, type)
a word boundary. */ a word boundary. */
if (bitpos % BITS_PER_WORD == 0) if (bitpos % BITS_PER_WORD == 0)
dst = operand_subword (tgtblk, bitpos / BITS_PER_WORD, 1, BLKmode); dst = operand_subword (tgtblk, bitpos / BITS_PER_WORD, 1, BLKmode);
/* Use xbitpos for the source extraction (right justified) and /* Use xbitpos for the source extraction (right justified) and
xbitpos for the destination store (left justified). */ xbitpos for the destination store (left justified). */
store_bit_field (dst, bitsize, bitpos % BITS_PER_WORD, word_mode, store_bit_field (dst, bitsize, bitpos % BITS_PER_WORD, word_mode,
...@@ -2202,7 +2199,7 @@ use_reg (call_fusage, reg) ...@@ -2202,7 +2199,7 @@ use_reg (call_fusage, reg)
{ {
if (GET_CODE (reg) != REG if (GET_CODE (reg) != REG
|| REGNO (reg) >= FIRST_PSEUDO_REGISTER) || REGNO (reg) >= FIRST_PSEUDO_REGISTER)
abort(); abort ();
*call_fusage *call_fusage
= gen_rtx_EXPR_LIST (VOIDmode, = gen_rtx_EXPR_LIST (VOIDmode,
...@@ -2276,7 +2273,8 @@ clear_by_pieces (to, len, align) ...@@ -2276,7 +2273,8 @@ clear_by_pieces (to, len, align)
data.explicit_inc_to = 0; data.explicit_inc_to = 0;
data.reverse data.reverse
= (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC); = (GET_CODE (to_addr) == PRE_DEC || GET_CODE (to_addr) == POST_DEC);
if (data.reverse) data.offset = len; if (data.reverse)
data.offset = len;
data.len = len; data.len = len;
/* If copying requires more than two move insns, /* If copying requires more than two move insns,
...@@ -2285,7 +2283,7 @@ clear_by_pieces (to, len, align) ...@@ -2285,7 +2283,7 @@ clear_by_pieces (to, len, align)
if (!data.autinc_to if (!data.autinc_to
&& move_by_pieces_ninsns (len, align) > 2) && move_by_pieces_ninsns (len, align) > 2)
{ {
/* Determine the main mode we'll be using */ /* Determine the main mode we'll be using. */
for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT); for (tmode = GET_CLASS_NARROWEST_MODE (MODE_INT);
tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode)) tmode != VOIDmode; tmode = GET_MODE_WIDER_MODE (tmode))
if (GET_MODE_SIZE (tmode) < max_size) if (GET_MODE_SIZE (tmode) < max_size)
...@@ -2362,7 +2360,7 @@ clear_by_pieces_1 (genfun, mode, data) ...@@ -2362,7 +2360,7 @@ clear_by_pieces_1 (genfun, mode, data)
to1 = gen_rtx_MEM (mode, data->to_addr); to1 = gen_rtx_MEM (mode, data->to_addr);
MEM_COPY_ATTRIBUTES (to1, data->to); MEM_COPY_ATTRIBUTES (to1, data->to);
} }
else else
to1 = change_address (data->to, mode, to1 = change_address (data->to, mode,
plus_constant (data->to_addr, data->offset)); plus_constant (data->to_addr, data->offset));
...@@ -2485,7 +2483,6 @@ clear_storage (object, size, align) ...@@ -2485,7 +2483,6 @@ clear_storage (object, size, align)
size = copy_to_mode_reg (TYPE_MODE (integer_type_node), size); size = copy_to_mode_reg (TYPE_MODE (integer_type_node), size);
#endif #endif
#ifdef TARGET_MEM_FUNCTIONS #ifdef TARGET_MEM_FUNCTIONS
/* It is incorrect to use the libcall calling conventions to call /* It is incorrect to use the libcall calling conventions to call
memset in this context. memset in this context.
...@@ -2495,7 +2492,7 @@ clear_storage (object, size, align) ...@@ -2495,7 +2492,7 @@ clear_storage (object, size, align)
For targets where libcalls and normal calls have different For targets where libcalls and normal calls have different
conventions for returning pointers, we could end up generating conventions for returning pointers, we could end up generating
incorrect code. incorrect code.
So instead of using a libcall sequence we build up a suitable So instead of using a libcall sequence we build up a suitable
CALL_EXPR and expand the call in the normal fashion. */ CALL_EXPR and expand the call in the normal fashion. */
...@@ -2520,7 +2517,7 @@ clear_storage (object, size, align) ...@@ -2520,7 +2517,7 @@ clear_storage (object, size, align)
pop_obstacks (); pop_obstacks ();
} }
/* We need to make an argument list for the function call. /* We need to make an argument list for the function call.
memset has three arguments, the first is a void * addresses, the memset has three arguments, the first is a void * addresses, the
second a integer with the initialization value, the last is a second a integer with the initialization value, the last is a
...@@ -2531,7 +2528,7 @@ clear_storage (object, size, align) ...@@ -2531,7 +2528,7 @@ clear_storage (object, size, align)
object)); object));
TREE_CHAIN (arg_list) TREE_CHAIN (arg_list)
= build_tree_list (NULL_TREE, = build_tree_list (NULL_TREE,
make_tree (integer_type_node, const0_rtx)); make_tree (integer_type_node, const0_rtx));
TREE_CHAIN (TREE_CHAIN (arg_list)) TREE_CHAIN (TREE_CHAIN (arg_list))
= build_tree_list (NULL_TREE, make_tree (sizetype, size)); = build_tree_list (NULL_TREE, make_tree (sizetype, size));
TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arg_list))) = NULL_TREE; TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arg_list))) = NULL_TREE;
...@@ -2617,7 +2614,7 @@ emit_move_insn_1 (x, y) ...@@ -2617,7 +2614,7 @@ emit_move_insn_1 (x, y)
unsigned int i; unsigned int i;
if (mode >= MAX_MACHINE_MODE) if (mode >= MAX_MACHINE_MODE)
abort (); abort ();
if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing)
return return
...@@ -2675,7 +2672,7 @@ emit_move_insn_1 (x, y) ...@@ -2675,7 +2672,7 @@ emit_move_insn_1 (x, y)
memory and reload. FIXME, we should see about using extract and memory and reload. FIXME, we should see about using extract and
insert on integer registers, but complex short and complex char insert on integer registers, but complex short and complex char
variables should be rarely used. */ variables should be rarely used. */
if (GET_MODE_BITSIZE (mode) < 2*BITS_PER_WORD if (GET_MODE_BITSIZE (mode) < 2 * BITS_PER_WORD
&& (reload_in_progress | reload_completed) == 0) && (reload_in_progress | reload_completed) == 0)
{ {
int packed_dest_p = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER); int packed_dest_p = (REG_P (x) && REGNO (x) < FIRST_PSEUDO_REGISTER);
...@@ -2686,7 +2683,7 @@ emit_move_insn_1 (x, y) ...@@ -2686,7 +2683,7 @@ emit_move_insn_1 (x, y)
enum mode_class reg_class = ((class == MODE_COMPLEX_FLOAT) enum mode_class reg_class = ((class == MODE_COMPLEX_FLOAT)
? MODE_FLOAT : MODE_INT); ? MODE_FLOAT : MODE_INT);
enum machine_mode reg_mode = enum machine_mode reg_mode =
mode_for_size (GET_MODE_BITSIZE (mode), reg_class, 1); mode_for_size (GET_MODE_BITSIZE (mode), reg_class, 1);
if (reg_mode != BLKmode) if (reg_mode != BLKmode)
...@@ -2748,7 +2745,7 @@ emit_move_insn_1 (x, y) ...@@ -2748,7 +2745,7 @@ emit_move_insn_1 (x, y)
rtx last_insn = 0; rtx last_insn = 0;
rtx seq, inner; rtx seq, inner;
int need_clobber; int need_clobber;
#ifdef PUSH_ROUNDING #ifdef PUSH_ROUNDING
/* If X is a push on the stack, do the push now and replace /* If X is a push on the stack, do the push now and replace
...@@ -2759,7 +2756,7 @@ emit_move_insn_1 (x, y) ...@@ -2759,7 +2756,7 @@ emit_move_insn_1 (x, y)
x = change_address (x, VOIDmode, stack_pointer_rtx); x = change_address (x, VOIDmode, stack_pointer_rtx);
} }
#endif #endif
/* If we are in reload, see if either operand is a MEM whose address /* If we are in reload, see if either operand is a MEM whose address
is scheduled for replacement. */ is scheduled for replacement. */
if (reload_in_progress && GET_CODE (x) == MEM if (reload_in_progress && GET_CODE (x) == MEM
...@@ -2783,7 +2780,7 @@ emit_move_insn_1 (x, y) ...@@ -2783,7 +2780,7 @@ emit_move_insn_1 (x, y)
need_clobber = 0; need_clobber = 0;
for (i = 0; for (i = 0;
i < (GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD; i < (GET_MODE_SIZE (mode) + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
i++) i++)
{ {
rtx xpart = operand_subword (x, i, 1, mode); rtx xpart = operand_subword (x, i, 1, mode);
...@@ -2883,7 +2880,7 @@ push_block (size, extra, below) ...@@ -2883,7 +2880,7 @@ push_block (size, extra, below)
{ {
if (GET_CODE (size) == CONST_INT) if (GET_CODE (size) == CONST_INT)
temp = plus_constant (virtual_outgoing_args_rtx, temp = plus_constant (virtual_outgoing_args_rtx,
- INTVAL (size) - (below ? 0 : extra)); -INTVAL (size) - (below ? 0 : extra));
else if (extra != 0 && !below) else if (extra != 0 && !below)
temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx, temp = gen_rtx_PLUS (Pmode, virtual_outgoing_args_rtx,
negate_rtx (Pmode, plus_constant (size, extra))); negate_rtx (Pmode, plus_constant (size, extra)));
...@@ -2906,7 +2903,7 @@ gen_push_operand () ...@@ -2906,7 +2903,7 @@ gen_push_operand ()
static rtx static rtx
get_push_address (size) get_push_address (size)
int size; int size;
{ {
register rtx temp; register rtx temp;
...@@ -2997,7 +2994,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -2997,7 +2994,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
int used = partial * UNITS_PER_WORD; int used = partial * UNITS_PER_WORD;
int offset = used % (PARM_BOUNDARY / BITS_PER_UNIT); int offset = used % (PARM_BOUNDARY / BITS_PER_UNIT);
int skip; int skip;
if (size == 0) if (size == 0)
abort (); abort ();
...@@ -3047,19 +3044,19 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3047,19 +3044,19 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
if (current_function_check_memory_usage && ! in_check_memory_usage) if (current_function_check_memory_usage && ! in_check_memory_usage)
{ {
rtx temp; rtx temp;
in_check_memory_usage = 1; in_check_memory_usage = 1;
temp = get_push_address (INTVAL(size) - used); temp = get_push_address (INTVAL (size) - used);
if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type)) if (GET_CODE (x) == MEM && type && AGGREGATE_TYPE_P (type))
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
temp, Pmode, temp, Pmode,
XEXP (xinner, 0), Pmode, XEXP (xinner, 0), Pmode,
GEN_INT (INTVAL(size) - used), GEN_INT (INTVAL (size) - used),
TYPE_MODE (sizetype)); TYPE_MODE (sizetype));
else else
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
temp, Pmode, temp, Pmode,
GEN_INT (INTVAL(size) - used), GEN_INT (INTVAL (size) - used),
TYPE_MODE (sizetype), TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_RW), GEN_INT (MEMORY_USE_RW),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
...@@ -3067,7 +3064,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3067,7 +3064,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
} }
} }
else else
#endif /* PUSH_ROUNDING */ #endif /* PUSH_ROUNDING */
{ {
rtx target; rtx target;
...@@ -3121,17 +3118,17 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3121,17 +3118,17 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
in_check_memory_usage = 0; in_check_memory_usage = 0;
} }
target = gen_rtx_MEM (BLKmode, temp); target = gen_rtx_MEM (BLKmode, temp);
if (type != 0) if (type != 0)
{ {
set_mem_attributes (target, type, 1); set_mem_attributes (target, type, 1);
/* Function incoming arguments may overlap with sibling call /* Function incoming arguments may overlap with sibling call
outgoing arguments and we cannot allow reordering of reads outgoing arguments and we cannot allow reordering of reads
from function arguments with stores to outgoing arguments from function arguments with stores to outgoing arguments
of sibling calls. */ of sibling calls. */
MEM_ALIAS_SET (target) = 0; MEM_ALIAS_SET (target) = 0;
} }
/* TEMP is the address of the block. Copy the data there. */ /* TEMP is the address of the block. Copy the data there. */
if (GET_CODE (size) == CONST_INT if (GET_CODE (size) == CONST_INT
...@@ -3302,9 +3299,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3302,9 +3299,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
if (GET_CODE (args_so_far) == CONST_INT) if (GET_CODE (args_so_far) == CONST_INT)
addr addr
= memory_address (mode, = memory_address (mode,
plus_constant (args_addr, plus_constant (args_addr,
INTVAL (args_so_far))); INTVAL (args_so_far)));
else else
addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr, addr = memory_address (mode, gen_rtx_PLUS (Pmode, args_addr,
args_so_far)); args_so_far));
target = addr; target = addr;
...@@ -3362,7 +3359,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, ...@@ -3362,7 +3359,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
if (extra && args_addr == 0 && where_pad == stack_direction) if (extra && args_addr == 0 && where_pad == stack_direction)
anti_adjust_stack (GEN_INT (extra)); anti_adjust_stack (GEN_INT (extra));
if (alignment_pad && args_addr == 0) if (alignment_pad && args_addr == 0)
anti_adjust_stack (alignment_pad); anti_adjust_stack (alignment_pad);
} }
...@@ -3465,7 +3462,7 @@ expand_assignment (to, from, want_value, suggest_reg) ...@@ -3465,7 +3462,7 @@ expand_assignment (to, from, want_value, suggest_reg)
&& GET_MODE (to_rtx) == BLKmode && GET_MODE (to_rtx) == BLKmode
&& GET_MODE (XEXP (to_rtx, 0)) != VOIDmode && GET_MODE (XEXP (to_rtx, 0)) != VOIDmode
&& bitsize && bitsize
&& (bitpos % bitsize) == 0 && (bitpos % bitsize) == 0
&& (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0
&& alignment == GET_MODE_ALIGNMENT (mode1)) && alignment == GET_MODE_ALIGNMENT (mode1))
{ {
...@@ -3853,7 +3850,7 @@ store_expr (exp, target, want_value) ...@@ -3853,7 +3850,7 @@ store_expr (exp, target, want_value)
SUBREG_PROMOTED_UNSIGNED_P (target)), SUBREG_PROMOTED_UNSIGNED_P (target)),
exp); exp);
} }
temp = expand_expr (exp, NULL_RTX, VOIDmode, 0); temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
/* If TEMP is a volatile MEM and we want a result value, make /* If TEMP is a volatile MEM and we want a result value, make
...@@ -3923,15 +3920,15 @@ store_expr (exp, target, want_value) ...@@ -3923,15 +3920,15 @@ store_expr (exp, target, want_value)
{ {
in_check_memory_usage = 1; in_check_memory_usage = 1;
if (GET_CODE (temp) == MEM) if (GET_CODE (temp) == MEM)
emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3,
XEXP (target, 0), Pmode, XEXP (target, 0), Pmode,
XEXP (temp, 0), Pmode, XEXP (temp, 0), Pmode,
expr_size (exp), TYPE_MODE (sizetype)); expr_size (exp), TYPE_MODE (sizetype));
else else
emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
XEXP (target, 0), Pmode, XEXP (target, 0), Pmode,
expr_size (exp), TYPE_MODE (sizetype), expr_size (exp), TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_WO), GEN_INT (MEMORY_USE_WO),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
in_check_memory_usage = 0; in_check_memory_usage = 0;
} }
...@@ -4011,7 +4008,7 @@ store_expr (exp, target, want_value) ...@@ -4011,7 +4008,7 @@ store_expr (exp, target, want_value)
if (GET_CODE (copy_size_rtx) == CONST_INT) if (GET_CODE (copy_size_rtx) == CONST_INT)
{ {
addr = plus_constant (addr, TREE_STRING_LENGTH (exp)); addr = plus_constant (addr, TREE_STRING_LENGTH (exp));
size = plus_constant (size, - TREE_STRING_LENGTH (exp)); size = plus_constant (size, -TREE_STRING_LENGTH (exp));
align = MIN (align, (BITS_PER_UNIT align = MIN (align, (BITS_PER_UNIT
* (INTVAL (copy_size_rtx) * (INTVAL (copy_size_rtx)
& - INTVAL (copy_size_rtx)))); & - INTVAL (copy_size_rtx))));
...@@ -4046,7 +4043,7 @@ store_expr (exp, target, want_value) ...@@ -4046,7 +4043,7 @@ store_expr (exp, target, want_value)
emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
addr, Pmode, addr, Pmode,
size, TYPE_MODE (sizetype), size, TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_WO), GEN_INT (MEMORY_USE_WO),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
in_check_memory_usage = 0; in_check_memory_usage = 0;
clear_storage (dest, size, align); clear_storage (dest, size, align);
...@@ -4082,7 +4079,7 @@ store_expr (exp, target, want_value) ...@@ -4082,7 +4079,7 @@ store_expr (exp, target, want_value)
&& ! (GET_CODE (target) == REG && ! (GET_CODE (target) == REG
&& REGNO (target) < FIRST_PSEUDO_REGISTER)) && REGNO (target) < FIRST_PSEUDO_REGISTER))
return copy_to_reg (target); return copy_to_reg (target);
else else
return target; return target;
} }
...@@ -4120,7 +4117,7 @@ is_zeros_p (exp) ...@@ -4120,7 +4117,7 @@ is_zeros_p (exp)
return 0; return 0;
return 1; return 1;
default: default:
return 0; return 0;
} }
...@@ -4329,7 +4326,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4329,7 +4326,7 @@ store_constructor (exp, target, align, cleared, size)
} }
else else
bitpos = tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 0); bitpos = tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 0);
if (offset) if (offset)
{ {
rtx offset_rtx; rtx offset_rtx;
...@@ -4342,8 +4339,8 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4342,8 +4339,8 @@ store_constructor (exp, target, align, cleared, size)
if (GET_CODE (to_rtx) != MEM) if (GET_CODE (to_rtx) != MEM)
abort (); abort ();
if (GET_MODE (offset_rtx) != ptr_mode) if (GET_MODE (offset_rtx) != ptr_mode)
{ {
#ifdef POINTERS_EXTEND_UNSIGNED #ifdef POINTERS_EXTEND_UNSIGNED
offset_rtx = convert_memory_address (ptr_mode, offset_rtx); offset_rtx = convert_memory_address (ptr_mode, offset_rtx);
#else #else
...@@ -4611,7 +4608,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4611,7 +4608,7 @@ store_constructor (exp, target, align, cleared, size)
} }
} }
/* Set constructor assignments */ /* Set constructor assignments. */
else if (TREE_CODE (type) == SET_TYPE) else if (TREE_CODE (type) == SET_TYPE)
{ {
tree elt = CONSTRUCTOR_ELTS (exp); tree elt = CONSTRUCTOR_ELTS (exp);
...@@ -4628,7 +4625,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4628,7 +4625,7 @@ store_constructor (exp, target, align, cleared, size)
Also, if a large set has just a single range, it may also be Also, if a large set has just a single range, it may also be
better to first clear all the first clear the set (using better to first clear all the first clear the set (using
bzero/memset), and set the bits we want. */ bzero/memset), and set the bits we want. */
/* Check for all zeros. */ /* Check for all zeros. */
if (elt == NULL_TREE && size > 0) if (elt == NULL_TREE && size > 0)
{ {
...@@ -4647,7 +4644,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4647,7 +4644,7 @@ store_constructor (exp, target, align, cleared, size)
/* For "small" sets, or "medium-sized" (up to 32 bytes) sets that /* For "small" sets, or "medium-sized" (up to 32 bytes) sets that
are "complicated" (more than one range), initialize (the are "complicated" (more than one range), initialize (the
constant parts) by copying from a constant. */ constant parts) by copying from a constant. */
if (GET_MODE (target) != BLKmode || nbits <= 2 * BITS_PER_WORD if (GET_MODE (target) != BLKmode || nbits <= 2 * BITS_PER_WORD
|| (nbytes <= 32 && TREE_CHAIN (elt) != NULL_TREE)) || (nbytes <= 32 && TREE_CHAIN (elt) != NULL_TREE))
{ {
...@@ -4686,7 +4683,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4686,7 +4683,7 @@ store_constructor (exp, target, align, cleared, size)
to_rtx = plus_constant (XEXP (target, 0), offset); to_rtx = plus_constant (XEXP (target, 0), offset);
to_rtx = change_address (target, mode, to_rtx); to_rtx = change_address (target, mode, to_rtx);
} }
else if (offset == 0) else if (offset == 0)
to_rtx = target; to_rtx = target;
else else
abort (); abort ();
...@@ -4712,12 +4709,12 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4712,12 +4709,12 @@ store_constructor (exp, target, align, cleared, size)
- tree_low_cst (TREE_PURPOSE (elt), 0) + 1 - tree_low_cst (TREE_PURPOSE (elt), 0) + 1
!= (HOST_WIDE_INT) nbits)))) != (HOST_WIDE_INT) nbits))))
clear_storage (target, expr_size (exp), TYPE_ALIGN (type)); clear_storage (target, expr_size (exp), TYPE_ALIGN (type));
for (; elt != NULL_TREE; elt = TREE_CHAIN (elt)) for (; elt != NULL_TREE; elt = TREE_CHAIN (elt))
{ {
/* start of range of element or NULL */ /* Start of range of element or NULL. */
tree startbit = TREE_PURPOSE (elt); tree startbit = TREE_PURPOSE (elt);
/* end of range of element, or element value */ /* End of range of element, or element value. */
tree endbit = TREE_VALUE (elt); tree endbit = TREE_VALUE (elt);
#ifdef TARGET_MEM_FUNCTIONS #ifdef TARGET_MEM_FUNCTIONS
HOST_WIDE_INT startb, endb; HOST_WIDE_INT startb, endb;
...@@ -4727,7 +4724,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4727,7 +4724,7 @@ store_constructor (exp, target, align, cleared, size)
bitlength_rtx = expand_expr (bitlength, bitlength_rtx = expand_expr (bitlength,
NULL_RTX, MEM, EXPAND_CONST_ADDRESS); NULL_RTX, MEM, EXPAND_CONST_ADDRESS);
/* handle non-range tuple element like [ expr ] */ /* Handle non-range tuple element like [ expr ]. */
if (startbit == NULL_TREE) if (startbit == NULL_TREE)
{ {
startbit = save_expr (endbit); startbit = save_expr (endbit);
...@@ -4741,9 +4738,9 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4741,9 +4738,9 @@ store_constructor (exp, target, align, cleared, size)
startbit = size_binop (MINUS_EXPR, startbit, domain_min); startbit = size_binop (MINUS_EXPR, startbit, domain_min);
endbit = size_binop (MINUS_EXPR, endbit, domain_min); endbit = size_binop (MINUS_EXPR, endbit, domain_min);
} }
startbit_rtx = expand_expr (startbit, NULL_RTX, MEM, startbit_rtx = expand_expr (startbit, NULL_RTX, MEM,
EXPAND_CONST_ADDRESS); EXPAND_CONST_ADDRESS);
endbit_rtx = expand_expr (endbit, NULL_RTX, MEM, endbit_rtx = expand_expr (endbit, NULL_RTX, MEM,
EXPAND_CONST_ADDRESS); EXPAND_CONST_ADDRESS);
if (REG_P (target)) if (REG_P (target))
...@@ -4807,7 +4804,7 @@ store_constructor (exp, target, align, cleared, size) ...@@ -4807,7 +4804,7 @@ store_constructor (exp, target, align, cleared, size)
In this case, UNSIGNEDP must be nonzero if the value is an unsigned type. In this case, UNSIGNEDP must be nonzero if the value is an unsigned type.
ALIGN is the alignment that TARGET is known to have. ALIGN is the alignment that TARGET is known to have.
TOTAL_SIZE is the size in bytes of the structure, or -1 if varying. TOTAL_SIZE is the size in bytes of the structure, or -1 if varying.
ALIAS_SET is the alias set for the destination. This value will ALIAS_SET is the alias set for the destination. This value will
(in general) be different from that for TARGET, since TARGET is a (in general) be different from that for TARGET, since TARGET is a
...@@ -5080,7 +5077,7 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, ...@@ -5080,7 +5077,7 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
else else
*pbitsize = GET_MODE_BITSIZE (mode); *pbitsize = GET_MODE_BITSIZE (mode);
} }
if (size_tree != 0) if (size_tree != 0)
{ {
if (! host_integerp (size_tree, 1)) if (! host_integerp (size_tree, 1))
...@@ -5300,7 +5297,7 @@ force_operand (value, target) ...@@ -5300,7 +5297,7 @@ force_operand (value, target)
force_operand (XEXP (XEXP (value, 0), 1), 0), force_operand (XEXP (XEXP (value, 0), 1), 0),
target, 0, OPTAB_LIB_WIDEN); target, 0, OPTAB_LIB_WIDEN);
} }
tmp = force_operand (XEXP (value, 0), subtarget); tmp = force_operand (XEXP (value, 0), subtarget);
return expand_binop (GET_MODE (value), binoptab, tmp, return expand_binop (GET_MODE (value), binoptab, tmp,
force_operand (op2, NULL_RTX), force_operand (op2, NULL_RTX),
...@@ -5540,7 +5537,7 @@ safe_from_p (x, exp, top_p) ...@@ -5540,7 +5537,7 @@ safe_from_p (x, exp, top_p)
where it is so we can turn it back in the top-level safe_from_p() where it is so we can turn it back in the top-level safe_from_p()
when we're done. */ when we're done. */
/* For now, don't bother re-sizing the array. */ /* For now, don't bother re-sizing the array. */
if (save_expr_count >= save_expr_size) if (save_expr_count >= save_expr_size)
return 0; return 0;
save_expr_rewritten[save_expr_count++] = exp; save_expr_rewritten[save_expr_count++] = exp;
...@@ -5567,7 +5564,7 @@ safe_from_p (x, exp, top_p) ...@@ -5567,7 +5564,7 @@ safe_from_p (x, exp, top_p)
case METHOD_CALL_EXPR: case METHOD_CALL_EXPR:
/* This takes a rtx argument, but shouldn't appear here. */ /* This takes a rtx argument, but shouldn't appear here. */
abort (); abort ();
default: default:
break; break;
} }
...@@ -5643,7 +5640,7 @@ var_rtx (exp) ...@@ -5643,7 +5640,7 @@ var_rtx (exp)
#ifdef MAX_INTEGER_COMPUTATION_MODE #ifdef MAX_INTEGER_COMPUTATION_MODE
void void
check_max_integer_computation_mode (exp) check_max_integer_computation_mode (exp)
tree exp; tree exp;
{ {
enum tree_code code; enum tree_code code;
enum machine_mode mode; enum machine_mode mode;
...@@ -5677,7 +5674,7 @@ check_max_integer_computation_mode (exp) ...@@ -5677,7 +5674,7 @@ check_max_integer_computation_mode (exp)
&& mode > MAX_INTEGER_COMPUTATION_MODE) && mode > MAX_INTEGER_COMPUTATION_MODE)
fatal ("unsupported wide integer operation"); fatal ("unsupported wide integer operation");
} }
/* Check operands of a binary/comparison op. */ /* Check operands of a binary/comparison op. */
if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<') if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<')
{ {
...@@ -5693,7 +5690,6 @@ check_max_integer_computation_mode (exp) ...@@ -5693,7 +5690,6 @@ check_max_integer_computation_mode (exp)
} }
} }
#endif #endif
/* Utility function used by expand_expr to see if TYPE, a RECORD_TYPE, /* Utility function used by expand_expr to see if TYPE, a RECORD_TYPE,
has any readonly fields. If any of the fields have types that has any readonly fields. If any of the fields have types that
...@@ -5706,7 +5702,7 @@ readonly_fields_p (type) ...@@ -5706,7 +5702,7 @@ readonly_fields_p (type)
tree field; tree field;
for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field)) for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
if (TREE_CODE (field) == FIELD_DECL if (TREE_CODE (field) == FIELD_DECL
&& (TREE_READONLY (field) && (TREE_READONLY (field)
|| (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE || (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
&& readonly_fields_p (TREE_TYPE (field))))) && readonly_fields_p (TREE_TYPE (field)))))
...@@ -5769,7 +5765,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5769,7 +5765,7 @@ expand_expr (exp, target, tmode, modifier)
/* Used by check-memory-usage to make modifier read only. */ /* Used by check-memory-usage to make modifier read only. */
enum expand_modifier ro_modifier; enum expand_modifier ro_modifier;
/* Handle ERROR_MARK before anybody tries to access its type. */ /* Handle ERROR_MARK before anybody tries to access its type. */
if (TREE_CODE (exp) == ERROR_MARK) if (TREE_CODE (exp) == ERROR_MARK)
{ {
op0 = CONST0_RTX (tmode); op0 = CONST0_RTX (tmode);
...@@ -5824,7 +5820,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5824,7 +5820,7 @@ expand_expr (exp, target, tmode, modifier)
return expand_expr (TREE_OPERAND (exp, 0), const0_rtx, return expand_expr (TREE_OPERAND (exp, 0), const0_rtx,
VOIDmode, ro_modifier); VOIDmode, ro_modifier);
else if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<' else if (TREE_CODE_CLASS (code) == '2' || TREE_CODE_CLASS (code) == '<'
|| code == ARRAY_REF) || code == ARRAY_REF)
{ {
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ro_modifier); expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, ro_modifier);
expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, ro_modifier); expand_expr (TREE_OPERAND (exp, 1), const0_rtx, VOIDmode, ro_modifier);
...@@ -5843,7 +5839,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5843,7 +5839,7 @@ expand_expr (exp, target, tmode, modifier)
expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, ro_modifier); expand_expr (TREE_OPERAND (exp, 2), const0_rtx, VOIDmode, ro_modifier);
return const0_rtx; return const0_rtx;
} }
; ;
target = 0; target = 0;
} }
...@@ -6026,7 +6022,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6026,7 +6022,7 @@ expand_expr (exp, target, tmode, modifier)
abort (); abort ();
addr = XEXP (DECL_RTL (exp), 0); addr = XEXP (DECL_RTL (exp), 0);
if (GET_CODE (addr) == MEM) if (GET_CODE (addr) == MEM)
addr = change_address (addr, Pmode, addr = change_address (addr, Pmode,
fix_lexical_addr (XEXP (addr, 0), exp)); fix_lexical_addr (XEXP (addr, 0), exp));
else else
addr = fix_lexical_addr (addr, exp); addr = fix_lexical_addr (addr, exp);
...@@ -6095,12 +6091,12 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6095,12 +6091,12 @@ expand_expr (exp, target, tmode, modifier)
case CONST_DECL: case CONST_DECL:
return expand_expr (DECL_INITIAL (exp), target, VOIDmode, return expand_expr (DECL_INITIAL (exp), target, VOIDmode,
EXPAND_MEMORY_USE_BAD); EXPAND_MEMORY_USE_BAD);
case REAL_CST: case REAL_CST:
/* If optimized, generate immediate CONST_DOUBLE /* If optimized, generate immediate CONST_DOUBLE
which will be turned into memory by reload if necessary. which will be turned into memory by reload if necessary.
We used to force a register so that loop.c could see it. But We used to force a register so that loop.c could see it. But
this does not allow gen_* patterns to perform optimizations with this does not allow gen_* patterns to perform optimizations with
the constants. It also produces two insns in cases like "x = 1.0;". the constants. It also produces two insns in cases like "x = 1.0;".
...@@ -6138,7 +6134,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6138,7 +6134,7 @@ expand_expr (exp, target, tmode, modifier)
lineno = EXPR_WFL_LINENO (exp); lineno = EXPR_WFL_LINENO (exp);
if (EXPR_WFL_EMIT_LINE_NOTE (exp)) if (EXPR_WFL_EMIT_LINE_NOTE (exp))
emit_line_note (input_filename, lineno); emit_line_note (input_filename, lineno);
/* Possibly avoid switching back and force here */ /* Possibly avoid switching back and force here. */
to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier); to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier);
input_filename = saved_input_filename; input_filename = saved_input_filename;
lineno = saved_lineno; lineno = saved_lineno;
...@@ -6254,7 +6250,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6254,7 +6250,7 @@ expand_expr (exp, target, tmode, modifier)
tree elt; tree elt;
/* Find the outermost reference that is of the type we want. /* Find the outermost reference that is of the type we want.
If none, see if any object has a type that is a pointer to If none, see if any object has a type that is a pointer to
the type we want. */ the type we want. */
for (elt = TREE_PURPOSE (placeholder_expr); for (elt = TREE_PURPOSE (placeholder_expr);
elt != 0 && object == 0; elt != 0 && object == 0;
...@@ -6416,7 +6412,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6416,7 +6412,7 @@ expand_expr (exp, target, tmode, modifier)
&& ! (target != 0 && safe_from_p (target, exp, 1))) && ! (target != 0 && safe_from_p (target, exp, 1)))
|| TREE_ADDRESSABLE (exp) || TREE_ADDRESSABLE (exp)
|| (host_integerp (TYPE_SIZE_UNIT (type), 1) || (host_integerp (TYPE_SIZE_UNIT (type), 1)
&& (! MOVE_BY_PIECES_P && (! MOVE_BY_PIECES_P
(tree_low_cst (TYPE_SIZE_UNIT (type), 1), (tree_low_cst (TYPE_SIZE_UNIT (type), 1),
TYPE_ALIGN (type))) TYPE_ALIGN (type)))
&& ! mostly_zeros_p (exp)))) && ! mostly_zeros_p (exp))))
...@@ -6466,8 +6462,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6466,8 +6462,8 @@ expand_expr (exp, target, tmode, modifier)
{ {
tree exp1 = TREE_OPERAND (exp, 0); tree exp1 = TREE_OPERAND (exp, 0);
tree index; tree index;
tree string = string_constant (exp1, &index); tree string = string_constant (exp1, &index);
/* Try to optimize reads from const strings. */ /* Try to optimize reads from const strings. */
if (string if (string
&& TREE_CODE (string) == STRING_CST && TREE_CODE (string) == STRING_CST
...@@ -6563,7 +6559,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6563,7 +6559,7 @@ expand_expr (exp, target, tmode, modifier)
if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array)
&& TREE_CODE (index) == INTEGER_CST && TREE_CODE (index) == INTEGER_CST
&& 0 > compare_tree_int (index, && 0 > compare_tree_int (index,
list_length (CONSTRUCTOR_ELTS list_length (CONSTRUCTOR_ELTS
(TREE_OPERAND (exp, 0))))) (TREE_OPERAND (exp, 0)))))
{ {
...@@ -6578,7 +6574,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6578,7 +6574,7 @@ expand_expr (exp, target, tmode, modifier)
return expand_expr (fold (TREE_VALUE (elem)), target, return expand_expr (fold (TREE_VALUE (elem)), target,
tmode, ro_modifier); tmode, ro_modifier);
} }
else if (optimize >= 1 else if (optimize >= 1
&& TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array)
&& TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array)
...@@ -6611,8 +6607,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6611,8 +6607,7 @@ expand_expr (exp, target, tmode, modifier)
} }
} }
} }
/* Fall through. */
/* ... fall through ... */
case COMPONENT_REF: case COMPONENT_REF:
case BIT_FIELD_REF: case BIT_FIELD_REF:
...@@ -6642,7 +6637,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6642,7 +6637,7 @@ expand_expr (exp, target, tmode, modifier)
&& (GET_MODE_BITSIZE (DECL_MODE (TREE_PURPOSE (elt))) && (GET_MODE_BITSIZE (DECL_MODE (TREE_PURPOSE (elt)))
<= HOST_BITS_PER_WIDE_INT)))) <= HOST_BITS_PER_WIDE_INT))))
{ {
op0 = expand_expr (TREE_VALUE (elt), target, tmode, modifier); op0 = expand_expr (TREE_VALUE (elt), target, tmode, modifier);
if (DECL_BIT_FIELD (TREE_PURPOSE (elt))) if (DECL_BIT_FIELD (TREE_PURPOSE (elt)))
{ {
HOST_WIDE_INT bitsize HOST_WIDE_INT bitsize
...@@ -6691,7 +6686,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6691,7 +6686,7 @@ expand_expr (exp, target, tmode, modifier)
/* If TEM's type is a union of variable size, pass TARGET to the inner /* If TEM's type is a union of variable size, pass TARGET to the inner
computation, since it will need a temporary and TARGET is known computation, since it will need a temporary and TARGET is known
to have to do. This occurs in unchecked conversion in Ada. */ to have to do. This occurs in unchecked conversion in Ada. */
op0 = expand_expr (tem, op0 = expand_expr (tem,
(TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE
&& (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem)))
...@@ -6750,7 +6745,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6750,7 +6745,7 @@ expand_expr (exp, target, tmode, modifier)
&& GET_MODE (op0) == BLKmode && GET_MODE (op0) == BLKmode
&& GET_MODE (XEXP (op0, 0)) != VOIDmode && GET_MODE (XEXP (op0, 0)) != VOIDmode
&& bitsize != 0 && bitsize != 0
&& (bitpos % bitsize) == 0 && (bitpos % bitsize) == 0
&& (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0 && (bitsize % GET_MODE_ALIGNMENT (mode1)) == 0
&& alignment == GET_MODE_ALIGNMENT (mode1)) && alignment == GET_MODE_ALIGNMENT (mode1))
{ {
...@@ -6767,7 +6762,6 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6767,7 +6762,6 @@ expand_expr (exp, target, tmode, modifier)
bitpos = 0; bitpos = 0;
} }
op0 = change_address (op0, VOIDmode, op0 = change_address (op0, VOIDmode,
gen_rtx_PLUS (ptr_mode, XEXP (op0, 0), gen_rtx_PLUS (ptr_mode, XEXP (op0, 0),
force_reg (ptr_mode, force_reg (ptr_mode,
...@@ -6784,7 +6778,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6784,7 +6778,7 @@ expand_expr (exp, target, tmode, modifier)
/* Check the access. */ /* Check the access. */
if (cfun != 0 && current_function_check_memory_usage if (cfun != 0 && current_function_check_memory_usage
&& GET_CODE (op0) == MEM) && GET_CODE (op0) == MEM)
{ {
enum memory_use_mode memory_usage; enum memory_use_mode memory_usage;
memory_usage = get_memory_usage_from_modifier (modifier); memory_usage = get_memory_usage_from_modifier (modifier);
...@@ -6803,7 +6797,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6803,7 +6797,7 @@ expand_expr (exp, target, tmode, modifier)
to, Pmode, to, Pmode,
GEN_INT (size / BITS_PER_UNIT), GEN_INT (size / BITS_PER_UNIT),
TYPE_MODE (sizetype), TYPE_MODE (sizetype),
GEN_INT (memory_usage), GEN_INT (memory_usage),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
in_check_memory_usage = 0; in_check_memory_usage = 0;
} }
...@@ -6873,7 +6867,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6873,7 +6867,7 @@ expand_expr (exp, target, tmode, modifier)
GEN_INT ((bitsize + BITS_PER_UNIT - 1) GEN_INT ((bitsize + BITS_PER_UNIT - 1)
/ BITS_PER_UNIT), / BITS_PER_UNIT),
BITS_PER_UNIT); BITS_PER_UNIT);
return target; return target;
} }
...@@ -7017,7 +7011,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7017,7 +7011,7 @@ expand_expr (exp, target, tmode, modifier)
of the set. */ of the set. */
if (GET_CODE (lo_r) == CONST_INT) if (GET_CODE (lo_r) == CONST_INT)
rlow = GEN_INT (INTVAL (lo_r) rlow = GEN_INT (INTVAL (lo_r)
& ~ ((HOST_WIDE_INT) 1 << BITS_PER_UNIT)); & ~((HOST_WIDE_INT) 1 << BITS_PER_UNIT));
else else
rlow = expand_binop (index_mode, and_optab, lo_r, rlow = expand_binop (index_mode, and_optab, lo_r,
GEN_INT (~((HOST_WIDE_INT) 1 << BITS_PER_UNIT)), GEN_INT (~((HOST_WIDE_INT) 1 << BITS_PER_UNIT)),
...@@ -7036,7 +7030,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7036,7 +7030,7 @@ expand_expr (exp, target, tmode, modifier)
setaddr, NULL_RTX, iunsignedp, setaddr, NULL_RTX, iunsignedp,
OPTAB_LIB_WIDEN)); OPTAB_LIB_WIDEN));
/* Extract the bit we want to examine */ /* Extract the bit we want to examine. */
bit = expand_shift (RSHIFT_EXPR, byte_mode, bit = expand_shift (RSHIFT_EXPR, byte_mode,
gen_rtx_MEM (byte_mode, addr), gen_rtx_MEM (byte_mode, addr),
make_tree (TREE_TYPE (index), rem), make_tree (TREE_TYPE (index), rem),
...@@ -7327,7 +7321,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7327,7 +7321,7 @@ expand_expr (exp, target, tmode, modifier)
op0 = eliminate_constant_term (op0, &constant_term); op0 = eliminate_constant_term (op0, &constant_term);
/* CONSTANT_TERM and XEXP (op1, 1) are known to be constant, so /* CONSTANT_TERM and XEXP (op1, 1) are known to be constant, so
their sum should be a constant. Form it into OP1, since the their sum should be a constant. Form it into OP1, since the
result we want will then be OP0 + OP1. */ result we want will then be OP0 + OP1. */
temp = simplify_binary_operation (PLUS, mode, constant_term, temp = simplify_binary_operation (PLUS, mode, constant_term,
...@@ -7612,7 +7606,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7612,7 +7606,7 @@ expand_expr (exp, target, tmode, modifier)
/* At this point, a MEM target is no longer useful; we will get better /* At this point, a MEM target is no longer useful; we will get better
code without it. */ code without it. */
if (GET_CODE (target) == MEM) if (GET_CODE (target) == MEM)
target = gen_reg_rtx (mode); target = gen_reg_rtx (mode);
...@@ -7867,7 +7861,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7867,7 +7861,7 @@ expand_expr (exp, target, tmode, modifier)
/* If we are not to produce a result, we have no target. Otherwise, /* If we are not to produce a result, we have no target. Otherwise,
if a target was specified use it; it will not be used as an if a target was specified use it; it will not be used as an
intermediate target unless it is safe. If no target, use a intermediate target unless it is safe. If no target, use a
temporary. */ temporary. */
if (ignore) if (ignore)
...@@ -7945,7 +7939,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -7945,7 +7939,7 @@ expand_expr (exp, target, tmode, modifier)
TREE_OPERAND (exp, 0) TREE_OPERAND (exp, 0)
= invert_truthvalue (TREE_OPERAND (exp, 0)); = invert_truthvalue (TREE_OPERAND (exp, 0));
} }
do_pending_stack_adjust (); do_pending_stack_adjust ();
NO_DEFER_POP; NO_DEFER_POP;
op0 = gen_label_rtx (); op0 = gen_label_rtx ();
...@@ -8002,7 +7996,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8002,7 +7996,8 @@ expand_expr (exp, target, tmode, modifier)
|| TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR) || TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR)
&& safe_from_p (temp, TREE_OPERAND (exp, 2), 1)) && safe_from_p (temp, TREE_OPERAND (exp, 2), 1))
{ {
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) if (GET_CODE (temp) == REG
&& REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode); temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 1), temp, 0); store_expr (TREE_OPERAND (exp, 1), temp, 0);
jumpif (TREE_OPERAND (exp, 0), op0); jumpif (TREE_OPERAND (exp, 0), op0);
...@@ -8020,7 +8015,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8020,7 +8015,8 @@ expand_expr (exp, target, tmode, modifier)
|| TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR) || TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR)
&& safe_from_p (temp, TREE_OPERAND (exp, 1), 1)) && safe_from_p (temp, TREE_OPERAND (exp, 1), 1))
{ {
if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) if (GET_CODE (temp) == REG
&& REGNO (temp) < FIRST_PSEUDO_REGISTER)
temp = gen_reg_rtx (mode); temp = gen_reg_rtx (mode);
store_expr (TREE_OPERAND (exp, 2), temp, 0); store_expr (TREE_OPERAND (exp, 2), temp, 0);
jumpifnot (TREE_OPERAND (exp, 0), op0); jumpifnot (TREE_OPERAND (exp, 0), op0);
...@@ -8035,11 +8031,11 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8035,11 +8031,11 @@ expand_expr (exp, target, tmode, modifier)
jumpifnot (TREE_OPERAND (exp, 0), op0); jumpifnot (TREE_OPERAND (exp, 0), op0);
start_cleanup_deferral (); start_cleanup_deferral ();
/* One branch of the cond can be void, if it never returns. For /* One branch of the cond can be void, if it never returns. For
example A ? throw : E */ example A ? throw : E */
if (temp != 0 if (temp != 0
&& TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node) && TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node)
store_expr (TREE_OPERAND (exp, 1), temp, 0); store_expr (TREE_OPERAND (exp, 1), temp, 0);
else else
expand_expr (TREE_OPERAND (exp, 1), expand_expr (TREE_OPERAND (exp, 1),
...@@ -8051,7 +8047,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8051,7 +8047,7 @@ expand_expr (exp, target, tmode, modifier)
emit_label (op0); emit_label (op0);
start_cleanup_deferral (); start_cleanup_deferral ();
if (temp != 0 if (temp != 0
&& TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node) && TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node)
store_expr (TREE_OPERAND (exp, 2), temp, 0); store_expr (TREE_OPERAND (exp, 2), temp, 0);
else else
expand_expr (TREE_OPERAND (exp, 2), expand_expr (TREE_OPERAND (exp, 2),
...@@ -8090,7 +8086,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8090,7 +8086,7 @@ expand_expr (exp, target, tmode, modifier)
/* Set this here so that if we get a target that refers to a /* Set this here so that if we get a target that refers to a
register variable that's already been used, put_reg_into_stack register variable that's already been used, put_reg_into_stack
knows that it should fix up those uses. */ knows that it should fix up those uses. */
TREE_USED (slot) = 1; TREE_USED (slot) = 1;
if (target == 0) if (target == 0)
...@@ -8138,12 +8134,12 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8138,12 +8134,12 @@ expand_expr (exp, target, tmode, modifier)
not target that we were passed in, as our target not target that we were passed in, as our target
parameter is only a hint. */ parameter is only a hint. */
if (DECL_RTL (slot) != 0) if (DECL_RTL (slot) != 0)
{ {
target = DECL_RTL (slot); target = DECL_RTL (slot);
/* If we have already expanded the slot, so don't do /* If we have already expanded the slot, so don't do
it again. (mrs) */ it again. (mrs) */
if (TREE_OPERAND (exp, 1) == NULL_TREE) if (TREE_OPERAND (exp, 1) == NULL_TREE)
return target; return target;
} }
else else
{ {
...@@ -8165,7 +8161,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8165,7 +8161,7 @@ expand_expr (exp, target, tmode, modifier)
store_expr (exp1, target, 0); store_expr (exp1, target, 0);
expand_decl_cleanup (NULL_TREE, cleanups); expand_decl_cleanup (NULL_TREE, cleanups);
return target; return target;
} }
...@@ -8338,7 +8334,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8338,7 +8334,7 @@ expand_expr (exp, target, tmode, modifier)
if (GET_CODE (op0) != MEM) if (GET_CODE (op0) != MEM)
abort (); abort ();
if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER) if (modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
{ {
temp = XEXP (op0, 0); temp = XEXP (op0, 0);
...@@ -8413,7 +8409,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8413,7 +8409,7 @@ expand_expr (exp, target, tmode, modifier)
case REALPART_EXPR: case REALPART_EXPR:
op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0); op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0);
return gen_realpart (mode, op0); return gen_realpart (mode, op0);
case IMAGPART_EXPR: case IMAGPART_EXPR:
op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0); op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0);
return gen_imagpart (mode, op0); return gen_imagpart (mode, op0);
...@@ -8423,12 +8419,12 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8423,12 +8419,12 @@ expand_expr (exp, target, tmode, modifier)
enum machine_mode partmode = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp))); enum machine_mode partmode = TYPE_MODE (TREE_TYPE (TREE_TYPE (exp)));
rtx imag_t; rtx imag_t;
rtx insns; rtx insns;
op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0); op0 = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0);
if (! target) if (! target)
target = gen_reg_rtx (mode); target = gen_reg_rtx (mode);
start_sequence (); start_sequence ();
/* Store the realpart and the negated imagpart to target. */ /* Store the realpart and the negated imagpart to target. */
...@@ -8437,14 +8433,14 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8437,14 +8433,14 @@ expand_expr (exp, target, tmode, modifier)
imag_t = gen_imagpart (partmode, target); imag_t = gen_imagpart (partmode, target);
temp = expand_unop (partmode, neg_optab, temp = expand_unop (partmode, neg_optab,
gen_imagpart (partmode, op0), imag_t, 0); gen_imagpart (partmode, op0), imag_t, 0);
if (temp != imag_t) if (temp != imag_t)
emit_move_insn (imag_t, temp); emit_move_insn (imag_t, temp);
insns = get_insns (); insns = get_insns ();
end_sequence (); end_sequence ();
/* Conjugate should appear as a single unit /* Conjugate should appear as a single unit
If TARGET is a CONCAT, we got insns like RD = RS, ID = - IS, If TARGET is a CONCAT, we got insns like RD = RS, ID = - IS,
each with a separate pseudo as destination. each with a separate pseudo as destination.
It's not correct for flow to treat them as a unit. */ It's not correct for flow to treat them as a unit. */
...@@ -8499,12 +8495,13 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8499,12 +8495,13 @@ expand_expr (exp, target, tmode, modifier)
return op0; return op0;
} }
case GOTO_SUBROUTINE_EXPR: case GOTO_SUBROUTINE_EXPR:
{ {
rtx subr = (rtx) TREE_OPERAND (exp, 0); rtx subr = (rtx) TREE_OPERAND (exp, 0);
rtx return_link = *(rtx *) &TREE_OPERAND (exp, 1); rtx return_link = *(rtx *) &TREE_OPERAND (exp, 1);
rtx return_address = gen_label_rtx (); rtx return_address = gen_label_rtx ();
emit_move_insn (return_link, gen_rtx_LABEL_REF (Pmode, return_address)); emit_move_insn (return_link,
gen_rtx_LABEL_REF (Pmode, return_address));
emit_jump (subr); emit_jump (subr);
emit_label (return_address); emit_label (return_address);
return const0_rtx; return const0_rtx;
...@@ -8613,7 +8610,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8613,7 +8610,7 @@ expand_expr_unaligned (exp, palign)
that was declared const. */ that was declared const. */
if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) if (TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array)
&& 0 > compare_tree_int (index, && 0 > compare_tree_int (index,
list_length (CONSTRUCTOR_ELTS list_length (CONSTRUCTOR_ELTS
(TREE_OPERAND (exp, 0))))) (TREE_OPERAND (exp, 0)))))
{ {
...@@ -8627,7 +8624,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8627,7 +8624,7 @@ expand_expr_unaligned (exp, palign)
if (elem) if (elem)
return expand_expr_unaligned (fold (TREE_VALUE (elem)), palign); return expand_expr_unaligned (fold (TREE_VALUE (elem)), palign);
} }
else if (optimize >= 1 else if (optimize >= 1
&& TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array)
&& TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array)
...@@ -8653,8 +8650,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8653,8 +8650,7 @@ expand_expr_unaligned (exp, palign)
} }
} }
} }
/* Fall through. */
/* ... fall through ... */
case COMPONENT_REF: case COMPONENT_REF:
case BIT_FIELD_REF: case BIT_FIELD_REF:
...@@ -8753,7 +8749,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8753,7 +8749,7 @@ expand_expr_unaligned (exp, palign)
/* Check the access. */ /* Check the access. */
if (current_function_check_memory_usage && GET_CODE (op0) == MEM) if (current_function_check_memory_usage && GET_CODE (op0) == MEM)
{ {
rtx to; rtx to;
int size; int size;
...@@ -8766,7 +8762,7 @@ expand_expr_unaligned (exp, palign) ...@@ -8766,7 +8762,7 @@ expand_expr_unaligned (exp, palign)
emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3,
to, ptr_mode, GEN_INT (size / BITS_PER_UNIT), to, ptr_mode, GEN_INT (size / BITS_PER_UNIT),
TYPE_MODE (sizetype), TYPE_MODE (sizetype),
GEN_INT (MEMORY_USE_RO), GEN_INT (MEMORY_USE_RO),
TYPE_MODE (integer_type_node)); TYPE_MODE (integer_type_node));
in_check_memory_usage = 0; in_check_memory_usage = 0;
} }
...@@ -8820,7 +8816,6 @@ expand_expr_unaligned (exp, palign) ...@@ -8820,7 +8816,6 @@ expand_expr_unaligned (exp, palign)
- bitsize), - bitsize),
op0, 1); op0, 1);
emit_move_insn (new, op0); emit_move_insn (new, op0);
op0 = copy_rtx (new); op0 = copy_rtx (new);
PUT_MODE (op0, BLKmode); PUT_MODE (op0, BLKmode);
...@@ -8829,8 +8824,8 @@ expand_expr_unaligned (exp, palign) ...@@ -8829,8 +8824,8 @@ expand_expr_unaligned (exp, palign)
else else
/* Get a reference to just this component. */ /* Get a reference to just this component. */
op0 = change_address (op0, mode1, op0 = change_address (op0, mode1,
plus_constant (XEXP (op0, 0), plus_constant (XEXP (op0, 0),
(bitpos / BITS_PER_UNIT))); (bitpos / BITS_PER_UNIT)));
MEM_ALIAS_SET (op0) = get_alias_set (exp); MEM_ALIAS_SET (op0) = get_alias_set (exp);
...@@ -8986,7 +8981,7 @@ expand_increment (exp, post, ignore) ...@@ -8986,7 +8981,7 @@ expand_increment (exp, post, ignore)
if (this_optab == sub_optab if (this_optab == sub_optab
&& GET_CODE (op1) == CONST_INT) && GET_CODE (op1) == CONST_INT)
{ {
op1 = GEN_INT (- INTVAL (op1)); op1 = GEN_INT (-INTVAL (op1));
this_optab = add_optab; this_optab = add_optab;
} }
...@@ -9094,7 +9089,7 @@ expand_increment (exp, post, ignore) ...@@ -9094,7 +9089,7 @@ expand_increment (exp, post, ignore)
/* Increment however we can. */ /* Increment however we can. */
op1 = expand_binop (mode, this_optab, value, op1, op1 = expand_binop (mode, this_optab, value, op1,
current_function_check_memory_usage ? NULL_RTX : op0, current_function_check_memory_usage ? NULL_RTX : op0,
TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN); TREE_UNSIGNED (TREE_TYPE (exp)), OPTAB_LIB_WIDEN);
/* Make sure the value is stored into OP0. */ /* Make sure the value is stored into OP0. */
if (op1 != op0) if (op1 != op0)
...@@ -9163,7 +9158,7 @@ preexpand_calls (exp) ...@@ -9163,7 +9158,7 @@ preexpand_calls (exp)
case SAVE_EXPR: case SAVE_EXPR:
if (SAVE_EXPR_RTL (exp) != 0) if (SAVE_EXPR_RTL (exp) != 0)
return; return;
default: default:
break; break;
} }
...@@ -9602,7 +9597,7 @@ do_jump (exp, if_false_label, if_true_label) ...@@ -9602,7 +9597,7 @@ do_jump (exp, if_false_label, if_true_label)
cmp = UNORDERED, rcmp = ORDERED; cmp = UNORDERED, rcmp = ORDERED;
else else
cmp = ORDERED, rcmp = UNORDERED; cmp = ORDERED, rcmp = UNORDERED;
mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))); mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
do_rev = 0; do_rev = 0;
if (! can_compare_p (cmp, mode, ccp_jump) if (! can_compare_p (cmp, mode, ccp_jump)
...@@ -9655,7 +9650,7 @@ do_jump (exp, if_false_label, if_true_label) ...@@ -9655,7 +9650,7 @@ do_jump (exp, if_false_label, if_true_label)
tree op1 = save_expr (TREE_OPERAND (exp, 1)); tree op1 = save_expr (TREE_OPERAND (exp, 1));
tree cmp0, cmp1; tree cmp0, cmp1;
/* If the target doesn't support combined unordered /* If the target doesn't support combined unordered
compares, decompose into UNORDERED + comparison. */ compares, decompose into UNORDERED + comparison. */
cmp0 = fold (build (UNORDERED_EXPR, TREE_TYPE (exp), op0, op1)); cmp0 = fold (build (UNORDERED_EXPR, TREE_TYPE (exp), op0, op1));
cmp1 = fold (build (tcode2, TREE_TYPE (exp), op0, op1)); cmp1 = fold (build (tcode2, TREE_TYPE (exp), op0, op1));
...@@ -9934,7 +9929,7 @@ compare_from_rtx (op0, op1, code, unsignedp, mode, size, align) ...@@ -9934,7 +9929,7 @@ compare_from_rtx (op0, op1, code, unsignedp, mode, size, align)
unsignedp = 1; unsignedp = 1;
} }
#endif #endif
emit_cmp_insn (op0, op1, code, size, mode, unsignedp, align); emit_cmp_insn (op0, op1, code, size, mode, unsignedp, align);
return gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx); return gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx);
...@@ -10350,7 +10345,7 @@ do_store_flag (exp, target, mode, only_cheap) ...@@ -10350,7 +10345,7 @@ do_store_flag (exp, target, mode, only_cheap)
else else
return 0; return 0;
} }
preexpand_calls (exp); preexpand_calls (exp);
if (! get_subtarget (target) if (! get_subtarget (target)
|| GET_MODE (subtarget) != operand_mode || GET_MODE (subtarget) != operand_mode
...@@ -10479,4 +10474,4 @@ do_tablejump (index, mode, range, table_label, default_label) ...@@ -10479,4 +10474,4 @@ do_tablejump (index, mode, range, table_label, default_label)
emit_barrier (); emit_barrier ();
} }
#endif /* HAVE_tablejump */ #endif /* HAVE_tablejump */
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