Commit 593c0ddd by Uros Bizjak

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
parent 91f4a9e3
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> 2013-01-24 Steven Bosscher <steven@gcc.gnu.org>
PR inline-asm/55934 PR inline-asm/55934
...@@ -8,11 +16,6 @@ ...@@ -8,11 +16,6 @@
selected from constraints on asms is valid for the operand mode. selected from constraints on asms is valid for the operand mode.
(curr_insn_transform): Remove incorrect comment. (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> 2013-01-23 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/rs6000.c (rs6000_delegitimize_address): Check that * config/rs6000/rs6000.c (rs6000_delegitimize_address): Check that
......
...@@ -93,6 +93,7 @@ ...@@ -93,6 +93,7 @@
;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled ;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled
;; d Integer register when integer DFmode moves are enabled ;; d Integer register when integer DFmode moves are enabled
;; x Integer register when integer XFmode 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" (define_register_constraint "Yz" "TARGET_SSE ? SSE_FIRST_REG : NO_REGS"
"First SSE register (@code{%xmm0}).") "First SSE register (@code{%xmm0}).")
...@@ -124,6 +125,10 @@ ...@@ -124,6 +125,10 @@
"optimize_function_for_speed_p (cfun) ? GENERAL_REGS : NO_REGS" "optimize_function_for_speed_p (cfun) ? GENERAL_REGS : NO_REGS"
"@internal Any integer register when integer XFmode moves are enabled.") "@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" (define_constraint "z"
"@internal Constant call address operand." "@internal Constant call address operand."
(match_operand 0 "constant_call_address_operand")) (match_operand 0 "constant_call_address_operand"))
......
...@@ -2934,9 +2934,9 @@ ...@@ -2934,9 +2934,9 @@
(define_insn "*movdf_internal_rex64" (define_insn "*movdf_internal_rex64"
[(set (match_operand:DF 0 "nonimmediate_operand" [(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" (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])) "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (!can_create_pseudo_p () && (!can_create_pseudo_p ()
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
...@@ -3074,9 +3074,9 @@ ...@@ -3074,9 +3074,9 @@
;; Possible store forwarding (partial memory) stall in alternative 4. ;; Possible store forwarding (partial memory) stall in alternative 4.
(define_insn "*movdf_internal" (define_insn "*movdf_internal"
[(set (match_operand:DF 0 "nonimmediate_operand" [(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" (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])) "!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (!can_create_pseudo_p () && (!can_create_pseudo_p ()
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
...@@ -3213,9 +3213,9 @@ ...@@ -3213,9 +3213,9 @@
(define_insn "*movsf_internal" (define_insn "*movsf_internal"
[(set (match_operand:SF 0 "nonimmediate_operand" [(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" (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])) "!(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (!can_create_pseudo_p () && (!can_create_pseudo_p ()
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE) || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
......
2013-01-24 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/movsd.c: New test.
2013-01-24 Steven Bosscher <steven@gcc.gnu.org> 2013-01-24 Steven Bosscher <steven@gcc.gnu.org>
PR inline-asm/55934 PR inline-asm/55934
...@@ -8,9 +12,10 @@ ...@@ -8,9 +12,10 @@
PR fortran/56081 PR fortran/56081
* gfortran.dg/select_8.f90: New. * 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> 2013-01-23 Jakub Jelinek <jakub@redhat.com>
......
/* { 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)" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment