recog.c (mode_dependent_address_p): Identify pre-increment...
gcc/ * recog.c (mode_dependent_address_p): Identify pre-increment, pre-decrement, post-increment and post-decrement addressing as always being mode-dependent. * config/m32c/m32c.c (m32c_mode_dependent_address): Delete. * config/m32c/m32c.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/m32c/m32c-protos.h (m32c_mode_dependent_address): Delete. * config/m32r/m32r.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC, PRE_INC and POST_INC checks. * config/i386/i386.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/sh/sh.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/pdp11/pdp11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/avr/avr.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/c4x/c4x.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC, PRE_INC, POST_DEC and POST_INC cases. * config/stormy16/stormy16.c (xstormy16_mode_dependent_address_p): Delete POST_INC and PRE_DEC cases. * config/m68hc11/m68hc11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/cris/cris.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/mn10300/mn10300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/ia64/ia64.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/m68k/m68k.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/rs6000/rs6000.c (rs6000_mode_dependent_address): Delete PRE_INC and PRE_DEC cases. * config/arc/arc.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/mcore/mcore.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/arm/arm.h (ARM_GO_IF_MODE_DEPENDENT_ADDRESS): Delete. (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/pa/pa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. * config/vax/vax.c (vax_mode_dependent_address_p): Delete auto-increment cases. * config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete auto-increment cases. * config/bfin/bfin.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op. gcc/testsuite/ * gcc.c-torture/execute/mode-dependent-address.c: New test. From-SVN: r119660
This commit is contained in:
parent
00509c04ee
commit
b9a76028a2
|
@ -1,3 +1,41 @@
|
|||
2006-12-08 Mark Shinwell <shinwell@codesourcery.com>
|
||||
|
||||
* recog.c (mode_dependent_address_p): Identify pre-increment,
|
||||
pre-decrement, post-increment and post-decrement addressing as always
|
||||
being mode-dependent.
|
||||
* config/m32c/m32c.c (m32c_mode_dependent_address): Delete.
|
||||
* config/m32c/m32c.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/m32c/m32c-protos.h (m32c_mode_dependent_address): Delete.
|
||||
* config/m32r/m32r.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC,
|
||||
PRE_INC and POST_INC checks.
|
||||
* config/i386/i386.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/sh/sh.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/pdp11/pdp11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/avr/avr.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/c4x/c4x.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete PRE_DEC,
|
||||
PRE_INC, POST_DEC and POST_INC cases.
|
||||
* config/stormy16/stormy16.c (xstormy16_mode_dependent_address_p):
|
||||
Delete POST_INC and PRE_DEC cases.
|
||||
* config/m68hc11/m68hc11.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to
|
||||
no-op.
|
||||
* config/cris/cris.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/mn10300/mn10300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to
|
||||
no-op.
|
||||
* config/ia64/ia64.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/m68k/m68k.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/rs6000/rs6000.c (rs6000_mode_dependent_address): Delete
|
||||
PRE_INC and PRE_DEC cases.
|
||||
* config/arc/arc.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/mcore/mcore.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/arm/arm.h (ARM_GO_IF_MODE_DEPENDENT_ADDRESS): Delete.
|
||||
(GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/pa/pa.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
* config/vax/vax.c (vax_mode_dependent_address_p): Delete
|
||||
auto-increment cases.
|
||||
* config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Delete
|
||||
auto-increment cases.
|
||||
* config/bfin/bfin.h (GO_IF_MODE_DEPENDENT_ADDRESS): Change to no-op.
|
||||
|
||||
2006-12-08 Andrew MacLeod <amacleod@redhat.com>
|
||||
|
||||
* Makefile.in: Add new file tree-ssa-ter.c.
|
||||
|
|
|
@ -799,12 +799,7 @@ do { \
|
|||
|
||||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
{ if (GET_CODE (ADDR) == PRE_DEC) \
|
||||
goto LABEL; \
|
||||
if (GET_CODE (ADDR) == PRE_INC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
||||
|
||||
/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
|
||||
return the mode to be used for the comparison. */
|
||||
|
|
|
@ -423,9 +423,7 @@ do { \
|
|||
} \
|
||||
} while(0)
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) \
|
||||
goto LABEL
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
#define LEGITIMATE_CONSTANT_P(X) 1
|
||||
|
||||
|
|
|
@ -827,13 +827,7 @@ do { \
|
|||
|
||||
You may assume that ADDR is a valid address for the machine.
|
||||
*/
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
do { \
|
||||
if (GET_CODE (ADDR) == POST_INC \
|
||||
|| GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_DEC) \
|
||||
goto LABEL; \
|
||||
} while (0)
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
#define NOTICE_UPDATE_CC(EXPR, INSN) 0
|
||||
|
||||
|
|
|
@ -1156,13 +1156,8 @@ CUMULATIVE_ARGS;
|
|||
}
|
||||
|
||||
/* No mode-dependent addresses on the C4x are autoincrements. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
if (GET_CODE (ADDR) == PRE_DEC \
|
||||
|| GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC \
|
||||
|| GET_CODE (ADDR) == POST_INC \
|
||||
|| GET_CODE (ADDR) == POST_MODIFY \
|
||||
if (GET_CODE (ADDR) == POST_MODIFY \
|
||||
|| GET_CODE (ADDR) == PRE_MODIFY) \
|
||||
goto LABEL
|
||||
|
||||
|
|
|
@ -1065,14 +1065,9 @@ struct cum_args {int regs;};
|
|||
while (0)
|
||||
|
||||
/* In CRIS, only the postincrement address mode depends thus,
|
||||
since the increment depends on the size of the operand. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
do \
|
||||
{ \
|
||||
if (GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL; \
|
||||
} \
|
||||
while (0)
|
||||
since the increment depends on the size of the operand. This is now
|
||||
treated generically within recog.c. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
||||
|
||||
#define LEGITIMATE_CONSTANT_P(X) 1
|
||||
|
||||
|
|
|
@ -405,11 +405,7 @@ struct cumulative_args
|
|||
}
|
||||
#endif /* REG_OK_STRICT */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
{ \
|
||||
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
||||
|
||||
#define LEGITIMATE_CONSTANT_P(X) 1
|
||||
|
||||
|
|
|
@ -939,11 +939,6 @@ struct cum_arg
|
|||
(the amount of decrement or increment being the length of the operand). */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
if (GET_CODE (ADDR) == POST_INC \
|
||||
|| GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC \
|
||||
|| GET_CODE (ADDR) == PRE_DEC) \
|
||||
goto LABEL; \
|
||||
if (GET_CODE (ADDR) == PLUS \
|
||||
&& h8300_get_index (XEXP (ADDR, 0), VOIDmode, 0) != XEXP (ADDR, 0)) \
|
||||
goto LABEL;
|
||||
|
|
|
@ -1767,13 +1767,9 @@ do { \
|
|||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for.
|
||||
On the 80386, only postdecrement and postincrement address depend thus
|
||||
(the amount of decrement or increment being the length of the operand). */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
do { \
|
||||
if (GET_CODE (ADDR) == POST_INC \
|
||||
|| GET_CODE (ADDR) == POST_DEC) \
|
||||
goto LABEL; \
|
||||
} while (0)
|
||||
(the amount of decrement or increment being the length of the operand).
|
||||
These are now caught in recog.c. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
||||
|
||||
/* Max number of args passed in registers. If this is more than 3, we will
|
||||
have problems with ebx (register #4), since it is a caller save register and
|
||||
|
|
|
@ -1406,9 +1406,7 @@ do { \
|
|||
on the machine mode of the memory reference it is used for or if the address
|
||||
is valid for some modes but not others. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
if (GET_CODE (ADDR) == POST_DEC || GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL;
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL)
|
||||
|
||||
/* A C expression that is nonzero if X is a legitimate constant for an
|
||||
immediate operand on the target machine. */
|
||||
|
|
|
@ -84,7 +84,6 @@ int m32c_legitimize_reload_address (rtx *, MM, int, int, int);
|
|||
rtx m32c_libcall_value (MM);
|
||||
int m32c_limit_reload_class (MM, int);
|
||||
int m32c_memory_move_cost (MM, int, int);
|
||||
int m32c_mode_dependent_address (rtx);
|
||||
int m32c_modes_tieable_p (MM, MM);
|
||||
bool m32c_mov_ok (rtx *, MM);
|
||||
char * m32c_output_compare (rtx, rtx *);
|
||||
|
|
|
@ -2018,15 +2018,6 @@ m32c_legitimize_reload_address (rtx * x,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Used in GO_IF_MODE_DEPENDENT_ADDRESS. */
|
||||
int
|
||||
m32c_mode_dependent_address (rtx addr)
|
||||
{
|
||||
if (GET_CODE (addr) == POST_INC || GET_CODE (addr) == PRE_DEC)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Implements LEGITIMATE_CONSTANT_P. We split large constants anyway,
|
||||
so we can allow anything. */
|
||||
int
|
||||
|
|
|
@ -568,9 +568,7 @@ typedef struct m32c_cumulative_args
|
|||
if (m32c_legitimize_reload_address(&(X),MODE,OPNUM,TYPE,IND_LEVELS)) \
|
||||
goto win;
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
if (m32c_mode_dependent_address (ADDR)) \
|
||||
goto LABEL;
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
#define LEGITIMATE_CONSTANT_P(X) m32c_legitimate_constant_p (X)
|
||||
|
||||
|
|
|
@ -1267,10 +1267,7 @@ L2: .word STATIC
|
|||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
|
||||
do \
|
||||
{ \
|
||||
if ( GET_CODE (ADDR) == PRE_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC \
|
||||
|| GET_CODE (ADDR) == POST_INC \
|
||||
|| GET_CODE (ADDR) == LO_SUM) \
|
||||
if (GET_CODE (ADDR) == LO_SUM) \
|
||||
goto LABEL; \
|
||||
} \
|
||||
while (0)
|
||||
|
|
|
@ -1239,12 +1239,7 @@ extern unsigned char m68hc11_reg_valid_for_index[FIRST_PSEUDO_REGISTER];
|
|||
|
||||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
{ \
|
||||
if (GET_CODE (ADDR) == PRE_DEC || GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC || GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
/* Nonzero if the constant value X is a legitimate general operand.
|
||||
It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
|
||||
|
|
|
@ -845,9 +845,9 @@ __transfer_from_trampoline () \
|
|||
goto WIN; }}}
|
||||
|
||||
/* On the 68000, only predecrement and postincrement address depend thus
|
||||
(the amount of decrement or increment being the length of the operand). */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) goto LABEL
|
||||
(the amount of decrement or increment being the length of the operand).
|
||||
These are now treated generically in recog.c. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
#define CASE_VECTOR_MODE HImode
|
||||
#define CASE_VECTOR_PC_RELATIVE 1
|
||||
|
|
|
@ -786,12 +786,7 @@ extern const enum reg_class reg_class_from_letter[];
|
|||
|
||||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for. */
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
{ \
|
||||
if ( GET_CODE (ADDR) == PRE_DEC || GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC || GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
/* Specify the machine mode that this machine uses
|
||||
for the index in the tablejump instruction. */
|
||||
|
|
|
@ -779,9 +779,7 @@ while (0)
|
|||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
if (GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
/* Nonzero if the constant value X is a legitimate general operand.
|
||||
It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
|
||||
|
|
|
@ -1560,12 +1560,7 @@ do { \
|
|||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
if (GET_CODE (ADDR) == PRE_DEC \
|
||||
|| GET_CODE (ADDR) == POST_DEC \
|
||||
|| GET_CODE (ADDR) == PRE_INC \
|
||||
|| GET_CODE (ADDR) == POST_INC) \
|
||||
goto LABEL
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
#define TARGET_ASM_SELECT_SECTION pa_select_section
|
||||
|
||||
|
|
|
@ -760,12 +760,10 @@ extern int may_call_alloca;
|
|||
|
||||
/* Go to LABEL if ADDR (a legitimate address expression)
|
||||
has an effect that depends on the machine mode it is used for.
|
||||
On the pdp this is for predec/postinc */
|
||||
On the pdp this is for predec/postinc, and this is now treated
|
||||
generically in recog.c. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
{ if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
|
||||
/* Specify the machine mode that this machine uses
|
||||
|
|
|
@ -3766,9 +3766,7 @@ rs6000_mode_dependent_address (rtx addr)
|
|||
case LO_SUM:
|
||||
return true;
|
||||
|
||||
case PRE_INC:
|
||||
case PRE_DEC:
|
||||
return TARGET_UPDATE;
|
||||
/* Auto-increment cases are now treated generically in recog.c. */
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -2802,13 +2802,11 @@ struct sh_args {
|
|||
??? Strictly speaking, we should also include all indexed addressing,
|
||||
because the index scale factor is the length of the operand.
|
||||
However, the impact of GO_IF_MODE_DEPENDENT_ADDRESS would be to
|
||||
high if we did that. So we rely on reload to fix things up. */
|
||||
high if we did that. So we rely on reload to fix things up.
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
|
||||
{ \
|
||||
if (GET_CODE(ADDR) == PRE_DEC || GET_CODE(ADDR) == POST_INC) \
|
||||
goto LABEL; \
|
||||
}
|
||||
Auto-increment addressing is now treated in recog.c. */
|
||||
|
||||
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
|
||||
|
||||
/* Specify the machine mode that this machine uses
|
||||
for the index in the tablejump instruction. */
|
||||
|
|
|
@ -707,9 +707,7 @@ xstormy16_mode_dependent_address_p (rtx x)
|
|||
if (GET_CODE (x) == PLUS)
|
||||
x = XEXP (x, 0);
|
||||
|
||||
if (GET_CODE (x) == POST_INC
|
||||
|| GET_CODE (x) == PRE_DEC)
|
||||
return 1;
|
||||
/* Auto-increment addresses are now treated generically in recog.c. */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1306,8 +1306,8 @@ vax_mode_dependent_address_p (rtx x)
|
|||
{
|
||||
rtx xfoo0, xfoo1;
|
||||
|
||||
if (GET_CODE (x) == POST_INC || GET_CODE (x) == PRE_DEC)
|
||||
return 1;
|
||||
/* Auto-increment cases are now dealt with generically in recog.c. */
|
||||
|
||||
if (GET_CODE (x) != PLUS)
|
||||
return 0;
|
||||
|
||||
|
|
11
gcc/recog.c
11
gcc/recog.c
|
@ -1983,8 +1983,17 @@ offsettable_address_p (int strictp, enum machine_mode mode, rtx y)
|
|||
because the amount of the increment depends on the mode. */
|
||||
|
||||
int
|
||||
mode_dependent_address_p (rtx addr ATTRIBUTE_UNUSED /* Maybe used in GO_IF_MODE_DEPENDENT_ADDRESS. */)
|
||||
mode_dependent_address_p (rtx addr)
|
||||
{
|
||||
/* Auto-increment addressing with anything other than post_modify
|
||||
or pre_modify always introduces a mode dependency. Catch such
|
||||
cases now instead of deferring to the target. */
|
||||
if (GET_CODE (addr) == PRE_INC
|
||||
|| GET_CODE (addr) == POST_INC
|
||||
|| GET_CODE (addr) == PRE_DEC
|
||||
|| GET_CODE (addr) == POST_DEC)
|
||||
return 1;
|
||||
|
||||
GO_IF_MODE_DEPENDENT_ADDRESS (addr, win);
|
||||
return 0;
|
||||
/* Label `win' might (not) be used via GO_IF_MODE_DEPENDENT_ADDRESS. */
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2006-12-08 Mark Shinwell <shinwell@codesourcery.com>
|
||||
|
||||
* gcc.c-torture/execute/mode-dependent-address.c: New test.
|
||||
|
||||
2006-12-08 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/27546
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void f883b (int8_t * result,
|
||||
int16_t * __restrict arg1,
|
||||
uint32_t * __restrict arg2,
|
||||
uint64_t * __restrict arg3,
|
||||
uint8_t * __restrict arg4)
|
||||
{
|
||||
int idx;
|
||||
for (idx=0;idx<96;idx += 1) {
|
||||
result[idx] = (((((((((((-27 + 2+1)>>1) || arg4[idx]) < arg1[idx])
|
||||
? (((-27 + 2+1)>>1) || arg4[idx])
|
||||
: arg1[idx])
|
||||
>> (arg2[idx] & 31)) ^ 1) - -32)>>7) | -5) & arg3[idx]);
|
||||
}
|
||||
}
|
||||
|
||||
int8_t result[96];
|
||||
int16_t arg1[96];
|
||||
uint32_t arg2[96];
|
||||
uint64_t arg3[96];
|
||||
uint8_t arg4[96];
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int i;
|
||||
int correct[] = {0x0,0x1,0x2,0x3,0x0,0x1,0x2,0x3,0x8,0x9,0xa,0xb,0x8,0x9,
|
||||
0xa,0xb,0x10,0x11,0x12,0x13,0x10,0x11,0x12,0x13,
|
||||
0x18,0x19,0x1a,0x1b,0x18,0x19,0x1a,0x1b,0x20,0x21,0x22,
|
||||
0x23,0x20,0x21,0x22,0x23,0x28,0x29,0x2a,
|
||||
0x2b,0x28,0x29,0x2a,0x2b,0x30,0x31,0x32,0x33,
|
||||
0x30,0x31,0x32,0x33,0x38,0x39,0x3a,0x3b,0x38,0x39,0x3a,
|
||||
0x3b,0x40,0x41,0x42,0x43,0x40,0x41,0x42,0x43,0x48,0x49,
|
||||
0x4a,0x4b,0x48,0x49,0x4a,0x4b,0x50,0x51,
|
||||
0x52,0x53,0x50,0x51,0x52,0x53,0x58,0x59,0x5a,0x5b,
|
||||
0x58,0x59,0x5a,0x5b};
|
||||
|
||||
for (i=0; i < 96; i++)
|
||||
arg3[i] = arg2[i] = arg1[i] = arg4[i] = i;
|
||||
|
||||
f883b(result, arg1, arg2, arg3, arg4);
|
||||
|
||||
for (i=0; i < 96; i++)
|
||||
if (result[i] != correct[i]) abort();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue