Home | History | Annotate | Download | only in score
      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