Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 571228 | Differences between
and this patch

Collapse All | Expand All

(-)openmp-3.9.1.src.orig/runtime/src/kmp.h (-20 / +20 lines)
Lines 83-89 Link Here
83
# include "hwloc.h"
83
# include "hwloc.h"
84
#endif
84
#endif
85
85
86
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
86
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
87
#include <xmmintrin.h>
87
#include <xmmintrin.h>
88
#endif
88
#endif
89
89
Lines 425-431 Link Here
425
};
425
};
426
#endif /* KMP_OS_LINUX */
426
#endif /* KMP_OS_LINUX */
427
427
428
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
428
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
429
enum mic_type {
429
enum mic_type {
430
    non_mic,
430
    non_mic,
431
    mic1,
431
    mic1,
Lines 442-448 Link Here
442
#define KMP_FAST_REDUCTION_BARRIER 1
442
#define KMP_FAST_REDUCTION_BARRIER 1
443
443
444
#undef KMP_FAST_REDUCTION_CORE_DUO
444
#undef KMP_FAST_REDUCTION_CORE_DUO
445
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
445
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
446
    #define KMP_FAST_REDUCTION_CORE_DUO 1
446
    #define KMP_FAST_REDUCTION_CORE_DUO 1
447
#endif
447
#endif
448
448
Lines 857-866 Link Here
857
857
858
enum affinity_top_method {
858
enum affinity_top_method {
859
    affinity_top_method_all = 0, // try all (supported) methods, in order
859
    affinity_top_method_all = 0, // try all (supported) methods, in order
860
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
860
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
861
    affinity_top_method_apicid,
861
    affinity_top_method_apicid,
862
    affinity_top_method_x2apicid,
862
    affinity_top_method_x2apicid,
863
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
863
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
864
    affinity_top_method_cpuinfo, // KMP_CPUINFO_FILE is usable on Windows* OS, too
864
    affinity_top_method_cpuinfo, // KMP_CPUINFO_FILE is usable on Windows* OS, too
865
#if KMP_GROUP_AFFINITY
865
#if KMP_GROUP_AFFINITY
866
    affinity_top_method_group,
866
    affinity_top_method_group,
Lines 1013-1019 Link Here
1013
1013
1014
#if KMP_ARCH_X86
1014
#if KMP_ARCH_X86
1015
# define KMP_DEFAULT_STKSIZE     ((size_t)(2 * 1024 * 1024))
1015
# define KMP_DEFAULT_STKSIZE     ((size_t)(2 * 1024 * 1024))
1016
#elif KMP_ARCH_X86_64
1016
#elif KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1017
# define KMP_DEFAULT_STKSIZE     ((size_t)(4 * 1024 * 1024))
1017
# define KMP_DEFAULT_STKSIZE     ((size_t)(4 * 1024 * 1024))
1018
# define KMP_BACKUP_STKSIZE      ((size_t)(2 * 1024 * 1024))
1018
# define KMP_BACKUP_STKSIZE      ((size_t)(2 * 1024 * 1024))
1019
#else
1019
#else
Lines 1089-1095 Link Here
1089
1089
1090
/* Minimum number of threads before switch to TLS gtid (experimentally determined) */
1090
/* Minimum number of threads before switch to TLS gtid (experimentally determined) */
1091
/* josh TODO: what about OS X* tuning? */
1091
/* josh TODO: what about OS X* tuning? */
1092
#if   KMP_ARCH_X86 || KMP_ARCH_X86_64
1092
#if   KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1093
# define KMP_TLS_GTID_MIN     5
1093
# define KMP_TLS_GTID_MIN     5
1094
#else
1094
#else
1095
# define KMP_TLS_GTID_MIN     INT_MAX
1095
# define KMP_TLS_GTID_MIN     INT_MAX
Lines 1139-1145 Link Here
1139
#  define KMP_NEXT_WAIT   512U          /* susequent number of spin-tests */
1139
#  define KMP_NEXT_WAIT   512U          /* susequent number of spin-tests */
1140
#endif
1140
#endif
1141
1141
1142
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1142
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1143
typedef struct kmp_cpuid {
1143
typedef struct kmp_cpuid {
1144
    kmp_uint32  eax;
1144
    kmp_uint32  eax;
1145
    kmp_uint32  ebx;
1145
    kmp_uint32  ebx;
Lines 1253-1259 Link Here
1253
    long nivcsw;          /* the number of times a context switch was forced           */
1253
    long nivcsw;          /* the number of times a context switch was forced           */
1254
} kmp_sys_info_t;
1254
} kmp_sys_info_t;
1255
1255
1256
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1256
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1257
typedef struct kmp_cpuinfo {
1257
typedef struct kmp_cpuinfo {
1258
    int        initialized;  // If 0, other fields are not initialized.
1258
    int        initialized;  // If 0, other fields are not initialized.
1259
    int        signature;    // CPUID(1).EAX
1259
    int        signature;    // CPUID(1).EAX
Lines 2508-2514 Link Here
2508
// Set up how many argv pointers will fit in cache lines containing t_inline_argv. Historically, we
2508
// Set up how many argv pointers will fit in cache lines containing t_inline_argv. Historically, we
2509
// have supported at least 96 bytes. Using a larger value for more space between the master write/worker
2509
// have supported at least 96 bytes. Using a larger value for more space between the master write/worker
2510
// read section and read/write by all section seems to buy more performance on EPCC PARALLEL.
2510
// read section and read/write by all section seems to buy more performance on EPCC PARALLEL.
2511
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2511
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2512
# define KMP_INLINE_ARGV_BYTES         ( 4 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) + 2 * sizeof(kmp_int8) + sizeof(kmp_int16) + sizeof(kmp_uint32) ) % CACHE_LINE ) )
2512
# define KMP_INLINE_ARGV_BYTES         ( 4 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) + 2 * sizeof(kmp_int8) + sizeof(kmp_int16) + sizeof(kmp_uint32) ) % CACHE_LINE ) )
2513
#else
2513
#else
2514
# define KMP_INLINE_ARGV_BYTES         ( 2 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) ) % CACHE_LINE ) )
2514
# define KMP_INLINE_ARGV_BYTES         ( 2 * CACHE_LINE - ( ( 3 * KMP_PTR_SKIP + 2 * sizeof(int) ) % CACHE_LINE ) )
Lines 2549-2560 Link Here
2549
    ompt_lw_taskteam_t      *ompt_serialized_team_info;
2549
    ompt_lw_taskteam_t      *ompt_serialized_team_info;
2550
#endif
2550
#endif
2551
2551
2552
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2552
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2553
    kmp_int8                 t_fp_control_saved;
2553
    kmp_int8                 t_fp_control_saved;
2554
    kmp_int8                 t_pad2b;
2554
    kmp_int8                 t_pad2b;
2555
    kmp_int16                t_x87_fpu_control_word; // FP control regs
2555
    kmp_int16                t_x87_fpu_control_word; // FP control regs
2556
    kmp_uint32               t_mxcsr;
2556
    kmp_uint32               t_mxcsr;
2557
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
2557
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
2558
2558
2559
    void                    *t_inline_argv[ KMP_INLINE_ARGV_ENTRIES ];
2559
    void                    *t_inline_argv[ KMP_INLINE_ARGV_ENTRIES ];
2560
2560
Lines 2576-2582 Link Here
2576
    int t_size_changed; // team size was changed?: 0: no, 1: yes, -1: changed via omp_set_num_threads() call
2576
    int t_size_changed; // team size was changed?: 0: no, 1: yes, -1: changed via omp_set_num_threads() call
2577
2577
2578
    // Read/write by workers as well -----------------------------------------------------------------------
2578
    // Read/write by workers as well -----------------------------------------------------------------------
2579
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64) && !KMP_USE_HWLOC
2579
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && !KMP_USE_HWLOC
2580
    // Using CACHE_LINE=64 reduces memory footprint, but causes a big perf regression of epcc 'parallel'
2580
    // Using CACHE_LINE=64 reduces memory footprint, but causes a big perf regression of epcc 'parallel'
2581
    // and 'barrier' on fxe256lin01. This extra padding serves to fix the performance of epcc 'parallel'
2581
    // and 'barrier' on fxe256lin01. This extra padding serves to fix the performance of epcc 'parallel'
2582
    // and 'barrier' when CACHE_LINE=64. TODO: investigate more and get rid if this padding.
2582
    // and 'barrier' when CACHE_LINE=64. TODO: investigate more and get rid if this padding.
Lines 2712-2718 Link Here
2712
extern int      __kmp_storage_map_verbose; /* True means storage map includes placement info */
2712
extern int      __kmp_storage_map_verbose; /* True means storage map includes placement info */
2713
extern int      __kmp_storage_map_verbose_specified;
2713
extern int      __kmp_storage_map_verbose_specified;
2714
2714
2715
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2715
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2716
extern kmp_cpuinfo_t    __kmp_cpuinfo;
2716
extern kmp_cpuinfo_t    __kmp_cpuinfo;
2717
#endif
2717
#endif
2718
2718
Lines 2840-2850 Link Here
2840
#endif
2840
#endif
2841
extern int        __kmp_tls_gtid_min;   /* #threads below which use sp search for gtid */
2841
extern int        __kmp_tls_gtid_min;   /* #threads below which use sp search for gtid */
2842
extern int        __kmp_foreign_tp;     /* If true, separate TP var for each foreign thread */
2842
extern int        __kmp_foreign_tp;     /* If true, separate TP var for each foreign thread */
2843
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2843
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2844
extern int        __kmp_inherit_fp_control; /* copy fp creg(s) parent->workers at fork */
2844
extern int        __kmp_inherit_fp_control; /* copy fp creg(s) parent->workers at fork */
2845
extern kmp_int16  __kmp_init_x87_fpu_control_word; /* init thread's FP control reg */
2845
extern kmp_int16  __kmp_init_x87_fpu_control_word; /* init thread's FP control reg */
2846
extern kmp_uint32 __kmp_init_mxcsr;      /* init thread's mxscr */
2846
extern kmp_uint32 __kmp_init_mxcsr;      /* init thread's mxscr */
2847
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
2847
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
2848
2848
2849
extern int        __kmp_dflt_max_active_levels; /* max_active_levels for nested parallelism enabled by default a la OMP_MAX_ACTIVE_LEVELS */
2849
extern int        __kmp_dflt_max_active_levels; /* max_active_levels for nested parallelism enabled by default a la OMP_MAX_ACTIVE_LEVELS */
2850
extern int        __kmp_dispatch_num_buffers; /* max possible dynamic loops in concurrent execution per team */
2850
extern int        __kmp_dispatch_num_buffers; /* max possible dynamic loops in concurrent execution per team */
Lines 2858-2864 Link Here
2858
extern int __kmp_clock_function_param;
2858
extern int __kmp_clock_function_param;
2859
# endif /* KMP_OS_LINUX */
2859
# endif /* KMP_OS_LINUX */
2860
2860
2861
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2861
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2862
extern enum mic_type __kmp_mic_type;
2862
extern enum mic_type __kmp_mic_type;
2863
#endif
2863
#endif
2864
2864
Lines 3277-3283 Link Here
3277
#endif
3277
#endif
3278
  microtask_t microtask, launch_t invoker,
3278
  microtask_t microtask, launch_t invoker,
3279
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
3279
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
3280
#if (KMP_ARCH_ARM || KMP_ARCH_X86_64 || KMP_ARCH_AARCH64) && KMP_OS_LINUX
3280
#if (KMP_ARCH_ARM || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_AARCH64) && KMP_OS_LINUX
3281
                             va_list *ap
3281
                             va_list *ap
3282
#else
3282
#else
3283
                             va_list ap
3283
                             va_list ap
Lines 3374-3380 Link Here
3374
// Assembly routines that have no compiler intrinsic replacement
3374
// Assembly routines that have no compiler intrinsic replacement
3375
//
3375
//
3376
3376
3377
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3377
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
3378
3378
3379
extern void       __kmp_query_cpuid( kmp_cpuinfo_t *p );
3379
extern void       __kmp_query_cpuid( kmp_cpuinfo_t *p );
3380
3380
Lines 3386-3392 Link Here
3386
extern void __kmp_clear_x87_fpu_status_word();
3386
extern void __kmp_clear_x87_fpu_status_word();
3387
# define KMP_X86_MXCSR_MASK      0xffffffc0   /* ignore status flags (6 lsb) */
3387
# define KMP_X86_MXCSR_MASK      0xffffffc0   /* ignore status flags (6 lsb) */
3388
3388
3389
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
3389
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
3390
3390
3391
extern int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int npr, int argc, void *argv[]
3391
extern int __kmp_invoke_microtask( microtask_t pkfn, int gtid, int npr, int argc, void *argv[]
3392
#if OMPT_SUPPORT
3392
#if OMPT_SUPPORT
(-)openmp-3.9.1.src.orig/runtime/src/kmp_affinity.cpp (-6 / +6 lines)
Lines 812-818 Link Here
812
# endif /* KMP_GROUP_AFFINITY */
812
# endif /* KMP_GROUP_AFFINITY */
813
813
814
814
815
# if KMP_ARCH_X86 || KMP_ARCH_X86_64
815
# if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
816
816
817
static int
817
static int
818
__kmp_cpuid_mask_width(int count) {
818
__kmp_cpuid_mask_width(int count) {
Lines 1874-1880 Link Here
1874
}
1874
}
1875
1875
1876
1876
1877
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1877
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1878
1878
1879
1879
1880
#define osIdIndex       0
1880
#define osIdIndex       0
Lines 3617-3623 Link Here
3617
        }
3617
        }
3618
# endif
3618
# endif
3619
3619
3620
# if KMP_ARCH_X86 || KMP_ARCH_X86_64
3620
# if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
3621
3621
3622
        if (depth < 0) {
3622
        if (depth < 0) {
3623
            if (__kmp_affinity_verbose) {
3623
            if (__kmp_affinity_verbose) {
Lines 3649-3655 Link Here
3649
            }
3649
            }
3650
        }
3650
        }
3651
3651
3652
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
3652
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
3653
3653
3654
# if KMP_OS_LINUX
3654
# if KMP_OS_LINUX
3655
3655
Lines 3722-3728 Link Here
3722
    // group affinity, which might have been implicitly set.
3722
    // group affinity, which might have been implicitly set.
3723
    //
3723
    //
3724
3724
3725
# if KMP_ARCH_X86 || KMP_ARCH_X86_64
3725
# if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
3726
3726
3727
    else if (__kmp_affinity_top_method == affinity_top_method_x2apicid) {
3727
    else if (__kmp_affinity_top_method == affinity_top_method_x2apicid) {
3728
        if (__kmp_affinity_verbose) {
3728
        if (__kmp_affinity_verbose) {
Lines 3755-3761 Link Here
3755
        }
3755
        }
3756
    }
3756
    }
3757
3757
3758
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
3758
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
3759
3759
3760
    else if (__kmp_affinity_top_method == affinity_top_method_cpuinfo) {
3760
    else if (__kmp_affinity_top_method == affinity_top_method_cpuinfo) {
3761
        const char *filename;
3761
        const char *filename;
(-)openmp-3.9.1.src.orig/runtime/src/kmp_atomic.c (-19 / +19 lines)
Lines 746-752 Link Here
746
// end of the first part of the workaround for C78287
746
// end of the first part of the workaround for C78287
747
#endif // USE_CMPXCHG_FIX
747
#endif // USE_CMPXCHG_FIX
748
748
749
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
749
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
750
750
751
// ------------------------------------------------------------------------
751
// ------------------------------------------------------------------------
752
// X86 or X86_64: no alignment problems ====================================
752
// X86 or X86_64: no alignment problems ====================================
Lines 813-819 Link Here
813
}
813
}
814
// end of the second part of the workaround for C78287
814
// end of the second part of the workaround for C78287
815
#endif // USE_CMPXCHG_FIX
815
#endif // USE_CMPXCHG_FIX
816
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
816
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
817
817
818
// Routines for ATOMIC 4-byte operands addition and subtraction
818
// Routines for ATOMIC 4-byte operands addition and subtraction
819
ATOMIC_FIXED_ADD( fixed4, add, kmp_int32,  32, +, 4i, 3, 0            )  // __kmpc_atomic_fixed4_add
819
ATOMIC_FIXED_ADD( fixed4, add, kmp_int32,  32, +, 4i, 3, 0            )  // __kmpc_atomic_fixed4_add
Lines 904-910 Link Here
904
    OP_CRITICAL( = *lhs OP, LCK_ID )                                      \
904
    OP_CRITICAL( = *lhs OP, LCK_ID )                                      \
905
}
905
}
906
906
907
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
907
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
908
908
909
// ------------------------------------------------------------------------
909
// ------------------------------------------------------------------------
910
// X86 or X86_64: no alignment problems ===================================
910
// X86 or X86_64: no alignment problems ===================================
Lines 927-933 Link Here
927
        OP_CRITICAL(= *lhs OP,LCK_ID)  /* unaligned - use critical */     \
927
        OP_CRITICAL(= *lhs OP,LCK_ID)  /* unaligned - use critical */     \
928
    }                                                                     \
928
    }                                                                     \
