mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-12 10:53:14 +01:00
302 lines
8.1 KiB
Diff
302 lines
8.1 KiB
Diff
Index: src/common/core/bitmanip.d
|
|
===================================================================
|
|
--- src/common/core/bitmanip.d (revision 46)
|
|
+++ src/common/core/bitmanip.d (working copy)
|
|
@@ -171,6 +171,10 @@
|
|
*/
|
|
uint outpl( uint port_address, uint value );
|
|
}
|
|
+else version( LDC )
|
|
+{
|
|
+ public import ldc.bitmanip;
|
|
+}
|
|
else
|
|
{
|
|
public import std.intrinsic;
|
|
Index: src/common/core/thread.d
|
|
===================================================================
|
|
--- src/common/core/thread.d (revision 46)
|
|
+++ src/common/core/thread.d (working copy)
|
|
@@ -275,8 +275,50 @@
|
|
}
|
|
body
|
|
{
|
|
- version( D_InlineAsm_X86 )
|
|
+ version( LDC )
|
|
{
|
|
+ version(X86)
|
|
+ {
|
|
+ uint eax,ecx,edx,ebx,ebp,esi,edi;
|
|
+ asm
|
|
+ {
|
|
+ mov eax[EBP], EAX ;
|
|
+ mov ecx[EBP], ECX ;
|
|
+ mov edx[EBP], EDX ;
|
|
+ mov ebx[EBP], EBX ;
|
|
+ mov ebp[EBP], EBP ;
|
|
+ mov esi[EBP], ESI ;
|
|
+ mov edi[EBP], EDI ;
|
|
+ }
|
|
+ }
|
|
+ else version (X86_64)
|
|
+ {
|
|
+ ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15;
|
|
+ asm
|
|
+ {
|
|
+ movq rax[RBP], RAX ;
|
|
+ movq rbx[RBP], RBX ;
|
|
+ movq rcx[RBP], RCX ;
|
|
+ movq rdx[RBP], RDX ;
|
|
+ movq rbp[RBP], RBP ;
|
|
+ movq rsi[RBP], RSI ;
|
|
+ movq rdi[RBP], RDI ;
|
|
+ movq rsp[RBP], RSP ;
|
|
+ movq r10[RBP], R10 ;
|
|
+ movq r11[RBP], R11 ;
|
|
+ movq r12[RBP], R12 ;
|
|
+ movq r13[RBP], R13 ;
|
|
+ movq r14[RBP], R14 ;
|
|
+ movq r15[RBP], R15 ;
|
|
+ }
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ static assert( false, "Architecture not supported." );
|
|
+ }
|
|
+ }
|
|
+ else version( D_InlineAsm_X86 )
|
|
+ {
|
|
asm
|
|
{
|
|
pushad;
|
|
@@ -328,8 +370,12 @@
|
|
}
|
|
}
|
|
|
|
- version( D_InlineAsm_X86 )
|
|
+ version( LDC )
|
|
{
|
|
+ // nothing to pop
|
|
+ }
|
|
+ else version( D_InlineAsm_X86 )
|
|
+ {
|
|
asm
|
|
{
|
|
popad;
|
|
@@ -717,7 +763,7 @@
|
|
* represents the minimum valid priority for the scheduling policy of
|
|
* the process.
|
|
*/
|
|
- static const int PRIORITY_MIN;
|
|
+ static int PRIORITY_MIN;
|
|
|
|
|
|
/**
|
|
@@ -726,7 +772,7 @@
|
|
* represents the minimum valid priority for the scheduling policy of
|
|
* the process.
|
|
*/
|
|
- static const int PRIORITY_MAX;
|
|
+ static int PRIORITY_MAX;
|
|
|
|
|
|
/**
|
|
@@ -2259,6 +2305,18 @@
|
|
version = AsmPPC_Posix;
|
|
}
|
|
|
|
+ version( LLVM_InlineAsm_X86 )
|
|
+ {
|
|
+ version( Win32 )
|
|
+ version = LLVM_AsmX86_Win32;
|
|
+ else version( Posix )
|
|
+ version = LLVM_AsmX86_Posix;
|
|
+ }
|
|
+ else version( LLVM_InlineAsm_X86_64 )
|
|
+ {
|
|
+ version( Posix )
|
|
+ version = LLVM_AsmX86_64_Posix;
|
|
+ }
|
|
|
|
version( Posix )
|
|
{
|
|
@@ -2269,6 +2327,10 @@
|
|
version( AsmX86_Win32 ) {} else
|
|
version( AsmX86_Posix ) {} else
|
|
version( AsmPPC_Posix ) {} else
|
|
+ version( LLVM_AsmX86_Win32 ) {} else
|
|
+ version( LLVM_AsmX86_Posix ) {} else
|
|
+ //TODO: Enable when x86-64 Posix supports fibers
|
|
+ //version( LLVM_AsmX86_64_Posix ) {} else
|
|
{
|
|
// NOTE: The ucontext implementation requires architecture specific
|
|
// data definitions to operate so testing for it must be done
|
|
@@ -2279,10 +2341,9 @@
|
|
import core.sys.posix.ucontext;
|
|
}
|
|
}
|
|
-
|
|
- const size_t PAGESIZE;
|
|
}
|
|
|
|
+const size_t PAGESIZE;
|
|
|
|
static this()
|
|
{
|
|
@@ -2423,6 +2484,28 @@
|
|
ret;
|
|
}
|
|
}
|
|
+ else version( LLVM_AsmX86_Posix )
|
|
+ {
|
|
+ asm
|
|
+ {
|
|
+ // clobber registers to save
|
|
+ inc EBX;
|
|
+ inc ESI;
|
|
+ inc EDI;
|
|
+
|
|
+ // store oldp again with more acc
|
|
+ mov EAX, oldp;
|
|
+ mov [EAX], ESP;
|
|
+ // load newp to begin context swi
|
|
+ mov ESP, newp;
|
|
+ }
|
|
+ }
|
|
+/+
|
|
+ version( LLVM_AsmX86_64_Posix )
|
|
+ {
|
|
+ //TODO: Fiber implementation here
|
|
+ }
|
|
++/
|
|
else static if( is( ucontext_t ) )
|
|
{
|
|
Fiber cfib = Fiber.getThis();
|
|
@@ -3088,6 +3171,22 @@
|
|
push( 0x00000000 ); // ESI
|
|
push( 0x00000000 ); // EDI
|
|
}
|
|
+ else version( LLVM_AsmX86_Posix )
|
|
+ {
|
|
+ push( cast(size_t) &fiber_entryPoint ); // EIP
|
|
+ push( 0x00000000 ); // newp
|
|
+ push( 0x00000000 ); // oldp
|
|
+ push( 0x00000000 ); // EBP
|
|
+ push( 0x00000000 ); // EBX
|
|
+ push( 0x00000000 ); // ESI
|
|
+ push( 0x00000000 ); // EDI
|
|
+ }
|
|
+//TODO: Implement x86-64 fibers
|
|
+/+
|
|
+ else version( LLVM_AsmX86_Posix )
|
|
+ {
|
|
+ }
|
|
++/
|
|
else version( AsmPPC_Posix )
|
|
{
|
|
version( StackGrowsDown )
|
|
Index: src/gc/basic/gcx.d
|
|
===================================================================
|
|
--- src/gc/basic/gcx.d (revision 46)
|
|
+++ src/gc/basic/gcx.d (working copy)
|
|
@@ -55,7 +55,11 @@
|
|
private import cstdlib = core.stdc.stdlib : calloc, free, malloc, realloc;
|
|
private import core.stdc.string;
|
|
|
|
-debug private import core.stdc.stdio;
|
|
+debug(PRINTF)
|
|
+{
|
|
+ private import core.sys.posix.pthread;
|
|
+ private import core.stdc.stdio;
|
|
+}
|
|
|
|
version (GNU)
|
|
{
|
|
@@ -66,6 +70,12 @@
|
|
private import gcc.builtins; // for __builtin_unwind_init
|
|
}
|
|
|
|
+struct BlkInfo
|
|
+{
|
|
+ void* base;
|
|
+ size_t size;
|
|
+ uint attr;
|
|
+}
|
|
|
|
private
|
|
{
|
|
@@ -77,13 +87,6 @@
|
|
ALL_BITS = 0b1111_1111
|
|
}
|
|
|
|
- struct BlkInfo
|
|
- {
|
|
- void* base;
|
|
- size_t size;
|
|
- uint attr;
|
|
- }
|
|
-
|
|
extern (C) void* rt_stackBottom();
|
|
extern (C) void* rt_stackTop();
|
|
|
|
@@ -1468,7 +1471,7 @@
|
|
void initialize()
|
|
{ int dummy;
|
|
|
|
- (cast(byte*)&this)[0 .. Gcx.sizeof] = 0;
|
|
+ (cast(byte*)this)[0 .. Gcx.sizeof] = 0;
|
|
stackBottom = cast(char*)&dummy;
|
|
log_init();
|
|
debug (THREADINVARIANT)
|
|
Index: import/object.di
|
|
===================================================================
|
|
--- import/object.di (revision 46)
|
|
+++ import/object.di (working copy)
|
|
@@ -208,6 +208,13 @@
|
|
void function() dtor;
|
|
void function() unitTest;
|
|
|
|
+ // DMD actually has them too, but LDC doesn't allow the resulting type mismatch
|
|
+ version( LDC )
|
|
+ {
|
|
+ void* xgetMembers;
|
|
+ void function() ictor;
|
|
+ }
|
|
+
|
|
static int opApply(int delegate(inout ModuleInfo));
|
|
}
|
|
|
|
Index: import/core/stdc/stdarg.d
|
|
===================================================================
|
|
--- import/core/stdc/stdarg.d (revision 46)
|
|
+++ import/core/stdc/stdarg.d (working copy)
|
|
@@ -9,8 +9,12 @@
|
|
module core.stdc.stdarg;
|
|
|
|
|
|
-version( GNU )
|
|
+version( LDC )
|
|
{
|
|
+ public import ldc.cstdarg;
|
|
+}
|
|
+else version( GNU )
|
|
+{
|
|
public import std.c.stdarg;
|
|
}
|
|
else
|
|
Index: import/core/bitmanip.di
|
|
===================================================================
|
|
--- import/core/bitmanip.di (revision 46)
|
|
+++ import/core/bitmanip.di (working copy)
|
|
@@ -171,6 +171,10 @@
|
|
*/
|
|
uint outpl( uint port_address, uint value );
|
|
}
|
|
+else version( LDC )
|
|
+{
|
|
+ public import ldc.bitmanip;
|
|
+}
|
|
else
|
|
{
|
|
public import std.intrinsic;
|