source: trunk/dports/devel/libsdl/files/cpuinfo.diff @ 78538

Last change on this file since 78538 was 78538, checked in by jmr@…, 8 years ago

libsdl: apply upstream cpuinfo patches, fixes bulding for x86_64 on 10.5 (#22754)

File size: 8.3 KB
  • src/cpuinfo/SDL_cpuinfo.c

    Upstream changesets:
    ca91f36ef3def70a02eefd8d3920439409fee3d0
    dcb26ac38e6bb206589d711916ab02701223c651
    72d3b4fd918b661a06e237b1b9e2dcb2b72e9ed4
    
    old new  
    2626#include "SDL.h"
    2727#include "SDL_cpuinfo.h"
    2828
    29 #if defined(__MACOSX__) && defined(__ppc__)
     29#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
    3030#include <sys/sysctl.h> /* For AltiVec check */
    3131#elif SDL_ALTIVEC_BLITTERS && HAVE_SETJMP
    3232#include <signal.h>
    static __inline__ int CPU_getCPUIDFeatur 
    148148        int features = 0;
    149149#if defined(__GNUC__) && defined(i386)
    150150        __asm__ (
    151 "        movl    %%ebx,%%edi\n"
    152151"        xorl    %%eax,%%eax         # Set up for CPUID instruction    \n"
     152"        pushl   %%ebx                                                 \n"
    153153"        cpuid                       # Get and save vendor ID          \n"
     154"        popl    %%ebx                                                 \n"
    154155"        cmpl    $1,%%eax            # Make sure 1 is valid input for CPUID\n"
    155156"        jl      1f                  # We dont have the CPUID instruction\n"
    156157"        xorl    %%eax,%%eax                                           \n"
    157158"        incl    %%eax                                                 \n"
     159"        pushl   %%ebx                                                 \n"
    158160"        cpuid                       # Get family/model/stepping/features\n"
     161"        popl    %%ebx                                                 \n"
    159162"        movl    %%edx,%0                                              \n"
    160163"1:                                                                    \n"
    161 "        movl    %%edi,%%ebx\n"
    162164        : "=m" (features)
    163165        :
    164         : "%eax", "%ecx", "%edx", "%edi"
     166        : "%eax", "%ecx", "%edx"
    165167        );
    166168#elif defined(__GNUC__) && defined(__x86_64__)
    167169        __asm__ (
    168 "        movq    %%rbx,%%rdi\n"
    169170"        xorl    %%eax,%%eax         # Set up for CPUID instruction    \n"
     171"        pushq   %%rbx                                                 \n"
    170172"        cpuid                       # Get and save vendor ID          \n"
     173"        popq    %%rbx                                                 \n"
    171174"        cmpl    $1,%%eax            # Make sure 1 is valid input for CPUID\n"
    172175"        jl      1f                  # We dont have the CPUID instruction\n"
    173176"        xorl    %%eax,%%eax                                           \n"
    174177"        incl    %%eax                                                 \n"
     178"        pushq   %%rbx                                                 \n"
    175179"        cpuid                       # Get family/model/stepping/features\n"
     180"        popq    %%rbx                                                 \n"
    176181"        movl    %%edx,%0                                              \n"
    177182"1:                                                                    \n"
    178 "        movq    %%rdi,%%rbx\n"
    179183        : "=m" (features)
    180184        :
    181         : "%rax", "%rbx", "%rcx", "%rdx", "%rdi"
     185        : "%rax", "%rcx", "%rdx"
    182186        );
    183187#elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)
    184188        __asm {
    185189        xor     eax, eax            ; Set up for CPUID instruction
     190        push    ebx
    186191        cpuid                       ; Get and save vendor ID
     192        pop     ebx
    187193        cmp     eax, 1              ; Make sure 1 is valid input for CPUID
    188194        jl      done                ; We dont have the CPUID instruction
    189195        xor     eax, eax
    190196        inc     eax
     197        push    ebx
    191198        cpuid                       ; Get family/model/stepping/features
     199        pop     ebx
    192200        mov     features, edx
    193201done:
    194202        }
    195203#elif defined(__sun) && (defined(__i386) || defined(__amd64))
    196204            __asm(
    197 "        movl    %ebx,%edi\n"
    198205"        xorl    %eax,%eax         \n"
     206"        pushl   %ebx              \n"
    199207"        cpuid                     \n"
     208"        popl    %ebx              \n"
    200209"        cmpl    $1,%eax           \n"
    201210"        jl      1f                \n"
    202211"        xorl    %eax,%eax         \n"
    203212"        incl    %eax              \n"
     213"        pushl   %ebx              \n"
    204214"        cpuid                     \n"
     215"        popl    %ebx              \n"
    205216#ifdef __i386
    206217"        movl    %edx,-8(%ebp)     \n"
    207218#else
    208219"        movl    %edx,-8(%rbp)     \n"
    209220#endif
    210221"1:                                \n"
    211 "        movl    %edi,%ebx\n" );
    212222#endif
    213223        return features;
    214224}
    static __inline__ int CPU_getCPUIDFeatur 
    218228        int features = 0;
    219229#if defined(__GNUC__) && defined(i386)
    220230        __asm__ (
    221 "        movl    %%ebx,%%edi\n"
    222231"        movl    $0x80000000,%%eax   # Query for extended functions    \n"
     232"        pushl   %%ebx                                                 \n"
    223233"        cpuid                       # Get extended function limit     \n"
     234"        popl    %%ebx                                                 \n"
    224235"        cmpl    $0x80000001,%%eax                                     \n"
    225236"        jl      1f                  # Nope, we dont have function 800000001h\n"
    226237"        movl    $0x80000001,%%eax   # Setup extended function 800000001h\n"
     238"        pushl   %%ebx                                                 \n"
    227239"        cpuid                       # and get the information         \n"
     240"        popl    %%ebx                                                 \n"
    228241"        movl    %%edx,%0                                              \n"
    229242"1:                                                                    \n"
    230 "        movl    %%edi,%%ebx\n"
    231243        : "=m" (features)
    232244        :
    233         : "%eax", "%ecx", "%edx", "%edi"
     245        : "%eax", "%ecx", "%edx"
    234246        );
    235247#elif defined(__GNUC__) && defined (__x86_64__)
    236248        __asm__ (
    237 "        movq    %%rbx,%%rdi\n"
    238249"        movl    $0x80000000,%%eax   # Query for extended functions    \n"
     250"        pushq   %%rbx                                                 \n"
    239251"        cpuid                       # Get extended function limit     \n"
     252"        popq    %%rbx                                                 \n"
    240253"        cmpl    $0x80000001,%%eax                                     \n"
    241254"        jl      1f                  # Nope, we dont have function 800000001h\n"
    242255"        movl    $0x80000001,%%eax   # Setup extended function 800000001h\n"
     256"        pushq   %%rbx                                                 \n"
    243257"        cpuid                       # and get the information         \n"
     258"        popq    %%rbx                                                 \n"
    244259"        movl    %%edx,%0                                              \n"
    245260"1:                                                                    \n"
    246 "        movq    %%rdi,%%rbx\n"
    247261        : "=m" (features)
    248262        :
    249         : "%rax", "%rbx", "%rcx", "%rdx", "%rdi"
     263        : "%rax", "%rcx", "%rdx"
    250264        );
    251265#elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)
    252266        __asm {
    253267        mov     eax,80000000h       ; Query for extended functions
     268        push    ebx
    254269        cpuid                       ; Get extended function limit
     270        pop     ebx
    255271        cmp     eax,80000001h
    256272        jl      done                ; Nope, we dont have function 800000001h
    257273        mov     eax,80000001h       ; Setup extended function 800000001h
     274        push    ebx
    258275        cpuid                       ; and get the information
     276        pop     ebx
    259277        mov     features,edx
    260278done:
    261279        }
    262280#elif defined(__sun) && ( defined(__i386) || defined(__amd64) )
    263281            __asm (
    264 "        movl    %ebx,%edi\n"
    265282"        movl    $0x80000000,%eax \n"
     283"        pushl   %ebx             \n"
    266284"        cpuid                    \n"
     285"        popl    %ebx             \n"
    267286"        cmpl    $0x80000001,%eax \n"
    268287"        jl      1f               \n"
    269288"        movl    $0x80000001,%eax \n"
     289"        pushl   %ebx             \n"
    270290"        cpuid                    \n"
     291"        popl    %ebx             \n"
    271292#ifdef __i386
    272293"        movl    %edx,-8(%ebp)   \n"
    273294#else
    274295"        movl    %edx,-8(%rbp)   \n"
    275296#endif
    276297"1:                               \n"
    277 "        movl    %edi,%ebx\n"
    278298            );
    279299#endif
    280300        return features;
    static __inline__ int CPU_haveSSE2(void) 
    339359static __inline__ int CPU_haveAltiVec(void)
    340360{
    341361        volatile int altivec = 0;
    342 #if defined(__MACOSX__) && defined(__ppc__)
     362#if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))
    343363        int selectors[2] = { CTL_HW, HW_VECTORUNIT };
    344364        int hasVectorUnit = 0;
    345365        size_t length = sizeof(hasVectorUnit);
Note: See TracBrowser for help on using the repository browser.