mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 05:10:25 +08:00
re PR target/19336 (HPPA64 does not support TImode)
PR target/19336 * pa.c (pa_scalar_mode_supported_p): New function. (TARGET_SCALAR_MODE_SUPPORTED_P): Define. * pa.h (MIN_UNITS_PER_WORD): Add comment. From-SVN: r93703
This commit is contained in:
parent
2d5ca9a017
commit
83c32f2e48
@ -1,5 +1,10 @@
|
||||
2005-01-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR target/19336
|
||||
* pa.c (pa_scalar_mode_supported_p): New function.
|
||||
(TARGET_SCALAR_MODE_SUPPORTED_P): Define.
|
||||
* pa.h (MIN_UNITS_PER_WORD): Add comment.
|
||||
|
||||
* pa-protos.h (prefetch_operand): Delete.
|
||||
(prefetch_cc_operand, prefetch_nocc_operand): New declations.
|
||||
* pa.c (prefetch_operand): Delete.
|
||||
|
@ -123,6 +123,7 @@ static void pa_asm_out_destructor (rtx, int);
|
||||
static void pa_init_builtins (void);
|
||||
static rtx hppa_builtin_saveregs (void);
|
||||
static tree hppa_gimplify_va_arg_expr (tree, tree, tree *, tree *);
|
||||
static bool pa_scalar_mode_supported_p (enum machine_mode);
|
||||
static void copy_fp_args (rtx) ATTRIBUTE_UNUSED;
|
||||
static int length_fp_args (rtx) ATTRIBUTE_UNUSED;
|
||||
static struct deferred_plabel *get_plabel (const char *)
|
||||
@ -292,6 +293,9 @@ static size_t n_deferred_plabels = 0;
|
||||
#undef TARGET_GIMPLIFY_VA_ARG_EXPR
|
||||
#define TARGET_GIMPLIFY_VA_ARG_EXPR hppa_gimplify_va_arg_expr
|
||||
|
||||
#undef TARGET_SCALAR_MODE_SUPPORTED_P
|
||||
#define TARGET_SCALAR_MODE_SUPPORTED_P pa_scalar_mode_supported_p
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
/* Parse the -mfixed-range= option string. */
|
||||
@ -6219,6 +6223,50 @@ hppa_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
|
||||
}
|
||||
}
|
||||
|
||||
/* True if MODE is valid for the target. By "valid", we mean able to
|
||||
be manipulated in non-trivial ways. In particular, this means all
|
||||
the arithmetic is supported.
|
||||
|
||||
Currently, TImode is not valid as the HP 64-bit runtime documentation
|
||||
doesn't document the alignment and calling conventions for this type.
|
||||
Thus, we return false when PRECISION is 2 * BITS_PER_WORD and
|
||||
2 * BITS_PER_WORD isn't equal LONG_LONG_TYPE_SIZE. */
|
||||
|
||||
static bool
|
||||
pa_scalar_mode_supported_p (enum machine_mode mode)
|
||||
{
|
||||
int precision = GET_MODE_PRECISION (mode);
|
||||
|
||||
switch (GET_MODE_CLASS (mode))
|
||||
{
|
||||
case MODE_PARTIAL_INT:
|
||||
case MODE_INT:
|
||||
if (precision == CHAR_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == SHORT_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == INT_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == LONG_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == LONG_LONG_TYPE_SIZE)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
case MODE_FLOAT:
|
||||
if (precision == FLOAT_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == DOUBLE_TYPE_SIZE)
|
||||
return true;
|
||||
if (precision == LONG_DOUBLE_TYPE_SIZE)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
|
||||
/* This routine handles all the normal conditional branch sequences we
|
||||
might need to generate. It handles compare immediate vs compare
|
||||
register, nullification of delay slots, varying length branches,
|
||||
|
@ -484,6 +484,15 @@ typedef struct machine_function GTY(())
|
||||
|
||||
/* Width of a word, in units (bytes). */
|
||||
#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
|
||||
|
||||
/* Minimum number of units in a word. If this is undefined, the default
|
||||
is UNITS_PER_WORD. Otherwise, it is the constant value that is the
|
||||
smallest value that UNITS_PER_WORD can have at run-time.
|
||||
|
||||
FIXME: This needs to be 4 when TARGET_64BIT is true to suppress the
|
||||
building of various TImode routines in libgcc. The HP runtime
|
||||
specification doesn't provide the alignment requirements and calling
|
||||
conventions for TImode variables. */
|
||||
#define MIN_UNITS_PER_WORD 4
|
||||
|
||||
/* Allocation boundary (in *bits*) for storing arguments in argument list. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user