This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
As noted here https://www.altera.com/support/support-resources/knowledge-base/solutions/rd04192015_932.html Altera has developed a revised version of the Nios II architecture, which they are calling "Nios II R2"; the original ISA is referred to as "Nios II R1". While they haven't yet made the documentationfor the new architecture available to the public, we've agreed to start contributing the toolchain support into the mainline repositories now in order to minimize divergence.
Here is a little background on the differences between R1 and R2, as it pertains to the binutils support: * The R2 instruction set is designed to be mostly compatible with the R1 instruction set at the assembly level, but the binary encodings are radically different. Fields are in different places in the instruction word and the numbering of some opcodes has changed. So, R1 and R2 objects are not binary-compatible and cannot be mixed in the same program. This restriction is implemented by new flags in the ELF headers which are in turn set by a new -march assembler option. The default remains to produce R1 code. * The only cases where R1 code is not assembly-language compatible with R2 involve reducing constant fields for some instructions from 16 bits to 12. This affects the load/store IO, data cache management, and RDPRS instructions. * R2 adds many new instructions, some of which are optional in the processor implementation. The biggest of the optional instruction groups is called "CDX", for Code Density eXtension, and includes 16-bit instructions. The 32- and 16-bit instructions can be mixed freely with minimum alignment for both on a 2-byte boundary instead of 4-byte as in R1. * CDX also includes new push/pop and load/store multiple instructions. These are of more interest on the compiler end of things since they allow for more compact function prologues and epilogues; from a binutils implementation perspective, these are most notable for being quite tricky to parse and validate. :-) * There are a lot of new instruction formats introduced, both for 16-bit and 32-bit instructions. Many of the new 16-bit instructions have register operands encoded in a 3-bit field and/or take immediate operands that are encoded as enumerations, requiring lookup through a mapping table during assembly/disassembly. * The R2 re-encodings of the R1 instruction set use the same relocation numbers as R1, but interpreted against the new bit locations of the corresponding fields in the instruction word. There are new relocations for the non-enumeration immediate fields in the new instruction formats, including the instructions with a reduced constant size. Altera will publish the details of the new relocations when the processor ABI documentation is revised. * The register set and ABI for register and stack usage are the same for both R1 and R2. In addition to the binutils pieces being committed now, GCC and GDB support will follow as soon as I have time to prepare and re-test the patches. At present, the R2 implementation in all components is bare-metal only (no Linux kernel or glibc support yet). There are 4 parts to the patch series: (1) Add Nios II arch flags and compatibility tests (2) Relocations for Nios II R2 (3) Opcodes and assembler support for Nios II R2 (4) Assembler tests for Nios II R2 -Sandra
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |