File: EncUT_MemoryZero.cpp

package info (click to toggle)
openh264 2.6.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,120 kB
  • sloc: cpp: 74,004; asm: 34,842; ansic: 23,866; sh: 2,540; python: 937; objc: 612; cs: 471; makefile: 354; java: 319; xml: 204; javascript: 17
file content (96 lines) | stat: -rw-r--r-- 3,494 bytes parent folder | download | duplicates (6)
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
#include <gtest/gtest.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

#include "cpu_core.h"
#include "cpu.h"
#include "macros.h"
#include "wels_func_ptr_def.h"
#include "../../codec/encoder/core/src/encoder.cpp"

using namespace WelsEnc;
#define MEMORYZEROTEST_NUM 1000

TEST (SetMemZeroFunTest, WelsSetMemZero) {
  int32_t iLen = 64;
  int32_t iCpuCores = 0;
  SWelsFuncPtrList sFuncPtrList;
  uint32_t uiCpuFlag = WelsCPUFeatureDetect (&iCpuCores);
  /* Functionality utilization of CPU instructions dependency */
  sFuncPtrList.pfSetMemZeroSize8           = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
  sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
  sFuncPtrList.pfSetMemZeroSize64          = WelsSetMemZero_c; // confirmed_safe_unsafe_usage
#if defined(X86_ASM)
  if (uiCpuFlag & WELS_CPU_MMXEXT) {
    sFuncPtrList.pfSetMemZeroSize8           = WelsSetMemZeroSize8_mmx;  // confirmed_safe_unsafe_usage
    sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage
    sFuncPtrList.pfSetMemZeroSize64          = WelsSetMemZeroSize64_mmx; // confirmed_safe_unsafe_usage
  }
  if (uiCpuFlag & WELS_CPU_SSE2) {
    sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZeroAligned64_sse2; // confirmed_safe_unsafe_usage
  }
#else
  (void) uiCpuFlag; // Avoid warnings if no assembly is enabled
#endif//X86_ASM

#if defined(HAVE_NEON)
  if (uiCpuFlag & WELS_CPU_NEON) {
    sFuncPtrList.pfSetMemZeroSize8           = WelsSetMemZero_neon;
    sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_neon;
    sFuncPtrList.pfSetMemZeroSize64          = WelsSetMemZero_neon;
  }
#endif

#if defined(HAVE_NEON_AARCH64)
  if (uiCpuFlag & WELS_CPU_NEON) {
    sFuncPtrList.pfSetMemZeroSize8           = WelsSetMemZero_AArch64_neon;
    sFuncPtrList.pfSetMemZeroSize64Aligned16 = WelsSetMemZero_AArch64_neon;
    sFuncPtrList.pfSetMemZeroSize64          = WelsSetMemZero_AArch64_neon;
  }
#endif

  ENFORCE_STACK_ALIGN_2D (uint8_t, pInputAlign, 2, 64 * 101, 16)

  for (int32_t k = 0; k < MEMORYZEROTEST_NUM; k++) {
    memset (pInputAlign[0], 255, 64 * 101);
    memset (pInputAlign[1], 255, 64 * 101);
    iLen = 64 * (1 + (rand() % 100));
    WelsSetMemZero_c (pInputAlign[0], iLen);
    sFuncPtrList.pfSetMemZeroSize64Aligned16 (pInputAlign[1], iLen);
    for (int32_t i = 0 ; i < 64 * 101; i++) {
      ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
    }
  }

  for (int32_t k = 0; k < MEMORYZEROTEST_NUM; k++) {
    memset (pInputAlign[0], 255, 64 * 101);
    memset (pInputAlign[1], 255, 64 * 101);
    iLen = 64 * (1 + (rand() % 100));
    WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
    sFuncPtrList.pfSetMemZeroSize64 (pInputAlign[1] + 1, iLen);
    for (int32_t i = 0 ; i < 64 * 101; i++) {
      ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
    }
  }

  memset (pInputAlign[0], 255, 64 * 101);
  memset (pInputAlign[1], 255, 64 * 101);
  iLen = 32;
  WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
  sFuncPtrList.pfSetMemZeroSize8 (pInputAlign[1] + 1, iLen);
  for (int32_t i = 0 ; i < 64 * 101; i++) {
    ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
  }

  memset (pInputAlign[0], 255, 64 * 101);
  memset (pInputAlign[1], 255, 64 * 101);
  iLen = 24;
  WelsSetMemZero_c (pInputAlign[0] + 1, iLen);
  sFuncPtrList.pfSetMemZeroSize8 (pInputAlign[1] + 1, iLen);
  for (int32_t i = 0 ; i < 64 * 101; i++) {
    ASSERT_EQ (pInputAlign[0][i], pInputAlign[1][i]);
  }
}