src/hermes/HeadX86.h
author Ben Avison <bavison@riscosopen.org>
Thu, 31 Oct 2019 14:00:28 +0300
branchSDL-1.2
changeset 13219 4f88e197acad
parent 4152 39b9405d3cb6
permissions -rw-r--r--
ARM: Create configure option --enable-arm-neon to govern assembly optimizations
---
configure.in | 39 +++++++++++++++++++++++++++++++++++++++
include/SDL_config.h.in | 1 +
include/SDL_cpuinfo.h | 3 +++
src/cpuinfo/SDL_cpuinfo.c | 37 +++++++++++++++++++++++++++++++++++++
4 files changed, 80 insertions(+)
     1 /*
     2    Header definitions for the x86 routines for the HERMES library
     3    Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
     4    This source code is licensed under the GNU LGPL
     5   
     6    Please refer to the file COPYING.LIB contained in the distribution for
     7    licensing conditions
     8 */
     9 
    10 #ifndef __HERMES_HEAD_X86__
    11 #define __HERMES_HEAD_X86__
    12 
    13 
    14 #ifdef X86_ASSEMBLER
    15 
    16 /* If you can't stand IFDEFS, then close your eyes now, please :) */
    17 
    18 /* Ok, we start with normal function definitions */
    19 #ifdef __cplusplus
    20 extern "C" {
    21 #endif
    22 
    23 
    24 void STACKCALL ConvertX86(HermesConverterInterface *);
    25 void STACKCALL ClearX86_32(HermesClearInterface *);
    26 void STACKCALL ClearX86_24(HermesClearInterface *);
    27 void STACKCALL ClearX86_16(HermesClearInterface *);
    28 void STACKCALL ClearX86_8(HermesClearInterface *);
    29 
    30 int STACKCALL Hermes_X86_CPU();
    31 
    32 void ConvertX86p32_32BGR888();
    33 void ConvertX86p32_32RGBA888();
    34 void ConvertX86p32_32BGRA888();
    35 void ConvertX86p32_24RGB888();
    36 void ConvertX86p32_24BGR888();
    37 void ConvertX86p32_16RGB565();
    38 void ConvertX86p32_16BGR565();
    39 void ConvertX86p32_16RGB555();
    40 void ConvertX86p32_16BGR555();
    41 void ConvertX86p32_8RGB332();
    42 
    43 void ConvertX86p16_32RGB888();
    44 void ConvertX86p16_32BGR888();
    45 void ConvertX86p16_32RGBA888();
    46 void ConvertX86p16_32BGRA888();
    47 void ConvertX86p16_24RGB888();
    48 void ConvertX86p16_24BGR888();
    49 void ConvertX86p16_16BGR565();
    50 void ConvertX86p16_16RGB555();
    51 void ConvertX86p16_16BGR555();
    52 void ConvertX86p16_8RGB332();
    53 
    54 void CopyX86p_4byte();
    55 void CopyX86p_3byte();
    56 void CopyX86p_2byte();
    57 void CopyX86p_1byte();
    58 
    59 void ConvertX86pI8_32();
    60 void ConvertX86pI8_24();
    61 void ConvertX86pI8_16();
    62 
    63 extern int ConvertX86p16_32RGB888_LUT_X86[512];
    64 extern int ConvertX86p16_32BGR888_LUT_X86[512];
    65 extern int ConvertX86p16_32RGBA888_LUT_X86[512];
    66 extern int ConvertX86p16_32BGRA888_LUT_X86[512];
    67   
    68 #ifdef __cplusplus
    69 }
    70 #endif
    71 
    72 
    73 
    74 
    75 /* Now fix up the ELF underscore problem */
    76 
    77 #if (defined(__ELF__) && defined(__GNUC__)) || defined(__SUNPRO_C)
    78   #ifdef __cplusplus
    79   extern "C" {
    80   #endif
    81 
    82   extern int _Hermes_X86_CPU();
    83 
    84   extern void _ConvertX86(HermesConverterInterface *);
    85 
    86   extern void _ConvertX86p32_32BGR888();
    87   extern void _ConvertX86p32_32RGBA888();
    88   extern void _ConvertX86p32_32BGRA888();
    89   extern void _ConvertX86p32_24RGB888();
    90   extern void _ConvertX86p32_24BGR888();
    91   extern void _ConvertX86p32_16RGB565();
    92   extern void _ConvertX86p32_16BGR565();
    93   extern void _ConvertX86p32_16RGB555();
    94   extern void _ConvertX86p32_16BGR555();
    95   extern void _ConvertX86p32_8RGB332();
    96 
    97   extern void _ConvertX86p16_16BGR565();
    98   extern void _ConvertX86p16_16RGB555();
    99   extern void _ConvertX86p16_16BGR555();
   100   extern void _ConvertX86p16_8RGB332();
   101 
   102 
   103   #define Hermes_X86_CPU _Hermes_X86_CPU
   104 
   105   #define ConvertX86 _ConvertX86
   106 
   107   #define ConvertX86p32_32BGR888 _ConvertX86p32_32BGR888
   108   #define ConvertX86p32_32RGBA888 _ConvertX86p32_32RGBA888
   109   #define ConvertX86p32_32BGRA888 _ConvertX86p32_32BGRA888
   110   #define ConvertX86p32_24RGB888 _ConvertX86p32_24RGB888
   111   #define ConvertX86p32_24BGR888 _ConvertX86p32_24BGR888
   112   #define ConvertX86p32_16RGB565 _ConvertX86p32_16RGB565
   113   #define ConvertX86p32_16BGR565 _ConvertX86p32_16BGR565
   114   #define ConvertX86p32_16RGB555 _ConvertX86p32_16RGB555
   115   #define ConvertX86p32_16BGR555 _ConvertX86p32_16BGR555
   116   #define ConvertX86p32_8RGB332 _ConvertX86p32_8RGB332
   117 
   118   #define ConvertX86p16_16BGR565 _ConvertX86p16_16BGR565
   119   #define ConvertX86p16_16RGB555 _ConvertX86p16_16RGB555
   120   #define ConvertX86p16_16BGR555 _ConvertX86p16_16BGR555
   121   #define ConvertX86p16_8RGB332 _ConvertX86p16_8RGB332
   122 
   123 
   124   #ifdef __cplusplus
   125   }
   126   #endif
   127 
   128 #endif /* ELF & GNU */
   129 
   130 
   131 
   132 /* Make it run with WATCOM C */
   133 #ifdef __WATCOMC__
   134 #pragma warning 601 9
   135 
   136 #pragma aux Hermes_X86_CPU "_*"
   137 
   138 #pragma aux ConvertX86 "_*" modify [EAX EBX ECX EDX ESI EDI]
   139 #pragma aux ClearX86_32 "_*" modify [EAX EBX ECX EDX ESI EDI]
   140 #pragma aux ClearX86_24 "_*" modify [EAX EBX ECX EDX ESI EDI]
   141 #pragma aux ClearX86_16 "_*" modify [EAX EBX ECX EDX ESI EDI]
   142 #pragma aux ClearX86_8 "_*" modify [EAX EBX ECX EDX ESI EDI]
   143 
   144 #pragma aux ConvertX86p32_32BGR888 "_*"
   145 #pragma aux ConvertX86p32_32RGBA888 "_*"
   146 #pragma aux ConvertX86p32_32BGRA888 "_*"
   147 #pragma aux ConvertX86p32_24RGB888 "_*"
   148 #pragma aux ConvertX86p32_24BGR888 "_*"
   149 #pragma aux ConvertX86p32_16RGB565 "_*"
   150 #pragma aux ConvertX86p32_16BGR565 "_*"
   151 #pragma aux ConvertX86p32_16RGB555 "_*"
   152 #pragma aux ConvertX86p32_16BGR555 "_*"
   153 #pragma aux ConvertX86p32_8RGB332 "_*"
   154 
   155 #pragma aux ConvertX86p16_32RGB888 "_*"
   156 #pragma aux ConvertX86p16_32BGR888 "_*"
   157 #pragma aux ConvertX86p16_32RGBA888 "_*"
   158 #pragma aux ConvertX86p16_32BGRA888 "_*"
   159 #pragma aux ConvertX86p16_24RGB888 "_*"
   160 #pragma aux ConvertX86p16_24BGR888 "_*"
   161 #pragma aux ConvertX86p16_16BGR565 "_*"
   162 #pragma aux ConvertX86p16_16RGB555 "_*"
   163 #pragma aux ConvertX86p16_16BGR555 "_*"
   164 #pragma aux ConvertX86p16_8RGB332 "_*"
   165 
   166 #pragma aux CopyX86p_4byte "_*"
   167 #pragma aux CopyX86p_3byte "_*"
   168 #pragma aux CopyX86p_2byte "_*"
   169 #pragma aux CopyX86p_1byte "_*"
   170 
   171 #pragma aux ConvertX86pI8_32 "_*"
   172 #pragma aux ConvertX86pI8_24 "_*"
   173 #pragma aux ConvertX86pI8_16 "_*"
   174 
   175 #pragma aux ConvertX86p16_32RGB888_LUT_X86 "_*"
   176 #pragma aux ConvertX86p16_32BGR888_LUT_X86 "_*"
   177 #pragma aux ConvertX86p16_32RGBA888_LUT_X86 "_*"
   178 #pragma aux ConvertX86p16_32BGRA888_LUT_X86 "_*"
   179 
   180 #endif /* __WATCOMC__ */
   181 
   182 
   183 #endif /* X86_ASSEMBLER */
   184 
   185 
   186 #endif