7
7
*
8
8
*
9
9
* IDENTIFICATION
10
- * $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.19 1997/08/20 00:50:11 scrappy Exp $
10
+ * $Header: /cvsroot/pgsql/src/backend/storage/ipc/Attic/s_lock.c,v 1.20 1997/08/24 23:07:28 momjian Exp $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
44
44
45
45
#if defined(HAS_TEST_AND_SET )
46
46
47
- # if defined(__alpha__ ) && defined(linux )
48
- static long int tas (slock_t * lock );
49
- # else
50
- static int tas (slock_t * lock );
51
- #endif
52
-
53
47
#if defined (nextstep )
54
48
/*
55
49
* NEXTSTEP (mach)
@@ -167,6 +161,8 @@ S_LOCK_FREE(slock_t *lock)
167
161
defined(sparc_solaris )
168
162
/* for xxxxx_solaris, this is defined in port/.../tas.s */
169
163
164
+ static int tas (slock_t * lock );
165
+
170
166
void
171
167
S_LOCK (slock_t * lock )
172
168
{
@@ -233,6 +229,8 @@ S_INIT_LOCK(slock_t *lock)
233
229
*/
234
230
static slock_t clear_lock = { -1 , -1 , -1 , -1 };
235
231
232
+ static int tas (slock_t * lock );
233
+
236
234
void
237
235
S_LOCK (slock_t * lock )
238
236
{
@@ -268,6 +266,8 @@ S_LOCK_FREE(slock_t *lock)
268
266
269
267
#if defined(sun3 )
270
268
269
+ static int tas (slock_t * lock );
270
+
271
271
void
272
272
S_LOCK (slock_t * lock )
273
273
{
@@ -320,6 +320,8 @@ tas_dummy()
320
320
#define asm (x ) __asm__(x)
321
321
#endif
322
322
323
+ static int tas (slock_t * lock );
324
+
323
325
static int
324
326
tas_dummy ()
325
327
{
@@ -383,19 +385,14 @@ S_INIT_LOCK(unsigned char *addr)
383
385
384
386
#if defined(NEED_I386_TAS_ASM )
385
387
386
- static int
387
- tas (slock_t * m )
388
- {
389
- slock_t res ;
390
- __asm__("xchgb %0,%1" :"=q" (res ),"=m" (* m ):"0" (0x1 ));
391
- return (res );
392
- }
393
-
394
388
void
395
389
S_LOCK (slock_t * lock )
396
390
{
397
- while (tas (lock ))
398
- ;
391
+ slock_t res ;
392
+
393
+ do {
394
+ __asm__("xchgb %0,%1" :"=q" (res ),"=m" (* lock ):"0" (0x1 ));
395
+ }while (res != 0 );
399
396
}
400
397
401
398
void
@@ -415,31 +412,26 @@ S_INIT_LOCK(slock_t *lock)
415
412
416
413
#if defined(__alpha__ ) && defined(linux )
417
414
418
- static long int
419
- tas (slock_t * m )
420
- {
421
- slock_t res ;
422
- __asm__(" ldq $0, %0 \n\
423
- bne $0, already_set \n\
424
- ldq_l $0, %0 \n\
425
- bne $0, already_set \n\
426
- or $31, 1, $0 \n\
427
- stq_c $0, %0 \n\
428
- beq $0, stqc_fail \n\
429
- success: bis $31, $31, %1 \n\
430
- mb \n\
431
- jmp $31, end \n\
432
- stqc_fail: or $31, 1, $0 \n\
433
- already_set: bis $0, $0, %1 \n\
434
- end: nop " : "=m" (* m ), "=r" (res ) :: "0" );
435
- return (res );
436
- }
437
-
438
415
void
439
416
S_LOCK (slock_t * lock )
440
417
{
441
- while (tas (lock ))
442
- ;
418
+ slock_t res ;
419
+
420
+ do {
421
+ __asm__(" ldq $0, %0 \n\
422
+ bne $0, already_set \n\
423
+ ldq_l $0, %0 \n\
424
+ bne $0, already_set \n\
425
+ or $31, 1, $0 \n\
426
+ stq_c $0, %0 \n\
427
+ beq $0, stqc_fail \n\
428
+ success: bis $31, $31, %1 \n\
429
+ mb \n\
430
+ jmp $31, end \n\
431
+ stqc_fail: or $31, 1, $0 \n\
432
+ already_set: bis $0, $0, %1 \n\
433
+ end: nop " : "=m" (* lock ), "=r" (res ) :: "0" );
434
+ }while (res != 0 );
443
435
}
444
436
445
437
void
@@ -459,56 +451,16 @@ S_INIT_LOCK(slock_t *lock)
459
451
460
452
#if defined(linux ) && defined(sparc )
461
453
462
- static int
463
- tas (slock_t * m )
464
- {
465
- slock_t res ;
466
- __asm__("ldstub [%1], %0"
467
- : "=&r" (res )
468
- : "r" (m ));
469
- return (res != 0 );
470
- }
471
-
472
454
void
473
455
S_LOCK (slock_t * lock )
474
456
{
475
- while (tas (lock ))
476
- ;
477
- }
478
-
479
- void
480
- S_UNLOCK (slock_t * lock )
481
- {
482
- * lock = 0 ;
483
- }
484
-
485
- void
486
- S_INIT_LOCK (slock_t * lock )
487
- {
488
- S_UNLOCK (lock );
489
- }
490
-
491
- #endif /* defined(linux) && defined(sparc) */
492
-
493
- #if defined(NEED_NS32K_TAS_ASM )
494
-
495
- static int
496
- tas (slock_t * m )
497
- {
498
- slock_t res = 0 ;
499
- __asm__("movd 8(fp), r1" );
500
- __asm__("movqd 0, r0" );
501
- __asm__("sbitd r0, 0(r1)" );
502
- __asm__("sprb us, %0" : "=r" (res ));
503
- res = (res >> 5 ) & 1 ;
504
- return res ;
505
- }
457
+ slock_t res ;
506
458
507
- void
508
- S_LOCK ( slock_t * lock )
509
- {
510
- while ( tas ( lock ))
511
- ;
459
+ do {
460
+ __asm__( "ldstub [%1], %0"
461
+ : "=&r" ( res )
462
+ : "r" ( lock ));
463
+ } while (! res != 0 ) ;
512
464
}
513
465
514
466
void
@@ -523,7 +475,7 @@ S_INIT_LOCK(slock_t *lock)
523
475
S_UNLOCK (lock );
524
476
}
525
477
526
- #endif /* NEED_NS32K_TAS_ASM */
478
+ #endif /* defined(linux) && defined(sparc) */
527
479
528
480
#if defined(linux ) && defined(PPC )
529
481
0 commit comments