File: FindZVECTOR.cmake

package info (click to toggle)
pytorch 2.6.0%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 161,668 kB
  • sloc: python: 1,278,832; cpp: 900,322; ansic: 82,710; asm: 7,754; java: 3,363; sh: 2,811; javascript: 2,443; makefile: 597; ruby: 195; xml: 84; objc: 68
file content (39 lines) | stat: -rw-r--r-- 1,364 bytes parent folder | download | duplicates (2)
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
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  message("-- <FindZVECTOR>")

  SET(VECTORIZATION_CODE  "
    #include <vecintrin.h>
    using vuint32  =  __attribute__ ((vector_size (16)))  unsigned  int;
    using vfloat32 =  __attribute__ ((vector_size (16)))  float;
    vfloat32 vsel_ext(vuint32 o, vfloat32 x, vfloat32 y)
    {
        return vec_sel(y, x, o);
    }
    int main(){
        vfloat32 h1 ={3.f, 4.f, 5.f, 6.f};
        vfloat32 h2 = {9.f, 8.f, 11.f, 12.f};
        vuint32  selector= {0xFFFFFFFF, 0, 0xFFFFFFFF, 0xFFFFFFFF};
        vfloat32 hf = vsel_ext(selector, h1,h2);
        int ret = (int)(hf[0]*1000+hf[1]*100+hf[2]*10+hf[3]);
        return (ret == 3856) ? 0 : -1;
    }
   ")

  SET(ARCH_SIMD_TEST_FLAGS " -mvx -mzvector")
  SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
  SET(CMAKE_REQUIRED_FLAGS "${ARCH_SIMD_TEST_FLAGS}")
  # Do compilation check instead of runtime check
  # in case it is compiled on older hardware
  # or crosscompiled
  CHECK_CXX_SOURCE_COMPILES("${VECTORIZATION_CODE}"  COMPILE_OUT_ZVECTOR)
  SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
  if(COMPILE_OUT_ZVECTOR)
    message("-- ZVECTOR flags were set.")
    set(CXX_ZVECTOR_FOUND TRUE)
    SET(CXX_ZVECTOR_FLAGS  "${ARCH_SIMD_TEST_FLAGS}" )
  else()
    message("-- ZVECTOR flags were NOT set.")
  endif()
  message("-- </FindZVECTOR>")

endif()