| # -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| # |
| # Based on the programming examples in The PowerPC Architecture: |
| # A Specification for A New Family of RISC Processors, 2nd Ed., |
| # Book I, Section E.1, "Synchronization," pp. 249-256, May 1994. |
| # |
| |
| .text |
| |
| # |
| # PRInt32 __PR_DarwinPPC_AtomicIncrement(PRInt32 *val); |
| # |
| .align 2 |
| .globl __PR_DarwinPPC_AtomicIncrement |
| .private_extern __PR_DarwinPPC_AtomicIncrement |
| __PR_DarwinPPC_AtomicIncrement: |
| lwarx r4,0,r3 |
| addi r0,r4,1 |
| stwcx. r0,0,r3 |
| bne- __PR_DarwinPPC_AtomicIncrement |
| mr r3,r0 |
| blr |
| |
| # |
| # PRInt32 __PR_DarwinPPC_AtomicDecrement(PRInt32 *val); |
| # |
| .align 2 |
| .globl __PR_DarwinPPC_AtomicDecrement |
| .private_extern __PR_DarwinPPC_AtomicDecrement |
| __PR_DarwinPPC_AtomicDecrement: |
| lwarx r4,0,r3 |
| addi r0,r4,-1 |
| stwcx. r0,0,r3 |
| bne- __PR_DarwinPPC_AtomicDecrement |
| mr r3,r0 |
| blr |
| |
| # |
| # PRInt32 __PR_DarwinPPC_AtomicSet(PRInt32 *val, PRInt32 newval); |
| # |
| .align 2 |
| .globl __PR_DarwinPPC_AtomicSet |
| .private_extern __PR_DarwinPPC_AtomicSet |
| __PR_DarwinPPC_AtomicSet: |
| lwarx r5,0,r3 |
| stwcx. r4,0,r3 |
| bne- __PR_DarwinPPC_AtomicSet |
| mr r3,r5 |
| blr |
| |
| # |
| # PRInt32 __PR_DarwinPPC_AtomicAdd(PRInt32 *ptr, PRInt32 val); |
| # |
| .align 2 |
| .globl __PR_DarwinPPC_AtomicAdd |
| .private_extern __PR_DarwinPPC_AtomicAdd |
| __PR_DarwinPPC_AtomicAdd: |
| lwarx r5,0,r3 |
| add r0,r4,r5 |
| stwcx. r0,0,r3 |
| bne- __PR_DarwinPPC_AtomicAdd |
| mr r3,r0 |
| blr |