From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out-so.shaw.ca (smtp-out-so.shaw.ca [64.59.136.137]) by sourceware.org (Postfix) with ESMTPS id 6405B395A824 for ; Tue, 10 Mar 2020 20:35:43 +0000 (GMT) Received: from [192.168.1.114] ([24.64.172.44]) by shaw.ca with ESMTP id BlbKjw4kQRnrKBlbLjr0Ui; Tue, 10 Mar 2020 14:35:43 -0600 X-Authority-Analysis: v=2.3 cv=L7FjvNb8 c=1 sm=1 tr=0 a=kiZT5GMN3KAWqtYcXc+/4Q==:117 a=kiZT5GMN3KAWqtYcXc+/4Q==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=IkcTkHD0fZMA:10 a=VwLinOA_F0WsYRr5JSwA:9 a=7Zwj6sZBwVKJAoWSPKxL6X1jA+E=:19 a=QEXdDO2ut3YA:10 From: Brian Inglis Subject: Re: gcc and 128-bit compare/exchange Reply-To: cygwin@cygwin.com To: cygwin@cygwin.com References: Autocrypt: addr=Brian.Inglis@SystematicSw.ab.ca; prefer-encrypt=mutual; keydata= mQENBFg15Q0BCADc1LTYJN/oVKOJoXpIo+5yy+sBv535qYNRh5CFqp3pPZwIy6oILNKprWph 8J+sXMqYd5H0G1jMDlXendiQbn9SiORuqI7xkV8vzguoFEMhNTxnO1pOQjqRnEnG/W7/5Yy+ DkcCv+Y4O3NX3wol8yP+FaEx4EEEifaO5ZhC1U/ilvHvxE0wjNhRG6AqlvqX6J09bxkJC8Xd 00MZWotDHtiq/wnd8YqyDmf0aJceGxSetHnqn/Cs3WiylEEUy2x/FqKbsBxUJHGQeeRTFAW1 ii08djCemxdE+romE/M9J9CVisSZImbXMSilX6Z2Qtz0lYPkY0EqbiKo8o9zlkIPhaqJABEB AAG0REJyaWFuIEluZ2xpcyAoU3lzdGVtYXRpYyBTb2Z0d2FyZSkgPEJyaWFuLkluZ2xpc0BT eXN0ZW1hdGljU1cuYWIuY2E+iQFVBBMBAgA/AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIX gBYhBEy/sJ49FaN/AfIQJjY9ewCxhxqTBQJai9F5BQkNRMzsAAoJEDY9ewCxhxqThnAH/Rau 2+nxwRYdOHDkvMJSyJZUxowkxxzfttQVfxrZIhooF99LGqd3ANltSidybJAbKDLoH+5jRvWF fobzOs93Uw73/52Rurv0nY40mnCAw2vE3JNYgWm8V09Ff4J64ElylrAAU60XoUxMD8Tbflby fVu3LO74pR/hCByNGK019TXJhIPfSU51hXQwLgqAKT4FRGw5gYyqCSS5zoRpa/zNENAPKG/g 5H8ar58eJB9QyJA4iNTLa/3rPF/kO9MqfRLlBLvmyveyYOcGs5wOgjt/RT2eA3Zun18l7EIE 2L2J1tbqLmSpswSW3URnW3KsfgILNC9pAVR00xvO09ulrUXiOX65AQ0EWDXlDQEIAM5GX98w WEzP1jyuWGfNI0s2lUJDTVH1WLpg1N+lQ9sjwCVBeJEdhtZYU7VsgmjPj+H0tkBFYe2olAkk BAmdP7yrqUTK5zw12kf5BJeF94cikGcFRCvdGVk9/uSfy3HZePvr8NV5LPCxLIE6bJCS8L5A CgdNkrD3CLM1zePyiQ0dQ3+6Bjq27b3Y1UauiyKlOquCVkfrDk/y3OfFhbiJX8pwM0mICyls 8p9iM7yg+g1PbdoA99OrFc7JKllHRGDLQ0B/HKAPgNnLCenzDuV/d+N1RDbbpa0c/uvmoptR Aejlq3HszXYQ9wTmu8OwVSITSkzgP1lKzyDPZS9SGvlrQp8AEQEAAYkBPAQYAQIAJgIbDBYh BEy/sJ49FaN/AfIQJjY9ewCxhxqTBQJai9GnBQkNRM0aAAoJEDY9ewCxhxqTuL8H/ivw0VXX lQW4c9O8XsMafDcEyV23MH4fdZACss+ZWluda7xIRo78GCLXxARHwJdOE9Jk9+/fDQOTZd4m KW0trLCfWvJnwNJfOLbqse7eydvgdj2UrTpy4DO/5+mAw/ilgZpEGgwMwyqb/2kFiKK7Q64B NKl8Y2kRXltaiXfqyvG2U/NiE4GOPA3yZgXs4Mzd1pzV/nkEIzGkneaeE5WGEWj/8dCnn6a3 zIuq0L59QInxKsTdt10OQiUoRKl8Nx0vDCOzMy0wlJc349gJbQBCAZcumtBBBqAzCAmJ3J7T 7ew8hznAEmOwr+LkSOdXFzEjdfTaryhN1AsRLYVUNloEWNA= Organization: Systematic Software Message-ID: <66f51c13-4c87-3bd6-3b8e-01901155ef2a@SystematicSw.ab.ca> Date: Tue, 10 Mar 2020 14:35:42 -0600 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-CA Content-Transfer-Encoding: 8bit X-CMAE-Envelope: MS4wfJjdlvH4YcwjD0zWacWVvdSDFOfCpFtUpB1A6uSozejHjVhncqY0RccjMYltE9JWhKL+505UtYFsrWHaerTKogKuyObVyOXZ3FdZaHXESVjngZSitJ32 SznZMcEmyxCb0BJiwcPopK4SzDvrHQddXGYQXgiYOhzrHylQF5/6kfzlJX+0QGyEDy5rS9VGnYToHA== X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Mar 2020 20:35:44 -0000 On 2020-03-08 20:59, Eliot Moss wrote: > On 3/8/2020 10:29 PM, Eliot Moss wrote: >> This is probably to the gcc maintainer ... >> >> I am running on a processor that has compare/exchange 128-bit (cx16 capability), >> and I compiler with -mcx16 and -latomic.  I'm on the latest release cygwin gcc >> (9.2.0-3, I believe) and the corresponding libatomic.  I have a program with >> this in it: >> >> __atomic_compare_exchange((__int128 *)&s1, (__int128 *)&z, (__int128 *)&s2, 0, >> __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); >> >> This compiles to a call (nice if it would inline, but ...) to >> __atomic_compare_exchange_16, which uses mutex's, not the CMPXCHG16B >> instruction I was hoping for.  Note I am doing dynamic linking, >> which on at least one other platform results in dynamic selection >> of a lib_at implementation of the compare/exchange, which does use >> the desired instruction. >> >> Is this a limitation of cygwin gcc, or should I be doing something >> different to achieve the desired effect? >> >> Obviously it would be best not to going an asm inline if I can avoid it, >> but I suppose I can dig into the libatomic source to get the right >> incantation for it if need be ... > > A quick followup: I was able to get __sync_val_compare_and_swap_16 to work > (and its bool form).  That will do for now, though of course it's deprecated. You just needed to go to the next info page: $ info gcc __atomic and use: #include extern bool __atomic_compare_exchange ( TYPE *ptr, TYPE *expected, TYPE *desired, bool weak, int success_memorder, int failure_memorder); or higher level macro: atomic_compare_exchange_strong(PTR, VAL, DES) defined in /lib/gcc/x86_64-pc-cygwin/*/include/stdatomic.h -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised.