On Fri, Nov 25, 2011 at 8:31 PM, Uros Bizjak <ubiz...@gmail.com> wrote:

> However, the patch uncovers certain problems with existing fild/fistpl
> implementation of atomic load/store. It fails in several of thread
> simulation tests, i.e.
>
> FAIL: gcc.dg/simulate-thread/atomic-load-longlong.c  -O0 -g  thread
> simulation test
>
> with:
>
> 1: x/i $pc
>
> => 0x8048582 <simulate_thread_main+61>: fild   -0x8(%ebp)
>
> 0x08048585      104           __atomic_store_n (&result, ret, 
> __ATOMIC_SEQ_CST);
>
> 1: x/i $pc
>
> => 0x8048585 <simulate_thread_main+64>: fistp  0x8049ac0
>
> 0x0804858b      104           __atomic_store_n (&result, ret, 
> __ATOMIC_SEQ_CST);
>
> 1: x/i $pc
>
> => 0x804858b <simulate_thread_main+70>: lock orl $0x0,(%esp)
>
> FAIL: Invalid result returned from fetch

At the end of the day, the problem was trivial, missing %Z suffix for
fild and fistp instructions. Attached patch fixes all sync long long
failures, including thread simulation tests.

2011-11-26  Uros Bizjak  <ubiz...@gmail.com>

        * config/i386/sync.md (movdi_via_fpu): Add %Z insn suffixes.

Tested on x86_64-pc-linux-gnu {,-m32} and committed to mainline SVN.

Uros.
Index: sync.md
===================================================================
--- sync.md     (revision 181736)
+++ sync.md     (working copy)
@@ -123,7 +123,7 @@
   DONE;
 })
 
-;; ??? From volume 3 section 7.1.1 Guaranteed Atomic Operations,
+;; ??? From volume 3 section 8.1.1 Guaranteed Atomic Operations,
 ;; Only beginning at Pentium family processors do we get any guarantee of
 ;; atomicity in aligned 64-bit quantities.  Beginning at P6, we get a
 ;; guarantee for 64-bit accesses that do not cross a cacheline boundary.
@@ -281,7 +281,7 @@
        (unspec:DI [(match_operand:DI 1 "memory_operand" "m")] UNSPEC_MOVA))
    (clobber (match_operand:DF 2 "register_operand" "=f"))]
   "TARGET_80387"
-  "fild\t%1\;fistp\t%0"
+  "fild%Z1\t%1\;fistp%Z0\t%0"
   [(set_attr "type" "multi")
    ;; Worst case based on full sib+offset32 addressing modes
    (set_attr "length" "14")])

Reply via email to