929
}
929
}
930
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
930
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
931
931
932
ATOMIC_CMPX_L( fixed1, andl, char,       8, &&, 1i, 0, KMP_ARCH_X86 )  // __kmpc_atomic_fixed1_andl
932
ATOMIC_CMPX_L( fixed1, andl, char,       8, &&, 1i, 0, KMP_ARCH_X86 )  // __kmpc_atomic_fixed1_andl
933
ATOMIC_CMPX_L( fixed1,  orl, char,       8, ||, 1i, 0, KMP_ARCH_X86 )  // __kmpc_atomic_fixed1_orl
933
ATOMIC_CMPX_L( fixed1,  orl, char,       8, ||, 1i, 0, KMP_ARCH_X86 )  // __kmpc_atomic_fixed1_orl
Lines 997-1003 Link Here
997
    }                                                                      \
997
    }                                                                      \
998
}
998
}
999
999
1000
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1000
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1001
1001
1002
// -------------------------------------------------------------------------
1002
// -------------------------------------------------------------------------
1003
// X86 or X86_64: no alignment problems ====================================
1003
// X86 or X86_64: no alignment problems ====================================
Lines 1024-1030 Link Here
1024
        }                                                                  \
1024
        }                                                                  \
1025
    }                                                                      \
1025
    }                                                                      \
1026
}
1026
}
1027
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1027
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1028
1028
1029
MIN_MAX_COMPXCHG( fixed1,  max, char,        8, <, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_max
1029
MIN_MAX_COMPXCHG( fixed1,  max, char,        8, <, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_max
1030
MIN_MAX_COMPXCHG( fixed1,  min, char,        8, >, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_min
1030
MIN_MAX_COMPXCHG( fixed1,  min, char,        8, >, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_min
Lines 1056-1062 Link Here
1056
}
1056
}
1057
1057
1058
// ------------------------------------------------------------------------
1058
// ------------------------------------------------------------------------
1059
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1059
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1060
// ------------------------------------------------------------------------
1060
// ------------------------------------------------------------------------
1061
// X86 or X86_64: no alignment problems ===================================
1061
// X86 or X86_64: no alignment problems ===================================
1062
#define ATOMIC_CMPX_EQV(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
1062
#define ATOMIC_CMPX_EQV(TYPE_ID,OP_ID,TYPE,BITS,OP,LCK_ID,MASK,GOMP_FLAG) \
Lines 1078-1084 Link Here
1078
        OP_CRITICAL(^=~,LCK_ID)    /* unaligned address - use critical */ \
1078
        OP_CRITICAL(^=~,LCK_ID)    /* unaligned address - use critical */ \
1079
    }                                                                     \
1079
    }                                                                     \
