]>
Commit | Line | Data |
---|---|---|
1c79356b A |
1 | /* |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
43866e37 | 6 | * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. |
1c79356b | 7 | * |
43866e37 A |
8 | * This file contains Original Code and/or Modifications of Original Code |
9 | * as defined in and that are subject to the Apple Public Source License | |
10 | * Version 2.0 (the 'License'). You may not use this file except in | |
11 | * compliance with the License. Please obtain a copy of the License at | |
12 | * http://www.opensource.apple.com/apsl/ and read it before using this | |
13 | * file. | |
14 | * | |
15 | * The Original Code and all software distributed under the License are | |
16 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
1c79356b A |
17 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
18 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
43866e37 A |
19 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. |
20 | * Please see the License for the specific language governing rights and | |
21 | * limitations under the License. | |
1c79356b A |
22 | * |
23 | * @APPLE_LICENSE_HEADER_END@ | |
24 | */ | |
25 | /* | |
26 | * Copyright (c) 1997-1998 Apple Computer, Inc. | |
27 | * | |
28 | * | |
29 | * HISTORY | |
30 | * | |
31 | * sdouglas 22 Oct 97 - first checked in from DriverServices | |
32 | * sdouglas 28 Jul 98 - start IOKit | |
33 | */ | |
34 | ||
35 | #include <architecture/ppc/asm_help.h> | |
36 | ||
37 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
38 | ; | |
39 | ; ENTRY functionName | |
40 | ; | |
41 | ; Assembly directives to begin an exported function. | |
42 | ; | |
43 | ; Takes: functionName - name of the exported function | |
44 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
45 | ||
46 | .macro ENTRY | |
55e303ae A |
47 | .text |
48 | .align 2 | |
49 | .globl $0 | |
1c79356b A |
50 | $0: |
51 | .endmacro | |
52 | ||
53 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
54 | ||
55 | /* | |
56 | int OSCompareAndSwap( UInt32 oldVal, UInt32 newVal, UInt32 * addr ) | |
55e303ae | 57 | This is now an alias to hw_compare_and_store, see xnu/libkern/Makefile |
1c79356b A |
58 | */ |
59 | ||
55e303ae A |
60 | /* |
61 | Note: We can not use the hw_atomic routines provided by osfmk/ppc as | |
62 | the return the result of the addition not the original value. | |
63 | */ | |
1c79356b A |
64 | /* |
65 | SInt32 OSDecrementAtomic(SInt32 * value) | |
66 | */ | |
55e303ae A |
67 | ENTRY _OSDecrementAtomic |
68 | mr r4, r3 | |
69 | li r3, -1 | |
70 | b _OSAddAtomic | |
1c79356b A |
71 | |
72 | /* | |
73 | SInt32 OSIncrementAtomic(SInt32 * value) | |
74 | */ | |
75 | ||
55e303ae A |
76 | .align 5 |
77 | ||
78 | ENTRY _OSIncrementAtomic | |
79 | mr r4, r3 | |
80 | li r3, 1 | |
1c79356b A |
81 | |
82 | /* | |
83 | SInt32 OSAddAtomic(SInt32 amount, SInt32 * value) | |
84 | */ | |
85 | ||
55e303ae | 86 | ENTRY _OSAddAtomic |
1c79356b | 87 | |
55e303ae | 88 | mr r5,r3 /* Save the increment */ |
1c79356b | 89 | .L_AAretry: |
55e303ae A |
90 | lwarx r3, 0, r4 /* Grab the area value */ |
91 | add r6, r3, r5 /* Add the value */ | |
92 | stwcx. r6, 0, r4 /* Try to save the new value */ | |
93 | bne- .L_AAretry /* Didn't get it, try again... */ | |
94 | blr /* Return the original value */ |