With fixes coming out of simulation runs, the core is now too large. It took 44 hours to synthesize. The toolset works really hard when the FPGA is full.
Got most of the support for capabilities coded. It turned out to be not as bad as I thought, but supporting capabilities seems to affect the design.
Q+ is allowing capabilities stored in one of four formats: raw 256-bit uncompressed, 128-bit compressed, 64-bit compressed or not in use. This affects the capability load and store instructions, which load or store according to the size in use. Otherwise, four times as many load / store instructions are required.
Added some more MOVE instructions to move register flags. MORF (move or with flags) allows packing the flag register into a destination register which may be either a GPR or extended register. IMORF (inverse MORF) allows unpacking the flags.
Hey, a free opcode was found. The bitfield instructions were initially given their own root opcode. But they were moved to be under the R3 format opcode. It was forgotten to mark the opcode free in the table.
Added bitfield instructions to the ALU. The bitfield instructions are capable of modifying or extracting the flags associated with a register. The SET operation allows a small constant between -4 and +3 to be set in a bitfield. This is useful for clearing bit fields.
Merged the different FP status registers into a single register called the arithmetic status register (ASR). This is probably better than having a dedicated register for each data type. Instead, different data types are represented by different fields in the status register.