[otbn] Fix ordering problems in RIG model update logic
[otbn] Fix ordering problems in RIG model update logic

Before this patch, Model.update_for_insn updated the model
"generically", based on the instruction's operands and their types and
then it called any specific update function.

The problem is that we don't explicitly keep "before" and "after"
versions of registers (as done by the commit() methods in the ISS), so
the specific updater function could get a stale version of an input
argument. This doesn't matter for most operands (because, at worst,
writing an indeterminate value to the operand just forgets its value),
but does matter for x1, where something like

   addi x2, x1, 123

ended up using the element immediately below the top of the stack when
calculating the new value for x2.

To fix things, we make the specialized update_for_FOO instructions
call the generic update logic explicitly. That way, we can do any
required reads first and apply any required changes afterwards.

Signed-off-by: Rupert Swarbrick <290093e2ad2515ed2f14d749293c8cf8e02ca274@lowrisc.org>

lowRISC/opentitan,lowRISC/opentitan,lowRISC/opentitan,lowRISC/opentitan,lowRISC/opentitan,lowRISC/opentitan