diff options
author | axis <qt-info@nokia.com> | 2009-04-24 11:34:15 (GMT) |
---|---|---|
committer | axis <qt-info@nokia.com> | 2009-04-24 11:34:15 (GMT) |
commit | 8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76 (patch) | |
tree | a17e1a767a89542ab59907462206d7dcf2e504b2 /src/corelib/arch/sparc/qatomic64.s | |
download | Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.zip Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.gz Qt-8f427b2b914d5b575a4a7c0ed65d2fb8f45acc76.tar.bz2 |
Long live Qt for S60!
Diffstat (limited to 'src/corelib/arch/sparc/qatomic64.s')
-rw-r--r-- | src/corelib/arch/sparc/qatomic64.s | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/src/corelib/arch/sparc/qatomic64.s b/src/corelib/arch/sparc/qatomic64.s new file mode 100644 index 0000000..edd1716 --- /dev/null +++ b/src/corelib/arch/sparc/qatomic64.s @@ -0,0 +1,287 @@ + .section ".text" + + .align 4 + .type q_atomic_test_and_set_int,#function + .global q_atomic_test_and_set_int +q_atomic_test_and_set_int: + cas [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_int,.-q_atomic_test_and_set_int + + .align 4 + .type q_atomic_test_and_set_acquire_int,#function + .global q_atomic_test_and_set_acquire_int +q_atomic_test_and_set_acquire_int: + cas [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + membar #LoadLoad | #LoadStore + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_acquire_int,.-q_atomic_test_and_set_acquire_int + + .align 4 + .type q_atomic_test_and_set_release_int,#function + .global q_atomic_test_and_set_release_int +q_atomic_test_and_set_release_int: + membar #LoadStore | #StoreStore + cas [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_release_int,.-q_atomic_test_and_set_release_int + + .align 4 + .type q_atomic_test_and_set_ptr,#function + .global q_atomic_test_and_set_ptr +q_atomic_test_and_set_ptr: + casx [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_ptr,.-q_atomic_test_and_set_ptr + + .align 4 + .type q_atomic_increment,#function + .global q_atomic_increment +q_atomic_increment: +q_atomic_increment_retry: + ld [%o0],%o3 + add %o3,1,%o4 + cas [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_increment_retry + nop + cmp %o4,-1 + clr %o0 + retl + movne %icc,1,%o0 + .size q_atomic_increment,.-q_atomic_increment + + .align 4 + .type q_atomic_decrement,#function + .global q_atomic_decrement +q_atomic_decrement: +q_atomic_decrement_retry: + ld [%o0],%o3 + add %o3,-1,%o4 + cas [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_decrement_retry + nop + cmp %o4,1 + clr %o0 + retl + movne %icc,1,%o0 + .size q_atomic_decrement,.-q_atomic_decrement + + .align 4 + .type q_atomic_set_int,#function + .global q_atomic_set_int +q_atomic_set_int: +q_atomic_set_int_retry: + ld [%o0],%o2 + cas [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_set_int_retry + nop + retl + mov %o1,%o0 + .size q_atomic_set_int,.-q_atomic_set_int + + .align 4 + .type q_atomic_set_ptr,#function + .global q_atomic_set_ptr +q_atomic_set_ptr: +q_atomic_set_ptr_retry: + ldx [%o0],%o2 + casx [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_set_ptr_retry + nop + retl + mov %o1,%o0 + .size q_atomic_set_ptr,.-q_atomic_set_ptr + + .align 4 + .type q_atomic_fetch_and_add_int,#function + .global q_atomic_fetch_and_add_int +q_atomic_fetch_and_add_int: +q_atomic_fetch_and_add_int_retry: + ld [%o0],%o3 + add %o3,%o1,%o4 + cas [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_int_retry + nop + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_int,.-q_atomic_fetch_and_add_int + + .align 4 + .type q_atomic_fetch_and_add_acquire_int,#function + .global q_atomic_fetch_and_add_acquire_int +q_atomic_fetch_and_add_acquire_int: +q_atomic_fetch_and_add_acquire_int_retry: + ld [%o0],%o3 + add %o3,%o1,%o4 + cas [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_acquire_int_retry + nop + membar #LoadLoad | #LoadStore + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_acquire_int,.-q_atomic_fetch_and_add_acquire_int + + .align 4 + .type q_atomic_fetch_and_add_release_int,#function + .global q_atomic_fetch_and_add_release_int +q_atomic_fetch_and_add_release_int: +q_atomic_fetch_and_add_release_int_retry: + membar #LoadStore | #StoreStore + ld [%o0],%o3 + add %o3,%o1,%o4 + cas [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_release_int_retry + nop + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_release_int,.-q_atomic_fetch_and_add_release_int + + .align 4 + .type q_atomic_fetch_and_store_acquire_int,#function + .global q_atomic_fetch_and_store_acquire_int +q_atomic_fetch_and_store_acquire_int: +q_atomic_fetch_and_store_acquire_int_retry: + ld [%o0],%o2 + cas [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_fetch_and_store_acquire_int_retry + nop + membar #LoadLoad | #LoadStore + retl + mov %o1,%o0 + .size q_atomic_fetch_and_store_acquire_int,.-q_atomic_fetch_and_store_acquire_int + + .align 4 + .type q_atomic_fetch_and_store_release_int,#function + .global q_atomic_fetch_and_store_release_int +q_atomic_fetch_and_store_release_int: +q_atomic_fetch_and_store_release_int_retry: + membar #LoadStore | #StoreStore + ld [%o0],%o2 + cas [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_fetch_and_store_release_int_retry + nop + retl + mov %o1,%o0 + .size q_atomic_fetch_and_store_release_int,.-q_atomic_fetch_and_store_release_int + + .align 4 + .type q_atomic_test_and_set_acquire_ptr,#function + .global q_atomic_test_and_set_acquire_ptr +q_atomic_test_and_set_acquire_ptr: + casx [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + membar #LoadLoad | #LoadStore + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_acquire_ptr,.-q_atomic_test_and_set_acquire_ptr + + .align 4 + .type q_atomic_test_and_set_release_ptr,#function + .global q_atomic_test_and_set_release_ptr +q_atomic_test_and_set_release_ptr: + membar #LoadStore | #StoreStore + casx [%o0],%o1,%o2 + cmp %o1,%o2 + clr %o0 + retl + move %icc,1,%o0 + .size q_atomic_test_and_set_release_ptr,.-q_atomic_test_and_set_release_ptr + + .align 4 + .type q_atomic_fetch_and_store_acquire_ptr,#function + .global q_atomic_fetch_and_store_acquire_ptr +q_atomic_fetch_and_store_acquire_ptr: +q_atomic_fetch_and_store_acquire_ptr_retry: + ldx [%o0],%o2 + casx [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_fetch_and_store_acquire_ptr_retry + nop + membar #LoadLoad | #LoadStore + retl + mov %o1,%o0 + .size q_atomic_fetch_and_store_acquire_ptr,.-q_atomic_fetch_and_store_acquire_ptr + + .align 4 + .type q_atomic_fetch_and_store_release_ptr,#function + .global q_atomic_fetch_and_store_release_ptr +q_atomic_fetch_and_store_release_ptr: +q_atomic_fetch_and_store_release_ptr_retry: + membar #LoadStore | #StoreStore + ldx [%o0],%o2 + casx [%o0],%o2,%o1 + cmp %o2,%o1 + bne q_atomic_fetch_and_store_release_ptr_retry + nop + retl + mov %o1,%o0 + .size q_atomic_fetch_and_store_release_ptr,.-q_atomic_fetch_and_store_release_ptr + + .align 4 + .type q_atomic_fetch_and_add_ptr,#function + .global q_atomic_fetch_and_add_ptr +q_atomic_fetch_and_add_ptr: +q_atomic_fetch_and_add_ptr_retry: + ldx [%o0],%o3 + add %o3,%o1,%o4 + casx [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_ptr_retry + nop + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_ptr,.-q_atomic_fetch_and_add_ptr + + .align 4 + .type q_atomic_fetch_and_add_acquire_ptr,#function + .global q_atomic_fetch_and_add_acquire_ptr +q_atomic_fetch_and_add_acquire_ptr: +q_atomic_fetch_and_add_acquire_ptr_retry: + ldx [%o0],%o3 + add %o3,%o1,%o4 + casx [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_acquire_ptr_retry + nop + membar #LoadLoad | #LoadStore + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_acquire_ptr,.-q_atomic_fetch_and_add_acquire_ptr + + .align 4 + .type q_atomic_fetch_and_add_release_ptr,#function + .global q_atomic_fetch_and_add_release_ptr +q_atomic_fetch_and_add_release_ptr: +q_atomic_fetch_and_add_release_ptr_retry: + membar #LoadStore | #StoreStore + ldx [%o0],%o3 + add %o3,%o1,%o4 + casx [%o0],%o3,%o4 + cmp %o3,%o4 + bne q_atomic_fetch_and_add_release_ptr_retry + nop + retl + mov %o3,%o0 + .size q_atomic_fetch_and_add_release_ptr,.-q_atomic_fetch_and_add_release_ptr |