By whygee on Saturday 4 April 2009, 16:31 - Architecture
A precedent post has summarised the available "instruction forms", with or without immediate field (4 or 16-bits), with 2, 3 or 4 register addresses. Here we look at the "long form" (32-bit) using the "extended" fields that add 2 register addresses, conditional (speculative) execution and pointer updates.
Let's now examine the structure of the 16 bits that are added to the basic instruction word :
- One bit indicates if the source is Imm4 (it replaces the corresponding field in the basic instruction).
- 2 bits indicate a condition (LSB, MSB, Zero, Always) and another bit negates the result (The condition "never" will be used later but I'm not sure how).
- 4 bits indicate which register is being tested
- 4 bits indicate the destination register (replacing the src/dest field in the basic instruction)
- 2 fields of 2 bits each encode the auto-update functions of one source register and the destination register (nop, post-inc, post-dec, pre-dec)
These fields are mostly orthogonal and can work in almost any combination. One can auto-update 2 registers (whether they are normal or belong to a memory access register pair), perform a 3-address operation and enable write-back depending on 97 conditions. It also preserves the availability of short immediate values, which further reduces code size. However it can increase the core's complexity.
One unexpected bonus is that this new architecture iteration is more compiler-friendly. At least, it's much less awkward or embarrassing.
One bit could have been saved : the imm4 flag could be merged in the auto-update field for a source register. However this increases the logic overhead and prevents simultaneous use of auto-update AND imm4.
Stay tuned...
20200408:
the auto-update field has been updated much later... But at least this log got somewhere great.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.