xref: /aosp_15_r20/external/mesa3d/src/intel/genxml/genX_helpers.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /* Copyright © 2023 Intel Corporation
2  * SPDX-License-Identifier: MIT
3  */
4 
5 #ifndef __GENX_HELPERS_H__
6 #define __GENX_HELPERS_H__
7 
8 #ifndef __gen_validate_value
9 #define __gen_validate_value(x)
10 #endif
11 
12 #ifndef __intel_field_functions
13 #define __intel_field_functions
14 #endif
15 
16 #ifndef __gen_address_type
17 #error #define __gen_address_type before including this file
18 #endif
19 
20 #ifndef __gen_user_data
21 #error #define __gen_combine_address before including this file
22 #endif
23 
24 static inline __attribute__((always_inline)) uint64_t
__gen_offset(uint64_t v,ASSERTED uint32_t start,ASSERTED uint32_t end)25 __gen_offset(uint64_t v, ASSERTED uint32_t start, ASSERTED uint32_t end)
26 {
27    __gen_validate_value(v);
28 #ifndef NDEBUG
29    uint64_t mask = (~0ull >> (64 - (end - start + 1))) << start;
30 
31    assert((v & ~mask) == 0);
32 #endif
33 
34    return v;
35 }
36 
37 static inline __attribute__((always_inline)) uint64_t
__gen_offset_nonzero(uint64_t v,uint32_t start,uint32_t end)38 __gen_offset_nonzero(uint64_t v, uint32_t start, uint32_t end)
39 {
40    assert(v != 0ull);
41    return __gen_offset(v, start, end);
42 }
43 
44 static inline __attribute__((always_inline)) uint64_t
__gen_address(__gen_user_data * data,void * location,__gen_address_type address,uint32_t delta,uint32_t start,uint32_t end)45 __gen_address(__gen_user_data *data, void *location,
46               __gen_address_type address, uint32_t delta,
47               __attribute__((unused)) uint32_t start, uint32_t end)
48 {
49    uint64_t addr_u64 = __gen_combine_address(data, location, address, delta);
50    if (end == 31) {
51       return addr_u64;
52    } else if (end < 63) {
53       const unsigned shift = 63 - end;
54       return (addr_u64 << shift) >> shift;
55    } else {
56       return addr_u64;
57    }
58 }
59 
60 #endif /* __GENX_HELPERS_H__ */
61