> On 1/06/2018, at 6:16 PM, Sebastian Huber 
> <sebastian.hu...@embedded-brains.de> wrote:
> 
> On 29/05/18 20:02, Jim Wilson wrote:
>>> Most variants include the C extension. Would it be possible to add 
>>> -march=rv32g and -march=rv64g variants?
>> 
>> The expectation is that most implementations will include the C extension.  
>> It reduces code size, improves performance, and I think I read somewhere 
>> that it takes only 400 gates to implement.
>> 
>> It isn't practical to try to support every possible combination of 
>> architecture and ABI here, as there are too many possible combinations. But 
>> if there is a major RISC-V target that is rv32g or rv64g then we should 
>> consider it.  You can of course define your own set of multilibs.
> 
> I am not a hardware developer, but I heard that the C extension is not easy 
> to implement in out of order machines.

Easy is relative.

The RISC-V ISA encoding has been designed so that wide fetch is relatively 
easy, possibly an order of magnitude easier than an ISA with a complex variable 
length encoding like x86. 

RV64GC instruction lengths can be derived from the 2 least significant bits in 
the first half-word packet of each instruction for mixed 16/32 bit 
instructions. It does not require an attempt to parse multiple prefixes with 
instructions ranging from 1 byte up to 15 bytes, before arriving at an 
instruction length (x86). From that perspective RV64GC is decidedly simple. 
That said, RV64GC is a little more complex than regular 32-bit encodings like 
RV64G, PowerPC, AArch64, or SPARC.

I don’t think the paper you have linked to draws the conclusion you are 
arriving at. I spoke to Chris Celio about RVC and he said he just just didn’t 
get around to implementing RVC in BOOM, not necessarily that it’s absence is a 
statement of its difficulty rather the academic objectives of BOOM, one of a 
very small number of Open Source OoO processors. Sure, if it was “trivial” then 
BOOM would include it, so it’s certainly non trivial.

For BOOM, RVC requires an instruction buffer that handles unaligned fetches and 
the way the PC is derived further down the pipeline needs to be modified as the 
same micro-op may have a different width depending on whether it was expanded 
from an RVC encoding. It may or may not an extra pre-decoder pipe stage. I have 
a fair understanding of what’s requested. The misaligned fetch is probably the 
most complex but BOOM already needs to have complex cases like the fetch buffer 
spanning cache lines and page boundaries. Unaligned instruction fetches add to 
this.

> For example:
> 
> https://www2.eecs.berkeley.edu/Pubs/TechRpts/2017/EECS-2017-157.html
> 
> -- 
> Sebastian Huber, embedded brains GmbH
> 
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.hu...@embedded-brains.de
> PGP     : Public key available on request.
> 
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
> 

Reply via email to