[Libre-soc-isa] [Bug 532] discuss iterative approach for statistical analysis of effectiveness of Compressed PowerISA encoding

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Sat Nov 21 22:41:38 GMT 2020


https://bugs.libre-soc.org/show_bug.cgi?id=532

--- Comment #12 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Alexandre Oliva from comment #10)
> modifying binutils so as to count opcodes that we'd like to compress could
> be done in basically two ways:
> 
> - add to include/opcode/ppc.h:
> #define PPC_OPCODE_COMPRESS 0x800000000000ull
> 
> - in opcodes/ppc-opc.c, mark the opcodes under powerpc_opcodes that are
> candidate for compression with '| PPC_OPCODE_COMPRESS' in FLAGS (the fourth
> column)
> 
> - in opcodes/ppc-dis.c, modify increment_opcode_counter to check for this
> flag, apply any other constraints on the operands, and count the instruction
> as compressed if it fits
> 
> This would require a quick recompilation for every experiment.

and that means if trying to compare those side-by-side it's very challenging. 
whereas a bunch of throwaway 50 line external python scripts is trivial to
rerun and compare.

> I'm not sure the latter effort is worth the additional convenience (if any)
> it would provide.  WDYT?

50 line python scripts reading stdin piped from objdump raw seems a lot easier.

> As for the extra constraints for insns to fit, that's where I haven't quite
> grasped what's proposed yet to be able to generalize the transformations and
> limits from 32-bit to 16- (and/or 10-?) bit opcodes, if there is a general
> rule at all.

OpenPOWER was never designed for dropping 16 bit on top of it.

RISCV RVC was ground-up designed for mixed 16/32.

we need to make some compromises: the 10 bit format makes best use of the
remaining bits whilst transitioning to "full" 16 bit mode.

the absolute simplest general rule is literally that from
https://bugs.libre-soc.org/show_bug.cgi?id=532#c7

at this stage we really do not want to get into the knock-on effects of
register allocation, effect on branches, and so on.  anything which, by the
very *existence* of Compressed, would result in the compiler emitting radically
altered assember, is *not* in scope at this stage: thst is too early.

however i would like to find out:

* word-aligned SP/FP immediates is enough
  (for 32 bit LD/ST)

  this confirms whether shifting the
  immediate by 2 bits is ok

* how many functions have 3, 4, 5 regs as
  parameters

* what sort of range of immediates are
  there on cmpwi and cmpdi

  are they mostly low (small) or are they
  large.  are they mostly against zero

* which CRs are mostly used by branches



>  I'm still trying to get acquainted with the preexisting opcode
> formats of PowerISA (do we have a PDF for 3.1?

ah we are implementing v3.0B.  search "raptorcs wiki v3.0b OpenPOWER spec"
should come up top hit, no JS.


> and I'd rather not) to be better able to make sense of
> https://libre-soc.org/openpower/sv/16_bit_compressed/ (that I see has
> changed since I first went through it; moving target much? :-)

:) i use it to capture ongoing discussions.  if i don't they are lost pretty
much immediately.


to get a rapid overview of OPF v3.0B without needing to go through a 1300 page
PDF try these:

https://libre-soc.org/openpower/isatables/
https://libre-soc.org/openpower/isa/

bear in mind FP is not added yet so not included in those tables.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Libre-SOC-ISA mailing list