diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2013-01-24 14:03:40 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2013-01-24 14:03:40 +0100 |
commit | 593c0dddb7f21185d46b6a01ebc0c4c86248c738 (patch) | |
tree | 3047102f078fa2aca11807b0296f305953b13f80 | |
parent | 91f4a9e332b143dcdcb670ce8fa7cd83304787d5 (diff) | |
download | gcc-593c0dddb7f21185d46b6a01ebc0c4c86248c738.zip gcc-593c0dddb7f21185d46b6a01ebc0c4c86248c738.tar.gz gcc-593c0dddb7f21185d46b6a01ebc0c4c86248c738.tar.bz2 |
constraints.md (Yf): New constraint.
* config/i386/constraints.md (Yf): New constraint.
* config/i386/i386.md (*movdf_internal_rex64): Use Yf*f instead
of f constraint to conditionaly disable x87 register preferences.
(*movdf_internal): Ditto.
(*movsf_internal): Ditto.
testsuite/ChangeLog:
* gcc.target/i386/movsd.c: New test.
From-SVN: r195423
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config/i386/constraints.md | 5 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/movsd.c | 15 |
5 files changed, 41 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eedd4d6..6bacddc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-01-24 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/constraints.md (Yf): New constraint. + * config/i386/i386.md (*movdf_internal_rex64): Use Yf*f instead + of f constraint to conditionaly disable x87 register preferences. + (*movdf_internal): Ditto. + (*movsf_internal): Ditto. + 2013-01-24 Steven Bosscher <steven@gcc.gnu.org> PR inline-asm/55934 @@ -8,11 +16,6 @@ selected from constraints on asms is valid for the operand mode. (curr_insn_transform): Remove incorrect comment. -2013-01-23 Uros Bizjak <ubizjak@gmail.com> - - * config/i386/i386.md (*movdf_internal_rex64): Disparage alternatives - involving stack registers slightly. - 2013-01-23 David Edelsohn <dje.gcc@gmail.com> * config/rs6000/rs6000.c (rs6000_delegitimize_address): Check that diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md index c6e21f7..d567fd7 100644 --- a/gcc/config/i386/constraints.md +++ b/gcc/config/i386/constraints.md @@ -93,6 +93,7 @@ ;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled ;; d Integer register when integer DFmode moves are enabled ;; x Integer register when integer XFmode moves are enabled +;; f x87 register when 80387 floating point arithmetic is enabled (define_register_constraint "Yz" "TARGET_SSE ? SSE_FIRST_REG : NO_REGS" "First SSE register (@code{%xmm0}).") @@ -124,6 +125,10 @@ "optimize_function_for_speed_p (cfun) ? GENERAL_REGS : NO_REGS" "@internal Any integer register when integer XFmode moves are enabled.") +(define_register_constraint "Yf" + "(ix86_fpmath & FPMATH_387) ? FLOAT_REGS : NO_REGS" + "@internal Any x87 register when 80387 FP arithmetic is enabled.") + (define_constraint "z" "@internal Constant call address operand." (match_operand 0 "constant_call_address_operand")) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f08229c..f09f769 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -2934,9 +2934,9 @@ (define_insn "*movdf_internal_rex64" [(set (match_operand:DF 0 "nonimmediate_operand" - "=?f,?m,?f,?r,?m,?r,x,x,x,m,Yi,r ") + "=Yf*f,m ,Yf*f,?r ,?m,?r,x,x,x,m,Yi,r ") (match_operand:DF 1 "general_operand" - "fm ,f ,G ,rm,r ,F ,C,x,m,x,r ,Yi"))] + "Yf*fm,Yf*f,G ,rmC,rC,F ,C,x,m,x,r ,Yi"))] "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1])) && (!can_create_pseudo_p () || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) @@ -3074,9 +3074,9 @@ ;; Possible store forwarding (partial memory) stall in alternative 4. (define_insn "*movdf_internal" [(set (match_operand:DF 0 "nonimmediate_operand" - "=f,m,f,?Yd*r ,!o ,x,x,x,m,*x,*x,*x,m") + "=Yf*f,m ,Yf*f,?Yd*r ,!o ,x,x,x,m,*x,*x,*x,m") (match_operand:DF 1 "general_operand" - "fm,f,G,Yd*roF,FYd*r,C,x,m,x,C ,*x,m ,*x"))] + "Yf*fm,Yf*f,G ,Yd*roF,Yd*rF,C,x,m,x,C ,*x,m ,*x"))] "!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1])) && (!can_create_pseudo_p () || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) @@ -3213,9 +3213,9 @@ (define_insn "*movsf_internal" [(set (match_operand:SF 0 "nonimmediate_operand" - "=f,m,f,?r ,?m,x,x,x,m,!*y,!m,!*y,?Yi,?r,!*Ym,!r") + "=Yf*f,m ,Yf*f,?r ,?m,x,x,x,m,!*y,!m,!*y,?Yi,?r,!*Ym,!r") (match_operand:SF 1 "general_operand" - "fm,f,G,rmF,Fr,C,x,m,x,m ,*y,*y ,r ,Yi,r ,*Ym"))] + "Yf*fm,Yf*f,G ,rmF,rF,C,x,m,x,m ,*y,*y ,r ,Yi,r ,*Ym"))] "!(MEM_P (operands[0]) && MEM_P (operands[1])) && (!can_create_pseudo_p () || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9dda502..a2d07ae 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-01-24 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/movsd.c: New test. + 2013-01-24 Steven Bosscher <steven@gcc.gnu.org> PR inline-asm/55934 @@ -8,9 +12,10 @@ PR fortran/56081 * gfortran.dg/select_8.f90: New. -2013-01-23 David Holsgrove <david.holsgrove@xilinx.com> +2013-01-23 David Holsgrove <david.holsgrove@xilinx.com> - * gcc.target/microblaze/microblaze.exp: Remove target_config_cflags check + * gcc.target/microblaze/microblaze.exp: Remove + target_config_cflags check. 2013-01-23 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/testsuite/gcc.target/i386/movsd.c b/gcc/testsuite/gcc.target/i386/movsd.c new file mode 100644 index 0000000..32a19e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/movsd.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse2 -mfpmath=sse" } */ + +volatile double y; + +void +test () +{ + int z; + + for (z = 0; z < 1000; z++) + y = 1.23; +} + +/* { dg-final { scan-assembler-not "(fld|fst)" } } */ |