X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Furcu%2Fuatomic%2Fx86.h;h=b5725e0f7fd5a5203b9a2775a99731bcbc097cc2;hb=6b071d73cffc66df0bdb9ee3c062143f06923c78;hp=c02c96d88af8bcf4beaedb36475daacf6a741a46;hpb=713234991cce999c376345400f9367f1e2317076;p=userspace-rcu.git diff --git a/include/urcu/uatomic/x86.h b/include/urcu/uatomic/x86.h index c02c96d..b5725e0 100644 --- a/include/urcu/uatomic/x86.h +++ b/include/urcu/uatomic/x86.h @@ -1,21 +1,14 @@ +// SPDX-FileCopyrightText: 1991-1994 by Xerox Corporation. All rights reserved. +// SPDX-FileCopyrightText: 1996-1999 by Silicon Graphics. All rights reserved. +// SPDX-FileCopyrightText: 1999-2004 Hewlett-Packard Development Company, L.P. +// SPDX-FileCopyrightText: 2009 Mathieu Desnoyers +// +// SPDX-License-Identifier: LicenseRef-Boehm-GC + #ifndef _URCU_ARCH_UATOMIC_X86_H #define _URCU_ARCH_UATOMIC_X86_H /* - * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. - * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. - * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P. - * Copyright (c) 2009 Mathieu Desnoyers - * - * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED - * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. - * - * Permission is hereby granted to use or copy this program - * for any purpose, provided the above notices are retained on all copies. - * Permission to modify the code and to distribute modified code is granted, - * provided the above notices are retained, and a notice that the code was - * modified is included with the above copyright notice. - * * Code inspired from libuatomic_ops-1.2, inherited in part from the * Boehm-Demers-Weiser conservative garbage collector. */ @@ -41,10 +34,16 @@ extern "C" { * containing an array of char of the specified size. This allows passing the * @addr arguments of the following inline functions as "m" and "+m" operands * to the assembly. The @size parameter should be a constant to support - * compilers such as clang which do not support VLA. + * compilers such as clang which do not support VLA. Create typedefs because + * C++ does not allow types be defined in casts. */ -#define __hp(size, x) ((struct { char v[size]; } *)(x)) +typedef struct { char v[1]; } __hp_1; +typedef struct { char v[2]; } __hp_2; +typedef struct { char v[4]; } __hp_4; +typedef struct { char v[8]; } __hp_8; + +#define __hp(size, x) ((__hp_##size *)(x)) #define _uatomic_set(addr, v) ((void) CMM_STORE_SHARED(*(addr), (v))) @@ -523,7 +522,7 @@ void __uatomic_dec(void *addr, int len) #define _uatomic_dec(addr) (__uatomic_dec((addr), sizeof(*(addr)))) -#if ((CAA_BITS_PER_LONG != 64) && defined(URCU_ARCH_I386)) +#ifdef URCU_ARCH_X86_NO_CAS /* For backwards compat */ #define CONFIG_RCU_COMPAT_ARCH 1