# This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. .global symbol_table_build .include "boot/definitions.inc" .equ SYMBOL_PRIME, 1543 .section .rodata .type symbol_builtin_name_int, @object symbol_builtin_name_int: .ascii "Int" .type symbol_builtin_name_word, @object symbol_builtin_name_word: .ascii "Word" .type symbol_builtin_name_byte, @object symbol_builtin_name_byte: .ascii "Byte" .type symbol_builtin_name_char, @object symbol_builtin_name_char: .ascii "Char" # Every type info starts with a word describing what type it is. # Primitive types have only type size. .type symbol_builtin_type_int, @object symbol_builtin_type_int: .word TYPE_PRIMITIVE .word 4 .type symbol_builtin_type_word, @object symbol_builtin_type_word: .word TYPE_PRIMITIVE .word 4 .type symbol_builtin_type_byte, @object symbol_builtin_type_byte: .word TYPE_PRIMITIVE .word 1 .type symbol_builtin_type_char, @object symbol_builtin_type_char: .word TYPE_PRIMITIVE .word 1 .section .bss # The first word of the symbol table is its length. # Then a list of type infos follows: # # record # name: String # info: ^TypeInfo # end .type symbol_table, @object symbol_table: .zero SYMBOL_PRIME .section .text # Build the initial symbols. # # Sets a0 to the pointer to the global symbol table. .type symbol_build, @function symbol_table_build: la a0, symbol_table addi t0, a0, 4 li t1, 3 # Length of the word "Int". sw t1, 0(t0) la t1, symbol_builtin_name_int sw t1, 4(t0) la t1, symbol_builtin_type_int sw t1, 8(t0) lw t1, 0(a0) addi t1, t1, 1 sw t1, 0(a0) addi t0, t0, 12 li t1, 4 # Length of the word "Word". sw t1, 0(t0) la t1, symbol_builtin_name_word sw t1, 4(t0) la t1, symbol_builtin_type_word sw t1, 8(t0) lw t1, 0(a0) addi t1, t1, 1 sw t1, 0(a0) addi t0, t0, 12 li t1, 4 # Length of the word "Byte". sw t1, 0(t0) la t1, symbol_builtin_name_byte sw t1, 4(t0) la t1, symbol_builtin_type_byte sw t1, 8(t0) lw t1, 0(a0) addi t1, t1, 1 sw t1, 0(a0) addi t0, t0, 12 li t1, 4 # Length of the word "Char". sw t1, 0(t0) la t1, symbol_builtin_name_char sw t1, 4(t0) la t1, symbol_builtin_type_char sw t1, 8(t0) lw t1, 0(a0) addi t1, t1, 1 sw t1, 0(a0) addi t0, t0, 12 ret