1 /* 2 * Copyright 2024 Advanced Micro Devices, Inc. 3 * 4 * SPDX-License-Identifier: MIT 5 */ 6 7 #include "helpers.h" 8 9 bool util_lower_clearsize_to_dword(const void * clear_value,int * clear_value_size,uint32_t * out)10util_lower_clearsize_to_dword(const void *clear_value, int *clear_value_size, 11 uint32_t *out) 12 { 13 /* Reduce a large clear value size if possible. */ 14 if (*clear_value_size > 4) { 15 bool clear_dword_duplicated = true; 16 const uint32_t *value = clear_value; 17 18 /* See if we can lower large fills to dword fills. */ 19 for (unsigned i = 1; i < *clear_value_size / 4; i++) { 20 if (value[0] != value[i]) { 21 clear_dword_duplicated = false; 22 break; 23 } 24 } 25 if (clear_dword_duplicated) { 26 *out = *value; 27 *clear_value_size = 4; 28 } 29 return clear_dword_duplicated; 30 } 31 32 /* Expand a small clear value size. */ 33 if (*clear_value_size <= 2) { 34 if (*clear_value_size == 1) { 35 *out = *(uint8_t *)clear_value; 36 *out |= 37 (*out << 8) | (*out << 16) | (*out << 24); 38 } else { 39 *out = *(uint16_t *)clear_value; 40 *out |= *out << 16; 41 } 42 *clear_value_size = 4; 43 return true; 44 } 45 return false; 46 } 47