Mercurial > projects > ldc
comparison runtime/ldc.diff @ 698:f0ba5d37dd86
Merge darwin patch for Tango.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Mon, 13 Oct 2008 16:51:38 +0200 |
parents | 8d7e58801c82 |
children | f34b552619fd |
comparison
equal
deleted
inserted
replaced
697:25a32766ed57 | 698:f0ba5d37dd86 |
---|---|
29 public import std.intrinsic; | 29 public import std.intrinsic; |
30 Index: lib/common/tango/core/Thread.d | 30 Index: lib/common/tango/core/Thread.d |
31 =================================================================== | 31 =================================================================== |
32 --- lib/common/tango/core/Thread.d (revision 4002) | 32 --- lib/common/tango/core/Thread.d (revision 4002) |
33 +++ lib/common/tango/core/Thread.d (working copy) | 33 +++ lib/common/tango/core/Thread.d (working copy) |
34 @@ -244,8 +244,29 @@ | 34 @@ -235,6 +235,7 @@ |
35 // used to track the number of suspended threads | |
36 // | |
37 sem_t suspendCount; | |
38 + sem_t* suspendCountPtr; | |
39 | |
40 | |
41 extern (C) void thread_suspendHandler( int sig ) | |
42 @@ -244,8 +245,29 @@ | |
35 } | 43 } |
36 body | 44 body |
37 { | 45 { |
38 - version( D_InlineAsm_X86 ) | 46 - version( D_InlineAsm_X86 ) |
39 + version( LDC) | 47 + version( LDC) |
60 + else version( D_InlineAsm_X86 ) | 68 + else version( D_InlineAsm_X86 ) |
61 + { | 69 + { |
62 asm | 70 asm |
63 { | 71 { |
64 pushad; | 72 pushad; |
65 @@ -297,8 +318,12 @@ | 73 @@ -286,7 +308,7 @@ |
74 status = sigdelset( &sigres, SIGUSR2 ); | |
75 assert( status == 0 ); | |
76 | |
77 - status = sem_post( &suspendCount ); | |
78 + status = sem_post( suspendCountPtr ); | |
79 assert( status == 0 ); | |
80 | |
81 sigsuspend( &sigres ); | |
82 @@ -297,8 +319,12 @@ | |
66 } | 83 } |
67 } | 84 } |
68 | 85 |
69 - version( D_InlineAsm_X86 ) | 86 - version( D_InlineAsm_X86 ) |
70 + version( LDC) | 87 + version( LDC) |
74 + else version( D_InlineAsm_X86 ) | 91 + else version( D_InlineAsm_X86 ) |
75 + { | 92 + { |
76 asm | 93 asm |
77 { | 94 { |
78 popad; | 95 popad; |
79 @@ -2286,6 +2311,13 @@ | 96 @@ -1572,8 +1598,14 @@ |
97 status = sigaction( SIGUSR2, &sigusr2, null ); | |
98 assert( status == 0 ); | |
99 | |
100 - status = sem_init( &suspendCount, 0, 0 ); | |
101 - assert( status == 0 ); | |
102 + version(darwin){ | |
103 + suspendCountPtr = sem_open( "/thread_init/sem\0".ptr, 0 ); | |
104 + assert( suspendCountPtr !is null ); | |
105 + }else { | |
106 + status=sem_init(&suspendCount,0,0); | |
107 + suspendCountPtr=&suspendCount; | |
108 + assert(status==0); | |
109 + } | |
110 | |
111 status = pthread_key_create( &Thread.sm_this, null ); | |
112 assert( status == 0 ); | |
113 @@ -1781,7 +1813,7 @@ | |
114 // to simply loop on sem_wait at the end, but I'm not | |
115 // convinced that this would be much faster than the | |
116 // current approach. | |
117 - sem_wait( &suspendCount ); | |
118 + sem_wait( suspendCountPtr ); | |
119 } | |
120 else if( !t.m_lock ) | |
121 { | |
122 @@ -2286,6 +2318,13 @@ | |
80 version = AsmPPC_Posix; | 123 version = AsmPPC_Posix; |
81 } | 124 } |
82 | 125 |
83 + version( LLVM_InlineAsm_X86 ) | 126 + version( LLVM_InlineAsm_X86 ) |
84 + { | 127 + { |
400 + public import ldc.vararg; | 443 + public import ldc.vararg; |
401 +} | 444 +} |
402 else | 445 else |
403 { | 446 { |
404 /** | 447 /** |
448 Index: tango/core/sync/Semaphore.d | |
449 =================================================================== | |
450 --- tango/core/sync/Semaphore.d (revision 3979) | |
451 +++ tango/core/sync/Semaphore.d (working copy) | |
452 @@ -329,7 +329,8 @@ | |
453 { | |
454 synchronized( synComplete ) | |
455 { | |
456 - if( numComplete == numConsumers ) | |
457 + // if( numComplete == numConsumers ) | |
458 + if( numComplete == numToProduce ) | |
459 break; | |
460 } | |
461 Thread.yield(); | |
462 @@ -337,9 +338,9 @@ | |
463 | |
464 synchronized( synComplete ) | |
465 { | |
466 - assert( numComplete == numConsumers ); | |
467 + assert( numComplete == numToProduce ); | |
468 + // assert( numComplete == numConsumers ); | |
469 } | |
470 - | |
471 synchronized( synConsumed ) | |
472 { | |
473 assert( numConsumed == numToProduce ); | |
474 @@ -400,7 +401,8 @@ | |
475 | |
476 unittest | |
477 { | |
478 + version(darwin){}else{ | |
479 testWait(); | |
480 - testWaitTimeout(); | |
481 + testWaitTimeout();} | |
482 } | |
483 } | |
484 Index: tango/core/sync/Condition.d | |
485 =================================================================== | |
486 --- tango/core/sync/Condition.d (revision 3979) | |
487 +++ tango/core/sync/Condition.d (working copy) | |
488 @@ -553,8 +553,11 @@ | |
489 | |
490 unittest | |
491 { | |
492 + version(darwin){} | |
493 + else{ | |
494 testNotify(); | |
495 testNotifyAll(); | |
496 testWaitTimeout(); | |
497 + } | |
498 } | |
499 } | |
405 Index: tango/core/Atomic.d | 500 Index: tango/core/Atomic.d |
406 =================================================================== | 501 =================================================================== |
407 --- tango/core/Atomic.d (revision 4002) | 502 --- tango/core/Atomic.d (revision 4002) |
408 +++ tango/core/Atomic.d (working copy) | 503 +++ tango/core/Atomic.d (working copy) |
409 @@ -270,6 +270,167 @@ | 504 @@ -270,6 +270,167 @@ |
571 +} | 666 +} |
572 + | 667 + |
573 +//////////////////////////////////////////////////////////////////////////////// | 668 +//////////////////////////////////////////////////////////////////////////////// |
574 // x86 Atomic Function Implementation | 669 // x86 Atomic Function Implementation |
575 //////////////////////////////////////////////////////////////////////////////// | 670 //////////////////////////////////////////////////////////////////////////////// |
671 | |
672 @@ -282,9 +598,9 @@ | |
673 { | |
674 pragma( msg, "tango.core.Atomic: using IA-32 inline asm" ); | |
675 } | |
676 - | |
677 + version(darwin){} | |
678 + else { version = Has64BitCAS; } | |
679 version = Has32BitOps; | |
680 - version = Has64BitCAS; | |
681 } | |
682 version( X86_64 ) | |
683 { | |
684 Index: tango/math/IEEE.d | |
685 =================================================================== | |
686 --- tango/math/IEEE.d (revision 3979) | |
687 +++ tango/math/IEEE.d (working copy) | |
688 @@ -1543,7 +1543,12 @@ | |
689 else return 0; | |
690 } | |
691 } else { | |
692 - assert(0, "Unsupported"); | |
693 + static if (is(X==real)){ | |
694 + static assert(0, X.stringof~" unsupported by feqrel"); | |
695 + } else { | |
696 + int res=feqrel(cast(real)x,cast(real)y); | |
697 + return ((res>X.mant_dig)?X.mant_dig:res); | |
698 + } | |
699 } | |
700 } | |
576 | 701 |
577 Index: tango/math/Math.d | 702 Index: tango/math/Math.d |
578 =================================================================== | 703 =================================================================== |
579 --- tango/math/Math.d (revision 4002) | 704 --- tango/math/Math.d (revision 4002) |
580 +++ tango/math/Math.d (working copy) | 705 +++ tango/math/Math.d (working copy) |
721 + return tango.stdc.math.powl(x, y); | 846 + return tango.stdc.math.powl(x, y); |
722 + } | 847 + } |
723 } | 848 } |
724 | 849 |
725 debug(UnitTest) { | 850 debug(UnitTest) { |
851 Index: tango/stdc/posix/sys/types.d | |
852 =================================================================== | |
853 --- tango/stdc/posix/sys/types.d (revision 3979) | |
854 +++ tango/stdc/posix/sys/types.d (working copy) | |
855 @@ -422,7 +422,11 @@ | |
856 } | |
857 else version( darwin ) | |
858 { | |
859 - struct pthread_spinlock_t; | |
860 + version (LDC) | |
861 + alias void* pthread_spinlock_t; | |
862 + | |
863 + else | |
864 + struct pthread_spinlock_t; | |
865 } | |
866 else version( freebsd ) | |
867 { | |
726 Index: tango/stdc/stdlib.d | 868 Index: tango/stdc/stdlib.d |
727 =================================================================== | 869 =================================================================== |
728 --- tango/stdc/stdlib.d (revision 4002) | 870 --- tango/stdc/stdlib.d (revision 4002) |
729 +++ tango/stdc/stdlib.d (working copy) | 871 +++ tango/stdc/stdlib.d (working copy) |
730 @@ -94,6 +94,11 @@ | 872 @@ -94,6 +94,11 @@ |