1080
}
1080
}
1081
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1081
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1082
1082
1083
ATOMIC_CMPXCHG(  fixed1, neqv, kmp_int8,   8,   ^, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_neqv
1083
ATOMIC_CMPXCHG(  fixed1, neqv, kmp_int8,   8,   ^, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_neqv
1084
ATOMIC_CMPXCHG(  fixed2, neqv, kmp_int16, 16,   ^, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_neqv
1084
ATOMIC_CMPXCHG(  fixed2, neqv, kmp_int16, 16,   ^, 2i, 1, KMP_ARCH_X86 ) // __kmpc_atomic_fixed2_neqv
Lines 1161-1167 Link Here
1161
1161
1162
// OpenMP 4.0: x = expr binop x for non-commutative operations.
1162
// OpenMP 4.0: x = expr binop x for non-commutative operations.
1163
// Supported only on IA-32 architecture and Intel(R) 64
1163
// Supported only on IA-32 architecture and Intel(R) 64
1164
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1164
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1165
1165
1166
// ------------------------------------------------------------------------
1166
// ------------------------------------------------------------------------
1167
// Operation on *lhs, rhs bound by critical section
1167
// Operation on *lhs, rhs bound by critical section
Lines 1322-1328 Link Here
1322
#endif
1322
#endif
1323
1323
1324
1324
1325
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
1325
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1326
// End of OpenMP 4.0: x = expr binop x for non-commutative operations.
1326
// End of OpenMP 4.0: x = expr binop x for non-commutative operations.
1327
1327
1328
#endif //OMP_40_ENABLED
1328
#endif //OMP_40_ENABLED
Lines 1353-1359 Link Here
1353
}
1353
}
1354
1354
1355
// -------------------------------------------------------------------------
1355
// -------------------------------------------------------------------------
1356
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1356
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1357
// -------------------------------------------------------------------------
1357
// -------------------------------------------------------------------------
1358
// X86 or X86_64: no alignment problems ====================================
1358
// X86 or X86_64: no alignment problems ====================================
1359
#define ATOMIC_CMPXCHG_MIX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
1359
#define ATOMIC_CMPXCHG_MIX(TYPE_ID,TYPE,OP_ID,BITS,OP,RTYPE_ID,RTYPE,LCK_ID,MASK,GOMP_FLAG) \
Lines 1375-1381 Link Here
1375
        OP_CRITICAL(OP##=,LCK_ID)  /* unaligned address - use critical */                   \
1375
        OP_CRITICAL(OP##=,LCK_ID)  /* unaligned address - use critical */                   \
1376
    }                                                                                       \
1376
    }                                                                                       \
1377
}
1377
}
1378
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1378
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1379
1379
1380
// RHS=float8
1380
// RHS=float8
1381
ATOMIC_CMPXCHG_MIX( fixed1, char,       mul,  8, *, float8, kmp_real64, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul_float8
1381
ATOMIC_CMPXCHG_MIX( fixed1, char,       mul,  8, *, float8, kmp_real64, 1i, 0, KMP_ARCH_X86 ) // __kmpc_atomic_fixed1_mul_float8
Lines 1433-1439 Link Here
1433
ATOMIC_CRITICAL_FP( float10, long double,    div, /, fp, _Quad, 10r,   1 )            // __kmpc_atomic_float10_div_fp
1433
ATOMIC_CRITICAL_FP( float10, long double,    div, /, fp, _Quad, 10r,   1 )            // __kmpc_atomic_float10_div_fp
1434
#endif
1434
#endif
1435
1435
1436
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1436
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1437
// ------------------------------------------------------------------------
1437
// ------------------------------------------------------------------------
1438
// X86 or X86_64: no alignment problems ====================================
1438
// X86 or X86_64: no alignment problems ====================================
1439
#if USE_CMPXCHG_FIX
1439
#if USE_CMPXCHG_FIX
Lines 1464-1470 Link Here
1464
        OP_CRITICAL(OP##=,LCK_ID)  /* unaligned address - use critical */                     \
1464
        OP_CRITICAL(OP##=,LCK_ID)  /* unaligned address - use critical */                     \
1465
    }                                                                                         \
1465
    }                                                                                         \
1466
}
1466
}
1467
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1467
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1468
1468
1469
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, add, 64, +, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_add_cmplx8
1469
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, add, 64, +, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_add_cmplx8
1470
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, sub, 64, -, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_sub_cmplx8
1470
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, sub, 64, -, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_sub_cmplx8
Lines 1472-1478 Link Here
1472
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, div, 64, /, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_div_cmplx8
1472
ATOMIC_CMPXCHG_CMPLX( cmplx4, kmp_cmplx32, div, 64, /, cmplx8,  kmp_cmplx64,  8c, 7, KMP_ARCH_X86 ) // __kmpc_atomic_cmplx4_div_cmplx8
1473
1473
1474
// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
1474
// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
1475
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1475
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1476
1476
1477
//////////////////////////////////////////////////////////////////////////////////////////////////////
1477
//////////////////////////////////////////////////////////////////////////////////////////////////////
1478
// ------------------------------------------------------------------------
1478
// ------------------------------------------------------------------------
Lines 2546-2552 Link Here
2546
2546
2547
#endif //OMP_40_ENABLED
2547
#endif //OMP_40_ENABLED
2548
2548
2549
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
2549
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2550
2550
2551
2551
2552
#undef OP_CRITICAL
2552
#undef OP_CRITICAL
Lines 2616-2622 Link Here
2616
    if (
2616
    if (
2617
#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
2617
#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
2618
        FALSE                                   /* must use lock */
2618
        FALSE                                   /* must use lock */
2619
#elif KMP_ARCH_X86 || KMP_ARCH_X86_64
2619
#elif KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2620
	TRUE					/* no alignment problems */
2620
	TRUE					/* no alignment problems */
2621
#else
2621
#else
2622
	! ( (kmp_uintptr_t) lhs & 0x1)		/* make sure address is 2-byte aligned */
2622
	! ( (kmp_uintptr_t) lhs & 0x1)		/* make sure address is 2-byte aligned */
Lines 2675-2681 Link Here
2675
        // FIXME: On IA-32 architecture, gcc uses cmpxchg only for 4-byte ints.
2675
        // FIXME: On IA-32 architecture, gcc uses cmpxchg only for 4-byte ints.
2676
        // Gomp compatibility is broken if this routine is called for floats.
2676
        // Gomp compatibility is broken if this routine is called for floats.
2677
        //
2677
        //
2678
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2678
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2679
	TRUE					/* no alignment problems */
2679
	TRUE					/* no alignment problems */
2680
#else
2680
#else
2681
	! ( (kmp_uintptr_t) lhs & 0x3)		/* make sure address is 4-byte aligned */
2681
	! ( (kmp_uintptr_t) lhs & 0x3)		/* make sure address is 4-byte aligned */
Lines 2733-2739 Link Here
2733
2733
2734
#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
2734
#if KMP_ARCH_X86 && defined(KMP_GOMP_COMPAT)
2735
        FALSE                                   /* must use lock */
2735
        FALSE                                   /* must use lock */
2736
#elif KMP_ARCH_X86 || KMP_ARCH_X86_64
2736
#elif KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2737
	TRUE					/* no alignment problems */
2737
	TRUE					/* no alignment problems */
2738
#else
2738
#else
2739
	! ( (kmp_uintptr_t) lhs & 0x7)		/* make sure address is 8-byte aligned */
2739
	! ( (kmp_uintptr_t) lhs & 0x7)		/* make sure address is 8-byte aligned */
(-)openmp-3.9.1.src.orig/runtime/src/kmp_atomic.h (-4 / +4 lines)
Lines 600-606 Link Here
600
600
601
// OpenMP 4.0: x = expr binop x for non-commutative operations.
601
// OpenMP 4.0: x = expr binop x for non-commutative operations.
602
// Supported only on IA-32 architecture and Intel(R) 64
602
// Supported only on IA-32 architecture and Intel(R) 64
603
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
603
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
604
604
605
void __kmpc_atomic_fixed1_sub_rev(  ident_t *id_ref, int gtid, char * lhs, char rhs );
605
void __kmpc_atomic_fixed1_sub_rev(  ident_t *id_ref, int gtid, char * lhs, char rhs );
606
void __kmpc_atomic_fixed1_div_rev(  ident_t *id_ref, int gtid, char * lhs, char rhs );
606
void __kmpc_atomic_fixed1_div_rev(  ident_t *id_ref, int gtid, char * lhs, char rhs );
Lines 654-660 Link Here
654
#endif
654
#endif
655
#endif // KMP_HAVE_QUAD
655
#endif // KMP_HAVE_QUAD
656
656
657
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
657
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
658
658
659
#endif //OMP_40_ENABLED
659
#endif //OMP_40_ENABLED
660
660
Lines 733-739 Link Here
733
void __kmpc_atomic_32( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
733
void __kmpc_atomic_32( ident_t *id_ref, int gtid, void* lhs, void* rhs, void (*f)( void *, void *, void * ) );
734
734
735
// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
735
// READ, WRITE, CAPTURE are supported only on IA-32 architecture and Intel(R) 64
736
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
736
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
737
737
738
//
738
//
739
//  Below routines for atomic READ are listed
739
//  Below routines for atomic READ are listed
Lines 1031-1037 Link Here
1031
1031
1032
#endif //OMP_40_ENABLED
1032
#endif //OMP_40_ENABLED
1033
1033
1034
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64
1034
#endif //KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1035
1035
1036
/* ------------------------------------------------------------------------ */
1036
/* ------------------------------------------------------------------------ */
1037
/* ------------------------------------------------------------------------ */
1037
/* ------------------------------------------------------------------------ */
(-)openmp-3.9.1.src.orig/runtime/src/kmp_csupport.c (-8 / +8 lines)
Lines 321-327 Link Here
321
            VOLATILE_CAST(microtask_t) microtask, // "wrapped" task
321
            VOLATILE_CAST(microtask_t) microtask, // "wrapped" task
322
            VOLATILE_CAST(launch_t)    __kmp_invoke_task_func,
322
            VOLATILE_CAST(launch_t)    __kmp_invoke_task_func,
323
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
323
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
324
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
324
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
325
            &ap
325
            &ap
326
#else
326
#else
327
            ap
327
            ap
Lines 415-421 Link Here
415
#endif
415
#endif
416
            VOLATILE_CAST(microtask_t) __kmp_teams_master, // "wrapped" task
416
            VOLATILE_CAST(microtask_t) __kmp_teams_master, // "wrapped" task
417
            VOLATILE_CAST(launch_t)    __kmp_invoke_teams_master,
417
            VOLATILE_CAST(launch_t)    __kmp_invoke_teams_master,
418
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
418
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
419
            &ap
419
            &ap
420
#else
420
#else
421
            ap
421
            ap
Lines 543-555 Link Here
543
543
544
        /* return to the parallel section */
544
        /* return to the parallel section */
545
545
546
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
546
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
547
        if ( __kmp_inherit_fp_control && serial_team->t.t_fp_control_saved ) {
547
        if ( __kmp_inherit_fp_control && serial_team->t.t_fp_control_saved ) {
548
            __kmp_clear_x87_fpu_status_word();
548
            __kmp_clear_x87_fpu_status_word();
549
            __kmp_load_x87_fpu_control_word( &serial_team->t.t_x87_fpu_control_word );
549
            __kmp_load_x87_fpu_control_word( &serial_team->t.t_x87_fpu_control_word );
550
            __kmp_load_mxcsr( &serial_team->t.t_mxcsr );
550
            __kmp_load_mxcsr( &serial_team->t.t_mxcsr );
551
        }
551
        }
552
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
552
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
553
553
554
        this_thr -> th.th_team           = serial_team -> t.t_parent;
554
        this_thr -> th.th_team           = serial_team -> t.t_parent;
555
        this_thr -> th.th_info.ds.ds_tid = serial_team -> t.t_master_tid;
555
        this_thr -> th.th_info.ds.ds_tid = serial_team -> t.t_master_tid;
Lines 601-607 Link Here
601
    /* need explicit __mf() here since use volatile instead in library */
601
    /* need explicit __mf() here since use volatile instead in library */
602
    KMP_MB();       /* Flush all pending memory write invalidates.  */
602
    KMP_MB();       /* Flush all pending memory write invalidates.  */
603
603
604
    #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 )
604
    #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 )
605
        #if KMP_MIC
605
        #if KMP_MIC
606
            // fence-style instructions do not exist, but lock; xaddl $0,(%rsp) can be used.
606
            // fence-style instructions do not exist, but lock; xaddl $0,(%rsp) can be used.
607
            // We shouldn't need it, though, since the ABI rules require that
607
            // We shouldn't need it, though, since the ABI rules require that
Lines 1142-1148 Link Here
1142
# define KMP_TSX_LOCK(seq) __kmp_user_lock_seq
1142
# define KMP_TSX_LOCK(seq) __kmp_user_lock_seq
1143
#endif
1143
#endif
1144
1144
1145
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1145
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1146
# define KMP_CPUINFO_RTM (__kmp_cpuinfo.rtm)
1146
# define KMP_CPUINFO_RTM (__kmp_cpuinfo.rtm)
1147
#else
1147
#else
1148
# define KMP_CPUINFO_RTM 0
1148
# define KMP_CPUINFO_RTM 0
Lines 2270-2276 Link Here
2270
2270
2271
    if ( ( __kmp_user_lock_kind == lk_tas )
2271
    if ( ( __kmp_user_lock_kind == lk_tas )
2272
      && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
2272
      && ( sizeof( lck->tas.lk.poll ) <= OMP_LOCK_T_SIZE ) ) {
2273
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
2273
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
2274
        // "fast" path implemented to fix customer performance issue
2274
        // "fast" path implemented to fix customer performance issue
2275
#if USE_ITT_BUILD
2275
#if USE_ITT_BUILD
2276
        __kmp_itt_lock_releasing( (kmp_user_lock_p)user_lock );
2276
        __kmp_itt_lock_releasing( (kmp_user_lock_p)user_lock );
Lines 2327-2333 Link Here
2327
2327
2328
    if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
2328
    if ( ( __kmp_user_lock_kind == lk_tas ) && ( sizeof( lck->tas.lk.poll )
2329
      + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
2329
      + sizeof( lck->tas.lk.depth_locked ) <= OMP_NEST_LOCK_T_SIZE ) ) {
2330
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
2330
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
2331
        // "fast" path implemented to fix customer performance issue
2331
        // "fast" path implemented to fix customer performance issue
2332
        kmp_tas_lock_t *tl = (kmp_tas_lock_t*)user_lock;
2332
        kmp_tas_lock_t *tl = (kmp_tas_lock_t*)user_lock;
2333
#if USE_ITT_BUILD
2333
#if USE_ITT_BUILD
(-)openmp-3.9.1.src.orig/runtime/src/kmp_global.c (-7 / +7 lines)
Lines 17-23 Link Here
17
17
18
kmp_key_t __kmp_gtid_threadprivate_key;
18
kmp_key_t __kmp_gtid_threadprivate_key;
19
19
20
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
20
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
21
kmp_cpuinfo_t   __kmp_cpuinfo = { 0 }; // Not initialized
21
kmp_cpuinfo_t   __kmp_cpuinfo = { 0 }; // Not initialized
22
#endif
22
#endif
23
23
Lines 69-82 Link Here
69
69
70
/* Barrier method defaults, settings, and strings */
70
/* Barrier method defaults, settings, and strings */
71
/* branch factor = 2^branch_bits (only relevant for tree and hyper barrier types) */
71
/* branch factor = 2^branch_bits (only relevant for tree and hyper barrier types) */
72
#if KMP_ARCH_X86_64
72
#if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
73
kmp_uint32 __kmp_barrier_gather_bb_dflt      = 2;  /* branch_factor = 4 */ /* hyper2: C78980 */
73
kmp_uint32 __kmp_barrier_gather_bb_dflt      = 2;  /* branch_factor = 4 */ /* hyper2: C78980 */
74
kmp_uint32 __kmp_barrier_release_bb_dflt     = 2;  /* branch_factor = 4 */ /* hyper2: C78980 */
74
kmp_uint32 __kmp_barrier_release_bb_dflt     = 2;  /* branch_factor = 4 */ /* hyper2: C78980 */
75
#else
75
#else
76
kmp_uint32 __kmp_barrier_gather_bb_dflt      = 2;  /* branch_factor = 4 */ /* communication in core for MIC */
76
kmp_uint32 __kmp_barrier_gather_bb_dflt      = 2;  /* branch_factor = 4 */ /* communication in core for MIC */
77
kmp_uint32 __kmp_barrier_release_bb_dflt     = 2;  /* branch_factor = 4 */ /* communication in core for MIC */
77
kmp_uint32 __kmp_barrier_release_bb_dflt     = 2;  /* branch_factor = 4 */ /* communication in core for MIC */
78
#endif // KMP_ARCH_X86_64
78
#endif // KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
79
#if KMP_ARCH_X86_64
79
#if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
80
kmp_bar_pat_e __kmp_barrier_gather_pat_dflt  = bp_hyper_bar;  /* hyper2: C78980 */
80
kmp_bar_pat_e __kmp_barrier_gather_pat_dflt  = bp_hyper_bar;  /* hyper2: C78980 */
81
kmp_bar_pat_e __kmp_barrier_release_pat_dflt = bp_hyper_bar;  /* hyper2: C78980 */
81
kmp_bar_pat_e __kmp_barrier_release_pat_dflt = bp_hyper_bar;  /* hyper2: C78980 */
82
#else
82
#else
Lines 166-176 Link Here
166
#endif /* KMP_TDATA_GTID */
166
#endif /* KMP_TDATA_GTID */
167
int          __kmp_tls_gtid_min = INT_MAX;
167
int          __kmp_tls_gtid_min = INT_MAX;
168
int            __kmp_foreign_tp = TRUE;
168
int            __kmp_foreign_tp = TRUE;
169
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
169
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
170
int    __kmp_inherit_fp_control = TRUE;
170
int    __kmp_inherit_fp_control = TRUE;
171
kmp_int16  __kmp_init_x87_fpu_control_word = 0;
171
kmp_int16  __kmp_init_x87_fpu_control_word = 0;
172
kmp_uint32     __kmp_init_mxcsr = 0;
172
kmp_uint32     __kmp_init_mxcsr = 0;
173
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
173
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
174
174
175
#ifdef USE_LOAD_BALANCE
175
#ifdef USE_LOAD_BALANCE
176
double  __kmp_load_balance_interval   = 1.0;
176
double  __kmp_load_balance_interval   = 1.0;
Lines 210-216 Link Here
210
int __kmp_clock_function_param;
210
int __kmp_clock_function_param;
211
#endif /* KMP_OS_LINUX */
211
#endif /* KMP_OS_LINUX */
212
212
213
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
213
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
214
enum mic_type __kmp_mic_type = non_mic;
214
enum mic_type __kmp_mic_type = non_mic;
215
#endif
215
#endif
216
216
(-)openmp-3.9.1.src.orig/runtime/src/kmp_gsupport.c (-1 / +1 lines)
Lines 351-357 Link Here
351
      VOLATILE_CAST(void *) unwrapped_task,
351
      VOLATILE_CAST(void *) unwrapped_task,
352
#endif
352
#endif
353
      wrapper, __kmp_invoke_task_func,
353
      wrapper, __kmp_invoke_task_func,
354
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
354
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
355
      &ap
355
      &ap
356
#else
356
#else
357
      ap
357
      ap
(-)openmp-3.9.1.src.orig/runtime/src/kmp_itt.h (-2 / +2 lines)
Lines 142-152 Link Here
142
     * therefore uninteresting when collecting traces for architecture simulation.
142
     * therefore uninteresting when collecting traces for architecture simulation.
143
     */
143
     */
144
    #ifndef INCLUDE_SSC_MARKS
144
    #ifndef INCLUDE_SSC_MARKS
145
    # define INCLUDE_SSC_MARKS (KMP_OS_LINUX && KMP_ARCH_X86_64)
145
    # define INCLUDE_SSC_MARKS (KMP_OS_LINUX && (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32))
146
    #endif
146
    #endif
147
147
148
    /* Linux 64 only for now */
148
    /* Linux 64 only for now */
149
    #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && KMP_ARCH_X86_64)
149
    #if (INCLUDE_SSC_MARKS && KMP_OS_LINUX && (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32))
150
    // Portable (at least for gcc and icc) code to insert the necessary instructions
150
    // Portable (at least for gcc and icc) code to insert the necessary instructions
151
    // to set %ebx and execute the unlikely no-op.
151
    // to set %ebx and execute the unlikely no-op.
152
      #if defined( __INTEL_COMPILER )
152
      #if defined( __INTEL_COMPILER )
(-)openmp-3.9.1.src.orig/runtime/src/kmp_lock.cpp (-3 / +3 lines)
Lines 1925-1931 Link Here
1925
    int res = -1;
1925
    int res = -1;
1926
1926
1927
#if KMP_OS_WINDOWS
1927
#if KMP_OS_WINDOWS
1928
#if KMP_ARCH_X86_64
1928
#if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1929
    _asm {
1929
    _asm {
1930
        _emit 0xC7
1930
        _emit 0xC7
1931
        _emit 0xF8
1931
        _emit 0xF8
Lines 1949-1955 Link Here
1949
        mov   res, eax
1949
        mov   res, eax
1950
    L2:
1950
    L2:
1951
    }
1951
    }
1952
#endif // KMP_ARCH_X86_64
1952
#endif // KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1953
#else
1953
#else
1954
    /* Note that %eax must be noted as killed (clobbered), because
1954
    /* Note that %eax must be noted as killed (clobbered), because
1955
     * the XSR is returned in %eax(%rax) on abort.  Other register
1955
     * the XSR is returned in %eax(%rax) on abort.  Other register
Lines 3019-3025 Link Here
3019
}
3019
}
3020
3020
3021
// Time stamp counter
3021
// Time stamp counter
3022
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3022
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
3023
# define __kmp_tsc() __kmp_hardware_timestamp()
3023
# define __kmp_tsc() __kmp_hardware_timestamp()
3024
// Runtime's default backoff parameters
3024
// Runtime's default backoff parameters
3025
kmp_backoff_t __kmp_spin_backoff_params = { 1, 4096, 100 };
3025
kmp_backoff_t __kmp_spin_backoff_params = { 1, 4096, 100 };
(-)openmp-3.9.1.src.orig/runtime/src/kmp_lock.h (-6 / +6 lines)
Lines 178-184 Link Here
178
#define KMP_LOCK_ACQUIRED_FIRST 1
178
#define KMP_LOCK_ACQUIRED_FIRST 1
179
#define KMP_LOCK_ACQUIRED_NEXT  0
179
#define KMP_LOCK_ACQUIRED_NEXT  0
180
180
181
#define KMP_USE_FUTEX (KMP_OS_LINUX && !KMP_OS_CNK && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64))
181
#define KMP_USE_FUTEX (KMP_OS_LINUX && !KMP_OS_CNK && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64))
182
182
183
#if KMP_USE_FUTEX
183
#if KMP_USE_FUTEX
184
184
Lines 678-684 Link Here
678
678
679
extern int ( *__kmp_acquire_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
679
extern int ( *__kmp_acquire_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
680
680
681
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
681
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
682
682
683
#define __kmp_acquire_user_lock_with_checks(lck,gtid)                                           \
683
#define __kmp_acquire_user_lock_with_checks(lck,gtid)                                           \
684
    if (__kmp_user_lock_kind == lk_tas) {                                                       \
684
    if (__kmp_user_lock_kind == lk_tas) {                                                       \
Lines 728-734 Link Here
728
728
729
extern int ( *__kmp_test_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
729
extern int ( *__kmp_test_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
730
730
731
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
731
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
732
732
733
#include "kmp_i18n.h"                       /* AC: KMP_FATAL definition */
733
#include "kmp_i18n.h"                       /* AC: KMP_FATAL definition */
734
extern int __kmp_env_consistency_check;     /* AC: copy from kmp.h here */
734
extern int __kmp_env_consistency_check;     /* AC: copy from kmp.h here */
Lines 801-807 Link Here
801
801
802
extern int ( *__kmp_acquire_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
802
extern int ( *__kmp_acquire_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
803
803
804
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64)
804
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
805
805
806
#define __kmp_acquire_nested_user_lock_with_checks(lck,gtid,depth)                                  \
806
#define __kmp_acquire_nested_user_lock_with_checks(lck,gtid,depth)                                  \
807
    if (__kmp_user_lock_kind == lk_tas) {                                                           \
807
    if (__kmp_user_lock_kind == lk_tas) {                                                           \
Lines 855-861 Link Here
855
855
856
extern int ( *__kmp_test_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
856
extern int ( *__kmp_test_nested_user_lock_with_checks_ )( kmp_user_lock_p lck, kmp_int32 gtid );
857
857
858
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64)
858
#if KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
859
static inline int
859
static inline int
860
__kmp_test_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
860
__kmp_test_nested_user_lock_with_checks( kmp_user_lock_p lck, kmp_int32 gtid )
861
{
861
{
Lines 1103-1109 Link Here
1103
#include <stdint.h> // for uintptr_t
1103
#include <stdint.h> // for uintptr_t
1104
1104
1105
// Shortcuts
1105
// Shortcuts
1106
#define KMP_USE_INLINED_TAS   (KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM)) && 1
1106
#define KMP_USE_INLINED_TAS   (KMP_OS_LINUX && (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM)) && 1
1107
#define KMP_USE_INLINED_FUTEX KMP_USE_FUTEX && 0
1107
#define KMP_USE_INLINED_FUTEX KMP_USE_FUTEX && 0
1108
1108
1109
// List of lock definitions; all nested locks are indirect locks.
1109
// List of lock definitions; all nested locks are indirect locks.
(-)openmp-3.9.1.src.orig/runtime/src/kmp_os.h (-15 / +15 lines)
Lines 65-71 Link Here
65
65
66
#if (KMP_OS_LINUX || KMP_OS_WINDOWS) && !KMP_OS_CNK && !KMP_ARCH_PPC64
66
#if (KMP_OS_LINUX || KMP_OS_WINDOWS) && !KMP_OS_CNK && !KMP_ARCH_PPC64
67
# define KMP_AFFINITY_SUPPORTED 1
67
# define KMP_AFFINITY_SUPPORTED 1
68
# if KMP_OS_WINDOWS && KMP_ARCH_X86_64
68
# if KMP_OS_WINDOWS && (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
69
#  define KMP_GROUP_AFFINITY    1
69
#  define KMP_GROUP_AFFINITY    1
70
# else
70
# else
71
#  define KMP_GROUP_AFFINITY    0
71
#  define KMP_GROUP_AFFINITY    0
Lines 77-83 Link Here
77
77
78
/* Check for quad-precision extension. */
78
/* Check for quad-precision extension. */
79
#define KMP_HAVE_QUAD 0
79
#define KMP_HAVE_QUAD 0
80
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
80
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
81
# if KMP_COMPILER_ICC
81
# if KMP_COMPILER_ICC
82
   /* _Quad is already defined for icc */
82
   /* _Quad is already defined for icc */
83
#  undef  KMP_HAVE_QUAD
83
#  undef  KMP_HAVE_QUAD
Lines 99-105 Link Here
99
#  undef  KMP_HAVE_QUAD
99
#  undef  KMP_HAVE_QUAD
100
#  define KMP_HAVE_QUAD 1
100
#  define KMP_HAVE_QUAD 1
101
# endif
101
# endif
102
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
102
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
103
103
104
#if KMP_OS_WINDOWS
104
#if KMP_OS_WINDOWS
105
  typedef char              kmp_int8;
105
  typedef char              kmp_int8;
Lines 147-153 Link Here
147
# define KMP_UINT64_SPEC     "llu"
147
# define KMP_UINT64_SPEC     "llu"
148
#endif /* KMP_OS_UNIX */
148
#endif /* KMP_OS_UNIX */
149
149
150
#if KMP_ARCH_X86 || KMP_ARCH_ARM
150
#if KMP_ARCH_X86 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM
151
# define KMP_SIZE_T_SPEC KMP_UINT32_SPEC
151
# define KMP_SIZE_T_SPEC KMP_UINT32_SPEC
152
#elif KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
152
#elif KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
153
# define KMP_SIZE_T_SPEC KMP_UINT64_SPEC
153
# define KMP_SIZE_T_SPEC KMP_UINT64_SPEC
Lines 155-161 Link Here
155
# error "Can't determine size_t printf format specifier."
155
# error "Can't determine size_t printf format specifier."
156
#endif
156
#endif
157
157
158
#if KMP_ARCH_X86
158
#if KMP_ARCH_X86 || KMP_ARCH_X86_64_32
159
# define KMP_SIZE_T_MAX (0xFFFFFFFF)
159
# define KMP_SIZE_T_MAX (0xFFFFFFFF)
160
#else
160
#else
161
# define KMP_SIZE_T_MAX (0xFFFFFFFFFFFFFFFF)
161
# define KMP_SIZE_T_MAX (0xFFFFFFFFFFFFFFFF)
Lines 380-390 Link Here
380
# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
380
# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
381
# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
381
# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
382
382
383
# if KMP_ARCH_X86
383
# if KMP_ARCH_X86 || KMP_ARCH_X86_64_32
384
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
384
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
385
# else /* 64 bit pointers */
385
# else /* 64 bit pointers */
386
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
386
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
387
# endif /* KMP_ARCH_X86 */
387
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64_32 */
388
388
389
# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv)  __kmp_compare_and_store_ret8( (p), (cv), (sv) )
389
# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv)  __kmp_compare_and_store_ret8( (p), (cv), (sv) )
390
# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
390
# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
Lines 399-405 Link Here
399
# define KMP_XCHG_REAL64(p, v)                  __kmp_xchg_real64( (p), (v) );
399
# define KMP_XCHG_REAL64(p, v)                  __kmp_xchg_real64( (p), (v) );
400
400
401
401
402
#elif (KMP_ASM_INTRINS && KMP_OS_UNIX) || !(KMP_ARCH_X86 || KMP_ARCH_X86_64)
402
#elif (KMP_ASM_INTRINS && KMP_OS_UNIX) || !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
403
# define KMP_TEST_THEN_ADD8(p, v)               __sync_fetch_and_add( (kmp_int8 *)(p), (v) )
403
# define KMP_TEST_THEN_ADD8(p, v)               __sync_fetch_and_add( (kmp_int8 *)(p), (v) )
404
404
405
/* cast p to correct type so that proper intrinsic will be used */
405
/* cast p to correct type so that proper intrinsic will be used */
Lines 517-527 Link Here
517
# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
517
# define KMP_COMPARE_AND_STORE_ACQ64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
518
# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
518
# define KMP_COMPARE_AND_STORE_REL64(p, cv, sv) __kmp_compare_and_store64( (p), (cv), (sv) )
519
519
520
# if KMP_ARCH_X86
520
# if KMP_ARCH_X86 || KMP_ARCH_X86_64_32
521
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
521
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store32( (volatile kmp_int32*)(p), (kmp_int32)(cv), (kmp_int32)(sv) )
522
# else /* 64 bit pointers */
522
# else /* 64 bit pointers */
523
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
523
#  define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)  __kmp_compare_and_store64( (volatile kmp_int64*)(p), (kmp_int64)(cv), (kmp_int64)(sv) )
524
# endif /* KMP_ARCH_X86 */
524
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_32 */
525
525
526
# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv)  __kmp_compare_and_store_ret8( (p), (cv), (sv) )
526
# define KMP_COMPARE_AND_STORE_RET8(p, cv, sv)  __kmp_compare_and_store_ret8( (p), (cv), (sv) )
527
# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
527
# define KMP_COMPARE_AND_STORE_RET16(p, cv, sv) __kmp_compare_and_store_ret16( (p), (cv), (sv) )
Lines 609-615 Link Here
609
#define TCW_SYNC_8(a,b)     (a) = (b)
609
#define TCW_SYNC_8(a,b)     (a) = (b)
610
#define TCX_SYNC_8(a,b,c)   KMP_COMPARE_AND_STORE_REL64((volatile kmp_int64 *)(volatile void *)&(a), (kmp_int64)(b), (kmp_int64)(c))
610
#define TCX_SYNC_8(a,b,c)   KMP_COMPARE_AND_STORE_REL64((volatile kmp_int64 *)(volatile void *)&(a), (kmp_int64)(b), (kmp_int64)(c))
611
611
612
#if KMP_ARCH_X86
612
#if KMP_ARCH_X86 || KMP_ARCH_X86_64_32
613
// What about ARM?
613
// What about ARM?
614
    #define TCR_PTR(a)          ((void *)TCR_4(a))
614
    #define TCR_PTR(a)          ((void *)TCR_4(a))
615
    #define TCW_PTR(a,b)        TCW_4((a),(b))
615
    #define TCW_PTR(a,b)        TCW_4((a),(b))
Lines 625-631 Link Here
625
    #define TCW_SYNC_PTR(a,b)   TCW_SYNC_8((a),(b))
625
    #define TCW_SYNC_PTR(a,b)   TCW_SYNC_8((a),(b))
626
    #define TCX_SYNC_PTR(a,b,c) ((void *)TCX_SYNC_8((a),(b),(c)))
626
    #define TCX_SYNC_PTR(a,b,c) ((void *)TCX_SYNC_8((a),(b),(c)))
627
627
628
#endif /* KMP_ARCH_X86 */
628
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64_32 */
629
629
630
/*
630
/*
631
 * If these FTN_{TRUE,FALSE} values change, may need to
631
 * If these FTN_{TRUE,FALSE} values change, may need to
Lines 658-664 Link Here
658
#define KMP_LE                   __kmp_le_4
658
#define KMP_LE                   __kmp_le_4
659
659
660
/* Workaround for Intel(R) 64 code gen bug when taking address of static array (Intel(R) 64 Tracker #138) */
660
/* Workaround for Intel(R) 64 code gen bug when taking address of static array (Intel(R) 64 Tracker #138) */
661
#if (KMP_ARCH_X86_64 || KMP_ARCH_PPC64) && KMP_OS_LINUX
661
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_PPC64) && KMP_OS_LINUX
662
# define STATIC_EFI2_WORKAROUND
662
# define STATIC_EFI2_WORKAROUND
663
#else
663
#else
664
# define STATIC_EFI2_WORKAROUND static
664
# define STATIC_EFI2_WORKAROUND static
Lines 686-692 Link Here
686
// Enable TSX if dynamic user lock is turned on
686
// Enable TSX if dynamic user lock is turned on
687
#if KMP_USE_DYNAMIC_LOCK
687
#if KMP_USE_DYNAMIC_LOCK
688
// Visual studio can't handle the asm sections in this code
688
// Visual studio can't handle the asm sections in this code
689
# define KMP_USE_TSX             (KMP_ARCH_X86 || KMP_ARCH_X86_64) && !KMP_COMPILER_MSVC
689
# define KMP_USE_TSX             (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && !KMP_COMPILER_MSVC
690
# ifdef KMP_USE_ADAPTIVE_LOCKS
690
# ifdef KMP_USE_ADAPTIVE_LOCKS
691
#  undef KMP_USE_ADAPTIVE_LOCKS
691
#  undef KMP_USE_ADAPTIVE_LOCKS
692
# endif
692
# endif
Lines 695-701 Link Here
695
695
696
// Enable tick time conversion of ticks to seconds
696
// Enable tick time conversion of ticks to seconds
697
#if KMP_STATS_ENABLED
697
#if KMP_STATS_ENABLED
698
# define KMP_HAVE_TICK_TIME (KMP_OS_LINUX && (KMP_MIC || KMP_ARCH_X86 || KMP_ARCH_X86_64))
698
# define KMP_HAVE_TICK_TIME (KMP_OS_LINUX && (KMP_MIC || KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32))
699
#endif
699
#endif
700
700
701
// Warning levels
701
// Warning levels
(-)openmp-3.9.1.src.orig/runtime/src/kmp_platform.h (-3 / +9 lines)
Lines 73-78 Link Here
73
73
74
#define KMP_ARCH_X86        0
74
#define KMP_ARCH_X86        0
75
#define KMP_ARCH_X86_64     0
75
#define KMP_ARCH_X86_64     0
76
#define KMP_ARCH_X86_64_32  0
76
#define KMP_ARCH_AARCH64    0
77
#define KMP_ARCH_AARCH64    0
77
#define KMP_ARCH_PPC64_BE   0
78
#define KMP_ARCH_PPC64_BE   0
78
#define KMP_ARCH_PPC64_LE   0
79
#define KMP_ARCH_PPC64_LE   0
Lines 90-97 Link Here
90
91
91
#if KMP_OS_UNIX
92
#if KMP_OS_UNIX
92
# if defined __x86_64
93
# if defined __x86_64
93
#  undef KMP_ARCH_X86_64
94
#  if defined _ILP32
94
#  define KMP_ARCH_X86_64 1
95
#   undef KMP_ARCH_X86_64_32
96
#   define KMP_ARCH_X86_64_32 1
97
#  else
98
#   undef KMP_ARCH_X86_64
99
#   define KMP_ARCH_X86_64 1
100
#  endif
95
# elif defined __i386
101
# elif defined __i386
96
#  undef KMP_ARCH_X86
102
#  undef KMP_ARCH_X86
97
#  define KMP_ARCH_X86 1
103
#  define KMP_ARCH_X86 1
Lines 164-170 Link Here
164
#define KMP_32_BIT_ARCH (KMP_ARCH_X86 || KMP_ARCH_ARM)
170
#define KMP_32_BIT_ARCH (KMP_ARCH_X86 || KMP_ARCH_ARM)
165
171
166
// TODO: Fixme - This is clever, but really fugly
172
// TODO: Fixme - This is clever, but really fugly
167
#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_ARM + KMP_ARCH_PPC64 + KMP_ARCH_AARCH64)
173
#if (1 != KMP_ARCH_X86 + KMP_ARCH_X86_64 + KMP_ARCH_X86_64_32 + KMP_ARCH_ARM + KMP_ARCH_PPC64 + KMP_ARCH_AARCH64)
168
# error Unknown or unsupported architecture
174
# error Unknown or unsupported architecture
169
#endif
175
#endif
170
176
(-)openmp-3.9.1.src.orig/runtime/src/kmp_runtime.c (-19 / +19 lines)
Lines 1099-1105 Link Here
1099
    KMP_MB();
1099
    KMP_MB();
1100
}
1100
}
1101
1101
1102
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1102
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1103
//
1103
//
1104
// Propagate any changes to the floating point control registers out to the team
1104
// Propagate any changes to the floating point control registers out to the team
1105
// We try to avoid unnecessary writes to the relevant cache line in the team structure,
1105
// We try to avoid unnecessary writes to the relevant cache line in the team structure,
Lines 1164-1170 Link Here
1164
#else
1164
#else
1165
# define propagateFPControl(x) ((void)0)
1165
# define propagateFPControl(x) ((void)0)
1166
# define updateHWFPControl(x)  ((void)0)
1166
# define updateHWFPControl(x)  ((void)0)
1167
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1167
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1168
1168
1169
static void
1169
static void
1170
__kmp_alloc_argv_entries( int argc, kmp_team_t *team, int realloc ); // forward declaration
1170
__kmp_alloc_argv_entries( int argc, kmp_team_t *team, int realloc ); // forward declaration
Lines 1384-1390 Link Here
1384
    microtask_t microtask,
1384
    microtask_t microtask,
1385
    launch_t    invoker,
1385
    launch_t    invoker,
1386
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
1386
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
1387
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1387
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1388
    va_list   * ap
1388
    va_list   * ap
1389
#else
1389
#else
1390
    va_list     ap
1390
    va_list     ap
Lines 1493-1499 Link Here
1493
        argv = (void**)parent_team->t.t_argv;
1493
        argv = (void**)parent_team->t.t_argv;
1494
        for( i=argc-1; i >= 0; --i )
1494
        for( i=argc-1; i >= 0; --i )
1495
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
1495
/* TODO: revert workaround for Intel(R) 64 tracker #96 */
1496
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1496
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1497
            *argv++ = va_arg( *ap, void * );
1497
            *argv++ = va_arg( *ap, void * );
1498
#else
1498
#else
1499
            *argv++ = va_arg( ap, void * );
1499
            *argv++ = va_arg( ap, void * );
Lines 1686-1696 Link Here
1686
    /* create a serialized parallel region? */
1686
    /* create a serialized parallel region? */
1687
    if ( nthreads == 1 ) {
1687
    if ( nthreads == 1 ) {
1688
        /* josh todo: hypothetical question: what do we do for OS X*? */
1688
        /* josh todo: hypothetical question: what do we do for OS X*? */
1689
#if KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
1689
#if KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64)
1690
        void *   args[ argc ];
1690
        void *   args[ argc ];
1691
#else
1691
#else
1692
        void * * args = (void**) KMP_ALLOCA( argc * sizeof( void * ) );
1692
        void * * args = (void**) KMP_ALLOCA( argc * sizeof( void * ) );
1693
#endif /* KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) */
1693
#endif /* KMP_OS_LINUX && ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) */
1694
1694
1695
        KA_TRACE( 20, ("__kmp_fork_call: T#%d serializing parallel region\n", gtid ));
1695
        KA_TRACE( 20, ("__kmp_fork_call: T#%d serializing parallel region\n", gtid ));
1696
1696
Lines 1778-1784 Link Here
1778
                if ( ap ) {
1778
                if ( ap ) {
1779
                    for( i=argc-1; i >= 0; --i )
1779
                    for( i=argc-1; i >= 0; --i )
1780
// TODO: revert workaround for Intel(R) 64 tracker #96
1780
// TODO: revert workaround for Intel(R) 64 tracker #96
1781
# if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1781
# if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1782
                        *argv++ = va_arg( *ap, void * );
1782
                        *argv++ = va_arg( *ap, void * );
1783
# else
1783
# else
1784
                        *argv++ = va_arg( ap, void * );
1784
                        *argv++ = va_arg( ap, void * );
Lines 1802-1808 Link Here
1802
                argv = args;
1802
                argv = args;
1803
                for( i=argc-1; i >= 0; --i )
1803
                for( i=argc-1; i >= 0; --i )
1804
// TODO: revert workaround for Intel(R) 64 tracker #96
1804
// TODO: revert workaround for Intel(R) 64 tracker #96
1805
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1805
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
1806
                    *argv++ = va_arg( *ap, void * );
1806
                    *argv++ = va_arg( *ap, void * );
1807
#else
1807
#else
1808
                    *argv++ = va_arg( ap, void * );
1808
                    *argv++ = va_arg( ap, void * );
Lines 2098-2104 Link Here
2098
#endif /* OMP_40_ENABLED */
2098
#endif /* OMP_40_ENABLED */
2099
        for ( i=argc-1; i >= 0; --i ) {
2099
        for ( i=argc-1; i >= 0; --i ) {
2100
// TODO: revert workaround for Intel(R) 64 tracker #96
2100
// TODO: revert workaround for Intel(R) 64 tracker #96
2101
#if (KMP_ARCH_X86_64 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
2101
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_ARM || KMP_ARCH_AARCH64) && KMP_OS_LINUX
2102
            void *new_argv = va_arg(*ap, void *);
2102
            void *new_argv = va_arg(*ap, void *);
2103
#else
2103
#else
2104
            void *new_argv = va_arg(ap, void *);
2104
            void *new_argv = va_arg(ap, void *);
Lines 4375-4385 Link Here
4375
    // TODO???: team->t.t_max_active_levels       = new_max_active_levels;
4375
    // TODO???: team->t.t_max_active_levels       = new_max_active_levels;
4376
    team->t.t_sched       = new_icvs->sched;
4376
    team->t.t_sched       = new_icvs->sched;
4377
4377
4378
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
4378
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
4379
    team->t.t_fp_control_saved = FALSE; /* not needed */
4379
    team->t.t_fp_control_saved = FALSE; /* not needed */
4380
    team->t.t_x87_fpu_control_word = 0; /* not needed */
4380
    team->t.t_x87_fpu_control_word = 0; /* not needed */
4381
    team->t.t_mxcsr = 0;                /* not needed */
4381
    team->t.t_mxcsr = 0;                /* not needed */
4382
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
4382
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
4383
4383
4384
    team->t.t_construct   = 0;
4384
    team->t.t_construct   = 0;
4385
    __kmp_init_lock( & team->t.t_single_lock );
4385
    __kmp_init_lock( & team->t.t_single_lock );
Lines 6251-6257 Link Here
6251
// End of Library registration stuff.
6251
// End of Library registration stuff.
6252
// -------------------------------------------------------------------------------------------------
6252
// -------------------------------------------------------------------------------------------------
6253
6253
6254
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6254
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6255
6255
6256
static void __kmp_check_mic_type()
6256
static void __kmp_check_mic_type()
6257
{
6257
{
Lines 6268-6274 Link Here
6268
    }
6268
    }
6269
}
6269
}
6270
6270
6271
#endif /* KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS) */
6271
#endif /* (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS) */
6272
6272
6273
static void
6273
static void
6274
__kmp_do_serial_initialize( void )
6274
__kmp_do_serial_initialize( void )
Lines 6341-6347 Link Here
6341
6341
6342
    __kmp_runtime_initialize();
6342
    __kmp_runtime_initialize();
6343
6343
6344
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6344
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6345
    __kmp_check_mic_type();
6345
    __kmp_check_mic_type();
6346
#endif
6346
#endif
6347
6347
Lines 6401-6407 Link Here
6401
        #undef kmp_reduction_barrier_release_bb
6401
        #undef kmp_reduction_barrier_release_bb
6402
        #undef kmp_reduction_barrier_gather_bb
6402
        #undef kmp_reduction_barrier_gather_bb
6403
    #endif // KMP_FAST_REDUCTION_BARRIER
6403
    #endif // KMP_FAST_REDUCTION_BARRIER
6404
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6404
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
6405
    if (__kmp_mic_type == mic2) { // KNC
6405
    if (__kmp_mic_type == mic2) { // KNC
6406
        // AC: plane=3,2, forkjoin=2,1 are optimal for 240 threads on KNC
6406
        // AC: plane=3,2, forkjoin=2,1 are optimal for 240 threads on KNC
6407
        __kmp_barrier_gather_branch_bits [ bs_plain_barrier ] = 3;  // plain gather
6407
        __kmp_barrier_gather_branch_bits [ bs_plain_barrier ] = 3;  // plain gather
Lines 6707-6713 Link Here
6707
    KA_TRACE( 10, ("__kmp_parallel_initialize: enter\n" ) );
6707
    KA_TRACE( 10, ("__kmp_parallel_initialize: enter\n" ) );
6708
    KMP_ASSERT( KMP_UBER_GTID( gtid ) );
6708
    KMP_ASSERT( KMP_UBER_GTID( gtid ) );
6709
6709
6710
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
6710
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
6711
    //
6711
    //
6712
    // Save the FP control regs.
6712
    // Save the FP control regs.
6713
    // Worker threads will set theirs to these values at thread startup.
6713
    // Worker threads will set theirs to these values at thread startup.
Lines 6715-6721 Link Here
6715
    __kmp_store_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
6715
    __kmp_store_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
6716
    __kmp_store_mxcsr( &__kmp_init_mxcsr );
6716
    __kmp_store_mxcsr( &__kmp_init_mxcsr );
6717
    __kmp_init_mxcsr &= KMP_X86_MXCSR_MASK;
6717
    __kmp_init_mxcsr &= KMP_X86_MXCSR_MASK;
6718
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
6718
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
6719
6719
6720
#if KMP_OS_UNIX
6720
#if KMP_OS_UNIX
6721
# if KMP_HANDLE_SIGNALS
6721
# if KMP_HANDLE_SIGNALS
Lines 7525-7537 Link Here
7525
        int atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
7525
        int atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
7526
        int tree_available   = FAST_REDUCTION_TREE_METHOD_GENERATED;
7526
        int tree_available   = FAST_REDUCTION_TREE_METHOD_GENERATED;
7527
7527
7528
        #if KMP_ARCH_X86_64 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
7528
        #if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_ARCH_PPC64 || KMP_ARCH_AARCH64
7529
7529
7530
            #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN
7530
            #if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS || KMP_OS_DARWIN
7531
7531
7532
	    int teamsize_cutoff = 4;
7532
	    int teamsize_cutoff = 4;
7533
7533
7534
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
7534
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
7535
                if( __kmp_mic_type != non_mic ) {
7535
                if( __kmp_mic_type != non_mic ) {
7536
                    teamsize_cutoff = 8;
7536
                    teamsize_cutoff = 8;
7537
                }
7537
                }
(-)openmp-3.9.1.src.orig/runtime/src/kmp_settings.c (-13 / +13 lines)
Lines 693-699 Link Here
693
// KMP_INHERIT_FP_CONTROL
693
// KMP_INHERIT_FP_CONTROL
694
// -------------------------------------------------------------------------------------------------
694
// -------------------------------------------------------------------------------------------------
695
695
696
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
696
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
697
697
698
static void
698
static void
699
__kmp_stg_parse_inherit_fp_control( char const * name, char const * value, void * data ) {
699
__kmp_stg_parse_inherit_fp_control( char const * name, char const * value, void * data ) {
Lines 707-713 Link Here
707
#endif /* KMP_DEBUG */
707
#endif /* KMP_DEBUG */
708
} // __kmp_stg_print_inherit_fp_control
708
} // __kmp_stg_print_inherit_fp_control
709
709
710
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
710
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
711
711
712
// -------------------------------------------------------------------------------------------------
712
// -------------------------------------------------------------------------------------------------
713
// KMP_LIBRARY, OMP_WAIT_POLICY
713
// KMP_LIBRARY, OMP_WAIT_POLICY
Lines 2250-2256 Link Here
2250
            }; // if
2250
            }; // if
2251
2251
2252
            if ( __kmp_affinity_gran == affinity_gran_default ) {
2252
            if ( __kmp_affinity_gran == affinity_gran_default ) {
2253
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2253
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2254
                if( __kmp_mic_type != non_mic ) {
2254
                if( __kmp_mic_type != non_mic ) {
2255
                    if( __kmp_affinity_verbose || __kmp_affinity_warnings ) {
2255
                    if( __kmp_affinity_verbose || __kmp_affinity_warnings ) {
2256
                        KMP_WARNING( AffGranUsing, "KMP_AFFINITY", "fine" );
2256
                        KMP_WARNING( AffGranUsing, "KMP_AFFINITY", "fine" );
Lines 2969-2975 Link Here
2969
            // OMP_PROC_BIND => granularity=core,scatter elsewhere
2969
            // OMP_PROC_BIND => granularity=core,scatter elsewhere
2970
            //
2970
            //
2971
            __kmp_affinity_type = affinity_scatter;
2971
            __kmp_affinity_type = affinity_scatter;
2972
#  if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2972
#  if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
2973
            if( __kmp_mic_type != non_mic )
2973
            if( __kmp_mic_type != non_mic )
2974
                __kmp_affinity_gran = affinity_gran_fine;
2974
                __kmp_affinity_gran = affinity_gran_fine;
2975
            else
2975
            else
Lines 2990-2996 Link Here
2990
    if ( __kmp_str_match( "all", 1, value ) ) {
2990
    if ( __kmp_str_match( "all", 1, value ) ) {
2991
       __kmp_affinity_top_method = affinity_top_method_all;
2991
       __kmp_affinity_top_method = affinity_top_method_all;
2992
    }
2992
    }
2993
# if KMP_ARCH_X86 || KMP_ARCH_X86_64
2993
# if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
2994
    else if ( __kmp_str_match( "x2apic id", 9, value )
2994
    else if ( __kmp_str_match( "x2apic id", 9, value )
2995
      || __kmp_str_match( "x2apic_id", 9, value )
2995
      || __kmp_str_match( "x2apic_id", 9, value )
2996
      || __kmp_str_match( "x2apic-id", 9, value )
2996
      || __kmp_str_match( "x2apic-id", 9, value )
Lines 3039-3045 Link Here
3039
      || __kmp_str_match( "leaf4", 5, value ) ) {
3039
      || __kmp_str_match( "leaf4", 5, value ) ) {
3040
        __kmp_affinity_top_method = affinity_top_method_apicid;
3040
        __kmp_affinity_top_method = affinity_top_method_apicid;
3041
    }
3041
    }
3042
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
3042
# endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
3043
    else if ( __kmp_str_match( "/proc/cpuinfo", 2, value )
3043
    else if ( __kmp_str_match( "/proc/cpuinfo", 2, value )
3044
      || __kmp_str_match( "cpuinfo", 5, value )) {
3044
      || __kmp_str_match( "cpuinfo", 5, value )) {
3045
        __kmp_affinity_top_method = affinity_top_method_cpuinfo;
3045
        __kmp_affinity_top_method = affinity_top_method_cpuinfo;
Lines 3077-3083 Link Here
3077
        value = "all";
3077
        value = "all";
3078
        break;
3078
        break;
3079
3079
3080
#  if KMP_ARCH_X86 || KMP_ARCH_X86_64
3080
#  if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
3081
        case affinity_top_method_x2apicid:
3081
        case affinity_top_method_x2apicid:
3082
        value = "x2APIC id";
3082
        value = "x2APIC id";
3083
        break;
3083
        break;
Lines 3085-3091 Link Here
3085
        case affinity_top_method_apicid:
3085
        case affinity_top_method_apicid:
3086
        value = "APIC id";
3086
        value = "APIC id";
3087
        break;
3087
        break;
3088
#  endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
3088
#  endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
3089
3089
3090
        case affinity_top_method_cpuinfo:
3090
        case affinity_top_method_cpuinfo:
3091
        value = "cpuinfo";
3091
        value = "cpuinfo";
Lines 4692-4700 Link Here
4692
    { "KMP_HANDLE_SIGNALS",                __kmp_stg_parse_handle_signals,     __kmp_stg_print_handle_signals,     NULL, 0, 0 },
4692
    { "KMP_HANDLE_SIGNALS",                __kmp_stg_parse_handle_signals,     __kmp_stg_print_handle_signals,     NULL, 0, 0 },
4693
#endif
4693
#endif
4694
4694
4695
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
4695
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
4696
    { "KMP_INHERIT_FP_CONTROL",            __kmp_stg_parse_inherit_fp_control, __kmp_stg_print_inherit_fp_control, NULL, 0, 0 },
4696
    { "KMP_INHERIT_FP_CONTROL",            __kmp_stg_parse_inherit_fp_control, __kmp_stg_print_inherit_fp_control, NULL, 0, 0 },
4697
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
4697
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
4698
4698
4699
#ifdef KMP_GOMP_COMPAT
4699
#ifdef KMP_GOMP_COMPAT
4700
    { "GOMP_STACKSIZE",                    __kmp_stg_parse_stacksize,          NULL,                               NULL, 0, 0 },
4700
    { "GOMP_STACKSIZE",                    __kmp_stg_parse_stacksize,          NULL,                               NULL, 0, 0 },
Lines 5478-5484 Link Here
5478
# endif /* OMP_40_ENABLED */
5478
# endif /* OMP_40_ENABLED */
5479
                if ( __kmp_affinity_type == affinity_default ) {
5479
                if ( __kmp_affinity_type == affinity_default ) {
5480
#if OMP_40_ENABLED
5480
#if OMP_40_ENABLED
5481
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5481
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5482
                    if( __kmp_mic_type != non_mic ) {
5482
                    if( __kmp_mic_type != non_mic ) {
5483
                        __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
5483
                        __kmp_nested_proc_bind.bind_types[0] = proc_bind_intel;
5484
                    } else
5484
                    } else
Lines 5487-5493 Link Here
5487
                        __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
5487
                        __kmp_nested_proc_bind.bind_types[0] = proc_bind_false;
5488
                    }
5488
                    }
5489
#endif /* OMP_40_ENABLED */
5489
#endif /* OMP_40_ENABLED */
5490
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5490
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5491
                    if( __kmp_mic_type != non_mic ) {
5491
                    if( __kmp_mic_type != non_mic ) {
5492
                        __kmp_affinity_type = affinity_scatter;
5492
                        __kmp_affinity_type = affinity_scatter;
5493
                    } else
5493
                    } else
Lines 5499-5505 Link Here
5499
                }
5499
                }
5500
                if ( ( __kmp_affinity_gran == affinity_gran_default )
5500
                if ( ( __kmp_affinity_gran == affinity_gran_default )
5501
                  &&  ( __kmp_affinity_gran_levels < 0 ) ) {
5501
                  &&  ( __kmp_affinity_gran_levels < 0 ) ) {
5502
#if KMP_ARCH_X86_64 && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5502
#if (KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (KMP_OS_LINUX || KMP_OS_WINDOWS)
5503
                    if( __kmp_mic_type != non_mic ) {
5503
                    if( __kmp_mic_type != non_mic ) {
5504
                        __kmp_affinity_gran = affinity_gran_fine;
5504
                        __kmp_affinity_gran = affinity_gran_fine;
5505
                    } else
5505
                    } else
(-)openmp-3.9.1.src.orig/runtime/src/kmp_stats.cpp (-1 / +1 lines)
Lines 569-575 Link Here
569
    fprintf (statsOut, "# Time of run: %s\n", &buffer[0]);
569
    fprintf (statsOut, "# Time of run: %s\n", &buffer[0]);
570
    if (gethostname(&hostName[0], sizeof(hostName)) == 0)
570
    if (gethostname(&hostName[0], sizeof(hostName)) == 0)
571
        fprintf (statsOut,"# Hostname: %s\n", &hostName[0]);
571
        fprintf (statsOut,"# Hostname: %s\n", &hostName[0]);
572
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
572
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
573
    fprintf (statsOut, "# CPU:  %s\n", &__kmp_cpuinfo.name[0]);
573
    fprintf (statsOut, "# CPU:  %s\n", &__kmp_cpuinfo.name[0]);
574
    fprintf (statsOut, "# Family: %d, Model: %d, Stepping: %d\n", __kmp_cpuinfo.family, __kmp_cpuinfo.model, __kmp_cpuinfo.stepping);
574
    fprintf (statsOut, "# Family: %d, Model: %d, Stepping: %d\n", __kmp_cpuinfo.family, __kmp_cpuinfo.model, __kmp_cpuinfo.stepping);
575
    if (__kmp_cpuinfo.frequency == 0)
575
    if (__kmp_cpuinfo.frequency == 0)
(-)openmp-3.9.1.src.orig/runtime/src/kmp_stats_timing.cpp (-1 / +1 lines)
Lines 32-38 Link Here
32
    // pretty bad assumption of 1GHz clock for MIC
32
    // pretty bad assumption of 1GHz clock for MIC
33
    return 1/((double)1000*1.e6);
33
    return 1/((double)1000*1.e6);
34
}
34
}
35
# elif KMP_ARCH_X86 || KMP_ARCH_X86_64
35
# elif KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
36
#  include <string.h>
36
#  include <string.h>
37
// Extract the value from the CPUID information
37
// Extract the value from the CPUID information
38
double tsc_tick_count::tick_time()
38
double tsc_tick_count::tick_time()
(-)openmp-3.9.1.src.orig/runtime/src/kmp_taskq.c (-2 / +2 lines)
Lines 1919-1925 Link Here
1919
1919
1920
    if (in_parallel) {
1920
    if (in_parallel) {
1921
#if KMP_ARCH_X86 || \
1921
#if KMP_ARCH_X86 || \
1922
    KMP_ARCH_X86_64
1922
    KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1923
1923
1924
        KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_ALL_TASKS_QUEUED );
1924
        KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_ALL_TASKS_QUEUED );
1925
#else
1925
#else
Lines 1952-1958 Link Here
1952
        }
1952
        }
1953
        else {
1953
        else {
1954
#if KMP_ARCH_X86 || \
1954
#if KMP_ARCH_X86 || \
1955
    KMP_ARCH_X86_64
1955
    KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1956
1956
1957
            KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_IS_LAST_TASK );
1957
            KMP_TEST_THEN_OR32( &queue->tq_flags, (kmp_int32) TQF_IS_LAST_TASK );
1958
#else
1958
#else
(-)openmp-3.9.1.src.orig/runtime/src/kmp_utility.c (-2 / +2 lines)
Lines 24-30 Link Here
24
24
25
static const char *unknown = "unknown";
25
static const char *unknown = "unknown";
26
26
27
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
27
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
28
28
29
/* NOTE: If called before serial_initialize (i.e. from runtime_initialize), then */
29
/* NOTE: If called before serial_initialize (i.e. from runtime_initialize), then */
30
/* the debugging package has not been initialized yet, and only "0" will print   */
30
/* the debugging package has not been initialized yet, and only "0" will print   */
Lines 296-302 Link Here
296
    }
296
    }
297
}
297
}
298
298
299
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
299
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
300
300
301
/* ------------------------------------------------------------------------------------ */
301
/* ------------------------------------------------------------------------------------ */
302
/* ------------------------------------------------------------------------------------ */
302
/* ------------------------------------------------------------------------------------ */
(-)openmp-3.9.1.src.orig/runtime/src/z_Linux_asm.s (-5 / +5 lines)
Lines 18-24 Link Here
18
18
19
#include "kmp_config.h"
19
#include "kmp_config.h"
20
20
21
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
21
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
22
22
23
# if KMP_MIC
23
# if KMP_MIC
24
//
24
//
Lines 170-176 Link Here
170
#  endif /* KMP_OS_DARWIN */
170
#  endif /* KMP_OS_DARWIN */
171
# endif /* KMP_ARCH_X86 */
171
# endif /* KMP_ARCH_X86 */
172
172
173
# if KMP_ARCH_X86_64
173
# if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
174
#  if KMP_OS_DARWIN
174
#  if KMP_OS_DARWIN
175
        .data
175
        .data
176
        .comm .gomp_critical_user_,32
176
        .comm .gomp_critical_user_,32
Lines 189-195 Link Here
189
        .type __kmp_unnamed_critical_addr,@object
189
        .type __kmp_unnamed_critical_addr,@object
190
        .size __kmp_unnamed_critical_addr,8
190
        .size __kmp_unnamed_critical_addr,8
191
#  endif /* KMP_OS_DARWIN */
191
#  endif /* KMP_OS_DARWIN */
192
# endif /* KMP_ARCH_X86_64 */
192
# endif /* KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
193
193
194
#endif /* KMP_GOMP_COMPAT */
194
#endif /* KMP_GOMP_COMPAT */
195
195
Lines 697-703 Link Here
697
#endif /* KMP_ARCH_X86 */
697
#endif /* KMP_ARCH_X86 */
698
698
699
699
700
#if KMP_ARCH_X86_64
700
#if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
701
701
702
// -----------------------------------------------------------------------
702
// -----------------------------------------------------------------------
703
// microtasking routines specifically written for IA-32 architecture and
703
// microtasking routines specifically written for IA-32 architecture and
Lines 1438-1444 Link Here
1438
1438
1439
1439
1440
// -----------------------------------------------------------------------
1440
// -----------------------------------------------------------------------
1441
#endif /* KMP_ARCH_X86_64 */
1441
#endif /* KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1442
1442
1443
// '
1443
// '
1444
#if KMP_OS_LINUX && KMP_ARCH_AARCH64
1444
#if KMP_OS_LINUX && KMP_ARCH_AARCH64
(-)openmp-3.9.1.src.orig/runtime/src/z_Linux_util.c (-7 / +20 lines)
Lines 140-145 Link Here
140
#    error Wrong code for getaffinity system call.
140
#    error Wrong code for getaffinity system call.
141
#   endif /* __NR_sched_getaffinity */
141
#   endif /* __NR_sched_getaffinity */
142
142
143
#  elif KMP_ARCH_X86_64_32
144
#   define __X32_SYSCALL_BIT 0x40000000
145
#   ifndef __NR_sched_setaffinity
146
#    define __NR_sched_setaffinity  (__X32_SYSCALL_BIT + 203)
147
#   elif __NR_sched_setaffinity != (__X32_SYSCALL_BIT + 203)
148
#    error Wrong code for setaffinity system call.
149
#   endif /* __NR_sched_setaffinity */
150
#   ifndef __NR_sched_getaffinity
151
#    define __NR_sched_getaffinity  (__X32_SYSCALL_BIT + 204)
152
#   elif __NR_sched_getaffinity != (__X32_SYSCALL_BIT + 204)
153
#    error Wrong code for getaffinity system call.
154
#   endif /* __NR_sched_getaffinity */
155
143
#  elif KMP_ARCH_X86_64
156
#  elif KMP_ARCH_X86_64
144
#   ifndef __NR_sched_setaffinity
157
#   ifndef __NR_sched_setaffinity
145
#    define __NR_sched_setaffinity  203
158
#    define __NR_sched_setaffinity  203
Lines 445-451 Link Here
445
/* ------------------------------------------------------------------------ */
458
/* ------------------------------------------------------------------------ */
446
/* ------------------------------------------------------------------------ */
459
/* ------------------------------------------------------------------------ */
447
460
448
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64) && (! KMP_ASM_INTRINS)
461
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (! KMP_ASM_INTRINS)
449
/*
462
/*
450
 * Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
463
 * Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
451
 * use compare_and_store for these routines
464
 * use compare_and_store for these routines
Lines 587-593 Link Here
587
    return old_value;
600
    return old_value;
588
}
601
}
589
602
590
#endif /* (KMP_ARCH_X86 || KMP_ARCH_X86_64) && (! KMP_ASM_INTRINS) */
603
#endif /* (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32) && (! KMP_ASM_INTRINS) */
591
604
592
void
605
void
593
__kmp_terminate_thread( int gtid )
606
__kmp_terminate_thread( int gtid )
Lines 719-725 Link Here
719
    KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
732
    KMP_CHECK_SYSFAIL( "pthread_setcancelstate", status );
720
#endif
733
#endif
721
734
722
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
735
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
723
    //
736
    //
724
    // Set the FP control regs to be a copy of
737
    // Set the FP control regs to be a copy of
725
    // the parallel initialization thread's.
738
    // the parallel initialization thread's.
Lines 727-733 Link Here
727
    __kmp_clear_x87_fpu_status_word();
740
    __kmp_clear_x87_fpu_status_word();
728
    __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
741
    __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
729
    __kmp_load_mxcsr( &__kmp_init_mxcsr );
742
    __kmp_load_mxcsr( &__kmp_init_mxcsr );
730
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
743
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
731
744
732
#ifdef KMP_BLOCK_SIGNALS
745
#ifdef KMP_BLOCK_SIGNALS
733
    status = sigfillset( & new_set );
746
    status = sigfillset( & new_set );
Lines 2077-2087 Link Here
2077
        return;
2090
        return;
2078
    }; // if
2091
    }; // if
2079
2092
2080
    #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 )
2093
    #if ( KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 )
2081
        if ( ! __kmp_cpuinfo.initialized ) {
2094
        if ( ! __kmp_cpuinfo.initialized ) {
2082
            __kmp_query_cpuid( &__kmp_cpuinfo );
2095
            __kmp_query_cpuid( &__kmp_cpuinfo );
2083
        }; // if
2096
        }; // if
2084
    #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
2097
    #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
2085
2098
2086
    __kmp_xproc = __kmp_get_xproc();
2099
    __kmp_xproc = __kmp_get_xproc();
2087
2100
Lines 2560-2566 Link Here
2560
2573
2561
#endif // USE_LOAD_BALANCE
2574
#endif // USE_LOAD_BALANCE
2562
2575
2563
#if !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_MIC || (KMP_OS_LINUX && KMP_ARCH_AARCH64) || KMP_ARCH_PPC64)
2576
#if !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 || KMP_MIC || (KMP_OS_LINUX && KMP_ARCH_AARCH64) || KMP_ARCH_PPC64)
2564
2577
2565
// we really only need the case with 1 argument, because CLANG always build
2578
// we really only need the case with 1 argument, because CLANG always build
2566
// a struct of pointers to shared variables referenced in the outlined function
2579
// a struct of pointers to shared variables referenced in the outlined function
(-)openmp-3.9.1.src.orig/runtime/src/z_Windows_NT-586_util.c (-2 / +2 lines)
Lines 15-21 Link Here
15
15
16
#include "kmp.h"
16
#include "kmp.h"
17
17
18
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64)
18
#if (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
19
/* Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
19
/* Only 32-bit "add-exchange" instruction on IA-32 architecture causes us to
20
 * use compare_and_store for these routines
20
 * use compare_and_store for these routines
21
 */
21
 */
Lines 156-162 Link Here
156
    return old_value;
156
    return old_value;
157
}
157
}
158
158
159
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
159
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
160
160
161
/* ------------------------------------------------------------------------ */
161
/* ------------------------------------------------------------------------ */
162
/* ------------------------------------------------------------------------ */
162
/* ------------------------------------------------------------------------ */
(-)openmp-3.9.1.src.orig/runtime/src/z_Windows_NT_util.c (-6 / +6 lines)
Lines 900-910 Link Here
900
#endif /* USE_ITT_BUILD */
900
#endif /* USE_ITT_BUILD */
901
    __kmp_initialize_system_tick();
901
    __kmp_initialize_system_tick();
902
902
903
    #if (KMP_ARCH_X86 || KMP_ARCH_X86_64)
903
    #if (KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32)
904
        if ( ! __kmp_cpuinfo.initialized ) {
904
        if ( ! __kmp_cpuinfo.initialized ) {
905
            __kmp_query_cpuid( & __kmp_cpuinfo );
905
            __kmp_query_cpuid( & __kmp_cpuinfo );
906
        }; // if
906
        }; // if
907
    #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
907
    #endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
908
908
909
    /* Set up minimum number of threads to switch to TLS gtid */
909
    /* Set up minimum number of threads to switch to TLS gtid */
910
    #if KMP_OS_WINDOWS && ! defined KMP_DYNAMIC_LIB
910
    #if KMP_OS_WINDOWS && ! defined KMP_DYNAMIC_LIB
Lines 1099-1111 Link Here
1099
    ntdll = NULL;
1099
    ntdll = NULL;
1100
    NtQuerySystemInformation = NULL;
1100
    NtQuerySystemInformation = NULL;
1101
1101
1102
#if KMP_ARCH_X86_64
1102
#if KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1103
    kernel32 = NULL;
1103
    kernel32 = NULL;
1104
    __kmp_GetActiveProcessorCount = NULL;
1104
    __kmp_GetActiveProcessorCount = NULL;
1105
    __kmp_GetActiveProcessorGroupCount = NULL;
1105
    __kmp_GetActiveProcessorGroupCount = NULL;
1106
    __kmp_GetThreadGroupAffinity = NULL;
1106
    __kmp_GetThreadGroupAffinity = NULL;
1107
    __kmp_SetThreadGroupAffinity = NULL;
1107
    __kmp_SetThreadGroupAffinity = NULL;
1108
#endif // KMP_ARCH_X86_64
1108
#endif // KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1109
1109
1110
    __kmp_init_runtime = FALSE;
1110
    __kmp_init_runtime = FALSE;
1111
}
1111
}
Lines 1222-1228 Link Here
1222
1222
1223
    __kmp_affinity_set_init_mask( gtid, FALSE );
1223
    __kmp_affinity_set_init_mask( gtid, FALSE );
1224
1224
1225
#if KMP_ARCH_X86 || KMP_ARCH_X86_64
1225
#if KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32
1226
    //
1226
    //
1227
    // Set the FP control regs to be a copy of
1227
    // Set the FP control regs to be a copy of
1228
    // the parallel initialization thread's.
1228
    // the parallel initialization thread's.
Lines 1230-1236 Link Here
1230
    __kmp_clear_x87_fpu_status_word();
1230
    __kmp_clear_x87_fpu_status_word();
1231
    __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
1231
    __kmp_load_x87_fpu_control_word( &__kmp_init_x87_fpu_control_word );
1232
    __kmp_load_mxcsr( &__kmp_init_mxcsr );
1232
    __kmp_load_mxcsr( &__kmp_init_mxcsr );
1233
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 */
1233
#endif /* KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_ARCH_X86_64_32 */
1234
1234
1235
    if ( __kmp_stkoffset > 0 && gtid > 0 ) {
1235
    if ( __kmp_stkoffset > 0 && gtid > 0 ) {
1236
        padding = KMP_ALLOCA( gtid * __kmp_stkoffset );
1236
        padding = KMP_ALLOCA( gtid * __kmp_stkoffset );

Return to bug 571228