Coverage Report

Created: 2025-07-01 06:46

/src/FreeRDP/libfreerdp/primitives/prim_andor.c
Line
Count
Source (jump to first uncovered line)
1
/* FreeRDP: A Remote Desktop Protocol Client
2
 * Logical operations.
3
 * vi:ts=4 sw=4:
4
 *
5
 * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
6
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
7
 * not use this file except in compliance with the License. You may obtain
8
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
9
 * Unless required by applicable law or agreed to in writing, software
10
 * distributed under the License is distributed on an "AS IS" BASIS,
11
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12
 * or implied. See the License for the specific language governing
13
 * permissions and limitations under the License.
14
 */
15
16
#include <freerdp/config.h>
17
18
#include <freerdp/types.h>
19
#include <freerdp/primitives.h>
20
21
#include "prim_internal.h"
22
#include "prim_andor.h"
23
24
/* ----------------------------------------------------------------------------
25
 * 32-bit AND with a constant.
26
 */
27
static pstatus_t general_andC_32u(const UINT32* WINPR_RESTRICT pSrc, UINT32 val,
28
                                  UINT32* WINPR_RESTRICT pDst, INT32 len)
29
0
{
30
0
  if (val == 0)
31
0
    return PRIMITIVES_SUCCESS;
32
33
0
  while (len--)
34
0
    *pDst++ = *pSrc++ & val;
35
36
0
  return PRIMITIVES_SUCCESS;
37
0
}
38
39
/* ----------------------------------------------------------------------------
40
 * 32-bit OR with a constant.
41
 */
42
static pstatus_t general_orC_32u(const UINT32* WINPR_RESTRICT pSrc, UINT32 val,
43
                                 UINT32* WINPR_RESTRICT pDst, INT32 len)
44
0
{
45
0
  if (val == 0)
46
0
    return PRIMITIVES_SUCCESS;
47
48
0
  while (len--)
49
0
    *pDst++ = *pSrc++ | val;
50
51
0
  return PRIMITIVES_SUCCESS;
52
0
}
53
54
/* ------------------------------------------------------------------------- */
55
void primitives_init_andor(primitives_t* WINPR_RESTRICT prims)
56
0
{
57
  /* Start with the default. */
58
0
  prims->andC_32u = general_andC_32u;
59
0
  prims->orC_32u = general_orC_32u;
60
0
}
61
62
void primitives_init_andor_opt(primitives_t* WINPR_RESTRICT prims)
63
0
{
64
0
  primitives_init_andor(prims);
65
0
  primitives_init_andor_sse3(prims);
66
0
}