From 6b3f96154288e62ddbc5f122cf1a29e4e3044dbd Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 15 Aug 2005 19:44:15 +0000 Subject: [PATCH] Removed explicit register use (thanks to Howard Hinnant) [SVN r30585] --- .../boost/detail/sp_counted_base_cw_ppc.hpp | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/include/boost/detail/sp_counted_base_cw_ppc.hpp b/include/boost/detail/sp_counted_base_cw_ppc.hpp index 3452c9d..c56a562 100644 --- a/include/boost/detail/sp_counted_base_cw_ppc.hpp +++ b/include/boost/detail/sp_counted_base_cw_ppc.hpp @@ -34,55 +34,61 @@ namespace detail inline void atomic_increment( register long * pw ) { + register int a; + asm { loop: - lwarx r4, 0, r3 - addi r4, r4, 1 - stwcx. r4, 0, r3 + lwarx a, 0, pw + addi a, a, 1 + stwcx. a, 0, pw bne- loop } } inline long atomic_decrement( register long * pw ) { + register int a; + asm { sync loop: - lwarx r4, 0, r3 - addi r4, r4, -1 - stwcx. r4, 0, r3 + lwarx a, 0, pw + addi a, a, -1 + stwcx. a, 0, pw bne- loop - mr r3, r4 - isync } + + return a; } inline long atomic_conditional_increment( register long * pw ) { + register int a; + asm { loop: - lwarx r4, 0, r3 - cmpwi r4, 0 + lwarx a, 0, pw + cmpwi a, 0 beq store - addi r4, r4, 1 + addi a, a, 1 store: - stwcx. r4, 0, r3 + stwcx. a, 0, pw bne- loop - - mr r3, r4 } + + return a; } class sp_counted_base