diff --git a/.github/.cspell/project-dictionary.txt b/.github/.cspell/project-dictionary.txt index 49d6a4ca..c0abe14b 100644 --- a/.github/.cspell/project-dictionary.txt +++ b/.github/.cspell/project-dictionary.txt @@ -59,6 +59,7 @@ devtmpfs dlfcn dlsym ecall +Espressif espup exynos fild @@ -155,6 +156,7 @@ poweroff prctl prefetcher PRIMASK +PSRAM pstq quadword rcpc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d969631..d9aa7db1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1025,7 +1025,7 @@ jobs: # env: # TESTS: 1 # if: matrix.rust == 'stable' - - run: tools/no-std.sh +esp xtensa-esp32s2-none-elf + - run: tools/no-std.sh +esp xtensa-esp32s2-none-elf xtensa-esp32s3-none-elf if: matrix.rust == 'stable' miri: diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ab1e8bb..62de5749 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ Note: In this file, do not use the hard wrap in the middle of a sentence for com ## [Unreleased] +- Xtensa: route atomic operations on ESP32 / ESP32-S3 PSRAM addresses through a critical section. + ## [1.15.0] - 2026-08-09 - Work around [`core::sync::atomic` bug](https://github.com/rust-lang/compiler-builtins/pull/1234) which may cause data races with non-relaxed load/CAS on pre-v6 ARM Linux/Android due to missing memory barrier. ([#112](https://github.com/taiki-e/portable-atomic/pull/112)) diff --git a/build.rs b/build.rs index ab9253eb..e4b7d720 100644 --- a/build.rs +++ b/build.rs @@ -56,13 +56,16 @@ fn main() { // Custom cfgs set by build script. Not public API. // grep -F 'cargo:rustc-cfg=' build.rs | grep -Ev '^ *//' | sed -E 's/^.*cargo:rustc-cfg=//; s/(=\\)?".*$//' | LC_ALL=C sort -u | tr '\n' ',' | sed -E 's/,$/\n/' println!( - "cargo:rustc-check-cfg=cfg(portable_atomic_atomic_intrinsics,portable_atomic_disable_fiq,portable_atomic_force_amo,portable_atomic_ll_sc_rmw,portable_atomic_no_asm,portable_atomic_no_asm_maybe_uninit,portable_atomic_no_asm_syscall,portable_atomic_no_atomic_64,portable_atomic_no_atomic_cas,portable_atomic_no_atomic_load_store,portable_atomic_no_atomic_min_max,portable_atomic_no_cfg_target_has_atomic,portable_atomic_no_cmpxchg16b_intrinsic,portable_atomic_no_cmpxchg16b_target_feature,portable_atomic_no_const_mut_refs,portable_atomic_no_const_raw_ptr_deref,portable_atomic_no_const_transmute,portable_atomic_no_core_unwind_safe,portable_atomic_no_diagnostic_namespace,portable_atomic_no_strict_provenance,portable_atomic_no_strict_provenance_atomic_ptr,portable_atomic_no_stronger_failure_ordering,portable_atomic_no_track_caller,portable_atomic_no_unsafe_op_in_unsafe_fn,portable_atomic_pre_llvm_16,portable_atomic_pre_llvm_18,portable_atomic_pre_llvm_20,portable_atomic_s_mode,portable_atomic_sanitize_thread,portable_atomic_target_feature,portable_atomic_unsafe_assume_privileged,portable_atomic_unsafe_assume_single_core,portable_atomic_unstable_asm,portable_atomic_unstable_asm_experimental_arch,portable_atomic_unstable_cfg_target_has_atomic,portable_atomic_unstable_isa_attribute)" + "cargo:rustc-check-cfg=cfg(portable_atomic_atomic_intrinsics,portable_atomic_disable_fiq,portable_atomic_force_amo,portable_atomic_ll_sc_rmw,portable_atomic_no_asm,portable_atomic_no_asm_maybe_uninit,portable_atomic_no_asm_syscall,portable_atomic_no_atomic_64,portable_atomic_no_atomic_cas,portable_atomic_no_atomic_load_store,portable_atomic_no_atomic_min_max,portable_atomic_no_cfg_target_has_atomic,portable_atomic_no_cmpxchg16b_intrinsic,portable_atomic_no_cmpxchg16b_target_feature,portable_atomic_no_const_mut_refs,portable_atomic_no_const_raw_ptr_deref,portable_atomic_no_const_transmute,portable_atomic_no_core_unwind_safe,portable_atomic_no_diagnostic_namespace,portable_atomic_no_strict_provenance,portable_atomic_no_strict_provenance_atomic_ptr,portable_atomic_no_stronger_failure_ordering,portable_atomic_no_track_caller,portable_atomic_no_unsafe_op_in_unsafe_fn,portable_atomic_pre_llvm_16,portable_atomic_pre_llvm_18,portable_atomic_pre_llvm_20,portable_atomic_s_mode,portable_atomic_sanitize_thread,portable_atomic_target_cpu,portable_atomic_target_feature,portable_atomic_unsafe_assume_privileged,portable_atomic_unsafe_assume_single_core,portable_atomic_unstable_asm,portable_atomic_unstable_asm_experimental_arch,portable_atomic_unstable_cfg_target_has_atomic,portable_atomic_unstable_isa_attribute)" ); // TODO: handle multi-line target_feature_fallback // grep -F 'target_feature_fallback("' build.rs | grep -Ev '^ *//' | sed -E 's/^.*target_feature_fallback\(//; s/",.*$/"/' | LC_ALL=C sort -u | tr '\n' ',' | sed -E 's/,$/\n/' println!( r#"cargo:rustc-check-cfg=cfg(portable_atomic_target_feature,values("cmpxchg16b","distinct-ops","fast-serialization","load-store-on-cond","lse","lse128","lse2","lsfe","mclass","miscellaneous-extensions-3","quadword-atomics","rcpc3","rmw","v6","v7","zaamo","zabha","zacas"))"# ); + println!( + r#"cargo:rustc-check-cfg=cfg(portable_atomic_target_cpu,values("esp32","esp32s3"))"# + ); } // https://github.com/rust-lang/rust/pull/123745 (includes https://github.com/rust-lang/cargo/pull/13560) merged in Rust 1.79 (nightly-2024-04-11). @@ -527,6 +530,33 @@ fn main() { target_feature_fallback("rmw", xmegau); } } + "xtensa" => { + // ESP32 / ESP32-S3 advertise atomic CAS in core atomics, but LLVM's + // atomic instructions do not behave atomically on addresses backed by + // external (PSRAM / data bus) memory. The `src/imp/xtensa.rs` wrapper + // dispatches each operation based on the address at runtime; to + // select it we need to know which of the two affected CPUs we are + // targeting. Infer from `target-cpu`, or from the known Espressif + // target triples when no target-cpu is specified. + // ESP32-S2 has no atomic CAS at all and is handled by the generic + // no-CAS path, so it is intentionally absent here. + if let Some(cpu) = target_cpu() { + if cpu == "esp32" || cpu == "esp32s3" { + target_cpu_fallback(&cpu); + } + } else { + let esp_cpu = match target { + "xtensa-esp32-none-elf" | "xtensa-esp32-espidf" => Some("esp32"), + "xtensa-esp32s3-none-elf" | "xtensa-esp32s3-espidf" => Some("esp32s3"), + // ESP32-S2 does not have atomic CAS, so it is not affected by the issue the same way. + // For other Xtensa CPUs, assume they are not affected. + _ => None, + }; + if let Some(cpu) = esp_cpu { + target_cpu_fallback(cpu); + } + } + } _ => {} } } @@ -585,6 +615,11 @@ fn target_cpu() -> Option { cpu.map(str::to_owned) } +// `target_cpu` is not a valid cfg option. Where there is absolutely no other option, inject a cfg fallback. +fn target_cpu_fallback(cpu: &str) { + println!("cargo:rustc-cfg=portable_atomic_target_cpu=\"{}\"", cpu); +} + fn is_allowed_feature(name: &str) -> bool { // https://github.com/dtolnay/thiserror/pull/248 if env::var_os("RUSTC_STAGE").is_some() { diff --git a/src/imp/mod.rs b/src/imp/mod.rs index 53a05498..ad781f62 100644 --- a/src/imp/mod.rs +++ b/src/imp/mod.rs @@ -4,6 +4,13 @@ // Lock-free implementations cfg_core_atomic!({ + // ESP32 and ESP32-S3 have native atomic CAS on internal memory but not on + // PSRAM. Redirect this module to a wrapper, which exposes the same public API + // and dispatches each operation based on the address at runtime. + #[cfg_attr( + any(portable_atomic_target_cpu = "esp32", portable_atomic_target_cpu = "esp32s3"), + path = "xtensa.rs" + )] mod core_atomic; }); diff --git a/src/imp/xtensa.rs b/src/imp/xtensa.rs new file mode 100644 index 00000000..4fd0675e --- /dev/null +++ b/src/imp/xtensa.rs @@ -0,0 +1,620 @@ +// SPDX-License-Identifier: Apache-2.0 OR MIT + +/* +PSRAM-aware atomics for ESP32 / ESP32-S3. + +These chips advertise native atomic CAS (Xtensa `S32C1I`) which works for +internal SRAM, but the instruction does NOT behave atomically on addresses +backed by the external data bus (PSRAM). Every operation therefore checks +the target address at runtime and dispatches to either +`core::sync::atomic::*` (fast path, when the atomic lives in internal +memory) or a critical section (when it lives in PSRAM). + +Address ranges: +- ESP32: 0x3F80_0000..0x3FC0_0000 +- ESP32-S3: 0x3C00_0000..0x3E00_0000 + +This module is selected in place of `src/imp/core_atomic.rs` by a `#[path]` +attribute in `src/imp/mod.rs`, so it exposes exactly the same public API. +*/ + +use core::{cell::UnsafeCell, marker::PhantomData, sync::atomic::Ordering}; + +// See `src/imp/core_atomic.rs` for why this marker is necessary — it +// prevents the `#[repr(transparent)]` wrapper below from inheriting +// `RefUnwindSafe` via the std atomic auto-impl, so that portable-atomic's +// public types carry `RefUnwindSafe` uniformly on every backend. +struct NotRefUnwindSafe(UnsafeCell<()>); +// SAFETY: marker type; the UnsafeCell value is never accessed. +unsafe impl Sync for NotRefUnwindSafe {} + +// The external (PSRAM / data bus) address ranges that do not support +// atomic RMW instructions on these CPUs. + +// https://documentation.espressif.com/esp32_technical_reference_manual_en.pdf, Table 3.3-4. External Memory Address Mapping +#[cfg(portable_atomic_target_cpu = "esp32")] +const PSRAM: core::ops::Range = 0x3F80_0000..0x3FC0_0000; + +// https://documentation.espressif.com/esp32-s3_technical_reference_manual_en.pdf, Table 4.3-2. External Memory Address Mapping +#[cfg(portable_atomic_target_cpu = "esp32s3")] +const PSRAM: core::ops::Range = 0x3C00_0000..0x3E00_0000; + +#[inline(always)] +fn in_psram(ptr: *const T) -> bool { + let addr = ptr as usize; + addr >= PSRAM.start && addr < PSRAM.end +} + +#[cfg(not(feature = "critical-section"))] +#[cold] +#[inline(never)] +#[track_caller] +fn psram_rmw_without_cs() -> ! { + panic!( + "portable-atomic: atomic read-modify-write on PSRAM requires the \ + `critical-section` feature on ESP32 / ESP32-S3" + ); +} + +// Run an RMW closure either natively (addr in internal memory) or under a +// critical section (addr in PSRAM). When the `critical-section` feature is +// disabled, the PSRAM path panics. +// +// `$ptr` is the backing raw pointer; the CS-path closure is an +// `unsafe` block that uses `read_volatile`/`write_volatile` on it. +macro_rules! rmw { + ($self:ident, $native:expr, |$ptr:ident| $cs:block) => {{ + let $ptr: *mut _ = $self.as_ptr(); + if in_psram($ptr) { + #[cfg(feature = "critical-section")] + { + critical_section::with(|_cs| { + // SAFETY: inside a critical section, we have exclusive + // access to `$ptr` and the pointer is valid because + // we got it from `&self`. The accesses use volatile + // reads/writes and so are not reordered with respect + // to each other or with the CS entry/exit barriers. + unsafe { $cs } + }) + } + #[cfg(not(feature = "critical-section"))] + { + let _ = $ptr; // suppress unused warning for move-only closures + psram_rmw_without_cs() + } + } else { + $native + } + }}; +} + +// PSRAM operations are emulated with non-atomic volatile accesses under a +// critical section, so synchronization lives on the critical section's lock, not +// on the atomic's address. Loads and stores must take the same critical section +// for every ordering: otherwise they race with the emulated write and have no +// release on this address to pair with, and the ordering argument cannot be used +// to opt out because `Relaxed` load + `fence(Acquire)` must work too. +// `src/imp/interrupt` ignores the ordering for the same reason. +// +// Without the `critical-section` feature, PSRAM RMWs panic instead of being +// emulated, so all accesses are native and the native load/store are correct. +macro_rules! load { + ($self:ident, $order:ident) => {{ + #[cfg(feature = "critical-section")] + { + let p: *mut _ = $self.as_ptr(); + if in_psram(p) { + return critical_section::with(|_cs| { + // SAFETY: `p` is valid and aligned (from `&self`), and the + // critical section excludes the RMW and store paths. + unsafe { core::ptr::read_volatile(p) } + }); + } + } + $self.inner.load($order) + }}; +} + +macro_rules! store { + ($self:ident, $val:ident, $order:ident) => {{ + #[cfg(feature = "critical-section")] + { + let p: *mut _ = $self.as_ptr(); + if in_psram(p) { + critical_section::with(|_cs| { + // SAFETY: `p` is valid and aligned (from `&self`), and the + // critical section excludes the RMW and load paths. + unsafe { core::ptr::write_volatile(p, $val) } + }); + return; + } + } + $self.inner.store($val, $order); + }}; +} + +// --------------------------------------------------------------------------- +// AtomicPtr + +#[repr(transparent)] +pub(crate) struct AtomicPtr { + inner: core::sync::atomic::AtomicPtr, + _not_ref_unwind_safe: PhantomData, +} +impl AtomicPtr { + #[inline] + pub(crate) const fn new(v: *mut T) -> Self { + Self { inner: core::sync::atomic::AtomicPtr::new(v), _not_ref_unwind_safe: PhantomData } + } + #[inline] + pub(crate) fn is_lock_free() -> bool { + Self::IS_ALWAYS_LOCK_FREE + } + // Not lock-free: if the atomic happens to live in PSRAM, every access + // takes a critical section. We can only give a conservative compile-time + // answer. + pub(crate) const IS_ALWAYS_LOCK_FREE: bool = false; + + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn load(&self, order: Ordering) -> *mut T { + crate::utils::assert_load_ordering(order); + load!(self, order) + } + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn store(&self, ptr: *mut T, order: Ordering) { + crate::utils::assert_store_ordering(order); + store!(self, ptr, order); + } + + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn swap(&self, ptr: *mut T, order: Ordering) -> *mut T { + rmw!(self, self.inner.swap(ptr, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, ptr); + prev + }) + } + + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn compare_exchange( + &self, + current: *mut T, + new: *mut T, + success: Ordering, + failure: Ordering, + ) -> Result<*mut T, *mut T> { + crate::utils::assert_compare_exchange_ordering(success, failure); + rmw!(self, self.inner.compare_exchange(current, new, success, failure), |p| { + let prev = core::ptr::read_volatile(p); + if prev == current { + core::ptr::write_volatile(p, new); + Ok(prev) + } else { + Err(prev) + } + }) + } + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn compare_exchange_weak( + &self, + current: *mut T, + new: *mut T, + success: Ordering, + failure: Ordering, + ) -> Result<*mut T, *mut T> { + crate::utils::assert_compare_exchange_ordering(success, failure); + rmw!(self, self.inner.compare_exchange_weak(current, new, success, failure), |p| { + let prev = core::ptr::read_volatile(p); + if prev == current { + core::ptr::write_volatile(p, new); + Ok(prev) + } else { + Err(prev) + } + }) + } + + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_byte_add(&self, val: usize, order: Ordering) -> *mut T { + #[cfg(portable_atomic_no_strict_provenance)] + use crate::utils::ptr::PtrExt as _; + rmw!( + self, + { + #[cfg(not(portable_atomic_no_strict_provenance_atomic_ptr))] + { + self.inner.fetch_byte_add(val, order) + } + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + { + crate::utils::ptr::with_exposed_provenance_mut( + self.as_atomic_usize().fetch_add(val, order), + ) + } + }, + |p| { + let prev = core::ptr::read_volatile(p); + let next = prev.with_addr(prev.addr().wrapping_add(val)); + core::ptr::write_volatile(p, next); + prev + } + ) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_byte_sub(&self, val: usize, order: Ordering) -> *mut T { + #[cfg(portable_atomic_no_strict_provenance)] + use crate::utils::ptr::PtrExt as _; + rmw!( + self, + { + #[cfg(not(portable_atomic_no_strict_provenance_atomic_ptr))] + { + self.inner.fetch_byte_sub(val, order) + } + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + { + crate::utils::ptr::with_exposed_provenance_mut( + self.as_atomic_usize().fetch_sub(val, order), + ) + } + }, + |p| { + let prev = core::ptr::read_volatile(p); + let next = prev.with_addr(prev.addr().wrapping_sub(val)); + core::ptr::write_volatile(p, next); + prev + } + ) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_or(&self, val: usize, order: Ordering) -> *mut T { + #[cfg(portable_atomic_no_strict_provenance)] + use crate::utils::ptr::PtrExt as _; + rmw!( + self, + { + #[cfg(not(portable_atomic_no_strict_provenance_atomic_ptr))] + { + self.inner.fetch_or(val, order) + } + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + { + crate::utils::ptr::with_exposed_provenance_mut( + self.as_atomic_usize().fetch_or(val, order), + ) + } + }, + |p| { + let prev = core::ptr::read_volatile(p); + let next = prev.with_addr(prev.addr() | val); + core::ptr::write_volatile(p, next); + prev + } + ) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_and(&self, val: usize, order: Ordering) -> *mut T { + #[cfg(portable_atomic_no_strict_provenance)] + use crate::utils::ptr::PtrExt as _; + rmw!( + self, + { + #[cfg(not(portable_atomic_no_strict_provenance_atomic_ptr))] + { + self.inner.fetch_and(val, order) + } + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + { + crate::utils::ptr::with_exposed_provenance_mut( + self.as_atomic_usize().fetch_and(val, order), + ) + } + }, + |p| { + let prev = core::ptr::read_volatile(p); + let next = prev.with_addr(prev.addr() & val); + core::ptr::write_volatile(p, next); + prev + } + ) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_xor(&self, val: usize, order: Ordering) -> *mut T { + #[cfg(portable_atomic_no_strict_provenance)] + use crate::utils::ptr::PtrExt as _; + rmw!( + self, + { + #[cfg(not(portable_atomic_no_strict_provenance_atomic_ptr))] + { + self.inner.fetch_xor(val, order) + } + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + { + crate::utils::ptr::with_exposed_provenance_mut( + self.as_atomic_usize().fetch_xor(val, order), + ) + } + }, + |p| { + let prev = core::ptr::read_volatile(p); + let next = prev.with_addr(prev.addr() ^ val); + core::ptr::write_volatile(p, next); + prev + } + ) + } + + #[cfg(portable_atomic_no_strict_provenance_atomic_ptr)] + #[inline(always)] + fn as_atomic_usize(&self) -> &AtomicUsize { + static_assert!( + core::mem::size_of::>() == core::mem::size_of::() + ); + static_assert!( + core::mem::align_of::>() == core::mem::align_of::() + ); + // SAFETY: AtomicPtr and AtomicUsize have the same layout, and both + // route through the same PSRAM dispatch above. + unsafe { &*(self as *const Self as *const AtomicUsize) } + } + + #[inline] + pub(crate) const fn as_ptr(&self) -> *mut *mut T { + // SAFETY: Self is #[repr(transparent)] and internally + // UnsafeCell<*mut T>. See also the equivalent trick in + // src/imp/core_atomic.rs. + unsafe { (*(self as *const Self as *const UnsafeCell<*mut T>)).get() } + } +} +impl_default_bit_opts!(AtomicPtr, usize); + +// --------------------------------------------------------------------------- +// AtomicInt + +macro_rules! atomic_int { + ($atomic_type:ident, $int_type:ident) => { + #[repr(transparent)] + pub(crate) struct $atomic_type { + inner: core::sync::atomic::$atomic_type, + _not_ref_unwind_safe: PhantomData, + } + impl $atomic_type { + #[inline] + pub(crate) const fn new(v: $int_type) -> Self { + Self { + inner: core::sync::atomic::$atomic_type::new(v), + _not_ref_unwind_safe: PhantomData, + } + } + #[inline] + pub(crate) fn is_lock_free() -> bool { + Self::IS_ALWAYS_LOCK_FREE + } + // We cannot promise lock-freedom without knowing the address + // at compile time; every access on PSRAM takes a critical section. + pub(crate) const IS_ALWAYS_LOCK_FREE: bool = false; + + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn load(&self, order: Ordering) -> $int_type { + crate::utils::assert_load_ordering(order); + load!(self, order) + } + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn store(&self, val: $int_type, order: Ordering) { + crate::utils::assert_store_ordering(order); + store!(self, val, order); + } + + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn swap(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.swap(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, val); + prev + }) + } + + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn compare_exchange( + &self, + current: $int_type, + new: $int_type, + success: Ordering, + failure: Ordering, + ) -> Result<$int_type, $int_type> { + crate::utils::assert_compare_exchange_ordering(success, failure); + rmw!(self, self.inner.compare_exchange(current, new, success, failure), |p| { + let prev = core::ptr::read_volatile(p); + if prev == current { + core::ptr::write_volatile(p, new); + Ok(prev) + } else { + Err(prev) + } + }) + } + #[inline] + #[cfg_attr(any(debug_assertions, miri), track_caller)] + pub(crate) fn compare_exchange_weak( + &self, + current: $int_type, + new: $int_type, + success: Ordering, + failure: Ordering, + ) -> Result<$int_type, $int_type> { + crate::utils::assert_compare_exchange_ordering(success, failure); + rmw!(self, self.inner.compare_exchange_weak(current, new, success, failure), |p| { + let prev = core::ptr::read_volatile(p); + if prev == current { + core::ptr::write_volatile(p, new); + Ok(prev) + } else { + Err(prev) + } + }) + } + + #[allow(dead_code)] + #[inline] + #[cfg_attr(miri, track_caller)] + fn fetch_update_(&self, order: Ordering, mut f: F) -> $int_type + where + F: FnMut($int_type) -> $int_type, + { + let mut prev = self.load(Ordering::Relaxed); + loop { + let next = f(prev); + match self.compare_exchange_weak(prev, next, order, Ordering::Relaxed) { + Ok(x) => return x, + Err(next_prev) => prev = next_prev, + } + } + } + + // Arithmetic RMWs ------------------------------------------------ + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_add(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_add(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev.wrapping_add(val)); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_sub(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_sub(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev.wrapping_sub(val)); + prev + }) + } + + // Bitwise RMWs --------------------------------------------------- + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_and(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_and(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev & val); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_nand(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_nand(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, !(prev & val)); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_or(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_or(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev | val); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_xor(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_xor(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev ^ val); + prev + }) + } + + // fetch_max / fetch_min ----------------------------------------- + // + // The PSRAM arm performs the whole read-compute-write inside a + // single critical section. std's native min/max atomics are + // always available on xtensa (stabilized in 1.45; xtensa MSRV + // is 1.81+). + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_max(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_max(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, core::cmp::max(prev, val)); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_min(&self, val: $int_type, order: Ordering) -> $int_type { + rmw!(self, self.inner.fetch_min(val, order), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, core::cmp::min(prev, val)); + prev + }) + } + + // Unary RMWs ---------------------------------------------------- + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_not(&self, order: Ordering) -> $int_type { + self.fetch_xor(!0, order) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn fetch_neg(&self, order: Ordering) -> $int_type { + // `core::sync::atomic::*` has no native fetch_neg, so the + // SRAM path is a CAS loop. The PSRAM path does the negate + // inside a single critical section. + rmw!(self, self.fetch_update_(order, $int_type::wrapping_neg), |p| { + let prev = core::ptr::read_volatile(p); + core::ptr::write_volatile(p, prev.wrapping_neg()); + prev + }) + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn not(&self, order: Ordering) { + self.fetch_not(order); + } + #[inline] + #[cfg_attr(miri, track_caller)] + pub(crate) fn neg(&self, order: Ordering) { + self.fetch_neg(order); + } + + #[inline] + pub(crate) const fn as_ptr(&self) -> *mut $int_type { + // SAFETY: Self is #[repr(transparent)] and internally + // UnsafeCell<$int_type>. + unsafe { (*(self as *const Self as *const UnsafeCell<$int_type>)).get() } + } + } + impl_default_no_fetch_ops!($atomic_type, $int_type); + impl_default_bit_opts!($atomic_type, $int_type); + }; +} + +atomic_int!(AtomicIsize, isize); +atomic_int!(AtomicUsize, usize); +atomic_int!(AtomicI8, i8); +atomic_int!(AtomicU8, u8); +atomic_int!(AtomicI16, i16); +atomic_int!(AtomicU16, u16); +atomic_int!(AtomicI32, i32); +atomic_int!(AtomicU32, u32); diff --git a/tests/asm-test/asm/portable-atomic/xtensa_esp32s3.asm b/tests/asm-test/asm/portable-atomic/xtensa_esp32s3.asm index 78812a3e..6da676b7 100644 --- a/tests/asm-test/asm/portable-atomic/xtensa_esp32s3.asm +++ b/tests/asm-test/asm/portable-atomic/xtensa_esp32s3.asm @@ -18,8 +18,20 @@ asm_test::fence::release: memw retw.n +.literal.asm_test::fetch_nand::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill + asm_test::fetch_nand::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -37,11 +49,11 @@ asm_test::fetch_nand::u8::acqrel: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 1f -0: + j 3f +2: mov.n a7, a6 - beqi a5, 1, 2f -1: + beqi a5, 1, 4f +3: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -50,17 +62,34 @@ asm_test::fetch_nand::u8::acqrel: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 0b + beq a6, a7, 2b mov.n a5, a14 - j 0b -2: + j 2b +4: ssr a8 srl a2, a6 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -78,11 +107,11 @@ asm_test::fetch_nand::u8::seqcst: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 1f -0: + j 3f +2: mov.n a7, a6 - beqi a5, 1, 2f -1: + beqi a5, 1, 4f +3: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -91,17 +120,34 @@ asm_test::fetch_nand::u8::seqcst: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 0b + beq a6, a7, 2b mov.n a5, a14 - j 0b -2: + j 2b +4: ssr a8 srl a2, a6 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -118,11 +164,11 @@ asm_test::fetch_nand::u8::acquire: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 1f -0: + j 3f +2: mov.n a7, a6 - beqi a5, 1, 2f -1: + beqi a5, 1, 4f +3: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -131,17 +177,33 @@ asm_test::fetch_nand::u8::acquire: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 0b + beq a6, a7, 2b mov.n a5, a14 - j 0b -2: + j 2b +4: ssr a8 srl a2, a6 memw retw.n +5: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -158,11 +220,11 @@ asm_test::fetch_nand::u8::relaxed: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 1f -0: + j 3f +2: mov.n a7, a6 - beqi a5, 1, 2f -1: + beqi a5, 1, 4f +3: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -171,16 +233,32 @@ asm_test::fetch_nand::u8::relaxed: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 0b + beq a6, a7, 2b mov.n a5, a14 - j 0b -2: + j 2b +4: ssr a8 srl a2, a6 retw.n +5: + l32r a10, fffc0068 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_nand::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -198,11 +276,11 @@ asm_test::fetch_nand::u8::release: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 1f -0: + j 3f +2: mov.n a7, a6 - beqi a5, 1, 2f -1: + beqi a5, 1, 4f +3: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -211,22 +289,35 @@ asm_test::fetch_nand::u8::release: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 0b + beq a6, a7, 2b mov.n a5, a14 - j 0b -2: + j 2b +4: ssr a8 srl a2, a6 retw.n +5: + l32r a10, 68 (a1f01d91 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_nand::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_nand::u16::acqrel: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a15eb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -243,11 +334,11 @@ asm_test::fetch_nand::u16::acqrel: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 2f -1: + j 4f +3: mov.n a7, a6 - beqi a5, 1, 3f -2: + beqi a5, 1, 5f +4: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -256,23 +347,37 @@ asm_test::fetch_nand::u16::acqrel: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 1b + beq a6, a7, 3b mov.n a5, a14 - j 1b -3: + j 3b +5: ssr a8 srl a2, a6 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_nand::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_nand::u16::seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a15eb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -289,11 +394,11 @@ asm_test::fetch_nand::u16::seqcst: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 2f -1: + j 4f +3: mov.n a7, a6 - beqi a5, 1, 3f -2: + beqi a5, 1, 5f +4: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -302,23 +407,37 @@ asm_test::fetch_nand::u16::seqcst: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 1b + beq a6, a7, 3b mov.n a5, a14 - j 1b -3: + j 3b +5: ssr a8 srl a2, a6 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_nand::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_nand::u16::acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a15bb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -334,11 +453,11 @@ asm_test::fetch_nand::u16::acquire: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 2f -1: + j 4f +3: mov.n a7, a6 - beqi a5, 1, 3f -2: + beqi a5, 1, 5f +4: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -347,23 +466,36 @@ asm_test::fetch_nand::u16::acquire: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 1b + beq a6, a7, 3b mov.n a5, a14 - j 1b -3: + j 3b +5: ssr a8 srl a2, a6 memw retw.n +6: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_nand::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_nand::u16::relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a158b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -379,11 +511,11 @@ asm_test::fetch_nand::u16::relaxed: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 2f -1: + j 4f +3: mov.n a7, a6 - beqi a5, 1, 3f -2: + beqi a5, 1, 5f +4: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -392,22 +524,35 @@ asm_test::fetch_nand::u16::relaxed: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 1b + beq a6, a7, 3b mov.n a5, a14 - j 1b -3: + j 3b +5: ssr a8 srl a2, a6 retw.n +6: + l32r a10, fffc0068 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_nand::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_nand::u16::release: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a15bb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -424,11 +569,11 @@ asm_test::fetch_nand::u16::release: l32i.n a7, a13, 0 movi.n a14, 0 movi.n a15, 1 - j 2f -1: + j 4f +3: mov.n a7, a6 - beqi a5, 1, 3f -2: + beqi a5, 1, 5f +4: and a6, a7, a12 and a5, a7, a9 xor a5, a5, a11 @@ -437,509 +582,738 @@ asm_test::fetch_nand::u16::release: wsr.scompare1 a7 s32c1i a6, a13, 0 mov.n a5, a15 - beq a6, a7, 1b + beq a6, a7, 3b mov.n a5, a14 - j 1b -3: + j 3b +5: ssr a8 srl a2, a6 retw.n +6: + l32r a10, 68 (a1f01d91 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: and a8, a12, a3 xor a8, a8, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 3c (a1f01d08 ) + l32r a8, 40 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: and a8, a12, a3 xor a8, a8, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 3c (a1f01d08 ) + l32r a8, 40 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: and a8, a12, a3 xor a8, a8, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, fffc003c + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_nand::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: and a8, a12, a3 xor a8, a8, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::fetch_nand::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_nand::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: and a8, a12, a3 xor a8, a8, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc003c + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_nand::bool::acqrel: + ill + { excw; excw; excw } asm_test::fetch_nand::bool::acqrel: entry a1, 32 + movi.n a9, 0 + movi.n a8, 1 + l32r a11, 4 (b1180c09 ) + mov.n a10, a8 + bltu a2, a11, 0f + mov.n a10, a9 +0: + l32r a11, 10 (ffffb109 ) + bltu a11, a2, 1f + mov.n a8, a9 +1: + and a10, a8, a10 movi a8, 255 - beqz a3, 2f - slli a9, a2, 3 - movi.n a10, 24 - and a9, a9, a10 - movi.n a10, 1 - ssl a9 - sll a11, a10 + movi.n a9, 1 + and a10, a10, a9 + beqz a3, 4f + bnez a10, 11f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 movi.n a12, -4 and a12, a2, a12 memw l32i.n a15, a12, 0 movi.n a13, 0 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 5f -1: + beqi a7, 1, 7f +3: xor a14, a15, a11 wsr.scompare1 a15 s32c1i a14, a12, 0 - mov.n a7, a10 - beq a14, a15, 0b + mov.n a7, a9 + beq a14, a15, 2b mov.n a7, a13 - j 0b -2: - movi.n a9, 1 - movi.n a10, 0 - slli a11, a2, 3 - movi.n a12, 24 - and a11, a11, a12 - ssl a11 - sll a12, a9 - ssl a11 - sll a13, a8 - movi.n a14, -1 - xor a13, a13, a14 - movi.n a14, -4 - and a14, a2, a14 - memw - l32i.n a7, a14, 0 - j 4f -3: - mov.n a7, a15 - beqi a6, 1, 6f + j 2b 4: - and a15, a7, a13 - or a15, a15, a12 + bnez a10, 13f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 + ssl a10 + sll a12, a8 + movi.n a13, -1 + xor a12, a12, a13 + movi.n a13, -4 + and a13, a2, a13 + memw + l32i.n a7, a13, 0 + movi.n a14, 0 + j 6f +5: + mov.n a7, a15 + beqi a6, 1, 8f +6: + and a15, a7, a12 + or a15, a15, a11 wsr.scompare1 a7 - s32c1i a15, a14, 0 + s32c1i a15, a13, 0 mov.n a6, a9 - beq a15, a7, 3b - mov.n a6, a10 - j 3b -5: - ssr a9 + beq a15, a7, 5b + mov.n a6, a14 + j 5b +7: + ssr a10 srl a9, a14 memw and a8, a9, a8 movi.n a2, 0 - bne a8, a2, 7f - j 8f -6: - ssr a11 + bne a8, a2, 9f + j 10f +8: + ssr a10 srl a9, a15 memw and a8, a9, a8 movi.n a2, 0 - beq a8, a2, 8f -7: + beq a8, a2, 10f +9: movi.n a2, 1 -8: - retw.n +10: + retw.n +11: + l32r a10, 10b (ffa1f01d ) + l32r a8, d0 (ffff81ff ) +12: + callx8 a8 +13: + l32r a10, 12b (a10008e0 ) + l32r a8, d8 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::bool::seqcst: + ill + { excw; excw; excw } asm_test::fetch_nand::bool::seqcst: entry a1, 32 + movi.n a9, 0 + movi.n a8, 1 + l32r a11, 4 (b1180c09 ) + mov.n a10, a8 + bltu a2, a11, 0f + mov.n a10, a9 +0: + l32r a11, 10 (ffffb109 ) + bltu a11, a2, 1f + mov.n a8, a9 +1: + and a10, a8, a10 movi a8, 255 - beqz a3, 2f - slli a9, a2, 3 - movi.n a10, 24 - and a9, a9, a10 - movi.n a10, 1 - ssl a9 - sll a11, a10 + movi.n a9, 1 + and a10, a10, a9 + beqz a3, 4f + bnez a10, 11f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 movi.n a12, -4 and a12, a2, a12 memw l32i.n a15, a12, 0 movi.n a13, 0 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 5f -1: + beqi a7, 1, 7f +3: xor a14, a15, a11 wsr.scompare1 a15 s32c1i a14, a12, 0 - mov.n a7, a10 - beq a14, a15, 0b + mov.n a7, a9 + beq a14, a15, 2b mov.n a7, a13 - j 0b -2: - movi.n a9, 1 - movi.n a10, 0 - slli a11, a2, 3 - movi.n a12, 24 - and a11, a11, a12 - ssl a11 - sll a12, a9 - ssl a11 - sll a13, a8 - movi.n a14, -1 - xor a13, a13, a14 - movi.n a14, -4 - and a14, a2, a14 - memw - l32i.n a7, a14, 0 - j 4f -3: - mov.n a7, a15 - beqi a6, 1, 6f + j 2b 4: - and a15, a7, a13 - or a15, a15, a12 - wsr.scompare1 a7 - s32c1i a15, a14, 0 - mov.n a6, a9 - beq a15, a7, 3b - mov.n a6, a10 - j 3b + bnez a10, 13f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 + ssl a10 + sll a12, a8 + movi.n a13, -1 + xor a12, a12, a13 + movi.n a13, -4 + and a13, a2, a13 + memw + l32i.n a7, a13, 0 + movi.n a14, 0 + j 6f 5: - ssr a9 + mov.n a7, a15 + beqi a6, 1, 8f +6: + and a15, a7, a12 + or a15, a15, a11 + wsr.scompare1 a7 + s32c1i a15, a13, 0 + mov.n a6, a9 + beq a15, a7, 5b + mov.n a6, a14 + j 5b +7: + ssr a10 srl a9, a14 memw and a8, a9, a8 movi.n a2, 0 - bne a8, a2, 7f - j 8f -6: - ssr a11 + bne a8, a2, 9f + j 10f +8: + ssr a10 srl a9, a15 memw and a8, a9, a8 movi.n a2, 0 - beq a8, a2, 8f -7: + beq a8, a2, 10f +9: movi.n a2, 1 -8: - retw.n +10: + retw.n +11: + l32r a10, 10b (ffa1f01d ) + l32r a8, d0 (ffff81ff ) +12: + callx8 a8 +13: + l32r a10, 12b (a10008e0 ) + l32r a8, d8 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::bool::acquire: + ill + { excw; excw; excw } asm_test::fetch_nand::bool::acquire: entry a1, 32 + movi.n a9, 0 + movi.n a8, 1 + l32r a11, 4 (b1180c09 ) + mov.n a10, a8 + bltu a2, a11, 0f + mov.n a10, a9 +0: + l32r a11, 10 (ffffb109 ) + bltu a11, a2, 1f + mov.n a8, a9 +1: + and a10, a8, a10 movi a8, 255 - beqz a3, 2f - slli a9, a2, 3 - movi.n a10, 24 - and a9, a9, a10 - movi.n a10, 1 - ssl a9 - sll a11, a10 + movi.n a9, 1 + and a10, a10, a9 + beqz a3, 4f + bnez a10, 11f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 movi.n a12, -4 and a12, a2, a12 l32i.n a15, a12, 0 movi.n a13, 0 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 5f -1: + beqi a7, 1, 7f +3: xor a14, a15, a11 wsr.scompare1 a15 s32c1i a14, a12, 0 - mov.n a7, a10 - beq a14, a15, 0b + mov.n a7, a9 + beq a14, a15, 2b mov.n a7, a13 - j 0b -2: - movi.n a9, 1 - movi.n a10, 0 - slli a11, a2, 3 - movi.n a12, 24 - and a11, a11, a12 - ssl a11 - sll a12, a9 - ssl a11 - sll a13, a8 - movi.n a14, -1 - xor a13, a13, a14 - movi.n a14, -4 - and a14, a2, a14 - l32i.n a7, a14, 0 - j 4f -3: - mov.n a7, a15 - beqi a6, 1, 6f + j 2b 4: - and a15, a7, a13 - or a15, a15, a12 + bnez a10, 12f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 + ssl a10 + sll a12, a8 + movi.n a13, -1 + xor a12, a12, a13 + movi.n a13, -4 + and a13, a2, a13 + l32i.n a7, a13, 0 + movi.n a14, 0 + j 6f +5: + mov.n a7, a15 + beqi a6, 1, 8f +6: + and a15, a7, a12 + or a15, a15, a11 wsr.scompare1 a7 - s32c1i a15, a14, 0 + s32c1i a15, a13, 0 mov.n a6, a9 - beq a15, a7, 3b - mov.n a6, a10 - j 3b -5: - ssr a9 + beq a15, a7, 5b + mov.n a6, a14 + j 5b +7: + ssr a10 srl a9, a14 memw and a8, a9, a8 movi.n a2, 0 - bne a8, a2, 7f - j 8f -6: - ssr a11 + bne a8, a2, 9f + j 10f +8: + ssr a10 srl a9, a15 memw and a8, a9, a8 movi.n a2, 0 - beq a8, a2, 8f -7: + beq a8, a2, 10f +9: movi.n a2, 1 -8: +10: retw.n +11: + l32r a10, fffc00c8 + l32r a8, 11b (810000a1 ) + callx8 a8 +12: + l32r a10, d0 (ffffa100 ) + l32r a8, fffc00d4 + callx8 a8 + +.literal.asm_test::fetch_nand::bool::relaxed: + ill + { excw; excw; excw } asm_test::fetch_nand::bool::relaxed: entry a1, 32 + movi.n a9, 0 + movi.n a8, 1 + l32r a11, 4 (b1180c09 ) + mov.n a10, a8 + bltu a2, a11, 0f + mov.n a10, a9 +0: + l32r a11, 10 (ffffb109 ) + bltu a11, a2, 1f + mov.n a8, a9 +1: + and a10, a8, a10 movi a8, 255 - beqz a3, 2f - slli a9, a2, 3 - movi.n a10, 24 - and a9, a9, a10 - movi.n a10, 1 - ssl a9 - sll a11, a10 + movi.n a9, 1 + and a10, a10, a9 + beqz a3, 4f + bnez a10, 11f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 movi.n a12, -4 and a12, a2, a12 l32i.n a15, a12, 0 movi.n a13, 0 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 5f -1: + beqi a7, 1, 7f +3: xor a14, a15, a11 wsr.scompare1 a15 s32c1i a14, a12, 0 - mov.n a7, a10 - beq a14, a15, 0b + mov.n a7, a9 + beq a14, a15, 2b mov.n a7, a13 - j 0b -2: - movi.n a9, 1 - movi.n a10, 0 - slli a11, a2, 3 - movi.n a12, 24 - and a11, a11, a12 - ssl a11 - sll a12, a9 - ssl a11 - sll a13, a8 - movi.n a14, -1 - xor a13, a13, a14 - movi.n a14, -4 - and a14, a2, a14 - l32i.n a7, a14, 0 - j 4f -3: - mov.n a7, a15 - beqi a6, 1, 6f + j 2b 4: - and a15, a7, a13 - or a15, a15, a12 + bnez a10, 13f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 + ssl a10 + sll a12, a8 + movi.n a13, -1 + xor a12, a12, a13 + movi.n a13, -4 + and a13, a2, a13 + l32i.n a7, a13, 0 + movi.n a14, 0 + j 6f +5: + mov.n a7, a15 + beqi a6, 1, 8f +6: + and a15, a7, a12 + or a15, a15, a11 wsr.scompare1 a7 - s32c1i a15, a14, 0 + s32c1i a15, a13, 0 mov.n a6, a9 - beq a15, a7, 3b - mov.n a6, a10 - j 3b -5: - ssr a9 + beq a15, a7, 5b + mov.n a6, a14 + j 5b +7: + ssr a10 srl a9, a14 and a8, a9, a8 movi.n a2, 0 - bne a8, a2, 7f - j 8f -6: - ssr a11 + bne a8, a2, 9f + j 10f +8: + ssr a10 srl a9, a15 and a8, a9, a8 movi.n a2, 0 - beq a8, a2, 8f -7: + beq a8, a2, 10f +9: movi.n a2, 1 -8: - retw.n +10: + retw.n +11: + l32r a10, 10b (ffa1f01d ) + l32r a8, c4 (ffff81ff ) +12: + callx8 a8 +13: + l32r a10, 12b (a10008e0 ) + l32r a8, cc (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_nand::bool::release: + ill + { excw; excw; excw } asm_test::fetch_nand::bool::release: entry a1, 32 + movi.n a9, 0 + movi.n a8, 1 + l32r a11, 4 (b1180c09 ) + mov.n a10, a8 + bltu a2, a11, 0f + mov.n a10, a9 +0: + l32r a11, 10 (ffffb109 ) + bltu a11, a2, 1f + mov.n a8, a9 +1: + and a10, a8, a10 movi a8, 255 - beqz a3, 2f - slli a9, a2, 3 - movi.n a10, 24 - and a9, a9, a10 - movi.n a10, 1 - ssl a9 - sll a11, a10 + movi.n a9, 1 + and a10, a10, a9 + beqz a3, 4f + bnez a10, 11f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 movi.n a12, -4 and a12, a2, a12 memw l32i.n a15, a12, 0 movi.n a13, 0 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 5f -1: + beqi a7, 1, 7f +3: xor a14, a15, a11 wsr.scompare1 a15 s32c1i a14, a12, 0 - mov.n a7, a10 - beq a14, a15, 0b + mov.n a7, a9 + beq a14, a15, 2b mov.n a7, a13 - j 0b -2: - movi.n a9, 1 - movi.n a10, 0 - slli a11, a2, 3 - movi.n a12, 24 - and a11, a11, a12 - ssl a11 - sll a12, a9 - ssl a11 - sll a13, a8 - movi.n a14, -1 - xor a13, a13, a14 - movi.n a14, -4 - and a14, a2, a14 - memw - l32i.n a7, a14, 0 - j 4f -3: - mov.n a7, a15 - beqi a6, 1, 6f + j 2b 4: - and a15, a7, a13 - or a15, a15, a12 + bnez a10, 12f + slli a10, a2, 3 + movi.n a11, 24 + and a10, a10, a11 + ssl a10 + sll a11, a9 + ssl a10 + sll a12, a8 + movi.n a13, -1 + xor a12, a12, a13 + movi.n a13, -4 + and a13, a2, a13 + memw + l32i.n a7, a13, 0 + movi.n a14, 0 + j 6f +5: + mov.n a7, a15 + beqi a6, 1, 8f +6: + and a15, a7, a12 + or a15, a15, a11 wsr.scompare1 a7 - s32c1i a15, a14, 0 + s32c1i a15, a13, 0 mov.n a6, a9 - beq a15, a7, 3b - mov.n a6, a10 - j 3b -5: - ssr a9 + beq a15, a7, 5b + mov.n a6, a14 + j 5b +7: + ssr a10 srl a9, a14 and a8, a9, a8 movi.n a2, 0 - bne a8, a2, 7f - j 8f -6: - ssr a11 + bne a8, a2, 9f + j 10f +8: + ssr a10 srl a9, a15 and a8, a9, a8 movi.n a2, 0 - beq a8, a2, 8f -7: + beq a8, a2, 10f +9: movi.n a2, 1 -8: - retw.n +10: + retw.n +11: + l32r a10, fffc00c8 + l32r a8, 11b (810000a1 ) + callx8 a8 +12: + l32r a10, d0 (ffffa100 ) + l32r a8, fffc00d4 + callx8 a8 + +.literal.asm_test::fetch_umax::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -955,11 +1329,11 @@ asm_test::fetch_umax::u8::acqrel: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -971,17 +1345,33 @@ asm_test::fetch_umax::u8::acqrel: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umax::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -997,11 +1387,11 @@ asm_test::fetch_umax::u8::seqcst: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1013,17 +1403,33 @@ asm_test::fetch_umax::u8::seqcst: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umax::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1038,11 +1444,11 @@ asm_test::fetch_umax::u8::acquire: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1054,17 +1460,34 @@ asm_test::fetch_umax::u8::acquire: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umax::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1079,11 +1502,11 @@ asm_test::fetch_umax::u8::relaxed: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1095,16 +1518,32 @@ asm_test::fetch_umax::u8::relaxed: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 68 (a1f01d91 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_umax::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1120,11 +1559,11 @@ asm_test::fetch_umax::u8::release: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1136,25 +1575,39 @@ asm_test::fetch_umax::u8::release: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_umax::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umax::u16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1165,13 +1618,13 @@ asm_test::fetch_umax::u16::acqrel: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1184,26 +1637,39 @@ asm_test::fetch_umax::u16::acqrel: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 memw retw.n +7: + l32r a10, fffc0074 + l32r a8, 7b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_umax::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umax::u16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1214,13 +1680,13 @@ asm_test::fetch_umax::u16::seqcst: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1233,26 +1699,39 @@ asm_test::fetch_umax::u16::seqcst: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 memw retw.n +7: + l32r a10, fffc0074 + l32r a8, 7b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_umax::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umax::u16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1262,12 +1741,12 @@ asm_test::fetch_umax::u16::acquire: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a13, a14 - beqi a15, 1, 3f -2: - l32r a14, fffc002c + beqi a15, 1, 5f +4: + l32r a14, fffc0038 and a15, a3, a14 ssr a8 srl a7, a13 @@ -1280,26 +1759,39 @@ asm_test::fetch_umax::u16::acquire: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 memw retw.n +6: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_umax::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umax::u16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1309,12 +1801,12 @@ asm_test::fetch_umax::u16::relaxed: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a13, a14 - beqi a15, 1, 3f -2: - l32r a14, fffc002c + beqi a15, 1, 5f +4: + l32r a14, fffc0038 and a15, a3, a14 ssr a8 srl a7, a13 @@ -1327,25 +1819,39 @@ asm_test::fetch_umax::u16::relaxed: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_umax::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umax::u16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1356,13 +1862,13 @@ asm_test::fetch_umax::u16::release: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1375,127 +1881,225 @@ asm_test::fetch_umax::u16::release: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 retw.n +7: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umax::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: maxu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umax::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: maxu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umax::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: maxu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_umax::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: maxu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_umax::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umax::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: maxu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1511,11 +2115,11 @@ asm_test::fetch_umin::u8::acqrel: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1527,17 +2131,33 @@ asm_test::fetch_umin::u8::acqrel: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umin::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1553,11 +2173,11 @@ asm_test::fetch_umin::u8::seqcst: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1569,17 +2189,33 @@ asm_test::fetch_umin::u8::seqcst: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umin::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1594,11 +2230,11 @@ asm_test::fetch_umin::u8::acquire: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1610,17 +2246,34 @@ asm_test::fetch_umin::u8::acquire: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1635,11 +2288,11 @@ asm_test::fetch_umin::u8::relaxed: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1651,16 +2304,32 @@ asm_test::fetch_umin::u8::relaxed: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 68 (a1f01d91 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -1676,11 +2345,11 @@ asm_test::fetch_umin::u8::release: and a12, a3, a9 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: ssr a8 srl a7, a15 and a7, a7, a9 @@ -1692,25 +2361,39 @@ asm_test::fetch_umin::u8::release: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_umin::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umin::u16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1721,13 +2404,13 @@ asm_test::fetch_umin::u16::acqrel: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1740,26 +2423,39 @@ asm_test::fetch_umin::u16::acqrel: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 memw retw.n +7: + l32r a10, fffc0074 + l32r a8, 7b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_umin::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umin::u16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1770,13 +2466,13 @@ asm_test::fetch_umin::u16::seqcst: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1789,26 +2485,39 @@ asm_test::fetch_umin::u16::seqcst: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 memw retw.n +7: + l32r a10, fffc0074 + l32r a8, 7b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_umin::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umin::u16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1818,12 +2527,12 @@ asm_test::fetch_umin::u16::acquire: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a13, a14 - beqi a15, 1, 3f -2: - l32r a14, fffc002c + beqi a15, 1, 5f +4: + l32r a14, fffc0038 and a15, a3, a14 ssr a8 srl a7, a13 @@ -1836,26 +2545,39 @@ asm_test::fetch_umin::u16::acquire: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 memw retw.n +6: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_umin::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umin::u16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1865,12 +2587,12 @@ asm_test::fetch_umin::u16::relaxed: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a13, a14 - beqi a15, 1, 3f -2: - l32r a14, fffc002c + beqi a15, 1, 5f +4: + l32r a14, fffc0038 and a15, a3, a14 ssr a8 srl a7, a13 @@ -1883,25 +2605,39 @@ asm_test::fetch_umin::u16::relaxed: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_umin::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_umin::u16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -1912,13 +2648,13 @@ asm_test::fetch_umin::u16::release: l32i.n a13, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 3f -1: - mov.n a13, a14 -2: - beqi a15, 1, 4f + j 5f 3: - l32r a14, 2b (e12d1f26 ) + mov.n a13, a14 +4: + beqi a15, 1, 6f +5: + l32r a14, 4b (e12d1f26 ) and a15, a3, a14 ssr a8 srl a7, a13 @@ -1931,127 +2667,225 @@ asm_test::fetch_umin::u16::release: wsr.scompare1 a13 s32c1i a14, a10, 0 mov.n a15, a12 - beq a14, a13, 1b + beq a14, a13, 3b mov.n a15, a11 - j 1b -4: + j 3b +6: ssr a8 srl a2, a14 retw.n +7: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_umin::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: minu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: minu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: minu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_umin::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: minu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_umin::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_umin::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: minu a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2073,29 +2907,46 @@ asm_test::compare_exchange::u8::acqrel_seqcst: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2117,29 +2968,46 @@ asm_test::compare_exchange::u8::seqcst_seqcst: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2161,29 +3029,46 @@ asm_test::compare_exchange::u8::acqrel_acquire: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2205,29 +3090,46 @@ asm_test::compare_exchange::u8::acqrel_relaxed: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2249,29 +3151,46 @@ asm_test::compare_exchange::u8::acquire_seqcst: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2293,29 +3212,46 @@ asm_test::compare_exchange::u8::relaxed_seqcst: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2337,29 +3273,46 @@ asm_test::compare_exchange::u8::release_seqcst: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2381,29 +3334,46 @@ asm_test::compare_exchange::u8::seqcst_acquire: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2425,29 +3395,46 @@ asm_test::compare_exchange::u8::seqcst_relaxed: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2468,29 +3455,45 @@ asm_test::compare_exchange::u8::acquire_acquire: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw retw.n +5: + l32r a10, 70 (a1f01d00 ) + l32r a8, 74 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2511,29 +3514,45 @@ asm_test::compare_exchange::u8::acquire_relaxed: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw retw.n +5: + l32r a10, 70 (a1f01d00 ) + l32r a8, 74 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2554,29 +3573,45 @@ asm_test::compare_exchange::u8::relaxed_acquire: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw retw.n +5: + l32r a10, 70 (a1f01d00 ) + l32r a8, 74 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2597,28 +3632,44 @@ asm_test::compare_exchange::u8::relaxed_relaxed: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2640,29 +3691,46 @@ asm_test::compare_exchange::u8::release_acquire: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u8::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u8::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -2684,34 +3752,47 @@ asm_test::compare_exchange::u8::release_relaxed: and a5, a13, a11 movi.n a13, 0 movi.n a15, 1 -0: +2: mov.n a7, a5 or a14, a7, a10 or a5, a7, a9 wsr.scompare1 a5 s32c1i a14, a12, 0 mov.n a6, a15 - beq a14, a5, 1f + beq a14, a5, 3f mov.n a6, a13 -1: - bnez a6, 2f +3: + bnez a6, 4f and a5, a14, a11 - bne a7, a5, 0b -2: + bne a7, a5, 2b +4: movi.n a9, 1 xor a2, a6, a9 ssr a8 srl a3, a14 retw.n +5: + l32r a10, 70 (a1f01d91 ) + l32r a8, 74 (ff81ffff ) + callx8 a8 .literal.asm_test::compare_exchange::u16::acqrel_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acqrel_seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2732,20 +3813,20 @@ asm_test::compare_exchange::u16::acqrel_seqcst: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -2753,15 +3834,28 @@ asm_test::compare_exchange::u16::acqrel_seqcst: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::seqcst_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::seqcst_seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2782,20 +3876,20 @@ asm_test::compare_exchange::u16::seqcst_seqcst: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -2803,15 +3897,28 @@ asm_test::compare_exchange::u16::seqcst_seqcst: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::acqrel_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acqrel_acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2832,20 +3939,20 @@ asm_test::compare_exchange::u16::acqrel_acquire: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -2853,15 +3960,28 @@ asm_test::compare_exchange::u16::acqrel_acquire: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::acqrel_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acqrel_relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2882,20 +4002,20 @@ asm_test::compare_exchange::u16::acqrel_relaxed: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -2903,15 +4023,28 @@ asm_test::compare_exchange::u16::acqrel_relaxed: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::acquire_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acquire_seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2932,20 +4065,20 @@ asm_test::compare_exchange::u16::acquire_seqcst: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -2953,15 +4086,28 @@ asm_test::compare_exchange::u16::acquire_seqcst: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::relaxed_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::relaxed_seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -2982,20 +4128,20 @@ asm_test::compare_exchange::u16::relaxed_seqcst: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -3003,15 +4149,28 @@ asm_test::compare_exchange::u16::relaxed_seqcst: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::release_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::release_seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3032,20 +4191,20 @@ asm_test::compare_exchange::u16::release_seqcst: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -3053,15 +4212,28 @@ asm_test::compare_exchange::u16::release_seqcst: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::seqcst_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::seqcst_acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3082,20 +4254,20 @@ asm_test::compare_exchange::u16::seqcst_acquire: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -3103,15 +4275,28 @@ asm_test::compare_exchange::u16::seqcst_acquire: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::seqcst_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::seqcst_relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3132,20 +4317,20 @@ asm_test::compare_exchange::u16::seqcst_relaxed: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -3153,15 +4338,28 @@ asm_test::compare_exchange::u16::seqcst_relaxed: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::acquire_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acquire_acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a166b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3181,36 +4379,50 @@ asm_test::compare_exchange::u16::acquire_acquire: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 movi.n a9, 1 and a2, a8, a9 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange::u16::acquire_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::acquire_relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a166b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3230,36 +4442,50 @@ asm_test::compare_exchange::u16::acquire_relaxed: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 movi.n a9, 1 and a2, a8, a9 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange::u16::relaxed_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::relaxed_acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a166b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3279,36 +4505,50 @@ asm_test::compare_exchange::u16::relaxed_acquire: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 movi.n a9, 1 and a2, a8, a9 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange::u16::relaxed_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::relaxed_relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a163b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3328,35 +4568,48 @@ asm_test::compare_exchange::u16::relaxed_relaxed: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 movi.n a9, 1 and a2, a8, a9 retw.n +6: + l32r a10, 70 (a1f01d10 ) + l32r a8, 74 (ff81ffff ) + callx8 a8 .literal.asm_test::compare_exchange::u16::release_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::release_acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a169b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3377,20 +4630,20 @@ asm_test::compare_exchange::u16::release_acquire: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 @@ -3398,15 +4651,28 @@ asm_test::compare_exchange::u16::release_acquire: and a2, a8, a9 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 .literal.asm_test::compare_exchange::u16::release_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange::u16::release_relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a166b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -3427,248 +4693,505 @@ asm_test::compare_exchange::u16::release_relaxed: and a4, a14, a12 movi.n a14, 0 movi.n a15, 1 -1: +3: mov.n a6, a4 or a7, a6, a11 or a4, a6, a9 wsr.scompare1 a4 s32c1i a7, a13, 0 mov.n a5, a15 - beq a7, a4, 2f + beq a7, a4, 4f mov.n a5, a14 -2: - bnez a5, 3f +4: + bnez a5, 5f and a4, a7, a12 - bne a6, a4, 1b -3: + bne a6, a4, 3b +5: ssr a8 srl a3, a7 xor a8, a5, a10 movi.n a9, 1 and a2, a8, a9 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 mov.n a3, a4 retw.n +3: + l32r a10, 24 (ffffa1f0 ) + l32r a8, fffc0028 + callx8 a8 + +.literal.asm_test::compare_exchange::u32::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange::u32::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::u32::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3688,35 +5211,51 @@ asm_test::compare_exchange::bool::acqrel_seqcst: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3736,35 +5275,51 @@ asm_test::compare_exchange::bool::seqcst_seqcst: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3784,35 +5339,51 @@ asm_test::compare_exchange::bool::acqrel_acquire: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3832,35 +5403,51 @@ asm_test::compare_exchange::bool::acqrel_relaxed: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3880,35 +5467,51 @@ asm_test::compare_exchange::bool::acquire_seqcst: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3928,35 +5531,51 @@ asm_test::compare_exchange::bool::relaxed_seqcst: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -3976,35 +5595,51 @@ asm_test::compare_exchange::bool::release_seqcst: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4024,35 +5659,51 @@ asm_test::compare_exchange::bool::seqcst_acquire: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4072,35 +5723,51 @@ asm_test::compare_exchange::bool::seqcst_relaxed: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4119,35 +5786,51 @@ asm_test::compare_exchange::bool::acquire_acquire: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 + +.literal.asm_test::compare_exchange::bool::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4166,35 +5849,51 @@ asm_test::compare_exchange::bool::acquire_relaxed: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 + +.literal.asm_test::compare_exchange::bool::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4213,35 +5912,51 @@ asm_test::compare_exchange::bool::relaxed_acquire: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 + +.literal.asm_test::compare_exchange::bool::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4260,34 +5975,51 @@ asm_test::compare_exchange::bool::relaxed_relaxed: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 78 (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4307,35 +6039,51 @@ asm_test::compare_exchange::bool::release_acquire: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 memw retw.n +6: + l32r a10, fffc007c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange::bool::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange::bool::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -4355,34 +6103,50 @@ asm_test::compare_exchange::bool::release_relaxed: sll a13, a4 movi.n a15, 0 movi.n a7, 1 -0: +2: mov.n a5, a2 or a6, a5, a13 or a4, a5, a12 wsr.scompare1 a4 s32c1i a6, a11, 0 mov.n a14, a7 - beq a6, a4, 1f + beq a6, a4, 3f mov.n a14, a15 -1: - bnez a14, 2f +3: + bnez a14, 4f and a2, a6, a10 - bne a5, a2, 0b -2: + bne a5, a2, 2b +4: ssr a9 srl a9, a6 and a10, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a10, a9, 3f + bne a10, a9, 5f mov.n a3, a9 -3: +5: xor a2, a14, a8 retw.n +6: + l32r a10, 78 (ffffa1f0 ) + l32r a8, fffc007c + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4406,21 +6170,38 @@ asm_test::compare_exchange_weak::u8::acqrel_seqcst: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4444,21 +6225,38 @@ asm_test::compare_exchange_weak::u8::seqcst_seqcst: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4482,21 +6280,38 @@ asm_test::compare_exchange_weak::u8::acqrel_acquire: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4520,21 +6335,38 @@ asm_test::compare_exchange_weak::u8::acqrel_relaxed: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4558,21 +6390,38 @@ asm_test::compare_exchange_weak::u8::acquire_seqcst: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4596,21 +6445,38 @@ asm_test::compare_exchange_weak::u8::relaxed_seqcst: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4634,21 +6500,38 @@ asm_test::compare_exchange_weak::u8::release_seqcst: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4672,21 +6555,38 @@ asm_test::compare_exchange_weak::u8::seqcst_acquire: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4710,21 +6610,38 @@ asm_test::compare_exchange_weak::u8::seqcst_relaxed: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 4f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4747,21 +6664,37 @@ asm_test::compare_exchange_weak::u8::acquire_acquire: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw retw.n +4: + l32r a10, 64 (a1f01d00 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 4f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4784,21 +6717,37 @@ asm_test::compare_exchange_weak::u8::acquire_relaxed: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw retw.n +4: + l32r a10, 64 (a1f01d00 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 4f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4821,21 +6770,37 @@ asm_test::compare_exchange_weak::u8::relaxed_acquire: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw retw.n +4: + l32r a10, 64 (a1f01d00 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 4f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4858,20 +6823,36 @@ asm_test::compare_exchange_weak::u8::relaxed_relaxed: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 retw.n +4: + l32r a10, fffc0064 + l32r a8, 4b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4895,21 +6876,38 @@ asm_test::compare_exchange_weak::u8::release_acquire: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 memw +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u8::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u8::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 4f +1: movi a11, 255 and a9, a3, a11 slli a8, a2, 3 @@ -4933,26 +6931,39 @@ asm_test::compare_exchange_weak::u8::release_relaxed: or a10, a12, a10 wsr.scompare1 a10 s32c1i a9, a11, 0 - beq a9, a10, 0f + beq a9, a10, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: movi.n a11, 1 xor a2, a10, a11 ssr a8 srl a3, a9 retw.n +4: + l32r a10, 64 (a1f01d91 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acqrel_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acqrel_seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -4975,12 +6986,12 @@ asm_test::compare_exchange_weak::u16::acqrel_seqcst: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -4988,15 +6999,28 @@ asm_test::compare_exchange_weak::u16::acqrel_seqcst: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::seqcst_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::seqcst_seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5019,12 +7043,12 @@ asm_test::compare_exchange_weak::u16::seqcst_seqcst: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5032,15 +7056,28 @@ asm_test::compare_exchange_weak::u16::seqcst_seqcst: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acqrel_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acqrel_acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5063,12 +7100,12 @@ asm_test::compare_exchange_weak::u16::acqrel_acquire: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5076,15 +7113,28 @@ asm_test::compare_exchange_weak::u16::acqrel_acquire: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acqrel_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acqrel_relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5107,12 +7157,12 @@ asm_test::compare_exchange_weak::u16::acqrel_relaxed: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5120,15 +7170,28 @@ asm_test::compare_exchange_weak::u16::acqrel_relaxed: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acquire_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acquire_seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5151,12 +7214,12 @@ asm_test::compare_exchange_weak::u16::acquire_seqcst: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5164,15 +7227,28 @@ asm_test::compare_exchange_weak::u16::acquire_seqcst: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::relaxed_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::relaxed_seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5195,12 +7271,12 @@ asm_test::compare_exchange_weak::u16::relaxed_seqcst: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5208,15 +7284,28 @@ asm_test::compare_exchange_weak::u16::relaxed_seqcst: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::release_seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::release_seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5239,12 +7328,12 @@ asm_test::compare_exchange_weak::u16::release_seqcst: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5252,15 +7341,28 @@ asm_test::compare_exchange_weak::u16::release_seqcst: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::seqcst_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::seqcst_acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5283,12 +7385,12 @@ asm_test::compare_exchange_weak::u16::seqcst_acquire: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5296,15 +7398,28 @@ asm_test::compare_exchange_weak::u16::seqcst_acquire: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::seqcst_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::seqcst_relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5327,12 +7442,12 @@ asm_test::compare_exchange_weak::u16::seqcst_relaxed: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5340,15 +7455,28 @@ asm_test::compare_exchange_weak::u16::seqcst_relaxed: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acquire_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acquire_acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (915ab827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5370,28 +7498,42 @@ asm_test::compare_exchange_weak::u16::acquire_acquire: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 movi.n a9, 1 and a2, a8, a9 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::acquire_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::acquire_relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (915ab827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5413,28 +7555,42 @@ asm_test::compare_exchange_weak::u16::acquire_relaxed: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 movi.n a9, 1 and a2, a8, a9 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::relaxed_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::relaxed_acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (915ab827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5456,28 +7612,42 @@ asm_test::compare_exchange_weak::u16::relaxed_acquire: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 movi.n a9, 1 and a2, a8, a9 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::relaxed_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::relaxed_relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (9157b827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5499,27 +7669,40 @@ asm_test::compare_exchange_weak::u16::relaxed_relaxed: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 movi.n a9, 1 and a2, a8, a9 retw.n +5: + l32r a10, 64 (a1f01d10 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::release_acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::release_acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 5f +2: + l32r a9, 1b (915db827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5542,12 +7725,12 @@ asm_test::compare_exchange_weak::u16::release_acquire: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 @@ -5555,15 +7738,28 @@ asm_test::compare_exchange_weak::u16::release_acquire: and a2, a8, a9 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 .literal.asm_test::compare_exchange_weak::u16::release_relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::compare_exchange_weak::u16::release_relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (915ab827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -5586,240 +7782,497 @@ asm_test::compare_exchange_weak::u16::release_relaxed: or a11, a13, a11 wsr.scompare1 a11 s32c1i a10, a12, 0 - beq a10, a11, 1f + beq a10, a11, 3f movi.n a11, 0 - j 2f -1: + j 4f +3: movi.n a11, 1 -2: +4: ssr a8 srl a3, a10 xor a8, a11, a9 movi.n a9, 1 and a2, a8, a9 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 mov.n a3, a4 retw.n +3: + l32r a10, 24 (ffffa1f0 ) + l32r a8, fffc0028 + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 memw mov.n a3, a4 retw.n +3: + l32r a10, 28 (a1f01d04 ) + l32r a8, 2c (ff81ffff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::u32::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::u32::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 3f +1: memw wsr.scompare1 a3 s32c1i a4, a2, 0 movi.n a8, 1 mov.n a9, a8 - beq a4, a3, 0f + beq a4, a3, 2f movi.n a9, 0 -0: +2: xor a2, a9, a8 mov.n a3, a4 retw.n +3: + l32r a10, fffc0028 + l32r a8, 3b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acqrel_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acqrel_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -5841,27 +8294,43 @@ asm_test::compare_exchange_weak::bool::acqrel_seqcst: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::seqcst_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::seqcst_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -5883,27 +8352,43 @@ asm_test::compare_exchange_weak::bool::seqcst_seqcst: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acqrel_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acqrel_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -5925,27 +8410,43 @@ asm_test::compare_exchange_weak::bool::acqrel_acquire: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acqrel_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acqrel_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -5967,27 +8468,43 @@ asm_test::compare_exchange_weak::bool::acqrel_relaxed: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acquire_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acquire_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6009,27 +8526,43 @@ asm_test::compare_exchange_weak::bool::acquire_seqcst: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::relaxed_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::relaxed_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6051,27 +8584,43 @@ asm_test::compare_exchange_weak::bool::relaxed_seqcst: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::release_seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::release_seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6093,27 +8642,43 @@ asm_test::compare_exchange_weak::bool::release_seqcst: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::seqcst_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::seqcst_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6135,27 +8700,43 @@ asm_test::compare_exchange_weak::bool::seqcst_acquire: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::seqcst_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::seqcst_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6177,27 +8758,43 @@ asm_test::compare_exchange_weak::bool::seqcst_relaxed: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acquire_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acquire_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6218,27 +8815,43 @@ asm_test::compare_exchange_weak::bool::acquire_acquire: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::acquire_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::acquire_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6259,27 +8872,43 @@ asm_test::compare_exchange_weak::bool::acquire_relaxed: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::relaxed_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::relaxed_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6300,27 +8929,43 @@ asm_test::compare_exchange_weak::bool::relaxed_acquire: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::relaxed_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::relaxed_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6341,26 +8986,43 @@ asm_test::compare_exchange_weak::bool::relaxed_relaxed: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::release_acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::release_acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6382,27 +9044,43 @@ asm_test::compare_exchange_weak::bool::release_acquire: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 memw retw.n +5: + l32r a10, fffc0070 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::compare_exchange_weak::bool::release_relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::compare_exchange_weak::bool::release_relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a9, a8, a9 @@ -6424,26 +9102,42 @@ asm_test::compare_exchange_weak::bool::release_relaxed: or a12, a12, a13 wsr.scompare1 a12 s32c1i a11, a10, 0 - beq a11, a12, 0f + beq a11, a12, 2f movi.n a10, 0 - j 1f -0: + j 3f +2: movi.n a10, 1 -1: +3: ssr a9 srl a9, a11 and a11, a9, a8 movi.n a8, 1 movi.n a9, 0 mov.n a3, a8 - bne a11, a9, 2f + bne a11, a9, 4f mov.n a3, a9 -2: +4: xor a2, a10, a8 retw.n +5: + l32r a10, 6c (ffffa1f0 ) + l32r a8, fffc0070 + callx8 a8 + +.literal.asm_test::or::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -6457,24 +9151,40 @@ asm_test::or::u8::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::or::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -6488,24 +9198,40 @@ asm_test::or::u8::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::or::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -6518,24 +9244,41 @@ asm_test::or::u8::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::or::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -6548,23 +9291,39 @@ asm_test::or::u8::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 + +.literal.asm_test::or::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -6578,29 +9337,42 @@ asm_test::or::u8::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::or::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::or::u16::acqrel: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -6613,30 +9385,43 @@ asm_test::or::u16::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::or::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::or::u16::seqcst: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -6649,30 +9434,43 @@ asm_test::or::u16::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::or::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::or::u16::acquire: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a8, 1b (813eb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -6684,30 +9482,44 @@ asm_test::or::u16::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::or::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::or::u16::relaxed: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (813bb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -6719,29 +9531,42 @@ asm_test::or::u16::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 .literal.asm_test::or::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::or::u16::release: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (813eb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -6754,129 +9579,225 @@ asm_test::or::u16::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: or a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::or::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::or::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::or::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::or::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 34 (ffff81ff ) + callx8 a8 + +.literal.asm_test::or::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::or::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::add::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -6894,11 +9815,11 @@ asm_test::add::u8::acqrel: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -6906,15 +9827,31 @@ asm_test::add::u8::acqrel: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0064 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::add::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -6932,11 +9869,11 @@ asm_test::add::u8::seqcst: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -6944,15 +9881,31 @@ asm_test::add::u8::seqcst: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0064 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::add::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -6969,11 +9922,11 @@ asm_test::add::u8::acquire: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -6981,15 +9934,31 @@ asm_test::add::u8::acquire: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 60 (ffffa1f0 ) + l32r a8, fffc0064 + callx8 a8 + +.literal.asm_test::add::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -7006,11 +9975,11 @@ asm_test::add::u8::relaxed: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7018,14 +9987,30 @@ asm_test::add::u8::relaxed: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::add::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -7043,11 +10028,11 @@ asm_test::add::u8::release: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7055,20 +10040,33 @@ asm_test::add::u8::release: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 60 (ffffa1f0 ) + l32r a8, fffc0064 + callx8 a8 .literal.asm_test::add::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::add::u16::acqrel: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9154b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -7085,11 +10083,11 @@ asm_test::add::u16::acqrel: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7097,21 +10095,34 @@ asm_test::add::u16::acqrel: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, fffc0064 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::add::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::add::u16::seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9154b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -7128,11 +10139,11 @@ asm_test::add::u16::seqcst: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7140,21 +10151,34 @@ asm_test::add::u16::seqcst: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, fffc0064 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::add::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::add::u16::acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9151b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -7170,11 +10194,11 @@ asm_test::add::u16::acquire: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7182,21 +10206,34 @@ asm_test::add::u16::acquire: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 60 (ffffa1f0 ) + l32r a8, fffc0064 + callx8 a8 .literal.asm_test::add::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::add::u16::relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (914eb827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -7212,11 +10249,11 @@ asm_test::add::u16::relaxed: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7224,20 +10261,33 @@ asm_test::add::u16::relaxed: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 .literal.asm_test::add::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::add::u16::release: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9151b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -7254,11 +10304,11 @@ asm_test::add::u16::release: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 add.n a7, a14, a8 and a7, a7, a9 @@ -7266,120 +10316,216 @@ asm_test::add::u16::release: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 60 (ffffa1f0 ) + l32r a8, fffc0064 + callx8 a8 + +.literal.asm_test::add::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (a1f01d00 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::add::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (a1f01d00 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::add::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::add::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 30 (ffffa1f0 ) + l32r a8, fffc0034 + callx8 a8 + +.literal.asm_test::add::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::add::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::and::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a10, a2, 3 @@ -7398,24 +10544,40 @@ asm_test::and::u8::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 5c (a1f01d00 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 + +.literal.asm_test::and::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a10, a2, 3 @@ -7434,24 +10596,40 @@ asm_test::and::u8::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 5c (a1f01d00 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 + +.literal.asm_test::and::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a10, a2, 3 @@ -7469,24 +10647,40 @@ asm_test::and::u8::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc005c + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::and::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a10, a2, 3 @@ -7504,23 +10698,39 @@ asm_test::and::u8::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 58 (ffffa1f0 ) + l32r a8, fffc005c + callx8 a8 + +.literal.asm_test::and::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a10, a2, 3 @@ -7539,29 +10749,42 @@ asm_test::and::u8::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc005c + l32r a8, 5b (810000a1 ) + callx8 a8 .literal.asm_test::and::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::and::u16::acqrel: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (814fb827 ) and a9, a3, a8 slli a10, a2, 3 movi.n a11, 24 @@ -7579,30 +10802,43 @@ asm_test::and::u16::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 5c (a1f01d00 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 .literal.asm_test::and::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::and::u16::seqcst: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (814fb827 ) and a9, a3, a8 slli a10, a2, 3 movi.n a11, 24 @@ -7620,30 +10856,43 @@ asm_test::and::u16::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 5c (a1f01d00 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 .literal.asm_test::and::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::and::u16::acquire: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (814cb827 ) and a9, a3, a8 slli a10, a2, 3 movi.n a11, 24 @@ -7660,30 +10909,43 @@ asm_test::and::u16::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, fffc005c + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::and::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::and::u16::relaxed: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8149b827 ) and a9, a3, a8 slli a10, a2, 3 movi.n a11, 24 @@ -7700,29 +10962,42 @@ asm_test::and::u16::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 58 (ffffa1f0 ) + l32r a8, fffc005c + callx8 a8 .literal.asm_test::and::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::and::u16::release: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (814cb827 ) and a9, a3, a8 slli a10, a2, 3 movi.n a11, 24 @@ -7740,129 +11015,224 @@ asm_test::and::u16::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: and a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, fffc005c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::and::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::and::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::and::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::and::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 34 (ffff81ff ) + callx8 a8 + +.literal.asm_test::and::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::and::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::neg::u8::acqrel: + ill + movi.n a0, 48 + excw asm_test::neg::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l8ui a14, a2, 0 movi a8, 255 slli a9, a2, 3 @@ -7873,14 +11243,14 @@ asm_test::neg::u8::acqrel: and a11, a2, a11 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a9 srl a14, a14 and a15, a15, a13 memw - bnez a15, 2f -1: + bnez a15, 4f +3: and a15, a14, a8 ssl a9 sll a15, a15 @@ -7899,14 +11269,29 @@ asm_test::neg::u8::acqrel: wsr.scompare1 a7 s32c1i a14, a11, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0078 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::neg::u8::seqcst: + ill + movi.n a0, 48 + excw asm_test::neg::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l8ui a14, a2, 0 movi a8, 255 slli a9, a2, 3 @@ -7917,14 +11302,14 @@ asm_test::neg::u8::seqcst: and a11, a2, a11 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a9 srl a14, a14 and a15, a15, a13 memw - bnez a15, 2f -1: + bnez a15, 4f +3: and a15, a14, a8 ssl a9 sll a15, a15 @@ -7943,14 +11328,29 @@ asm_test::neg::u8::seqcst: wsr.scompare1 a7 s32c1i a14, a11, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0078 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::neg::u8::acquire: + ill + movi.n a0, 48 + excw asm_test::neg::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l8ui a14, a2, 0 movi a8, 255 slli a9, a2, 3 @@ -7961,14 +11361,14 @@ asm_test::neg::u8::acquire: and a11, a2, a11 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a9 srl a14, a14 and a15, a15, a13 memw - bnez a15, 2f -1: + bnez a15, 4f +3: and a15, a14, a8 ssl a9 sll a15, a15 @@ -7986,14 +11386,29 @@ asm_test::neg::u8::acquire: wsr.scompare1 a7 s32c1i a14, a11, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (ffffa1f0 ) + l32r a8, fffc0078 + callx8 a8 + +.literal.asm_test::neg::u8::relaxed: + ill + movi.n a0, 48 + excw asm_test::neg::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l8ui a14, a2, 0 movi a8, 255 slli a9, a2, 3 @@ -8004,13 +11419,13 @@ asm_test::neg::u8::relaxed: and a11, a2, a11 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a9 srl a14, a14 and a15, a15, a13 - bnez a15, 2f -1: + bnez a15, 4f +3: and a15, a14, a8 ssl a9 sll a15, a15 @@ -8028,14 +11443,29 @@ asm_test::neg::u8::relaxed: wsr.scompare1 a7 s32c1i a14, a11, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 74 (ffff81ff ) + callx8 a8 + +.literal.asm_test::neg::u8::release: + ill + movi.n a0, 48 + excw asm_test::neg::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l8ui a14, a2, 0 movi a8, 255 slli a9, a2, 3 @@ -8046,13 +11476,13 @@ asm_test::neg::u8::release: and a11, a2, a11 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a9 srl a14, a14 and a15, a15, a13 - bnez a15, 2f -1: + bnez a15, 4f +3: and a15, a14, a8 ssl a9 sll a15, a15 @@ -8071,18 +11501,31 @@ asm_test::neg::u8::release: wsr.scompare1 a7 s32c1i a14, a11, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (ffffa1f0 ) + l32r a8, fffc0078 + callx8 a8 .literal.asm_test::neg::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::neg::u16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 6f +1: l16ui a13, a2, 0 slli a8, a2, 3 movi.n a9, 24 @@ -8092,16 +11535,16 @@ asm_test::neg::u16::acqrel: and a10, a2, a10 movi.n a11, 0 movi.n a12, 1 - j 2f -0: + j 4f +2: ssr a8 srl a13, a13 and a14, a14, a12 memw -1: - bnez a14, 3f -2: - l32r a15, 1b (f103ee56 ) +3: + bnez a14, 5f +4: + l32r a15, 3b (f103ee56 ) and a14, a13, a15 ssl a8 sll a14, a14 @@ -8120,18 +11563,31 @@ asm_test::neg::u16::acqrel: wsr.scompare1 a15 s32c1i a13, a10, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -3: + j 2b +5: retw.n +6: + l32r a10, fffc0078 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::neg::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::neg::u16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 6f +1: l16ui a13, a2, 0 slli a8, a2, 3 movi.n a9, 24 @@ -8141,16 +11597,16 @@ asm_test::neg::u16::seqcst: and a10, a2, a10 movi.n a11, 0 movi.n a12, 1 - j 2f -0: + j 4f +2: ssr a8 srl a13, a13 and a14, a14, a12 memw -1: - bnez a14, 3f -2: - l32r a15, 1b (f103ee56 ) +3: + bnez a14, 5f +4: + l32r a15, 3b (f103ee56 ) and a14, a13, a15 ssl a8 sll a14, a14 @@ -8169,18 +11625,31 @@ asm_test::neg::u16::seqcst: wsr.scompare1 a15 s32c1i a13, a10, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -3: + j 2b +5: retw.n +6: + l32r a10, fffc0078 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::neg::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::neg::u16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 6f +1: l16ui a13, a2, 0 slli a8, a2, 3 movi.n a9, 24 @@ -8190,16 +11659,16 @@ asm_test::neg::u16::acquire: and a10, a2, a10 movi.n a11, 0 movi.n a12, 1 - j 2f -0: + j 4f +2: ssr a8 srl a13, a13 and a14, a14, a12 memw -1: - bnez a14, 3f -2: - l32r a15, 1b (f103be56 ) +3: + bnez a14, 5f +4: + l32r a15, 3b (f103be56 ) and a14, a13, a15 ssl a8 sll a14, a14 @@ -8217,18 +11686,31 @@ asm_test::neg::u16::acquire: wsr.scompare1 a15 s32c1i a13, a10, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -3: + j 2b +5: retw.n +6: + l32r a10, 74 (ffffa1f0 ) + l32r a8, fffc0078 + callx8 a8 .literal.asm_test::neg::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::neg::u16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l16ui a13, a2, 0 slli a8, a2, 3 movi.n a9, 24 @@ -8238,14 +11720,14 @@ asm_test::neg::u16::relaxed: and a10, a2, a10 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a8 srl a13, a13 and a14, a14, a12 - bnez a14, 2f -1: - l32r a15, fffc0028 + bnez a14, 4f +3: + l32r a15, fffc0034 and a14, a13, a15 ssl a8 sll a14, a14 @@ -8263,18 +11745,31 @@ asm_test::neg::u16::relaxed: wsr.scompare1 a15 s32c1i a13, a10, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 74 (ffff81ff ) + callx8 a8 .literal.asm_test::neg::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::neg::u16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l16ui a13, a2, 0 slli a8, a2, 3 movi.n a9, 24 @@ -8284,14 +11779,14 @@ asm_test::neg::u16::release: and a10, a2, a10 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a8 srl a13, a13 and a14, a14, a12 - bnez a14, 2f -1: - l32r a15, fffc0028 + bnez a14, 4f +3: + l32r a15, fffc0034 and a14, a13, a15 ssl a8 sll a14, a14 @@ -8310,120 +11805,211 @@ asm_test::neg::u16::release: wsr.scompare1 a15 s32c1i a13, a10, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (ffffa1f0 ) + l32r a8, fffc0078 + callx8 a8 + +.literal.asm_test::neg::u32::acqrel: + ill + movi.n a0, 48 + excw asm_test::neg::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: memw mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a11, a10 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::neg::u32::seqcst: + ill + movi.n a0, 48 + excw asm_test::neg::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: memw mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a11, a10 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::neg::u32::acquire: + ill + movi.n a0, 48 + excw asm_test::neg::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: memw mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: neg a11, a10 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::neg::u32::relaxed: + ill + movi.n a0, 48 + excw asm_test::neg::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: neg a11, a10 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 34 (ffff81ff ) + callx8 a8 + +.literal.asm_test::neg::u32::release: + ill + movi.n a0, 48 + excw asm_test::neg::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a11, a10 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::not::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -8436,24 +12022,41 @@ asm_test::not::u8::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::not::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -8466,24 +12069,41 @@ asm_test::not::u8::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::not::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -8495,24 +12115,40 @@ asm_test::not::u8::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 48 (a1f01d00 ) + l32r a8, 4c (ff81ffff ) + callx8 a8 + +.literal.asm_test::not::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -8524,23 +12160,39 @@ asm_test::not::u8::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0048 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::not::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -8553,32 +12205,45 @@ asm_test::not::u8::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 .literal.asm_test::not::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::not::u16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a8, a9 movi.n a9, -4 @@ -8587,33 +12252,47 @@ asm_test::not::u16::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::not::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::not::u16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a8, a9 movi.n a9, -4 @@ -8622,33 +12301,47 @@ asm_test::not::u16::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::not::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::not::u16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a8, a9 movi.n a9, -4 @@ -8656,33 +12349,46 @@ asm_test::not::u16::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 48 (a1f01d00 ) + l32r a8, 4c (ff81ffff ) + callx8 a8 .literal.asm_test::not::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::not::u16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a8, a9 movi.n a9, -4 @@ -8690,32 +12396,45 @@ asm_test::not::u16::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, fffc0048 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::not::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::not::u16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a8, a9 movi.n a9, -4 @@ -8724,134 +12443,232 @@ asm_test::not::u16::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 + +.literal.asm_test::not::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a8, -1 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a12 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a12, a11, a8 wsr.scompare1 a11 s32c1i a12, a2, 0 mov.n a13, a10 - beq a12, a11, 0b + beq a12, a11, 2b mov.n a13, a9 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::not::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a8, -1 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a12 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a12, a11, a8 wsr.scompare1 a11 s32c1i a12, a2, 0 mov.n a13, a10 - beq a12, a11, 0b + beq a12, a11, 2b mov.n a13, a9 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::not::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a8, -1 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a12 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a12, a11, a8 wsr.scompare1 a11 s32c1i a12, a2, 0 mov.n a13, a10 - beq a12, a11, 0b + beq a12, a11, 2b mov.n a13, a9 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (a1f01d00 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::not::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a8, -1 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a12 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a12, a11, a8 wsr.scompare1 a11 s32c1i a12, a2, 0 mov.n a13, a10 - beq a12, a11, 0b + beq a12, a11, 2b mov.n a13, a9 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::not::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::not::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a8, -1 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a12 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a12, a11, a8 wsr.scompare1 a11 s32c1i a12, a2, 0 mov.n a13, a10 - beq a12, a11, 0b + beq a12, a11, 2b mov.n a13, a9 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (a1f01dff ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::sub::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -8869,11 +12686,11 @@ asm_test::sub::u8::acqrel: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -8881,15 +12698,31 @@ asm_test::sub::u8::acqrel: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::sub::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -8907,11 +12740,11 @@ asm_test::sub::u8::seqcst: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -8919,15 +12752,31 @@ asm_test::sub::u8::seqcst: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::sub::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -8944,11 +12793,11 @@ asm_test::sub::u8::acquire: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -8956,15 +12805,32 @@ asm_test::sub::u8::acquire: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::sub::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -8981,11 +12847,11 @@ asm_test::sub::u8::relaxed: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -8993,14 +12859,30 @@ asm_test::sub::u8::relaxed: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 5c (a1f01dff ) + l32r a8, 60 (ff81ffff ) + callx8 a8 + +.literal.asm_test::sub::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a8, a3, a9 slli a10, a2, 3 @@ -9018,11 +12900,11 @@ asm_test::sub::u8::release: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a14, a15 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9030,20 +12912,33 @@ asm_test::sub::u8::release: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 0b + beq a15, a14, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::sub::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::sub::u16::acqrel: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9155b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -9060,11 +12955,11 @@ asm_test::sub::u16::acqrel: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9072,21 +12967,34 @@ asm_test::sub::u16::acqrel: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::sub::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::sub::u16::seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9155b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -9103,11 +13011,11 @@ asm_test::sub::u16::seqcst: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9115,21 +13023,34 @@ asm_test::sub::u16::seqcst: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::sub::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::sub::u16::acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a9, 1b (9152b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -9145,11 +13066,11 @@ asm_test::sub::u16::acquire: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9157,21 +13078,35 @@ asm_test::sub::u16::acquire: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::sub::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::sub::u16::relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (914fb827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -9187,11 +13122,11 @@ asm_test::sub::u16::relaxed: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9199,20 +13134,33 @@ asm_test::sub::u16::relaxed: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 5c (a1f01dff ) + l32r a8, 60 (ff81ffff ) + callx8 a8 .literal.asm_test::sub::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::sub::u16::release: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9152b827 ) and a8, a3, a9 slli a10, a2, 3 movi.n a11, 24 @@ -9229,11 +13177,11 @@ asm_test::sub::u16::release: l32i.n a14, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a10 sub a7, a14, a8 and a7, a7, a9 @@ -9241,120 +13189,216 @@ asm_test::sub::u16::release: wsr.scompare1 a14 s32c1i a15, a11, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::sub::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::sub::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::sub::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::sub::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 34 (ffff81ff ) + callx8 a8 + +.literal.asm_test::sub::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::sub::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::xor::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -9368,24 +13412,40 @@ asm_test::xor::u8::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::xor::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -9399,24 +13459,40 @@ asm_test::xor::u8::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::xor::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -9429,24 +13505,41 @@ asm_test::xor::u8::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::xor::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -9459,23 +13552,39 @@ asm_test::xor::u8::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 + +.literal.asm_test::xor::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a8, a3, a8 slli a9, a2, 3 @@ -9489,29 +13598,42 @@ asm_test::xor::u8::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a13 - beqi a14, 1, 2f -1: + beqi a14, 1, 4f +3: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 0b + beq a13, a12, 2b mov.n a14, a10 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::xor::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::xor::u16::acqrel: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -9524,30 +13646,43 @@ asm_test::xor::u16::acqrel: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::xor::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::xor::u16::seqcst: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -9560,30 +13695,43 @@ asm_test::xor::u16::seqcst: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::xor::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::xor::u16::acquire: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a8, 1b (813eb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -9595,30 +13743,44 @@ asm_test::xor::u16::acquire: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::xor::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::xor::u16::relaxed: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (813bb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -9630,29 +13792,42 @@ asm_test::xor::u16::relaxed: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 48 (a1f01dff ) + l32r a8, 4c (ff81ffff ) + callx8 a8 .literal.asm_test::xor::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::xor::u16::release: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (813eb827 ) and a8, a3, a8 slli a9, a2, 3 movi.n a10, 24 @@ -9665,126 +13840,210 @@ asm_test::xor::u16::release: l32i.n a12, a9, 0 movi.n a10, 0 movi.n a11, 1 - j 2f -1: + j 4f +3: mov.n a12, a13 - beqi a14, 1, 3f -2: + beqi a14, 1, 5f +4: xor a13, a12, a8 wsr.scompare1 a12 s32c1i a13, a9, 0 mov.n a14, a11 - beq a13, a12, 1b + beq a13, a12, 3b mov.n a14, a10 - j 1b -3: + j 3b +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::xor::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::xor::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, fffc0038 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::xor::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: memw retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 + +.literal.asm_test::xor::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 34 (ffff81ff ) + callx8 a8 + +.literal.asm_test::xor::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::xor::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a10, a2, 0 movi.n a8, 0 movi.n a9, 1 - j 1f -0: + j 3f +2: mov.n a10, a11 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a11, a10, a3 wsr.scompare1 a10 s32c1i a11, a2, 0 mov.n a12, a9 - beq a11, a10, 0b + beq a11, a10, 2b mov.n a12, a8 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 34 (ffffa1f0 ) + l32r a8, fffc0038 + callx8 a8 asm_test::load::u8::seqcst: entry a1, 32 @@ -9866,8 +14125,20 @@ asm_test::load::bool::relaxed: 0: retw.n +.literal.asm_test::swap::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill + asm_test::swap::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -9885,27 +14156,43 @@ asm_test::swap::u8::acqrel: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a2, a14 memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::swap::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -9923,27 +14210,43 @@ asm_test::swap::u8::seqcst: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a2, a14 memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::swap::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -9960,27 +14263,44 @@ asm_test::swap::u8::acquire: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a2, a14 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::swap::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -9997,26 +14317,42 @@ asm_test::swap::u8::relaxed: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a2, a14 retw.n +5: + l32r a10, 5c (a1f01d91 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 + +.literal.asm_test::swap::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -10034,32 +14370,46 @@ asm_test::swap::u8::release: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a2, a14 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::swap::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::swap::u16::acqrel: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a155b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -10076,33 +14426,46 @@ asm_test::swap::u16::acqrel: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a15, a14 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 1b + beq a14, a15, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::swap::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::swap::u16::seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a155b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -10119,33 +14482,46 @@ asm_test::swap::u16::seqcst: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a15, a14 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 1b + beq a14, a15, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::swap::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::swap::u16::acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a152b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -10161,33 +14537,47 @@ asm_test::swap::u16::acquire: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a15, a14 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 1b + beq a14, a15, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::swap::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::swap::u16::relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a14fb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -10203,32 +14593,45 @@ asm_test::swap::u16::relaxed: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a15, a14 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 1b + beq a14, a15, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 retw.n +6: + l32r a10, 5c (a1f01d91 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 .literal.asm_test::swap::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::swap::u16::release: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a152b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -10245,137 +14648,236 @@ asm_test::swap::u16::release: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a15, a14 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a14, a15, a10 or a14, a14, a9 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 1b + beq a14, a15, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a14 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::swap::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: wsr.scompare1 a11 mov.n a8, a3 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::swap::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: wsr.scompare1 a11 mov.n a8, a3 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::swap::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: wsr.scompare1 a11 mov.n a8, a3 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 38 (ffff81ff ) + callx8 a8 + +.literal.asm_test::swap::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: wsr.scompare1 a11 mov.n a8, a3 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 30 (a1f01d08 ) + l32r a8, 34 (ff81ffff ) + callx8 a8 + +.literal.asm_test::swap::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: wsr.scompare1 a11 mov.n a8, a3 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 38 (ffff81ff ) + callx8 a8 + +.literal.asm_test::swap::bool::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::bool::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -10392,32 +14894,48 @@ asm_test::swap::bool::acqrel: l32i.n a7, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a7, a15 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a15, a7, a11 or a15, a15, a10 wsr.scompare1 a7 s32c1i a15, a12, 0 mov.n a6, a14 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a8, a15 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, fffc006c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::swap::bool::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::bool::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -10434,32 +14952,48 @@ asm_test::swap::bool::seqcst: l32i.n a7, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a7, a15 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a15, a7, a11 or a15, a15, a10 wsr.scompare1 a7 s32c1i a15, a12, 0 mov.n a6, a14 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a8, a15 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, fffc006c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::swap::bool::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::bool::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -10475,32 +15009,48 @@ asm_test::swap::bool::acquire: l32i.n a7, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a7, a15 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a15, a7, a11 or a15, a15, a10 wsr.scompare1 a7 s32c1i a15, a12, 0 mov.n a6, a14 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a8, a15 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, 68 (ffffa1f0 ) + l32r a8, fffc006c + callx8 a8 + +.literal.asm_test::swap::bool::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::bool::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -10516,31 +15066,47 @@ asm_test::swap::bool::relaxed: l32i.n a7, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a7, a15 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a15, a7, a11 or a15, a15, a10 wsr.scompare1 a7 s32c1i a15, a12, 0 mov.n a6, a14 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a8, a15 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 68 (ffff81ff ) + callx8 a8 + +.literal.asm_test::swap::bool::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::swap::bool::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -10557,28 +15123,32 @@ asm_test::swap::bool::release: l32i.n a7, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a7, a15 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a15, a7, a11 or a15, a15, a10 wsr.scompare1 a7 s32c1i a15, a12, 0 mov.n a6, a14 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a8, a15 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 68 (ffffa1f0 ) + l32r a8, fffc006c + callx8 a8 asm_test::store::u8::seqcst: entry a1, 32 @@ -10652,8 +15222,20 @@ asm_test::store::bool::release: s8i a3, a2, 0 retw.n +.literal.asm_test::fetch_or::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill + asm_test::fetch_or::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -10667,26 +15249,42 @@ asm_test::fetch_or::u8::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_or::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -10700,26 +15298,42 @@ asm_test::fetch_or::u8::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_or::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -10732,26 +15346,42 @@ asm_test::fetch_or::u8::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_or::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -10764,25 +15394,41 @@ asm_test::fetch_or::u8::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::fetch_or::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -10796,31 +15442,44 @@ asm_test::fetch_or::u8::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_or::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_or::u16::acqrel: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8147b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -10833,32 +15492,45 @@ asm_test::fetch_or::u16::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_or::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_or::u16::seqcst: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8147b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -10871,32 +15543,45 @@ asm_test::fetch_or::u16::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_or::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_or::u16::acquire: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8144b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -10908,32 +15593,45 @@ asm_test::fetch_or::u16::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_or::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_or::u16::relaxed: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -10945,31 +15643,44 @@ asm_test::fetch_or::u16::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::fetch_or::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_or::u16::release: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8144b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -10982,136 +15693,234 @@ asm_test::fetch_or::u16::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_or::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_or::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_or::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_or::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_or::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: or a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_or::bool::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::bool::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -11123,32 +15932,49 @@ asm_test::fetch_or::bool::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_or::bool::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::bool::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -11160,32 +15986,49 @@ asm_test::fetch_or::bool::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_or::bool::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::bool::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -11196,32 +16039,48 @@ asm_test::fetch_or::bool::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, 58 (a1f01d00 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_or::bool::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::bool::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -11232,31 +16091,47 @@ asm_test::fetch_or::bool::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, fffc0058 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_or::bool::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_or::bool::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -11268,31 +16143,47 @@ asm_test::fetch_or::bool::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: or a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 58 (a1f01d12 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_add::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -11310,11 +16201,11 @@ asm_test::fetch_add::u8::acqrel: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11322,17 +16213,34 @@ asm_test::fetch_add::u8::acqrel: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_add::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -11350,11 +16258,11 @@ asm_test::fetch_add::u8::seqcst: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11362,17 +16270,34 @@ asm_test::fetch_add::u8::seqcst: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_add::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -11389,11 +16314,11 @@ asm_test::fetch_add::u8::acquire: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11401,17 +16326,33 @@ asm_test::fetch_add::u8::acquire: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 64 (a1f01d00 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_add::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -11428,11 +16369,11 @@ asm_test::fetch_add::u8::relaxed: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11440,16 +16381,32 @@ asm_test::fetch_add::u8::relaxed: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, fffc0064 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_add::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -11467,11 +16424,11 @@ asm_test::fetch_add::u8::release: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11479,22 +16436,35 @@ asm_test::fetch_add::u8::release: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 64 (a1f01d91 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_add::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_add::u16::acqrel: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a15ab827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -11511,11 +16481,11 @@ asm_test::fetch_add::u16::acqrel: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11523,23 +16493,37 @@ asm_test::fetch_add::u16::acqrel: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_add::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_add::u16::seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a10, 1b (a15ab827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -11556,11 +16540,11 @@ asm_test::fetch_add::u16::seqcst: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11568,23 +16552,37 @@ asm_test::fetch_add::u16::seqcst: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 6c (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_add::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_add::u16::acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a157b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -11600,11 +16598,11 @@ asm_test::fetch_add::u16::acquire: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11612,23 +16610,36 @@ asm_test::fetch_add::u16::acquire: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw retw.n +6: + l32r a10, 64 (a1f01d00 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_add::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_add::u16::relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a154b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -11644,11 +16655,11 @@ asm_test::fetch_add::u16::relaxed: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11656,22 +16667,35 @@ asm_test::fetch_add::u16::relaxed: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 retw.n +6: + l32r a10, fffc0064 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_add::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_add::u16::release: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a157b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -11688,11 +16712,11 @@ asm_test::fetch_add::u16::release: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 add.n a6, a15, a9 and a6, a6, a10 @@ -11700,127 +16724,225 @@ asm_test::fetch_add::u16::release: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 retw.n +6: + l32r a10, 64 (a1f01d91 ) + l32r a8, 68 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_add::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::fetch_add::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::fetch_add::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 38 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_add::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 30 (a1f01d08 ) + l32r a8, 34 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_add::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_add::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: add.n a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 38 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a10, a3, a9 slli a8, a2, 3 @@ -11839,26 +16961,42 @@ asm_test::fetch_and::u8::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::fetch_and::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a10, a3, a9 slli a8, a2, 3 @@ -11877,26 +17015,42 @@ asm_test::fetch_and::u8::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::fetch_and::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a9, 255 and a10, a3, a9 slli a8, a2, 3 @@ -11914,26 +17068,43 @@ asm_test::fetch_and::u8::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a9, 255 and a10, a3, a9 slli a8, a2, 3 @@ -11951,25 +17122,41 @@ asm_test::fetch_and::u8::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, 5c (a1f01d91 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_and::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: movi a9, 255 and a10, a3, a9 slli a8, a2, 3 @@ -11988,31 +17175,45 @@ asm_test::fetch_and::u8::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_and::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_and::u16::acqrel: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9155b827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -12030,32 +17231,45 @@ asm_test::fetch_and::u16::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::fetch_and::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_and::u16::seqcst: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (9155b827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -12073,32 +17287,45 @@ asm_test::fetch_and::u16::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::fetch_and::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_and::u16::acquire: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a9, 1b (9152b827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -12115,32 +17342,46 @@ asm_test::fetch_and::u16::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_and::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_and::u16::relaxed: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a9, 1b (914fb827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -12157,31 +17398,44 @@ asm_test::fetch_and::u16::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, 5c (a1f01d91 ) + l32r a8, 60 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_and::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_and::u16::release: 0: entry a1, 32 - l32r a9, 0b (91004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 7f +2: + l32r a9, 1b (9152b827 ) and a10, a3, a9 slli a8, a2, 3 movi.n a11, 24 @@ -12199,136 +17453,235 @@ asm_test::fetch_and::u16::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: and a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 64 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_and::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_and::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: and a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_and::bool::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::bool::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12346,31 +17699,47 @@ asm_test::fetch_and::bool::acqrel: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a14 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, fffc006c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_and::bool::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::bool::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12388,31 +17757,47 @@ asm_test::fetch_and::bool::seqcst: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a14 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, fffc006c + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_and::bool::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::bool::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12429,31 +17814,47 @@ asm_test::fetch_and::bool::acquire: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a14 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, 68 (ffffa1f0 ) + l32r a8, fffc006c + callx8 a8 + +.literal.asm_test::fetch_and::bool::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::bool::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12470,30 +17871,46 @@ asm_test::fetch_and::bool::relaxed: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a14 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 68 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_and::bool::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_and::bool::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12511,30 +17928,46 @@ asm_test::fetch_and::bool::release: l32i.n a15, a11, 0 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: mov.n a15, a14 - beqi a7, 1, 2f -1: + beqi a7, 1, 4f +3: and a14, a15, a10 wsr.scompare1 a15 s32c1i a14, a11, 0 mov.n a7, a13 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a7, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a14 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 68 (ffffa1f0 ) + l32r a8, fffc006c + callx8 a8 + +.literal.asm_test::fetch_max::i8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12550,11 +17983,11 @@ asm_test::fetch_max::i8::acqrel: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -12567,17 +18000,33 @@ asm_test::fetch_max::i8::acqrel: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_max::i8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12593,11 +18042,11 @@ asm_test::fetch_max::i8::seqcst: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -12610,17 +18059,33 @@ asm_test::fetch_max::i8::seqcst: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_max::i8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12635,11 +18100,11 @@ asm_test::fetch_max::i8::acquire: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -12652,17 +18117,33 @@ asm_test::fetch_max::i8::acquire: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_max::i8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12677,11 +18158,11 @@ asm_test::fetch_max::i8::relaxed: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -12694,16 +18175,33 @@ asm_test::fetch_max::i8::relaxed: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_max::i8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -12719,11 +18217,11 @@ asm_test::fetch_max::i8::release: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -12736,25 +18234,38 @@ asm_test::fetch_max::i8::release: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_max::i16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_max::i16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -12766,17 +18277,17 @@ asm_test::fetch_max::i16::acqrel: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 max a7, a7, a11 - l32r a6, 40 (ffff6153 ) + l32r a6, 4c (ffff6153 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -12784,26 +18295,39 @@ asm_test::fetch_max::i16::acqrel: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, 74 (a1f01d00 ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_max::i16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_max::i16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -12815,17 +18339,17 @@ asm_test::fetch_max::i16::seqcst: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 max a7, a7, a11 - l32r a6, 40 (ffff6153 ) + l32r a6, 4c (ffff6153 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -12833,26 +18357,39 @@ asm_test::fetch_max::i16::seqcst: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, 74 (a1f01d00 ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_max::i16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_max::i16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -12863,17 +18400,17 @@ asm_test::fetch_max::i16::acquire: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 max a7, a7, a11 - l32r a6, 3c (ff615377 ) + l32r a6, 48 (ff615377 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -12881,26 +18418,39 @@ asm_test::fetch_max::i16::acquire: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, fffc0074 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_max::i16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_max::i16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -12911,17 +18461,17 @@ asm_test::fetch_max::i16::relaxed: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 max a7, a7, a11 - l32r a6, 3c (ff615377 ) + l32r a6, 48 (ff615377 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -12929,25 +18479,38 @@ asm_test::fetch_max::i16::relaxed: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 retw.n +6: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_max::i16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_max::i16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -12959,17 +18522,17 @@ asm_test::fetch_max::i16::release: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 max a7, a7, a11 - l32r a6, 40 (ffff6153 ) + l32r a6, 4c (ffff6153 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -12977,127 +18540,225 @@ asm_test::fetch_max::i16::release: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 retw.n +6: + l32r a10, fffc0074 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_max::i32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: max a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_max::i32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: max a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_max::i32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: max a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_max::i32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: max a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_max::i32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_max::i32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: max a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_min::i8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -13113,11 +18774,11 @@ asm_test::fetch_min::i8::acqrel: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -13130,17 +18791,33 @@ asm_test::fetch_min::i8::acqrel: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_min::i8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -13156,11 +18833,11 @@ asm_test::fetch_min::i8::seqcst: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -13173,17 +18850,33 @@ asm_test::fetch_min::i8::seqcst: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_min::i8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -13198,11 +18891,11 @@ asm_test::fetch_min::i8::acquire: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -13215,17 +18908,33 @@ asm_test::fetch_min::i8::acquire: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 + +.literal.asm_test::fetch_min::i8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -13240,11 +18949,11 @@ asm_test::fetch_min::i8::relaxed: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -13257,16 +18966,33 @@ asm_test::fetch_min::i8::relaxed: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 70 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_min::i8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -13282,11 +19008,11 @@ asm_test::fetch_min::i8::release: sext a12, a3, 7 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a10 ssr a8 srl a6, a15 @@ -13299,25 +19025,38 @@ asm_test::fetch_min::i8::release: wsr.scompare1 a15 s32c1i a7, a11, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_min::i16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_min::i16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -13329,17 +19068,17 @@ asm_test::fetch_min::i16::acqrel: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 min a7, a7, a11 - l32r a6, 40 (ffff6143 ) + l32r a6, 4c (ffff6143 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -13347,26 +19086,39 @@ asm_test::fetch_min::i16::acqrel: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, 74 (a1f01d00 ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_min::i16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_min::i16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -13378,17 +19130,17 @@ asm_test::fetch_min::i16::seqcst: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 min a7, a7, a11 - l32r a6, 40 (ffff6143 ) + l32r a6, 4c (ffff6143 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -13396,26 +19148,39 @@ asm_test::fetch_min::i16::seqcst: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, 74 (a1f01d00 ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_min::i16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_min::i16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -13426,17 +19191,17 @@ asm_test::fetch_min::i16::acquire: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 min a7, a7, a11 - l32r a6, 3c (ff614377 ) + l32r a6, 48 (ff614377 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -13444,26 +19209,39 @@ asm_test::fetch_min::i16::acquire: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 memw retw.n +6: + l32r a10, fffc0074 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_min::i16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_min::i16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -13474,17 +19252,17 @@ asm_test::fetch_min::i16::relaxed: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 min a7, a7, a11 - l32r a6, 3c (ff614377 ) + l32r a6, 48 (ff614377 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -13492,25 +19270,38 @@ asm_test::fetch_min::i16::relaxed: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 retw.n +6: + l32r a10, 70 (ffffa1f0 ) + l32r a8, fffc0074 + callx8 a8 .literal.asm_test::fetch_min::i16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_min::i16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -1 @@ -13522,17 +19313,17 @@ asm_test::fetch_min::i16::release: sext a11, a3, 15 movi.n a12, 0 movi.n a13, 1 - j 2f -1: + j 4f +3: mov.n a14, a15 - beqi a7, 1, 3f -2: + beqi a7, 1, 5f +4: and a15, a14, a9 ssr a8 srl a7, a14 sext a7, a7, 15 min a7, a7, a11 - l32r a6, 40 (ffff6143 ) + l32r a6, 4c (ffff6143 ) and a7, a7, a6 ssl a8 sll a7, a7 @@ -13540,128 +19331,225 @@ asm_test::fetch_min::i16::release: wsr.scompare1 a14 s32c1i a15, a10, 0 mov.n a7, a13 - beq a15, a14, 1b + beq a15, a14, 3b mov.n a7, a12 - j 1b -3: + j 3b +5: ssr a8 srl a2, a15 retw.n +6: + l32r a10, fffc0074 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_min::i32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: min a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_min::i32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: min a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_min::i32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: min a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_min::i32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: min a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_min::i32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_min::i32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: min a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u8::acqrel: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u8::acqrel: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l8ui a2, a8, 0 movi a9, 255 slli a10, a8, 3 @@ -13672,14 +19560,14 @@ asm_test::fetch_neg::u8::acqrel: and a8, a8, a12 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a10 srl a2, a15 and a14, a14, a13 memw - bnez a14, 2f -1: + bnez a14, 4f +3: and a14, a2, a9 ssl a10 sll a14, a14 @@ -13698,15 +19586,30 @@ asm_test::fetch_neg::u8::acqrel: wsr.scompare1 a7 s32c1i a15, a8, 0 mov.n a14, a13 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a14, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 7c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u8::seqcst: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u8::seqcst: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l8ui a2, a8, 0 movi a9, 255 slli a10, a8, 3 @@ -13717,14 +19620,14 @@ asm_test::fetch_neg::u8::seqcst: and a8, a8, a12 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a10 srl a2, a15 and a14, a14, a13 memw - bnez a14, 2f -1: + bnez a14, 4f +3: and a14, a2, a9 ssl a10 sll a14, a14 @@ -13743,15 +19646,30 @@ asm_test::fetch_neg::u8::seqcst: wsr.scompare1 a7 s32c1i a15, a8, 0 mov.n a14, a13 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a14, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 7c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u8::acquire: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u8::acquire: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l8ui a2, a8, 0 movi a9, 255 slli a10, a8, 3 @@ -13762,14 +19680,14 @@ asm_test::fetch_neg::u8::acquire: and a8, a8, a12 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a10 srl a2, a14 and a14, a15, a13 memw - bnez a14, 2f -1: + bnez a14, 4f +3: and a14, a2, a9 ssl a10 sll a15, a14 @@ -13787,15 +19705,30 @@ asm_test::fetch_neg::u8::acquire: wsr.scompare1 a7 s32c1i a14, a8, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (a1f01dff ) + l32r a8, 78 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u8::relaxed: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u8::relaxed: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l8ui a2, a8, 0 movi a9, 255 slli a10, a8, 3 @@ -13806,13 +19739,13 @@ asm_test::fetch_neg::u8::relaxed: and a8, a8, a12 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a10 srl a2, a14 and a14, a15, a13 - bnez a14, 2f -1: + bnez a14, 4f +3: and a14, a2, a9 ssl a10 sll a15, a14 @@ -13830,15 +19763,30 @@ asm_test::fetch_neg::u8::relaxed: wsr.scompare1 a7 s32c1i a14, a8, 0 mov.n a15, a13 - beq a14, a7, 0b + beq a14, a7, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_neg::u8::release: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u8::release: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l8ui a2, a8, 0 movi a9, 255 slli a10, a8, 3 @@ -13849,13 +19797,13 @@ asm_test::fetch_neg::u8::release: and a8, a8, a12 movi.n a12, 0 movi.n a13, 1 - j 1f -0: + j 3f +2: ssr a10 srl a2, a15 and a14, a14, a13 - bnez a14, 2f -1: + bnez a14, 4f +3: and a14, a2, a9 ssl a10 sll a14, a14 @@ -13874,19 +19822,32 @@ asm_test::fetch_neg::u8::release: wsr.scompare1 a7 s32c1i a15, a8, 0 mov.n a14, a13 - beq a15, a7, 0b + beq a15, a7, 2b mov.n a14, a12 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (a1f01dff ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_neg::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::fetch_neg::u16::acqrel: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l16ui a2, a8, 0 slli a9, a8, 3 movi.n a10, 24 @@ -13896,15 +19857,15 @@ asm_test::fetch_neg::u16::acqrel: and a8, a8, a11 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a9 srl a2, a14 and a13, a13, a12 memw - bnez a13, 2f -1: - l32r a15, 2c (fffff103 ) + bnez a13, 4f +3: + l32r a15, 38 (fffff103 ) and a13, a2, a15 ssl a9 sll a13, a13 @@ -13923,19 +19884,32 @@ asm_test::fetch_neg::u16::acqrel: wsr.scompare1 a15 s32c1i a14, a8, 0 mov.n a13, a12 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a13, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 7c (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_neg::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::fetch_neg::u16::seqcst: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l16ui a2, a8, 0 slli a9, a8, 3 movi.n a10, 24 @@ -13945,15 +19919,15 @@ asm_test::fetch_neg::u16::seqcst: and a8, a8, a11 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a9 srl a2, a14 and a13, a13, a12 memw - bnez a13, 2f -1: - l32r a15, 2c (fffff103 ) + bnez a13, 4f +3: + l32r a15, 38 (fffff103 ) and a13, a2, a15 ssl a9 sll a13, a13 @@ -13972,19 +19946,32 @@ asm_test::fetch_neg::u16::seqcst: wsr.scompare1 a15 s32c1i a14, a8, 0 mov.n a13, a12 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a13, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 4b (ffa1f01d ) + l32r a8, 7c (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_neg::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::fetch_neg::u16::acquire: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l16ui a2, a8, 0 slli a9, a8, 3 movi.n a10, 24 @@ -13994,15 +19981,15 @@ asm_test::fetch_neg::u16::acquire: and a8, a8, a11 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a9 srl a2, a13 and a13, a14, a12 memw - bnez a13, 2f -1: - l32r a15, 2c (fffff103 ) + bnez a13, 4f +3: + l32r a15, 38 (fffff103 ) and a13, a2, a15 ssl a9 sll a14, a13 @@ -14020,19 +20007,32 @@ asm_test::fetch_neg::u16::acquire: wsr.scompare1 a15 s32c1i a13, a8, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (a1f01dff ) + l32r a8, 78 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_neg::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::fetch_neg::u16::relaxed: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l16ui a2, a8, 0 slli a9, a8, 3 movi.n a10, 24 @@ -14042,14 +20042,14 @@ asm_test::fetch_neg::u16::relaxed: and a8, a8, a11 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a9 srl a2, a13 and a13, a14, a12 - bnez a13, 2f -1: - l32r a15, 28 (fff103bd ) + bnez a13, 4f +3: + l32r a15, 34 (fff103bd ) and a13, a2, a15 ssl a9 sll a14, a13 @@ -14067,19 +20067,32 @@ asm_test::fetch_neg::u16::relaxed: wsr.scompare1 a15 s32c1i a13, a8, 0 mov.n a14, a12 - beq a13, a15, 0b + beq a13, a15, 2b mov.n a14, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, fffc0074 + l32r a8, 5b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_neg::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a0, 48 + excw + { excw; excw } + ill asm_test::fetch_neg::u16::release: entry a1, 32 mov.n a8, a2 + l32r a9, 4 (ffff9102 ) +0: + bltu a8, a9, 1f + l32r a9, 0b (91053897 ) + bltu a8, a9, 5f +1: l16ui a2, a8, 0 slli a9, a8, 3 movi.n a10, 24 @@ -14089,14 +20102,14 @@ asm_test::fetch_neg::u16::release: and a8, a8, a11 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: ssr a9 srl a2, a14 and a13, a13, a12 - bnez a13, 2f -1: - l32r a15, 28 (fff103ed ) + bnez a13, 4f +3: + l32r a15, 34 (fff103ed ) and a13, a2, a15 ssl a9 sll a13, a13 @@ -14115,125 +20128,218 @@ asm_test::fetch_neg::u16::release: wsr.scompare1 a15 s32c1i a14, a8, 0 mov.n a13, a12 - beq a14, a15, 0b + beq a14, a15, 2b mov.n a13, a11 - j 0b -2: + j 2b +4: retw.n +5: + l32r a10, 74 (a1f01dff ) + l32r a8, 78 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u32::acqrel: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 6f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: memw mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a8, a11 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u32::seqcst: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 6f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: memw mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a8, a11 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u32::acquire: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: memw mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: neg a8, a11 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_neg::u32::relaxed: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: neg a8, a11 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_neg::u32::release: + ill + movi.n a0, 48 + excw asm_test::fetch_neg::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bltu a2, a8, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: memw neg a8, a11 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_not::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14246,26 +20352,42 @@ asm_test::fetch_not::u8::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_not::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14278,26 +20400,42 @@ asm_test::fetch_not::u8::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_not::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14309,26 +20447,42 @@ asm_test::fetch_not::u8::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::fetch_not::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14340,25 +20494,42 @@ asm_test::fetch_not::u8::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_not::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14371,34 +20542,47 @@ asm_test::fetch_not::u8::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::fetch_not::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_not::u16::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -4 @@ -14407,35 +20591,48 @@ asm_test::fetch_not::u16::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_not::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_not::u16::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -4 @@ -14444,35 +20641,48 @@ asm_test::fetch_not::u16::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_not::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_not::u16::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -4 @@ -14480,35 +20690,48 @@ asm_test::fetch_not::u16::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::fetch_not::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_not::u16::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -4 @@ -14516,34 +20739,48 @@ asm_test::fetch_not::u16::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 50 (ffff81ff ) + callx8 a8 .literal.asm_test::fetch_not::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_not::u16::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 -0: +2: and a8, a8, a9 - l32r a9, 0b (91108890 ) + l32r a9, 2b (91108890 ) ssl a8 sll a9, a9 movi.n a10, -4 @@ -14552,141 +20789,238 @@ asm_test::fetch_not::u16::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::fetch_not::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a8, a12, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, fffc003c + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_not::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a8, a12, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, fffc003c + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_not::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a8, a12, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::fetch_not::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a8, a12, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 38 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_not::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a12, a2, 0 movi.n a9, -1 movi.n a10, 0 movi.n a11, 1 - j 1f -0: + j 3f +2: mov.n a12, a8 - beqi a13, 1, 2f -1: + beqi a13, 1, 4f +3: xor a8, a12, a9 wsr.scompare1 a12 s32c1i a8, a2, 0 mov.n a13, a11 - beq a8, a12, 0b + beq a8, a12, 2b mov.n a13, a10 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 38 (ffffa1f0 ) + l32r a8, fffc003c + callx8 a8 + +.literal.asm_test::fetch_not::bool::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::bool::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14698,32 +21032,49 @@ asm_test::fetch_not::bool::acqrel: memw l32i.n a14, a11, 0 movi.n a12, 0 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a10 wsr.scompare1 a14 s32c1i a13, a11, 0 mov.n a15, a9 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_not::bool::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::bool::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14735,32 +21086,49 @@ asm_test::fetch_not::bool::seqcst: memw l32i.n a14, a11, 0 movi.n a12, 0 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a10 wsr.scompare1 a14 s32c1i a13, a11, 0 mov.n a15, a9 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_not::bool::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::bool::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14771,32 +21139,48 @@ asm_test::fetch_not::bool::acquire: and a11, a2, a11 l32i.n a14, a11, 0 movi.n a12, 0 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a10 wsr.scompare1 a14 s32c1i a13, a11, 0 mov.n a15, a9 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, 58 (a1f01d00 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_not::bool::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::bool::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14807,31 +21191,47 @@ asm_test::fetch_not::bool::relaxed: and a11, a2, a11 l32i.n a14, a11, 0 movi.n a12, 0 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a10 wsr.scompare1 a14 s32c1i a13, a11, 0 mov.n a15, a9 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, fffc0058 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_not::bool::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_not::bool::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -14843,31 +21243,47 @@ asm_test::fetch_not::bool::release: memw l32i.n a14, a11, 0 movi.n a12, 0 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a10 wsr.scompare1 a14 s32c1i a13, a11, 0 mov.n a15, a9 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a12 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 58 (a1f01d12 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -14885,11 +21301,11 @@ asm_test::fetch_sub::u8::acqrel: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -14897,17 +21313,33 @@ asm_test::fetch_sub::u8::acqrel: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -14925,11 +21357,11 @@ asm_test::fetch_sub::u8::seqcst: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -14937,17 +21369,33 @@ asm_test::fetch_sub::u8::seqcst: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -14964,11 +21412,11 @@ asm_test::fetch_sub::u8::acquire: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -14976,17 +21424,33 @@ asm_test::fetch_sub::u8::acquire: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 memw retw.n +5: + l32r a10, fffc0068 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_sub::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -15003,11 +21467,11 @@ asm_test::fetch_sub::u8::relaxed: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15015,16 +21479,32 @@ asm_test::fetch_sub::u8::relaxed: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 + +.literal.asm_test::fetch_sub::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a10, 255 and a9, a3, a10 slli a8, a2, 3 @@ -15042,11 +21522,11 @@ asm_test::fetch_sub::u8::release: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 1f -0: + j 3f +2: mov.n a15, a7 - beqi a6, 1, 2f -1: + beqi a6, 1, 4f +3: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15054,22 +21534,35 @@ asm_test::fetch_sub::u8::release: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 0b + beq a7, a15, 2b mov.n a6, a13 - j 0b -2: + j 2b +4: ssr a8 srl a2, a7 retw.n +5: + l32r a10, fffc0068 + l32r a8, 5b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_sub::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_sub::u16::acqrel: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a15bb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -15086,11 +21579,11 @@ asm_test::fetch_sub::u16::acqrel: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15098,23 +21591,36 @@ asm_test::fetch_sub::u16::acqrel: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw retw.n +6: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_sub::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_sub::u16::seqcst: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a15bb827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -15131,11 +21637,11 @@ asm_test::fetch_sub::u16::seqcst: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15143,23 +21649,36 @@ asm_test::fetch_sub::u16::seqcst: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw retw.n +6: + l32r a10, 68 (a1f01d00 ) + l32r a8, 6c (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_sub::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_sub::u16::acquire: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a158b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -15175,11 +21694,11 @@ asm_test::fetch_sub::u16::acquire: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15187,23 +21706,36 @@ asm_test::fetch_sub::u16::acquire: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 memw retw.n +6: + l32r a10, fffc0068 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_sub::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_sub::u16::relaxed: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a155b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -15219,11 +21751,11 @@ asm_test::fetch_sub::u16::relaxed: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15231,22 +21763,35 @@ asm_test::fetch_sub::u16::relaxed: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 retw.n +6: + l32r a10, 64 (ffffa1f0 ) + l32r a8, fffc0068 + callx8 a8 .literal.asm_test::fetch_sub::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_sub::u16::release: 0: entry a1, 32 - l32r a10, 0b (a1004136 ) + l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a10, 1b (a158b827 ) and a9, a3, a10 slli a8, a2, 3 movi.n a11, 24 @@ -15263,11 +21808,11 @@ asm_test::fetch_sub::u16::release: l32i.n a15, a12, 0 movi.n a13, 0 movi.n a14, 1 - j 2f -1: + j 4f +3: mov.n a15, a7 - beqi a6, 1, 3f -2: + beqi a6, 1, 5f +4: and a7, a15, a11 sub a6, a15, a9 and a6, a6, a10 @@ -15275,127 +21820,225 @@ asm_test::fetch_sub::u16::release: wsr.scompare1 a15 s32c1i a7, a12, 0 mov.n a6, a14 - beq a7, a15, 1b + beq a7, a15, 3b mov.n a6, a13 - j 1b -3: + j 3b +5: ssr a8 srl a2, a7 retw.n +6: + l32r a10, fffc0068 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_sub::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_sub::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_sub::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_sub::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: sub a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u8::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u8::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -15409,26 +22052,42 @@ asm_test::fetch_xor::u8::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u8::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u8::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -15442,26 +22101,42 @@ asm_test::fetch_xor::u8::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u8::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u8::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -15474,26 +22149,42 @@ asm_test::fetch_xor::u8::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 memw retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_xor::u8::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u8::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -15506,25 +22197,41 @@ asm_test::fetch_xor::u8::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 + +.literal.asm_test::fetch_xor::u8::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u8::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: movi a8, 255 and a9, a3, a8 slli a8, a2, 3 @@ -15538,31 +22245,44 @@ asm_test::fetch_xor::u8::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a2, a13 retw.n +5: + l32r a10, fffc0054 + l32r a8, 5b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_xor::u16::acqrel: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_xor::u16::acqrel: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8147b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -15575,32 +22295,45 @@ asm_test::fetch_xor::u16::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_xor::u16::seqcst: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_xor::u16::seqcst: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8147b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -15613,32 +22346,45 @@ asm_test::fetch_xor::u16::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, 54 (a1f01d00 ) + l32r a8, 58 (ff81ffff ) + callx8 a8 .literal.asm_test::fetch_xor::u16::acquire: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_xor::u16::acquire: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8144b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -15650,32 +22396,45 @@ asm_test::fetch_xor::u16::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 memw retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 .literal.asm_test::fetch_xor::u16::relaxed: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_xor::u16::relaxed: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8141b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -15687,31 +22446,44 @@ asm_test::fetch_xor::u16::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, 50 (ffffa1f0 ) + l32r a8, fffc0054 + callx8 a8 .literal.asm_test::fetch_xor::u16::release: - .byte 0xff - .byte 0xff + ill + movi.n a15, 63 + { excw; excw } + ill + ill asm_test::fetch_xor::u16::release: 0: entry a1, 32 l32r a8, 0b (81004136 ) + bltu a2, a8, 2f + l32r a8, 8 (ffff8105 ) +1: + bgeu a8, a2, 6f +2: + l32r a8, 1b (8144b827 ) and a9, a3, a8 slli a8, a2, 3 movi.n a10, 24 @@ -15724,136 +22496,234 @@ asm_test::fetch_xor::u16::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 2f -1: + j 4f +3: mov.n a14, a13 - beqi a15, 1, 3f -2: + beqi a15, 1, 5f +4: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 1b + beq a13, a14, 3b mov.n a15, a11 - j 1b -3: + j 3b +5: ssr a8 srl a2, a13 retw.n +6: + l32r a10, fffc0054 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_xor::u32::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u32::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u32::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u32::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 +5: retw.n +6: + l32r a10, 5b (ffa1f01d ) + l32r a8, 3c (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u32::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u32::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: memw mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::u32::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u32::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, fffc0034 + l32r a8, 5b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_xor::u32::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::u32::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 5f +1: memw l32i.n a11, a2, 0 movi.n a9, 0 movi.n a10, 1 - j 1f -0: + j 3f +2: mov.n a11, a8 - beqi a12, 1, 2f -1: + beqi a12, 1, 4f +3: xor a8, a11, a3 wsr.scompare1 a11 s32c1i a8, a2, 0 mov.n a12, a10 - beq a8, a11, 0b + beq a8, a11, 2b mov.n a12, a9 - j 0b -2: + j 2b +4: mov.n a2, a8 retw.n +5: + l32r a10, 34 (a1f01d08 ) + l32r a8, 38 (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::bool::acqrel: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::bool::acqrel: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -15865,32 +22735,49 @@ asm_test::fetch_xor::bool::acqrel: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_xor::bool::seqcst: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::bool::seqcst: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 7f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -15902,32 +22789,49 @@ asm_test::fetch_xor::bool::seqcst: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw +6: retw.n +7: + l32r a10, 6b (ffa1f01d ) + l32r a8, 60 (ffff81ff ) + callx8 a8 + +.literal.asm_test::fetch_xor::bool::acquire: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::bool::acquire: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -15938,32 +22842,48 @@ asm_test::fetch_xor::bool::acquire: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: memw retw.n +6: + l32r a10, 58 (a1f01d00 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 + +.literal.asm_test::fetch_xor::bool::relaxed: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::bool::relaxed: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -15974,31 +22894,47 @@ asm_test::fetch_xor::bool::relaxed: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, fffc0058 + l32r a8, 6b (810000a1 ) + callx8 a8 + +.literal.asm_test::fetch_xor::bool::release: + ill + movi.n a15, 63 + { excw; excw } + ill asm_test::fetch_xor::bool::release: +0: entry a1, 32 + l32r a8, 0b (81004136 ) + bltu a2, a8, 1f + l32r a8, 8 (ffff8105 ) + bgeu a8, a2, 6f +1: slli a8, a2, 3 movi.n a9, 24 and a8, a8, a9 @@ -16010,25 +22946,29 @@ asm_test::fetch_xor::bool::release: l32i.n a14, a10, 0 movi.n a11, 0 movi.n a12, 1 - j 1f -0: + j 3f +2: mov.n a14, a13 - beqi a15, 1, 2f -1: + beqi a15, 1, 4f +3: xor a13, a14, a9 wsr.scompare1 a14 s32c1i a13, a10, 0 mov.n a15, a12 - beq a13, a14, 0b + beq a13, a14, 2b mov.n a15, a11 - j 0b -2: + j 2b +4: ssr a8 srl a8, a13 movi a9, 255 and a8, a8, a9 movi.n a2, 0 - beq a8, a2, 3f + beq a8, a2, 5f movi.n a2, 1 -3: +5: retw.n +6: + l32r a10, 58 (a1f01d12 ) + l32r a8, 5c (ff81ffff ) + callx8 a8 diff --git a/tools/build.sh b/tools/build.sh index 4d206783..c90f3782 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -414,6 +414,13 @@ build() { armv[4-5]t* | thumbv[4-5]t* | thumbv6m* | riscv??[ie]-*-none* | riscv??[ie]m-*-none* | riscv??[ie]mc-*-none* | xtensa-esp32s2-*) target_rustflags+=" --cfg portable_atomic_unsafe_assume_single_core" ;; + xtensa-esp32*) + # At this time, these chips require critical-section to be enabled, which is incompatible with + # the single-core and privileged assumptions. + # Given that esp-idf appears to always allow interrupts to be disabled from users on Xtensa, + # we may enable `unsafe-assume-privileged` by default for them in the future. + # https://github.com/espressif/esp-idf/blob/v6.0.2/components/esp_hw_support/cpu.c#L209 + ;; esac fi # TODO: handle SIGILL and ERR diff --git a/tools/no-std.sh b/tools/no-std.sh index 3921d32c..3a66b958 100755 --- a/tools/no-std.sh +++ b/tools/no-std.sh @@ -510,6 +510,14 @@ EOF x_cargo "${args[@]}" --no-default-features --features "${feature}" --release "$@" done ;; + xtensa-esp32-* | xtensa-esp32s3-*) + CARGO_TARGET_DIR="${target_dir}/no-std-test-critical-section" \ + RUSTFLAGS="${target_rustflags}" \ + x_cargo "${args[@]}" --features portable-atomic/critical-section "$@" + CARGO_TARGET_DIR="${target_dir}/no-std-test-critical-section" \ + RUSTFLAGS="${target_rustflags}" \ + x_cargo "${args[@]}" --release --features portable-atomic/critical-section "$@" + ;; esac ) }