1 /* 2 * test relax 3 * addi <-> addei! : for addei : register number must be in 0-15, offset : 4b, only 16b -> 32b 4 * (1)addi rD, simm16 : rD = rD + simm16, -32768 <= simm16 <= 32767 5 * (2)addei! rD, imm4 : rD = rD + 2**imm4 6 * addi <-> subei! : for addei : register number must be in 0-15, offset : 4b, only 16b -> 32b 7 * (1)addi rD, simm16 : rD = rD + simm16, -32768 <= simm16 <= 32767 8 * (2)subei! rD, imm4 : rD = rD + 2**imm4 9 10 * Author: ligang 11 */ 12 13 /* This macro transform 16b instruction to 32b. */ 14 .macro tran1632 insn32, insn16, sign 15 .align 4 16 17 \insn16 r0, 0 #16b -> 32b 18 \insn32 r0, \sign * 1 19 20 \insn16 r15, 4 #16b -> 32b 21 \insn32 r15, \sign * 16 22 23 \insn16 r15, 14 #16b -> 32b 24 \insn32 r15, \sign * 1024 * 16 25 26 \insn16 r8, 3 #No transform 27 \insn16 r8, 3 #No transform 28 29 \insn16 r15, 15 #No transform. Because 2**15 = 32768, extend range of addi 30 \insn32 r15, 0x7FFF 31 32 .endm 33 34 .text 35 36 tran1632 "addi.c", "addei!", 1 37 tran1632 "addi.c", "subei!", -1 38