macro LIBTEST_PAL_STORE_CONDITIONAL

From liblfds.org
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.

See Also