switch (swreg_type(reg)) { case NN_REG_GPR_A: case NN_REG_GPR_B: case NN_REG_GPR_BOTH: return val; case NN_REG_NNR: return UR_REG_NN | val; case NN_REG_XFER: return UR_REG_XFR | val; case NN_REG_LMEM:
lm_id = swreg_lm_idx(reg);
switch (swreg_lm_mode(reg)) { case NN_LM_MOD_NONE: if (val & ~UR_REG_LM_IDX_MAX) {
pr_err("LM offset too large\n"); return 0;
} return UR_REG_LM | FIELD_PREP(UR_REG_LM_IDX, lm_id) |
val; case NN_LM_MOD_DEC:
lm_dec = true;
fallthrough; case NN_LM_MOD_INC: if (val) {
pr_err("LM offset in inc/dev mode\n"); return 0;
} return UR_REG_LM | UR_REG_LM_POST_MOD |
FIELD_PREP(UR_REG_LM_IDX, lm_id) |
FIELD_PREP(UR_REG_LM_POST_MOD_DEC, lm_dec); default:
pr_err("bad LM mode for unrestricted operands %d\n",
swreg_lm_mode(reg)); return 0;
} case NN_REG_IMM: if (val & ~0xff) {
pr_err("immediate too large\n"); return 0;
} return UR_REG_IMM_encode(val); case NN_REG_NONE: return is_dst ? UR_REG_NO_DST : REG_NONE;
}
switch (swreg_type(reg)) { case NN_REG_GPR_A: case NN_REG_GPR_B: case NN_REG_GPR_BOTH: return val; case NN_REG_XFER: return RE_REG_XFR | val; case NN_REG_LMEM:
lm_id = swreg_lm_idx(reg);
if (swreg_lm_mode(reg) != NN_LM_MOD_NONE) {
pr_err("bad LM mode for restricted operands %d\n",
swreg_lm_mode(reg)); return 0;
}
if (val & ~RE_REG_LM_IDX_MAX) {
pr_err("LM offset too large\n"); return 0;
}
return RE_REG_LM | FIELD_PREP(RE_REG_LM_IDX, lm_id) | val; case NN_REG_IMM: if (val & ~(0x7f | has_imm8 << 7)) {
pr_err("immediate too large\n"); return 0;
}
*i8 = val & 0x80; return RE_REG_IMM_encode(val & 0x7f); case NN_REG_NONE: return is_dst ? RE_REG_NO_DST : REG_NONE; case NN_REG_NNR:
pr_err("NNRs used with restricted encoding\n"); return 0;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.