aboutsummaryrefslogtreecommitdiff
path: root/newasm/imm.s
blob: f6c7266d4115487c3086712f3a9cef22eaf1f049 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.syntax unified
.cpu cortex-m0plus
.thumb

.type imm, %function
.global imm

// R1 instruction under construction
// R3 immediate width
// R4 input buffer

imm:      PUSH    {LR}
          PUSH    {R3}
          BL      immediate
          POP     {R3}
          BNE     exit
          MOVS    R0, 1
          LSLS    R0, R3
          CMP     R2, R0
          BLO     fine
          MOVS    R0, 0x0A    // return code 0A (immediate value too large)
          POP     {PC}
fine:     ORRS    R1, R2      // fill in imm
          MOVS    R0, 0       // return code 0 (success)
exit:     POP     {PC}
bad_reg:  MOVS    R0, 8       // return code 8 (invalid register for this register position)
          POP     {PC}