This file is indexed.

/usr/include/Gem/Utils/SIMD.h is in gem-dev 1:0.93.3-13.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*-----------------------------------------------------------------
LOG
    GEM - Graphics Environment for Multimedia

    include file for SIMD

    Copyright (c) 1997-1999 Mark Danks. mark@danks.org
    Copyright (c) Günther Geiger. geiger@epy.co.at
    Copyright (c) 2001-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
    For information on usage and redistribution, and for a DISCLAIMER OF ALL
    WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.

-----------------------------------------------------------------*/

/* 
 * compiler-issues:
 *
 * gcc: when gcc is invoked with "-mmmx" (or "-msse2" or "-maltivec") 
 *      the defines __MMX__ (or corresponding) will be defined automatically
 *
 * vc6: you will have to install the microsoft processor-pack to use MMX/SSE2
 *      you have to have the sp5 for vc6 installed (note: do not install sp6!!)
 * vc6/vc7: (i think) you need to define __MMX__ (and friends) by hand
 */

#ifndef _INCLUDE__GEM_UTILS_SIMD_H_
#define _INCLUDE__GEM_UTILS_SIMD_H_

#define GEM_VECTORALIGNMENT 128

const int GEM_SIMD_NONE=0;
const int GEM_SIMD_MMX=1;
const int GEM_SIMD_SSE2=2;
const int GEM_SIMD_ALTIVEC=3;


#if defined __APPLE__ && defined __VEC__
# ifndef __APPLE_ALTIVEC__
#  undef __VEC__
# endif
#endif

/* include for SIMD on PC's */
#ifdef __SSE2__
#include <emmintrin.h>
// for icc this should be <dvec.h>
typedef union{
  unsigned char c[16];
  __m128i v;
} vector_128;
#elif defined __VEC__
/* for AltiVec (PowerPC) */
typedef union{
  unsigned char c[16];
  vector unsigned char v;
} vector_128;
#endif

#if defined __MMX__
# include <mmintrin.h>
// for icc this should be <ivec.h>
typedef union{
  __m64 v; unsigned char c[8];
} vector64i;

#endif


#ifdef __SSE__
#include <xmmintrin.h>

typedef union{
  __m128 m; float f[4];
} vector128f;
#endif

#include "Gem/ExportDef.h"


/* this is a help-class to query the capabilities of the cpu
 * whenever you want to use SIMD-optimized code, you should
 * make sure you chose the code-block based on the "cpuid" value
 * of this class and NOT simply on preprocessor defines.
 *
 * this class needs only be instantiated once (and it is done in GemMan)
 * this sets the cpuid
 */
class GEM_EXTERN GemSIMD
{
 public:
   GemSIMD(void);
  virtual ~GemSIMD(void);

  /* this gets the "cpuid" (something like GEM_SIMD_NONE) */
  static int getCPU(void);

  /* change the cpuid returned by getCPU()
   * you can only set the cpuid to something that is actually supported
   * by your processor
   */
  static int requestCPU(int cpuid);

  /* performs a runtime-check (if possible) to determine the capabilities
   * of the CPU
   * sets realcpuid appropriately and returns this  value
   */
  static int simd_runtime_check(void);

 private:
  /* this is the maximum capability of the CPU */
  static int realcpuid;
  /* this is the current choosen capability (normally this equals realcpuid) */
  static int cpuid;
};

#endif /* _INCLUDE__GEM_UTILS_SIMD_H_ */