summaryrefslogtreecommitdiff
path: root/gcc/reg-stack.c
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-25 09:17:57 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-25 09:17:57 +0000
commitfafa4a365aed93818c7bdfa5d37b076f4dea172a (patch)
tree13d6aedbbab4e67a27ac966d32bd18545d7bc2f3 /gcc/reg-stack.c
parenta2776c9e7c1ff5fc01a6a47b68e169db18cafd11 (diff)
downloadgcc-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.c7
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;