blob: 214ac2225b24bbda6644a49739bf565d3b254153 [file] [log] [blame]
/*
* Copyright 2024 Advanced Micro Devices, Inc.
*
* SPDX-License-Identifier: MIT
*/
#include "helpers.h"
bool
util_lower_clearsize_to_dword(const void *clear_value, int *clear_value_size,
uint32_t *out)
{
/* Reduce a large clear value size if possible. */
if (*clear_value_size > 4) {
bool clear_dword_duplicated = true;
const uint32_t *value = clear_value;
/* See if we can lower large fills to dword fills. */
for (unsigned i = 1; i < *clear_value_size / 4; i++) {
if (value[0] != value[i]) {
clear_dword_duplicated = false;
break;
}
}
if (clear_dword_duplicated) {
*out = *value;
*clear_value_size = 4;
}
return clear_dword_duplicated;
}
/* Expand a small clear value size. */
if (*clear_value_size <= 2) {
if (*clear_value_size == 1) {
*out = *(uint8_t *)clear_value;
*out |=
(*out << 8) | (*out << 16) | (*out << 24);
} else {
*out = *(uint16_t *)clear_value;
*out |= *out << 16;
}
*clear_value_size = 4;
return true;
}
return false;
}