/* Copyright (C) 2021,2022 fef . All rights reserved. */ #pragma once #ifndef _ARCH_ATOM_H_ #error "This file is not meant to be included directly, use " #endif #include #include /* * we use ILP32 on i386, long is the same as int */ #ifndef __ILP32__ #error "__ILP32__ must be defined on i386" #endif static inline void latom_init(latom_t *latom, long val) { latom->_value = val; } static inline long latom_read(const latom_t *latom) { return latom->_value; } static __always_inline long latom_xchg(latom_t *latom, long val) { return atom_xchg((atom_t *)latom, val); } static __always_inline long latom_cmp_xchg(latom_t *latom, long compare, long val) { return atom_cmp_xchg((atom_t *)latom, compare, val); } static __always_inline long latom_add(latom_t *latom, long val) { return atom_add((atom_t *)latom, val); } static __always_inline long latom_sub(latom_t *latom, long val) { return atom_sub((atom_t *)latom, val); } static __always_inline bool latom_inc(latom_t *latom) { return atom_inc((atom_t *)latom); } static __always_inline bool latom_dec(latom_t *latom) { return atom_dec((atom_t *)latom); } static __always_inline long latom_and(latom_t *latom, long val) { return atom_and((atom_t *)latom, val); } static __always_inline long latom_or(latom_t *latom, long val) { return atom_or((atom_t *)latom, val); } static __always_inline long latom_xor(latom_t *latom, long val) { return atom_xor((atom_t *)latom, val); } static __always_inline bool latom_set_bit(latom_t *latom, int pos) { return atom_set_bit((atom_t *)latom, pos); } static __always_inline bool latom_clr_bit(latom_t *latom, int pos) { return atom_clr_bit((atom_t *)latom, pos); } static __always_inline bool latom_flip_bit(latom_t *latom, int pos) { return atom_flip_bit((atom_t *)latom, pos); }