macro LIBTEST_PAL_STORE_CONDITIONAL
Jump to navigation
Jump to search
Source File
└───test_and_benchmark └───libtest └───inc └───libtest libtest_porting_abstraction_layer_compiler.h
Macro
#define LIBTEST_PAL_STORE_CONDITIONAL( destination, source, stored_flag )
Parameters
destination
- A lfds711_pal_uint_t *, which must be the source argument of the previous call to LIBTEST_PAL_LOAD_LINKED.
source
- A lfds711_pal_uint_t, to be written into *destination.
stored_flag
- A lfds711_pal_uint_t, which is set to 0 on success, 1 on failure.
Return Value
No return value.
Example
#define LIBTEST_PAL_STORE_CONDITIONAL( destination, source, stored_flag ) \ { \ __asm__ __volatile__ \ ( \ "strex %[alias_sf], %[alias_src], [%[alias_dst]];" \ : "=m" (*destination), \ [alias_sf] "=&r" (stored_flag) \ : [alias_src] "r" (source), \ [alias_dst] "r" (destination) \ ); \ }
Optionality
This macro is optional. If not provided, it must be absent, rather than defined empty. If this macro and LIBTEST_PAL_LOAD_LINKED are implemented, the function libtest_misc_determine_erg can be used.
Notes
This macro implements the store-conditional half of a load-linked/store-conditional pair. The value pointed to by source is conditionally-stored into desintation.