GNU binutils patches

= FR80 patch =

Accesing data
FR80 processor has no instructions for direct data access. Only indirect addressing is possible: the data address must be first loaded into register.

...

Alignment issues
Following rules apply for FR80: If code address got uneven:  At the time of execution of the instruction, bit0 of the program counter (PC) automatically becomes "0", and is always at an even address. --- Fujitsu: FR80 Family Programming Manual, 2.3.1 If data address got unaligned:  If the specified address is not a multiple of 4, the lower two bits of the address are not set to "00" forcibly. There is no guarantee of operation when the specified address is not a multiple of 4. --- Fujitsu: FR80 Family Programming Manual, 2.3.2
 * instruction code of must be placed always 2-bytes aligned.
 * data address for word (32-bit) instructions must be always 4-bytes aligned.
 * data address for half-word (16-bit) instructions must be always 4-bytes aligned.

GNU Assembler (GAS) is designed to provide any possible usage and rely that user knows how to correct align. GNU C compiler (GCC) that uses GAS for assembling, produces always correct alignment.

WARNING 1: GAS do not check data ddress ain register to be aligned.

WARNING 2: GAS do not automatically align data.

'''WARNING 3: NikonEmulator has at the moment no runtime checks !!! So runing the code in Emulator doesn't mean that alignment is correct.'''

Reorder
GAS for FR30/FR80 do not reorder data or code. So appropriate directives are not implemented: .set reorder .set noreorder WARNING: Please do not mix this with directive: .set reorder, It has nothing in common with alignment.