os_Darwin_ppc.s (1894B)
1 # -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- 2 # 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 # 8 # Based on the programming examples in The PowerPC Architecture: 9 # A Specification for A New Family of RISC Processors, 2nd Ed., 10 # Book I, Section E.1, "Synchronization," pp. 249-256, May 1994. 11 # 12 13 .text 14 15 # 16 # PRInt32 __PR_DarwinPPC_AtomicIncrement(PRInt32 *val); 17 # 18 .align 2 19 .globl __PR_DarwinPPC_AtomicIncrement 20 .private_extern __PR_DarwinPPC_AtomicIncrement 21 __PR_DarwinPPC_AtomicIncrement: 22 lwarx r4,0,r3 23 addi r0,r4,1 24 stwcx. r0,0,r3 25 bne- __PR_DarwinPPC_AtomicIncrement 26 mr r3,r0 27 blr 28 29 # 30 # PRInt32 __PR_DarwinPPC_AtomicDecrement(PRInt32 *val); 31 # 32 .align 2 33 .globl __PR_DarwinPPC_AtomicDecrement 34 .private_extern __PR_DarwinPPC_AtomicDecrement 35 __PR_DarwinPPC_AtomicDecrement: 36 lwarx r4,0,r3 37 addi r0,r4,-1 38 stwcx. r0,0,r3 39 bne- __PR_DarwinPPC_AtomicDecrement 40 mr r3,r0 41 blr 42 43 # 44 # PRInt32 __PR_DarwinPPC_AtomicSet(PRInt32 *val, PRInt32 newval); 45 # 46 .align 2 47 .globl __PR_DarwinPPC_AtomicSet 48 .private_extern __PR_DarwinPPC_AtomicSet 49 __PR_DarwinPPC_AtomicSet: 50 lwarx r5,0,r3 51 stwcx. r4,0,r3 52 bne- __PR_DarwinPPC_AtomicSet 53 mr r3,r5 54 blr 55 56 # 57 # PRInt32 __PR_DarwinPPC_AtomicAdd(PRInt32 *ptr, PRInt32 val); 58 # 59 .align 2 60 .globl __PR_DarwinPPC_AtomicAdd 61 .private_extern __PR_DarwinPPC_AtomicAdd 62 __PR_DarwinPPC_AtomicAdd: 63 lwarx r5,0,r3 64 add r0,r4,r5 65 stwcx. r0,0,r3 66 bne- __PR_DarwinPPC_AtomicAdd 67 mr r3,r0 68 blr