These changes fix logical consistency and correctness issues with the instruction definitions as printed in the manual. The most serious issues were: - div0u/div0s/div1 use `m` as a temporary variable which contradicts the existence of the `m` register number - missing semicolons - inconsistent references to immediate and displacement variable names
19 lines
405 B
Plaintext
19 lines
405 B
Plaintext
0011nnnnmmmm0100
|
|
q ← ZeroExtend1(Q);
|
|
_m ← ZeroExtend1(M);
|
|
t ← ZeroExtend1(T);
|
|
op1 ← ZeroExtend32(SignExtend32(Rm));
|
|
op2 ← ZeroExtend32(SignExtend32(Rn));
|
|
oldq ← q;
|
|
q ← op2< 31 FOR 1 >;
|
|
op2 ← ZeroExtend32(op2 << 1) ∨ t;
|
|
IF (oldq = _m)
|
|
op2 ← op2 - op1;
|
|
ELSE
|
|
op2 ← op2 + op1;
|
|
q ← (q ⊕ _m) ⊕ op2< 32 FOR 1 >;
|
|
t ← 1 - (q ⊕ _m);
|
|
Rn ← Register(op2);
|
|
Q ← Bit(q);
|
|
T ← Bit(t);
|