File size: 1,369 Bytes
ce25ab4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
; Assembly Bite: Literal Token Sequence Matcher
; Matches a fixed pattern of token IDs against the input sequence
; Sliding window — no regex, no invented tools
; Author: Ahmad Ali Parr · Trust: Bel Esprit D'Accord Irrevocable Trust

.DATA
MAX_SEQ_LEN: .word 128
PATTERN_LEN: .word 3
INPUT_TOKENS: .repl 0, MAX_SEQ_LEN
PATTERN:      .repl 101, 2023, 102   ; [CLS] "hello" [SEP] (BERT-style)
MATCH_FLAG:   .word 0
SEQ_PTR:      .word 0
PAT_IDX:      .word 0

.CODE
MAIN:
    LOAD R0, #0
    STORE SEQ_PTR, R0
    LOAD R0, #0
    STORE PAT_IDX, R0
    LOAD R0, #0
    STORE MATCH_FLAG, R0
    CALL MATCH_SEQUENCE
    RET

MATCH_SEQUENCE:
    LOAD R0, SEQ_PTR
    LOAD R1, MAX_SEQ_LEN
    SUB R1, R1, PATTERN_LEN
    CMP R0, R1
    JGT MATCH_END

    LOAD R2, #0
CHECK_LOOP:
    LOAD R3, PAT_IDX
    CMP R3, PATTERN_LEN
    JGE MATCH_FOUND

    LOAD R4, SEQ_PTR
    ADD R4, R4, PAT_IDX
    MUL R4, R4, #4
    LOAD R5, INPUT_TOKENS+R4

    LOAD R6, PATTERN
    MUL R6, R6, PAT_IDX
    MUL R6, R6, #4
    LOAD R7, PATTERN+R6

    CMP R5, R7
    JNE RESET_AND_SHIFT

    LOAD R8, PAT_IDX
    ADD R8, R8, #1
    STORE PAT_IDX, R8
    JMP CHECK_LOOP

RESET_AND_SHIFT:
    LOAD R0, #0
    STORE PAT_IDX, R0
    LOAD R9, SEQ_PTR
    ADD R9, R9, #1
    STORE SEQ_PTR, R9
    JMP MATCH_SEQUENCE

MATCH_FOUND:
    LOAD R0, #1
    STORE MATCH_FLAG, R0
    RET

MATCH_END:
    RET