Module Name:    src
Committed By:   bouyer
Date:           Sun Jan 12 12:35:44 UTC 2014

Modified Files:
        src/external/gpl3/gcc/dist/gcc/config/sparc [netbsd-6-1]:
            constraints.md predicates.md sync.md

Log Message:
Pull up following revision(s) (requested by martin in ticket #1006):
        external/gpl3/gcc/dist/gcc/config/sparc/constraints.md: revision 1.2
        external/gpl3/gcc/dist/gcc/config/sparc/predicates.md: revision 1.2
        external/gpl3/gcc/dist/gcc/config/sparc/sync.md: revision 1.2
Port from newer gcc:
Add a "mem_noofs_operand" predicate and corresponding "w" constraint.
Use those instead of "memory_reg_operand"/"m" for some atomic instrinsic
patterns: casx (and friends) do not accept an offset from the pointer
register (they are synthetic instructions mapping to e.g. casxa [..]
ASI_P, ... and the opcode space encoding offsets in other instructions
is needed to encode the ASI here).
This fixes the build of gtk+-3.10.6 from pkgsrc on sparc64.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.1.1.1.16.1 \
    src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md \
    src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md \
    src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md
diff -u src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md:1.1.1.1.16.1
--- src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md:1.1.1.1	Tue Jun 21 01:22:24 2011
+++ src/external/gpl3/gcc/dist/gcc/config/sparc/constraints.md	Sun Jan 12 12:35:43 2014
@@ -141,6 +141,10 @@
  "Memory reference for 'e' constraint floating-point register"
  (and (match_code "mem,reg")
       (match_test "memory_ok_for_ldd (op)")))
+  
+(define_memory_constraint "w"
+  "A memory with only a base register"
+  (match_operand 0 "mem_noofs_operand"))
 
 (define_constraint "Y"
  "The vector zero constant"
Index: src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md
diff -u src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md:1.1.1.1.16.1
--- src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md:1.1.1.1	Tue Jun 21 01:22:24 2011
+++ src/external/gpl3/gcc/dist/gcc/config/sparc/predicates.md	Sun Jan 12 12:35:43 2014
@@ -427,6 +427,9 @@
   (and (match_code "mem")
        (match_test "call_address_operand (XEXP (op, 0), mode)")))
 
+(define_predicate "mem_noofs_operand"
+  (and (match_code "mem")
+       (match_code "reg" "0")))
 
 ;; Predicates for operators.
 
Index: src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md
diff -u src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md:1.1.1.1.16.1
--- src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md:1.1.1.1	Tue Jun 21 01:22:25 2011
+++ src/external/gpl3/gcc/dist/gcc/config/sparc/sync.md	Sun Jan 12 12:35:43 2014
@@ -81,7 +81,7 @@
 
 (define_insn "*sync_compare_and_swap<mode>"
   [(set (match_operand:I48MODE 0 "register_operand" "=r")
-	(match_operand:I48MODE 1 "memory_reg_operand" "+m"))
+	(match_operand:I48MODE 1 "mem_noofs_operand" "+w"))
    (set (match_dup 1)
 	(unspec_volatile:I48MODE
 	  [(match_operand:I48MODE 2 "register_operand" "r")
@@ -93,7 +93,7 @@
 
 (define_insn "*sync_compare_and_swapdi_v8plus"
   [(set (match_operand:DI 0 "register_operand" "=h")
-	(match_operand:DI 1 "memory_reg_operand" "+m"))
+	(match_operand:DI 1 "mem_noofs_operand" "+w"))
    (set (match_dup 1)
 	(unspec_volatile:DI
 	  [(match_operand:DI 2 "register_operand" "h")

Reply via email to