Changeset 35 for trunk/openjdk/jdk
- Timestamp:
- Jun 19, 2010, 6:36:10 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/openjdk/jdk/src/windows/hpi/src/monitor_md.c
r2 r35 104 104 */ 105 105 106 static int __fastcall sysMonitorEnter2(sys_thread_t *self, sys_mon_t *mid) 106 static EMXONLY(inline) int EMXNOP(__fastcall) 107 sysMonitorEnter2(sys_thread_t *self, sys_mon_t *mid) 107 108 { 108 109 if (mid->semaphore == NULL) { … … 138 139 sysMonitorEnter(sys_thread_t *self, sys_mon_t *mid) 139 140 { 141 #ifdef __EMX__ 142 if (self == mid->monitor_owner) { 143 ++mid->entry_count; 144 return SYS_OK; 145 } 146 147 if (systemIsMP) { 148 register char isZero; 149 asm volatile ( 150 "lock incl %0; sete %1" 151 : "=m" (mid->atomic_count), "=q" (isZero) 152 : "m" (mid->atomic_count) 153 : "memory" 154 ); 155 if (isZero) { 156 mid->monitor_owner = self; 157 mid->entry_count = 1; 158 return SYS_OK; 159 } 160 } else { 161 if (!++mid->atomic_count) { 162 mid->monitor_owner = self; 163 mid->entry_count = 1; 164 return SYS_OK; 165 } 166 } 167 168 return sysMonitorEnter2(self, mid); 169 #else /* __EMX__ */ 140 170 __asm 141 171 { … … 177 207 jmp sysMonitorEnter2; 178 208 } 209 #endif /* __EMX__ */ 179 210 } 180 211 #else … … 213 244 */ 214 245 215 static int __fastcall246 static EMXONLY(inline) int EMXNOP(__fastcall) 216 247 sysMonitorExit2(sys_thread_t *self, sys_mon_t *mid) 217 248 { … … 237 268 238 269 #ifndef _WIN64 239 __declspec(naked) int __cdecl 270 EMXNOP(__declspec(naked)) int EMXNOP(__cdecl) 240 271 sysMonitorExit(sys_thread_t *self, sys_mon_t *mid) 241 272 { 273 #ifdef __EMX__ 274 if (self != mid->monitor_owner) 275 return SYS_ERR; 276 277 if (--mid->entry_count) 278 return SYS_ERR; 279 280 mid->monitor_owner = 0; 281 282 if (systemIsMP) { 283 register char isLessThanZero; 284 asm volatile ( 285 "lock decl %0; setge %1" 286 : "=m" (mid->atomic_count), "=q" (isLessThanZero) 287 : "m" (mid->atomic_count) 288 : "memory" 289 ); 290 if (isLessThanZero) 291 return SYS_OK; 292 } else { 293 if (--mid->atomic_count < 0) 294 return SYS_OK; 295 } 296 297 return sysMonitorExit2(self, mid); 298 #else /* __EMX__ */ 242 299 __asm 243 300 { … … 277 334 jmp sysMonitorExit2; /* forwading call */ 278 335 } 336 #endif /* __EMX__ */ 279 337 } 280 338 #else
Note:
See TracChangeset
for help on using the changeset viewer.