aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2015-11-09 01:19:40 -0800
committerRichard Henderson <rth@gcc.gnu.org>2015-11-09 01:19:40 -0800
commitfe5f926316422c9c3bbcec1a412cd5fc14cd47d7 (patch)
tree39eab1c8a01ec718f3736762e6d98e7bfd514dd9 /gcc
parentf736b911e6fb32807028ef1624fd73dfca33d699 (diff)
downloadgcc-fe5f926316422c9c3bbcec1a412cd5fc14cd47d7.zip
gcc-fe5f926316422c9c3bbcec1a412cd5fc14cd47d7.tar.gz
gcc-fe5f926316422c9c3bbcec1a412cd5fc14cd47d7.tar.bz2
i386: Handle address spaces in movabs patterns
* config/i386/i386.md (*movabs<mode>_1): Print the full memory rtx. (*movabs<mode>_2): Likewise. From-SVN: r230001
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/i386/i386.md32
2 files changed, 29 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9a91cf8..15b3159 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2015-11-09 Richard Henderson <rth@redhat.com>
+ * config/i386/i386.md (*movabs<mode>_1): Print the full memory rtx.
+ (*movabs<mode>_2): Likewise.
+
* dwarf2out.c (modified_type_die): Pass the address space number
through TARGET_ADDR_SPACE_DEBUG to produce the dwarf address class.
* target.def (TARGET_ADDR_SPACE_DEBUG): New.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index d0c0d23..ccb672d 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2595,9 +2595,19 @@
[(set (mem:SWI1248x (match_operand:DI 0 "x86_64_movabs_operand" "i,r"))
(match_operand:SWI1248x 1 "nonmemory_operand" "a,r<i>"))]
"TARGET_LP64 && ix86_check_movabs (insn, 0)"
- "@
- movabs{<imodesuffix>}\t{%1, %P0|[%P0], %1}
- mov{<imodesuffix>}\t{%1, %a0|<iptrsize> PTR %a0, %1}"
+{
+ /* Recover the full memory rtx. */
+ operands[0] = SET_DEST (PATTERN (insn));
+ switch (which_alternative)
+ {
+ case 0:
+ return "movabs{<imodesuffix>}\t{%1, %0|%0, %1}";
+ case 1:
+ return "mov{<imodesuffix>}\t{%1, %0|%0, %1}";
+ default:
+ gcc_unreachable ();
+ }
+}
[(set_attr "type" "imov")
(set_attr "modrm" "0,*")
(set_attr "length_address" "8,0")
@@ -2609,9 +2619,19 @@
[(set (match_operand:SWI1248x 0 "register_operand" "=a,r")
(mem:SWI1248x (match_operand:DI 1 "x86_64_movabs_operand" "i,r")))]
"TARGET_LP64 && ix86_check_movabs (insn, 1)"
- "@
- movabs{<imodesuffix>}\t{%P1, %0|%0, [%P1]}
- mov{<imodesuffix>}\t{%a1, %0|%0, <iptrsize> PTR %a1}"
+{
+ /* Recover the full memory rtx. */
+ operands[1] = SET_SRC (PATTERN (insn));
+ switch (which_alternative)
+ {
+ case 0:
+ return "movabs{<imodesuffix>}\t{%1, %0|%0, %1}";
+ case 1:
+ return "mov{<imodesuffix>}\t{%1, %0|%0, %1}";
+ default:
+ gcc_unreachable ();
+ }
+}
[(set_attr "type" "imov")
(set_attr "modrm" "0,*")
(set_attr "length_address" "8,0")