chore: cleanup GVAR code (#6332)

This commit is contained in:
philmoz
2025-06-17 14:43:00 +10:00
committed by GitHub
parent a332fa5b9b
commit 3216eeaefe
16 changed files with 91 additions and 123 deletions
@@ -65,27 +65,20 @@ static bool w_board(void* user, uint8_t* data, uint32_t bitoffs,
static uint32_t in_read_weight(const YamlNode* node, const char* val, uint8_t val_len)
{
int gvar = (node->size > 8 ? GV1_LARGE : GV1_SMALL);
if ((val_len == 4)
&& (val[0] == '-')
&& (val[1] == 'G')
&& (val[2] == 'V')
&& (val[3] >= '1')
&& (val[3] <= '9')) {
TRACE("%.*s -> %i\n", val_len, val, gvar - (val[3] - '0'));
return gvar - (val[3] - '0'); // -GVx => 128 - x
}
if ((val_len == 3)
&& (val[0] == 'G')
&& (val[1] == 'V')
&& (val[2] >= '1')
&& (val[2] <= '9')) {
TRACE("%.*s -> %i\n", val_len, val, -gvar + (val[2] - '1'));
return -gvar + (val[2] - '1'); // GVx => -128 + (x-1)
if ((strncmp(val, "GV", 2) == 0) || (strncmp(val, "-GV", 3) == 0)) {
bool neg = false;
int ofst = 2;
if (val[0] == '-') {
neg = true;
ofst = 3;
}
int32_t idx = yaml_str2int(val + ofst, val_len - ofst);
// Convert to range -MAX_GVARS .. MAX_GVARS - 1
if (neg)
idx = -idx;
else
idx = idx - 1;
return GV_VALUE_FROM_INDEX(idx);
}
return (uint32_t)yaml_str2int(val, val_len);
@@ -94,15 +87,21 @@ static uint32_t in_read_weight(const YamlNode* node, const char* val, uint8_t va
bool in_write_weight(const YamlNode* node, uint32_t val, yaml_writer_func wf,
void* opaque)
{
int32_t sval = yaml_to_signed(val, node->size <= 11 ? node->size : 11);
int32_t gvar = (node->size > 8 ? GV1_LARGE : GV1_SMALL);
int32_t sval = yaml_to_signed(val, node->size);
if (sval >= gvar - 10 && sval <= gvar) {
char n = gvar - sval + '0';
return wf(opaque, "-GV", 3) && wf(opaque, &n, 1);
} else if (sval <= -gvar + 10 && sval >= -gvar) {
char n = val - gvar + '1';
return wf(opaque, "GV", 2) && wf(opaque, &n, 1);
if (GV_IS_GV_VALUE(sval)) {
char s[8] = "";
int ofst = 0;
int idx = GV_INDEX_FROM_VALUE(sval);
if (idx < 0) {
s[0] = '-';
ofst = 1;
idx = -idx;
} else {
idx = idx + 1;
}
strAppendStringWithIndex(s + ofst, "GV", idx);
return wf(opaque, s, strlen(s));
}
char* s = yaml_signed2str(sval);