md.texi (Standard Names): Document additional dependency on fix pattern.
2004-02-19 Aldy Hernandez <aldyh@redhat.com> * doc/md.texi (Standard Names): Document additional dependency on fix pattern. * optabs.c (ftruncify): Remove. (expand_fix): Manually inline ftruncify above. (can_fix_p): Add FIXME note. From-SVN: r78116
This commit is contained in:
parent
c6e9f0ebd9
commit
0e1d7f3250
@ -1,3 +1,12 @@
|
||||
2004-02-19 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* doc/md.texi (Standard Names): Document additional dependency on
|
||||
fix pattern.
|
||||
|
||||
* optabs.c (ftruncify): Remove.
|
||||
(expand_fix): Manually inline ftruncify above.
|
||||
(can_fix_p): Add FIXME note.
|
||||
|
||||
2004-02-19 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/rs6000/spe.md (spe_fixunssfsi2): Rename to
|
||||
|
@ -2865,6 +2865,9 @@ point mode @var{n} as a signed number and store in operand 0 (which
|
||||
has mode @var{n}). This instruction's result is defined only when
|
||||
the value of operand 1 is an integer.
|
||||
|
||||
If the machine description defines this pattern, it also needs to
|
||||
define the @code{ftrunc} pattern.
|
||||
|
||||
@cindex @code{fixuns@var{mn}2} instruction pattern
|
||||
@item @samp{fixuns@var{m}@var{n}2}
|
||||
Convert operand 1 (valid for floating point mode @var{m}) to fixed
|
||||
|
21
gcc/optabs.c
21
gcc/optabs.c
@ -105,7 +105,6 @@ static void prepare_cmp_insn (rtx *, rtx *, enum rtx_code *, rtx,
|
||||
static enum insn_code can_fix_p (enum machine_mode, enum machine_mode, int,
|
||||
int *);
|
||||
static enum insn_code can_float_p (enum machine_mode, enum machine_mode, int);
|
||||
static rtx ftruncify (rtx);
|
||||
static optab new_optab (void);
|
||||
static convert_optab new_convert_optab (void);
|
||||
static inline optab init_optab (enum rtx_code);
|
||||
@ -4434,6 +4433,9 @@ can_fix_p (enum machine_mode fixmode, enum machine_mode fltmode,
|
||||
return icode;
|
||||
}
|
||||
|
||||
/* FIXME: This requires a port to define both FIX and FTRUNC pattern
|
||||
for this to work. We need to rework the fix* and ftrunc* patterns
|
||||
and documentation. */
|
||||
tab = unsignedp ? ufix_optab : sfix_optab;
|
||||
icode = tab->handlers[fixmode][fltmode].insn_code;
|
||||
if (icode != CODE_FOR_nothing
|
||||
@ -4673,15 +4675,8 @@ expand_float (rtx to, rtx from, int unsignedp)
|
||||
}
|
||||
}
|
||||
|
||||
/* expand_fix: generate code to convert FROM to fixed point
|
||||
and store in TO. FROM must be floating point. */
|
||||
|
||||
static rtx
|
||||
ftruncify (rtx x)
|
||||
{
|
||||
rtx temp = gen_reg_rtx (GET_MODE (x));
|
||||
return expand_unop (GET_MODE (x), ftrunc_optab, x, temp, 0);
|
||||
}
|
||||
/* Generate code to convert FROM to fixed point and store in TO. FROM
|
||||
must be floating point. */
|
||||
|
||||
void
|
||||
expand_fix (rtx to, rtx from, int unsignedp)
|
||||
@ -4716,7 +4711,11 @@ expand_fix (rtx to, rtx from, int unsignedp)
|
||||
from = convert_to_mode (fmode, from, 0);
|
||||
|
||||
if (must_trunc)
|
||||
from = ftruncify (from);
|
||||
{
|
||||
rtx temp = gen_reg_rtx (GET_MODE (from));
|
||||
from = expand_unop (GET_MODE (from), ftrunc_optab, from,
|
||||
temp, 0);
|
||||
}
|
||||
|
||||
if (imode != GET_MODE (to))
|
||||
target = gen_reg_rtx (imode);
|
||||
|
Loading…
Reference in New Issue
Block a user