From 23b7a1ab308442777a32c3bd123e68ad98369c42 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 29 Apr 2025 23:08:46 +0200 Subject: Support preserved registers as identifiers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … in expressions --- boot/tokenizer.s | 181 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 boot/tokenizer.s (limited to 'boot/tokenizer.s') diff --git a/boot/tokenizer.s b/boot/tokenizer.s new file mode 100644 index 0000000..2057c2e --- /dev/null +++ b/boot/tokenizer.s @@ -0,0 +1,181 @@ +.global _tokenizer_initialize + +.section .rodata + +raw_classes: + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "space\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "digit\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "upper\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "lower\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + .ascii "invalid\n" + +.section .bss +.type class_names, @object +.size class_names, 1024 +class_names: .zero 1024 + +.section .data +.type classes, @object +.size classes, 512 # 128 characters * 4 byte. +classes: + +.section .text + +# Initializes the classification table. +# +# Paramaters: +# a0 - Raw input for the classification table. +.type _tokenizer_classes, @function +_tokenizer_classes: + # Prologue. + addi sp, sp, -8 + sw ra, 4(sp) + sw s0, 0(sp) + addi s0, sp, 8 + + # Epilogue. + lw ra, 4(sp) + lw s0, 0(sp) + addi sp, sp, 8 + ret + +# Initializes the lookup tables. +.type _tokenizer_initialize, @function +_tokenizer_initialize: + # Prologue. + addi sp, sp, -8 + sw ra, 4(sp) + sw s0, 0(sp) + addi s0, sp, 8 + + la a0, raw_classes + call _tokenizer_classes + + # Epilogue. + lw ra, 4(sp) + lw s0, 0(sp) + addi sp, sp, 8 + ret -- cgit v1.2.3