"ϕEngine ISA: R&D and Vector Operations"

View profile for Paul McKneely

President, technoventure, inc.

The ϕEngine ISA has gone through a huge number of iterations and permutations over the past seven years of its existence. That is R&D at its finest. The ϕSemiVec portion of ϕEngine supports vectors with an arbitrary number of elements (called their Counts). It was recently expanded to double the maximum number of elements in each Vector Segment that can be processed in parallel. Since ϕSemiVec shares the Scalar Register Files with their Scalar Operation Counterparts, it makes accessing the same values easy when mixing scalar and vector operations. However, the vector operations can now use up registers more quickly. So, once again, I used a technique that was inspired by the AMD64 REX byte which extends the number of integer registers in the x86. But instead of quadrupling the number, I am just doubling the number of both integer and floating point registers. This requires two prefixes. One is for the Subject and one is for the Object when it is a register. Vector operations are done in segments, so whole vectors do not have to reside in registers at the same time. Instead, they are cycled in and out of registers from and to memory working on a chunk at a time. These chunks are limited to a maximum magnitude of 16 units (used to be 8). For integers this is 16 bytes and for float is 32 bytes. One quarter of all data registers are Scratch Registers that also serve as Argument Registers when passing arguments by register. All of these can be reached without a prefix. An equal number of Protected Registers beyond those can also be reached without a prefix. All of the new registers that require a prefix are Protected Registers.

  • text

To view or add a comment, sign in

Explore content categories