libphobos: Backport minimal MinGW support patches.
Merges upstream druntime 1ca80e4e, phobos b5e9661a0. Reviewed-on: https://github.com/dlang/druntime/pull/2587 https://github.com/dlang/phobos/pull/6981 From-SVN: r270638
This commit is contained in:
parent
7d5010ee7a
commit
be79ec008e
@ -1,4 +1,4 @@
|
||||
e03164b5259a9f116eb91dfa5a18c192fa72e575
|
||||
1ca80e4e0cf460575752a0c157ca52c184f4b982
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the dlang/druntime repository.
|
||||
|
@ -1291,35 +1291,7 @@ size_t fwrite(scope const void* ptr, size_t size, size_t nmemb, FILE* stream);
|
||||
c_long ftell(FILE* stream);
|
||||
}
|
||||
|
||||
version (MinGW)
|
||||
{
|
||||
// No unsafe pointer manipulation.
|
||||
extern (D) @trusted
|
||||
{
|
||||
///
|
||||
void rewind()(FILE* stream) { fseek(stream,0L,SEEK_SET); stream._flag = stream._flag & ~_IOERR; }
|
||||
///
|
||||
pure void clearerr()(FILE* stream) { stream._flag = stream._flag & ~(_IOERR|_IOEOF); }
|
||||
///
|
||||
pure int feof()(FILE* stream) { return stream._flag&_IOEOF; }
|
||||
///
|
||||
pure int ferror()(FILE* stream) { return stream._flag&_IOERR; }
|
||||
}
|
||||
///
|
||||
int __mingw_snprintf(scope char* s, size_t n, scope const char* fmt, ...);
|
||||
///
|
||||
alias __mingw_snprintf _snprintf;
|
||||
///
|
||||
alias __mingw_snprintf snprintf;
|
||||
|
||||
///
|
||||
int __mingw_vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
|
||||
///
|
||||
alias __mingw_vsnprintf _vsnprintf;
|
||||
///
|
||||
alias __mingw_vsnprintf vsnprintf;
|
||||
}
|
||||
else version (CRuntime_DigitalMars)
|
||||
version (CRuntime_DigitalMars)
|
||||
{
|
||||
// No unsafe pointer manipulation.
|
||||
extern (D) @trusted
|
||||
@ -1362,6 +1334,23 @@ else version (CRuntime_Microsoft)
|
||||
pure int fileno(FILE* stream);
|
||||
}
|
||||
|
||||
version (MinGW)
|
||||
{
|
||||
int __mingw_snprintf(scope char* s, size_t n, scope const char* fmt, ...);
|
||||
///
|
||||
alias __mingw_snprintf _snprintf;
|
||||
///
|
||||
alias __mingw_snprintf snprintf;
|
||||
|
||||
///
|
||||
int __mingw_vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
|
||||
///
|
||||
alias __mingw_vsnprintf _vsnprintf;
|
||||
///
|
||||
alias __mingw_vsnprintf vsnprintf;
|
||||
}
|
||||
else
|
||||
{
|
||||
///
|
||||
int _snprintf(scope char* s, size_t n, scope const char* format, ...);
|
||||
///
|
||||
@ -1371,6 +1360,7 @@ else version (CRuntime_Microsoft)
|
||||
int _vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
|
||||
///
|
||||
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
|
||||
}
|
||||
|
||||
///
|
||||
int _fputc_nolock(int c, FILE *fp);
|
||||
|
@ -328,7 +328,9 @@ public:
|
||||
*/
|
||||
bool dll_fixTLS( HINSTANCE hInstance, void* tlsstart, void* tlsend, void* tls_callbacks_a, int* tlsindex ) nothrow
|
||||
{
|
||||
version (Win64)
|
||||
version (GNU_EMUTLS)
|
||||
return true;
|
||||
else version (Win64)
|
||||
return true; // fixed
|
||||
else version (Win32)
|
||||
{
|
||||
|
@ -49,9 +49,17 @@ version (Solaris)
|
||||
import core.sys.solaris.sys.types;
|
||||
}
|
||||
|
||||
// this should be true for most architectures
|
||||
version (GNU_StackGrowsDown)
|
||||
version (GNU)
|
||||
{
|
||||
import gcc.builtins;
|
||||
version (GNU_StackGrowsDown)
|
||||
version = StackGrowsDown;
|
||||
}
|
||||
else
|
||||
{
|
||||
// this should be true for most architectures
|
||||
version = StackGrowsDown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the process ID of the calling process, which is guaranteed to be
|
||||
@ -301,11 +309,6 @@ else version (Posix)
|
||||
import core.sys.darwin.pthread : pthread_mach_thread_np;
|
||||
}
|
||||
|
||||
version (GNU)
|
||||
{
|
||||
import gcc.builtins;
|
||||
}
|
||||
|
||||
//
|
||||
// Entry point for POSIX threads
|
||||
//
|
||||
|
@ -340,7 +340,15 @@ extern (C) int _d_run_main(int argc, char **argv, MainFunc mainFunc)
|
||||
version (CRuntime_Microsoft)
|
||||
{
|
||||
// enable full precision for reals
|
||||
version (Win64)
|
||||
version (GNU)
|
||||
{
|
||||
size_t fpu_cw;
|
||||
asm { "fstcw %0" : "=m" (fpu_cw); }
|
||||
fpu_cw |= 0b11_00_111111; // 11: use 64 bit extended-precision
|
||||
// 111111: mask all FP exceptions
|
||||
asm { "fldcw %0" : "=m" (fpu_cw); }
|
||||
}
|
||||
else version (Win64)
|
||||
asm
|
||||
{
|
||||
push RAX;
|
||||
|
@ -1,4 +1,4 @@
|
||||
b538f758a4d274b64751f80564b0207845cd018c
|
||||
b5e9661a089b6514e01fa5195c0f2bc9cc06eddd
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the dlang/phobos repository.
|
||||
|
@ -174,6 +174,12 @@ else version (D_InlineAsm_X86_64)
|
||||
version = InlineAsm_X86_Any;
|
||||
}
|
||||
|
||||
version (CRuntime_Microsoft)
|
||||
{
|
||||
version (InlineAsm_X86_Any)
|
||||
version = MSVC_InlineAsm;
|
||||
}
|
||||
|
||||
version (X86_64) version = StaticallyHaveSSE;
|
||||
version (X86) version (OSX) version = StaticallyHaveSSE;
|
||||
|
||||
@ -3692,7 +3698,7 @@ real logb(real x) @trusted nothrow @nogc
|
||||
ret ;
|
||||
}
|
||||
}
|
||||
else version (CRuntime_Microsoft)
|
||||
else version (MSVC_InlineAsm)
|
||||
{
|
||||
asm pure nothrow @nogc
|
||||
{
|
||||
@ -3979,7 +3985,7 @@ real ceil(real x) @trusted pure nothrow @nogc
|
||||
ret ;
|
||||
}
|
||||
}
|
||||
else version (CRuntime_Microsoft)
|
||||
else version (MSVC_InlineAsm)
|
||||
{
|
||||
short cw;
|
||||
asm pure nothrow @nogc
|
||||
@ -4107,7 +4113,7 @@ real floor(real x) @trusted pure nothrow @nogc
|
||||
ret ;
|
||||
}
|
||||
}
|
||||
else version (CRuntime_Microsoft)
|
||||
else version (MSVC_InlineAsm)
|
||||
{
|
||||
short cw;
|
||||
asm pure nothrow @nogc
|
||||
@ -4607,7 +4613,7 @@ real trunc(real x) @trusted nothrow @nogc
|
||||
ret ;
|
||||
}
|
||||
}
|
||||
else version (CRuntime_Microsoft)
|
||||
else version (MSVC_InlineAsm)
|
||||
{
|
||||
short cw;
|
||||
asm pure nothrow @nogc
|
||||
|
Loading…
Reference in New Issue
Block a user