Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52012 Signed-off-by: David Koller dk@cs.stanford.edu --- dlls/vcomp/main.c | 44 +++++++++++++++++++++++++++++++++++++ dlls/vcomp/vcomp.spec | 2 +- dlls/vcomp100/vcomp100.spec | 2 +- dlls/vcomp110/vcomp110.spec | 2 +- dlls/vcomp120/vcomp120.spec | 2 +- dlls/vcomp140/vcomp140.spec | 2 +- dlls/vcomp90/vcomp90.spec | 2 +- 7 files changed, 50 insertions(+), 6 deletions(-)
diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c index 91c16714ea6..239302eca7b 100644 --- a/dlls/vcomp/main.c +++ b/dlls/vcomp/main.c @@ -1616,6 +1616,50 @@ int CDECL _vcomp_for_dynamic_next(unsigned int *begin, unsigned int *end) return 0; }
+int CDECL _vcomp_for_dynamic_next_i8(ULONG64 *begin, ULONG64 *end) +{ + struct vcomp_thread_data *thread_data = vcomp_init_thread_data(); + struct vcomp_task_data *task_data = thread_data->task; + struct vcomp_team_data *team_data = thread_data->team; + int num_threads = team_data ? team_data->num_threads : 1; + + TRACE("(%p, %p)\n", begin, end); + + if (thread_data->dynamic_type == VCOMP_DYNAMIC_FLAGS_STATIC) + { + *begin = thread_data->dynamic_begin_i8; + *end = thread_data->dynamic_end_i8; + thread_data->dynamic_type = 0; + return 1; + } + else if (thread_data->dynamic_type == VCOMP_DYNAMIC_FLAGS_CHUNKED || + thread_data->dynamic_type == VCOMP_DYNAMIC_FLAGS_GUIDED) + { + ULONG64 iterations = 0; + EnterCriticalSection(&vcomp_section); + if (thread_data->dynamic == task_data->dynamic && + task_data->dynamic_iterations_i8 != 0) + { + iterations = min(task_data->dynamic_iterations_i8, task_data->dynamic_chunksize_i8); + if (thread_data->dynamic_type == VCOMP_DYNAMIC_FLAGS_GUIDED && + task_data->dynamic_iterations_i8 > num_threads * task_data->dynamic_chunksize_i8) + { + iterations = (task_data->dynamic_iterations_i8 + num_threads - 1) / num_threads; + } + *begin = task_data->dynamic_first_i8; + *end = task_data->dynamic_first_i8 + (iterations - 1) * task_data->dynamic_step_i8; + task_data->dynamic_iterations_i8 -= iterations; + task_data->dynamic_first_i8 += iterations * task_data->dynamic_step_i8; + if (!task_data->dynamic_iterations_i8) + *end = task_data->dynamic_last_i8; + } + LeaveCriticalSection(&vcomp_section); + return iterations != 0; + } + + return 0; +} + int CDECL omp_in_parallel(void) { TRACE("()\n"); diff --git a/dlls/vcomp/vcomp.spec b/dlls/vcomp/vcomp.spec index 3b87ee11127..f5fb23d7ad1 100644 --- a/dlls/vcomp/vcomp.spec +++ b/dlls/vcomp/vcomp.spec @@ -58,7 +58,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) @ cdecl _vcomp_for_dynamic_next(ptr ptr) -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) @ cdecl _vcomp_for_static_end() @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) diff --git a/dlls/vcomp100/vcomp100.spec b/dlls/vcomp100/vcomp100.spec index 3b87ee11127..f5fb23d7ad1 100644 --- a/dlls/vcomp100/vcomp100.spec +++ b/dlls/vcomp100/vcomp100.spec @@ -58,7 +58,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) @ cdecl _vcomp_for_dynamic_next(ptr ptr) -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) @ cdecl _vcomp_for_static_end() @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) diff --git a/dlls/vcomp110/vcomp110.spec b/dlls/vcomp110/vcomp110.spec index 9f0d22e273a..8f3458fa9a2 100644 --- a/dlls/vcomp110/vcomp110.spec +++ b/dlls/vcomp110/vcomp110.spec @@ -59,7 +59,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) @ cdecl _vcomp_for_dynamic_next(ptr ptr) -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) @ cdecl _vcomp_for_static_end() @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) diff --git a/dlls/vcomp120/vcomp120.spec b/dlls/vcomp120/vcomp120.spec index 9f0d22e273a..8f3458fa9a2 100644 --- a/dlls/vcomp120/vcomp120.spec +++ b/dlls/vcomp120/vcomp120.spec @@ -59,7 +59,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) @ cdecl _vcomp_for_dynamic_next(ptr ptr) -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) @ cdecl _vcomp_for_static_end() @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) diff --git a/dlls/vcomp140/vcomp140.spec b/dlls/vcomp140/vcomp140.spec index 9f0d22e273a..8f3458fa9a2 100644 --- a/dlls/vcomp140/vcomp140.spec +++ b/dlls/vcomp140/vcomp140.spec @@ -59,7 +59,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) @ cdecl _vcomp_for_dynamic_next(ptr ptr) -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) @ cdecl _vcomp_for_static_end() @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) diff --git a/dlls/vcomp90/vcomp90.spec b/dlls/vcomp90/vcomp90.spec index b618896c1f4..21bded4cdfd 100644 --- a/dlls/vcomp90/vcomp90.spec +++ b/dlls/vcomp90/vcomp90.spec @@ -58,7 +58,7 @@ @ cdecl _vcomp_for_dynamic_init(long long long long long) vcomp._vcomp_for_dynamic_init @ cdecl _vcomp_for_dynamic_init_i8(long int64 int64 int64 int64) vcomp._vcomp_for_dynamic_init_i8 @ cdecl _vcomp_for_dynamic_next(ptr ptr) vcomp._vcomp_for_dynamic_next -@ stub _vcomp_for_dynamic_next_i8 +@ cdecl _vcomp_for_dynamic_next_i8(ptr ptr) vcomp._vcomp_for_dynamic_next_i8 @ cdecl _vcomp_for_static_end() vcomp._vcomp_for_static_end @ cdecl _vcomp_for_static_init(long long long long ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init @ cdecl _vcomp_for_static_init_i8(int64 int64 int64 int64 ptr ptr ptr ptr ptr) vcomp._vcomp_for_static_init_i8