aboutsummaryrefslogtreecommitdiff
path: root/newasm/parsers/label.s
blob: 4770e6cc8cfbe83a26becee2bcc3b65f61b53fa3 (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
28
29
30
.syntax unified
.cpu cortex-m0plus
.thumb

.type label, %function
.global label

// 1 unexpected begin char
// 2 doesn't end with colon

// R4 input buffer
// R2 output buffer

label:    PUSH    {LR}
          LDRB    R0, [R4]    // get a char
          CMP     R0, 0x61    // a
          BLO     1f
          CMP     R0, 0x7A    // z
          BLS     2f
1:        MOVS    R0, #1      // return code 1 (expected lowercase)
          POP     {PC}
2:        BL      symbol
          LDRB    R0, [R4]    // get a char
          CMP     R0, ':      // colon
          BEQ     3f
          MOVS    R0, #2      // return code 2 (expected colon)
          POP     {PC}
3:        ADDS    R4, 1       // consume the colon
          MOVS    R0, #0      // return code 0 (success)
          POP     {PC}