re PR target/42093 (Compressed switch tables for Thumb2 have signed offsets)
Fix PR target/42093 2009-12-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/42093 * config/arm/arm.h (CASE_VECTOR_PC_RELATIVE): Fix macro usage to TARGET_THUMB1. (CASE_VECTOR_SHORTEN_MODE): Allow signed offsets only for TARGET_THUMB1. 2009-12-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/42093 * gcc.target/arm/pr42093.c: New test. From-SVN: r155428
This commit is contained in:
parent
07422036e3
commit
83c3a2d826
|
@ -1,3 +1,11 @@
|
|||
2009-12-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/42093
|
||||
* config/arm/arm.h (CASE_VECTOR_PC_RELATIVE): Fix macro usage
|
||||
to TARGET_THUMB1.
|
||||
(CASE_VECTOR_SHORTEN_MODE): Allow signed offsets
|
||||
only for TARGET_THUMB1.
|
||||
|
||||
2009-12-23 Ramana Radhakrishnan <ramrad01@arm.com>
|
||||
|
||||
PR target/40670
|
||||
|
|
|
@ -2118,11 +2118,11 @@ typedef struct
|
|||
#define CASE_VECTOR_MODE Pmode
|
||||
|
||||
#define CASE_VECTOR_PC_RELATIVE (TARGET_THUMB2 \
|
||||
|| (TARGET_THUMB \
|
||||
|| (TARGET_THUMB1 \
|
||||
&& (optimize_size || flag_pic)))
|
||||
|
||||
#define CASE_VECTOR_SHORTEN_MODE(min, max, body) \
|
||||
(TARGET_THUMB \
|
||||
(TARGET_THUMB1 \
|
||||
? (min >= 0 && max < 512 \
|
||||
? (ADDR_DIFF_VEC_FLAGS (body).offset_unsigned = 1, QImode) \
|
||||
: min >= -256 && max < 256 \
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-12-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/42093
|
||||
* gcc.target/arm/pr42093.c: New test.
|
||||
|
||||
2009-12-23 Ramana Radhakrishnan <ramrad01@arm.com>
|
||||
|
||||
PR target/40670
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* { dg-options "-mthumb -O2" } */
|
||||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-final { scan-assembler-not "tbb" } } */
|
||||
/* { dg-final { scan-assembler-not "tbh" } } */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
int gbl;
|
||||
int foo (int *buf, int n)
|
||||
{
|
||||
int ctr = 0;
|
||||
int c;
|
||||
while (1)
|
||||
{
|
||||
c = buf[ctr++];
|
||||
switch (c)
|
||||
{
|
||||
case '\n':
|
||||
gbl++;
|
||||
break;
|
||||
|
||||
case ' ': case '\t' : case '\f' : case '\r':
|
||||
break;
|
||||
|
||||
case ';':
|
||||
do
|
||||
c = buf [ctr++];
|
||||
while (c != '\n' && c != -1);
|
||||
gbl++;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
{
|
||||
int prevc;
|
||||
c = buf [ctr++];
|
||||
if (c != '*')
|
||||
abort ();
|
||||
|
||||
prevc = 0;
|
||||
while ((c = buf[ctr++]) && c != -1)
|
||||
{
|
||||
if (c == '\n')
|
||||
gbl++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return c;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue