diff options
author | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-25 09:17:57 +0000 |
---|---|---|
committer | uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-25 09:17:57 +0000 |
commit | fafa4a365aed93818c7bdfa5d37b076f4dea172a (patch) | |
tree | 13d6aedbbab4e67a27ac966d32bd18545d7bc2f3 /gcc/reg-stack.c | |
parent | a2776c9e7c1ff5fc01a6a47b68e169db18cafd11 (diff) | |
download | gcc-fafa4a365aed93818c7bdfa5d37b076f4dea172a.tar.gz |
config/i386/i386.md (UNSPEC_TRUNC_NOOP): New unspec definition.
(X87MODEF): New mode macro.
(ssemodefsuffix): New mode attribute.
(truncxf<mode>2_i387_noop_unspec): New insn pattern.
(sqrt_extend<mode>xf2_i387): New insn pattern.
(sqrt<mode>2): For non-SSE sqrt, emit sqrt_extend<mode>xf2_i387
insn and truncate result back to original mode using
UNSPEC_TRUNC_NOOP truncation.
(*sqrt<mode>2_sse): Implement using SSEMODEF mode macro and
ssemodefsuffix mode attribute.
(*sqrtsf2_mixed, *sqrtsf2_i387, *sqrtdf2_mixed, *sqrtdf2_i387)
(*sqrtextendsfdf2_i387, *sqrtextendsfxf2_i387)
(*sqrtextenddfxf2_i387): Remove insn patterns.
(fmodsf3, fmoddf3, remaindersf3, remainderdf3): Use noop
truncation patterns.
reg-stack.c (get_true_reg): Handle UNSPEC_TRUNC_NOOP.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119188 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index a96b6ef57fc..aca45fe32c2 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -439,6 +439,13 @@ get_true_reg (rtx *pat) pat = & XEXP (*pat, 0); break; + case UNSPEC: + if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP) + { + pat = & XVECEXP (*pat, 0, 0); + break; + } + case FLOAT_TRUNCATE: if (!flag_unsafe_math_optimizations) return pat; |