Skip to content

Releases: kulp/tenyr

Backward-incompatible change to operations

26 Jan 12:16
Compare
Choose a tag to compare

tenyr code written for version v0.8.0 is not compatible with that from previous releases, because the supported operations have changed slightly (fa8023b, 8a931ba..a54d385) and have been renumbered (e899750). There is no more inequality operator <> -- it has been replaced with a bit-test operator @. The almost-useless ^~ (XOR with inverted second operand) operator has been replaced with a |~ (OR with inverted second operand). The latter still permits the syntax sugar (B <- ~ B) that was the former's only use, but it also works well to hide the lack of an inequality operator.

Testing robustness and coverage has been greatly improved. If Icarus Verilog is installed on the build machine, the hardware design will be tested as well as the simulator and binutils. Each operation has its own testcase in test/ops, and the Makefile builds the testcases with random stimulus on every run.

Reversibility of assembly-disassembly is henceforward guaranteed. There are many ways to express most instructions : for example, B <- 0 can be encoded in at least seven functionally equivalent ways, as shown below. The disassembler takes care to disassemble the idiom chosen by the assembler in the most compact form, and elaborates the other forms to disambiguate them :

B  <-  0            # .word 0x01000000 ; type 0, OP_BITWISE_OR
B  <-  A  |  0 + A  # .word 0x41000000 ; type 1, OP_BITWISE_OR
B  <-  0  |  A + A  # .word 0x81000000 ; type 2, OP_BITWISE_OR
B  <-  A  +  A      # .word 0x01004000 ; type 0, OP_ADD
B  <-  A  +  0 + A  # .word 0x41004000 ; type 1, OP_ADD
B  <-  0  +  A + A  # .word 0x81004000 ; type 2, OP_ADD
B  <-  0x00000000   # .word 0xc1000000 ; type 3

Although all tenyr releases to date have been prereleases, this is the first one marked as such on GitHub.

The difference to v0.7.0 is found in 129 files changed, 2845 insertions(+), 3377 deletions(-).