[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[openrisc] Question regarding ISA for OR1200
I've been sort of poking a stick at this project and taking a look at
it from a few different angles. One major thing that I noticed right
away I wanted to bring up because I think it's a long term mistake.
Okay, the instruction pretext, what describes what sort of
instruction we're going to be executing is only 6 bits. Plenty of
space left over for good encoded data, but not a lot of space for
billions of instructions. Which is a-okay. But one particular
missing instruction is going to be really painfull for PIC (Position
Independent Code) code: "bl" or branch and link.
MIPS makes the mistake of only encoding 16 bits worth of branch and
link space, but ARM does it just right. The importance of this is
actually kind of critical. If you don't have a good branch and link
instruction, then you have to resort to register loading/manual
offset and a "jalr" call. That means every function call in a
standard ABI takes at least 3 instructions to execute. (lui, ori,
jalr) This can get painfull for code size, and is one of the key
contributors to MIPS code being so bloated.
The one way I've found to get around this is by using a statically
linked library system were you could use the "jal" instruction to get
where you need to go. But this creates very very ugly problems in
keeping libraries in sync, etc. (Reference to Jay's SNOW ABI used on
Agenda)
Anyway, does anyone have any suggestion for combating this problem?
Thanks,
Shane Nay.
--
To unsubscribe from openrisc mailing list please visit http://www.opencores.org/mailinglists.shtml