xref: /aosp_15_r20/external/intel-media-driver/cmrtlib/agnostic/share/cm_mem.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1*ba62d9d3SAndroid Build Coastguard Worker /*
2*ba62d9d3SAndroid Build Coastguard Worker * Copyright (c) 2017, Intel Corporation
3*ba62d9d3SAndroid Build Coastguard Worker *
4*ba62d9d3SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*ba62d9d3SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*ba62d9d3SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*ba62d9d3SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*ba62d9d3SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*ba62d9d3SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*ba62d9d3SAndroid Build Coastguard Worker *
11*ba62d9d3SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included
12*ba62d9d3SAndroid Build Coastguard Worker * in all copies or substantial portions of the Software.
13*ba62d9d3SAndroid Build Coastguard Worker *
14*ba62d9d3SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*ba62d9d3SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*ba62d9d3SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*ba62d9d3SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*ba62d9d3SAndroid Build Coastguard Worker * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*ba62d9d3SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*ba62d9d3SAndroid Build Coastguard Worker * OTHER DEALINGS IN THE SOFTWARE.
21*ba62d9d3SAndroid Build Coastguard Worker */
22*ba62d9d3SAndroid Build Coastguard Worker 
23*ba62d9d3SAndroid Build Coastguard Worker #ifndef CMRTLIB_AGNOSTIC_SHARE_CM_MEM_H_
24*ba62d9d3SAndroid Build Coastguard Worker #define CMRTLIB_AGNOSTIC_SHARE_CM_MEM_H_
25*ba62d9d3SAndroid Build Coastguard Worker 
26*ba62d9d3SAndroid Build Coastguard Worker #include <cstring>
27*ba62d9d3SAndroid Build Coastguard Worker #include <new>
28*ba62d9d3SAndroid Build Coastguard Worker #include "cm_debug.h"
29*ba62d9d3SAndroid Build Coastguard Worker 
30*ba62d9d3SAndroid Build Coastguard Worker #define CmSafeDeleteArray(_ptr) {if(_ptr) {delete[] (_ptr); (_ptr)=0;}}
31*ba62d9d3SAndroid Build Coastguard Worker #define CmSafeRelease(_ptr)     {if(_ptr) {delete (_ptr); (_ptr)=0;}}
32*ba62d9d3SAndroid Build Coastguard Worker 
33*ba62d9d3SAndroid Build Coastguard Worker /*****************************************************************************\
34*ba62d9d3SAndroid Build Coastguard Worker Inline Function:
35*ba62d9d3SAndroid Build Coastguard Worker     CmSafeMemCopy
36*ba62d9d3SAndroid Build Coastguard Worker 
37*ba62d9d3SAndroid Build Coastguard Worker Description:
38*ba62d9d3SAndroid Build Coastguard Worker     Exception Handler Memory Copy function
39*ba62d9d3SAndroid Build Coastguard Worker \*****************************************************************************/
CmSafeMemCopy(void * dst,const void * src,const size_t bytes)40*ba62d9d3SAndroid Build Coastguard Worker inline void CmSafeMemCopy( void* dst, const void* src, const size_t bytes )
41*ba62d9d3SAndroid Build Coastguard Worker {
42*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
43*ba62d9d3SAndroid Build Coastguard Worker     __try
44*ba62d9d3SAndroid Build Coastguard Worker #endif
45*ba62d9d3SAndroid Build Coastguard Worker     {
46*ba62d9d3SAndroid Build Coastguard Worker         memcpy( dst, src, bytes );
47*ba62d9d3SAndroid Build Coastguard Worker     }
48*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
49*ba62d9d3SAndroid Build Coastguard Worker     // catch exceptions here so they are easily debugged
50*ba62d9d3SAndroid Build Coastguard Worker     __except(EXCEPTION_EXECUTE_HANDLER)
51*ba62d9d3SAndroid Build Coastguard Worker     {
52*ba62d9d3SAndroid Build Coastguard Worker         CmAssert(0);
53*ba62d9d3SAndroid Build Coastguard Worker     }
54*ba62d9d3SAndroid Build Coastguard Worker #endif
55*ba62d9d3SAndroid Build Coastguard Worker }
56*ba62d9d3SAndroid Build Coastguard Worker 
57*ba62d9d3SAndroid Build Coastguard Worker /*****************************************************************************\
58*ba62d9d3SAndroid Build Coastguard Worker Inline Function:
59*ba62d9d3SAndroid Build Coastguard Worker     CmSafeMemSet
60*ba62d9d3SAndroid Build Coastguard Worker 
61*ba62d9d3SAndroid Build Coastguard Worker Description:
62*ba62d9d3SAndroid Build Coastguard Worker     Memory set
63*ba62d9d3SAndroid Build Coastguard Worker \*****************************************************************************/
CmSafeMemSet(void * dst,const int data,const size_t bytes)64*ba62d9d3SAndroid Build Coastguard Worker inline void CmSafeMemSet( void* dst, const int data, const size_t bytes )
65*ba62d9d3SAndroid Build Coastguard Worker {
66*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
67*ba62d9d3SAndroid Build Coastguard Worker     __try
68*ba62d9d3SAndroid Build Coastguard Worker #endif
69*ba62d9d3SAndroid Build Coastguard Worker     {
70*ba62d9d3SAndroid Build Coastguard Worker         ::memset( dst, data, bytes );
71*ba62d9d3SAndroid Build Coastguard Worker     }
72*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
73*ba62d9d3SAndroid Build Coastguard Worker     // catch exceptions here so they are easily debugged
74*ba62d9d3SAndroid Build Coastguard Worker     __except(EXCEPTION_EXECUTE_HANDLER)
75*ba62d9d3SAndroid Build Coastguard Worker     {
76*ba62d9d3SAndroid Build Coastguard Worker         CmAssert(0);
77*ba62d9d3SAndroid Build Coastguard Worker     }
78*ba62d9d3SAndroid Build Coastguard Worker #endif
79*ba62d9d3SAndroid Build Coastguard Worker }
80*ba62d9d3SAndroid Build Coastguard Worker 
CmDwordMemSet(void * dst,const uint32_t data,const size_t bytes)81*ba62d9d3SAndroid Build Coastguard Worker inline void CmDwordMemSet( void* dst, const uint32_t data, const size_t bytes )
82*ba62d9d3SAndroid Build Coastguard Worker {
83*ba62d9d3SAndroid Build Coastguard Worker     uint32_t *ptr = reinterpret_cast<uint32_t*>( dst );
84*ba62d9d3SAndroid Build Coastguard Worker     uint32_t size = (uint32_t)(bytes >> 2); // divide by 4 byte to dword
85*ba62d9d3SAndroid Build Coastguard Worker     uint32_t *maxPtr = ptr + size;
86*ba62d9d3SAndroid Build Coastguard Worker     while(ptr < maxPtr)
87*ba62d9d3SAndroid Build Coastguard Worker         *ptr++ = data;
88*ba62d9d3SAndroid Build Coastguard Worker }
89*ba62d9d3SAndroid Build Coastguard Worker 
90*ba62d9d3SAndroid Build Coastguard Worker /*****************************************************************************\
91*ba62d9d3SAndroid Build Coastguard Worker Inline Function:
92*ba62d9d3SAndroid Build Coastguard Worker CmSafeMemCompare
93*ba62d9d3SAndroid Build Coastguard Worker 
94*ba62d9d3SAndroid Build Coastguard Worker Description:
95*ba62d9d3SAndroid Build Coastguard Worker Exception Handler Memory Compare function
96*ba62d9d3SAndroid Build Coastguard Worker \*****************************************************************************/
CmSafeMemCompare(const void * dst,const void * src,const size_t bytes)97*ba62d9d3SAndroid Build Coastguard Worker inline int CmSafeMemCompare(const void* dst, const void* src, const size_t bytes)
98*ba62d9d3SAndroid Build Coastguard Worker {
99*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
100*ba62d9d3SAndroid Build Coastguard Worker     __try
101*ba62d9d3SAndroid Build Coastguard Worker #endif
102*ba62d9d3SAndroid Build Coastguard Worker     {
103*ba62d9d3SAndroid Build Coastguard Worker         return ::memcmp(dst, src, bytes);
104*ba62d9d3SAndroid Build Coastguard Worker     }
105*ba62d9d3SAndroid Build Coastguard Worker #ifdef _DEBUG
106*ba62d9d3SAndroid Build Coastguard Worker     // catch exceptions here so they are easily debugged
107*ba62d9d3SAndroid Build Coastguard Worker     __except (EXCEPTION_EXECUTE_HANDLER)
108*ba62d9d3SAndroid Build Coastguard Worker     {
109*ba62d9d3SAndroid Build Coastguard Worker         CmAssert(0);
110*ba62d9d3SAndroid Build Coastguard Worker         return 0x7FFFFFFF;  //  An unreasonably large value indicating errors.
111*ba62d9d3SAndroid Build Coastguard Worker     }
112*ba62d9d3SAndroid Build Coastguard Worker #endif
113*ba62d9d3SAndroid Build Coastguard Worker }
114*ba62d9d3SAndroid Build Coastguard Worker 
115*ba62d9d3SAndroid Build Coastguard Worker #endif  // #ifndef CMRTLIB_AGNOSTIC_SHARE_CM_MEM_H_
116