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}
|