diff options
Diffstat (limited to 'boot/stage1.s')
| -rw-r--r-- | boot/stage1.s | 659 |
1 files changed, 368 insertions, 291 deletions
diff --git a/boot/stage1.s b/boot/stage1.s index d957af2..8258075 100644 --- a/boot/stage1.s +++ b/boot/stage1.s @@ -123,7 +123,7 @@ compile_binary_expression: addi s0, sp, 32 li a0, 0 - call _build_expression + call compile_expression mv a0, s1 addi a1, sp, 12 @@ -153,64 +153,64 @@ compile_binary_expression: .Lcompile_binary_expression_equal: mv s1, a0 # Skip =. li a0, 1 - call _build_expression - la a0, asm_sub_a0_a1 - li a1, ASM_SUB_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_SUB_A0_A1_SIZE + la a1, asm_sub_a0_a1 + call _write_s - la a0, asm_seqz_a0 - li a1, ASM_SEQZ_A0_SIZE - call _write_out + li a0, ASM_SEQZ_A0_SIZE + la a1, asm_seqz_a0 + call _write_s j .Lcompile_binary_expression_end .Lcompile_binary_expression_and: mv s1, a0 # Skip &. li a0, 1 - call _build_expression - la a0, asm_and_a0_a1 - li a1, ASM_AND_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_AND_A0_A1_SIZE + la a1, asm_and_a0_a1 + call _write_s j .Lcompile_binary_expression_end .Lcompile_binary_expression_or: mv s1, a0 # Skip or. li a0, 1 - call _build_expression - la a0, asm_or_a0_a1 - li a1, ASM_OR_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_OR_A0_A1_SIZE + la a1, asm_or_a0_a1 + call _write_s j .Lcompile_binary_expression_end .Lcompile_binary_expression_plus: mv s1, a0 # Skip +. li a0, 1 - call _build_expression - la a0, asm_add_a0_a1 - li a1, ASM_ADD_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_ADD_A0_A1_SIZE + la a1, asm_add_a0_a1 + call _write_s j .Lcompile_binary_expression_end .Lcompile_binary_expression_minus: mv s1, a0 # Skip -. li a0, 1 - call _build_expression - la a0, asm_sub_a0_a1 - li a1, ASM_SUB_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_SUB_A0_A1_SIZE + la a1, asm_sub_a0_a1 + call _write_s j .Lcompile_binary_expression_end .Lcompile_binary_expression_product: mv s1, a0 # Skip *. li a0, 1 - call _build_expression - la a0, asm_mul_a0_a1 - li a1, ASM_MUL_A0_A1_SIZE - call _write_out + call compile_expression + li a0, ASM_MUL_A0_A1_SIZE + la a1, asm_mul_a0_a1 + call _write_s j .Lcompile_binary_expression_end @@ -295,19 +295,21 @@ compile_identifier_expression: call symbol_table_find sw a0, 12(sp) - mv a0, s1 - lw a1, 20(sp) - call is_local_identifier - bnez a0, .Lcompile_identifier_expression_local + beqz a0, .Lcompile_identifier_expression_by_name + lw t0, 0(a0) + + li t1, INFO_PARAMETER + beq t0, t1, .Lcompile_identifier_expression_parameter + li t1, INFO_LOCAL + beq t0, t1, .Lcompile_identifier_expression_local + +.Lcompile_identifier_expression_by_name: mv a0, s1 lw a1, 20(sp) call is_register_identifier bnez a0, .Lcompile_identifier_expression_saved - lw t0, 12(sp) - bnez t0, .Lcompile_identifier_expression_defined - # Global identifier. lw t1, 16(sp) li t0, 0x00202c00 # \0,_ @@ -315,16 +317,16 @@ compile_identifier_expression: sw t0, 8(sp) li t0, 0x6120616c # la a sw t0, 4(sp) - addi a0, sp, 4 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 4 + call _write_s - mv a0, s1 - lw a1, 20(sp) - call _write_out + lw a0, 20(sp) + mv a1, s1 + call _write_s li a0, '\n' - call _put_char + call _write_c lbu a0, (s1) call _is_upper @@ -340,86 +342,83 @@ compile_identifier_expression: sw t0, 4(sp) li t0, 0x6120776c # lw a sw t0, 0(sp) - addi a0, sp, 0 - li a1, 12 - call _write_out + li a0, 12 + addi a1, sp, 0 + call _write_s j .Lcompile_identifier_expression_end -.Lcompile_identifier_expression_defined: +.Lcompile_identifier_expression_parameter: lw t1, 16(sp) li t0, 0x00202c00 # \0,_ or t0, t0, t1 sw t0, 8(sp) li t0, 0x6120776c # lw a sw t0, 4(sp) - addi a0, sp, 4 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 4 + call _write_s lw a0, 12(sp) lw a0, 8(a0) - call _printi + call _write_i - li t0, 0x29707328 # (sp) + li t0, 0x29307328 # (s0) sw t0, 8(sp) - addi a0, sp, 8 - li a1, 4 - call _write_out + li a0, 4 + addi a1, sp, 8 + call _write_s li a0, '\n' - call _put_char + call _write_c j .Lcompile_identifier_expression_end -.Lcompile_identifier_expression_saved: - li t0, 0x00202c00 # \0,_ +.Lcompile_identifier_expression_local: lw t1, 16(sp) + li t0, 0x00202c00 # \0,_ or t0, t0, t1 sw t0, 8(sp) - li t0, 0x6120766d # mv a + li t0, 0x6120776c # lw a sw t0, 4(sp) - addi a0, sp, 4 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 4 + call _write_s - mv a0, s1 - lw a1, 20(sp) - call _write_out + lw a0, 12(sp) + lw a0, 8(a0) + call _write_i + li t0, 0x29707328 # (sp) + sw t0, 8(sp) + li a0, 4 + addi a1, sp, 8 + call _write_s li a0, '\n' - call _put_char + call _write_c j .Lcompile_identifier_expression_end -.Lcompile_identifier_expression_local: - lw t1, 16(sp) +.Lcompile_identifier_expression_saved: li t0, 0x00202c00 # \0,_ + lw t1, 16(sp) or t0, t0, t1 sw t0, 8(sp) - li t0, 0x6120776c # lw a + li t0, 0x6120766d # mv a sw t0, 4(sp) - addi a0, sp, 4 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 4 + call _write_s - mv a0, s1 - lw a1, 20(sp) - addi a0, a0, 4 # Skip the "loca" variable prefix. - addi a1, a1, -4 # Skip the "loca" variable prefix. - call _write_out + lw a0, 20(sp) + mv a1, s1 + call _write_s - li t0, 0x29707328 # (sp) - sw t0, 8(sp) - addi a0, sp, 8 - li a1, 4 - call _write_out li a0, '\n' - call _put_char + call _write_c j .Lcompile_identifier_expression_end .Lcompile_identifier_expression_end: - # Epilogue. lw ra, 28(sp) lw s0, 24(sp) @@ -429,8 +428,8 @@ compile_identifier_expression: # Evalutes an expression and saves the result in a0. # # a0 - X in aX, the register number to save the result. -.type _build_expression, @function -_build_expression: +.type compile_expression, @function +compile_expression: # Prologue. addi sp, sp, -48 sw ra, 44(sp) @@ -448,69 +447,47 @@ _build_expression: lw a0, 24(sp) li t0, TOKEN_MINUS - beq a0, t0, .Lbuild_expression_negate + beq a0, t0, .Lcompile_expression_negate li t0, TOKEN_AT - beq a0, t0, .Lbuild_expression_address + beq a0, t0, .Lcompile_expression_address li t0, TOKEN_INTEGER - beq a0, t0, .Lbuild_expression_literal + beq a0, t0, .Lcompile_expression_literal lw a0, 32(sp) lbu a0, (a0) li t0, '_' - beq a0, t0, .Lbuild_expression_call + beq a0, t0, .Lcompile_expression_call lw s1, 32(sp) lw a0, 28(sp) lw a1, 36(sp) call compile_identifier_expression - j .Lbuild_expression_advance + j .Lcompile_expression_advance -.Lbuild_expression_negate: +.Lcompile_expression_negate: lw s1, 20(sp) # Skip the -. mv a0, zero - call _build_expression + call compile_expression - la a0, asm_neg_a0 - li a1, ASM_NEG_A0_SIZE - call _write_out + li a0, ASM_NEG_A0_SIZE + la a1, asm_neg_a0 + call _write_s - j .Lbuild_expression_end + j .Lcompile_expression_end -.Lbuild_expression_address: - lw t1, 36(sp) - li t0, 0x20 # _ - sw t0, 16(sp) - li t0, 0x2c707320 # _sp, - sw t0, 12(sp) - li t0, 0x2c006120 # _a\0, - sw t0, 8(sp) - sb t1, 10(sp) - li t0, 0x69646461 # addi - sw t0, 4(sp) - addi a0, sp, 4 - li a1, 13 - call _write_out - - lw a0, 20(sp) # Skip @. - addi a1, sp, 24 - call lex_next - mv s1, a0 - - lw a0, 32(sp) - lw a1, 28(sp) - addi a0, a0, 4 # Skip the "loca" variable prefix. - addi a1, a1, -4 # Skip the "loca" variable prefix. - call _write_out +.Lcompile_expression_address: + lw a0, 20(sp) + mv s1, a0 # Skip @. - li a0, '\n' - call _put_char + lw a0, 36(sp) + call compile_at_expression - j .Lbuild_expression_end + j .Lcompile_expression_end -.Lbuild_expression_call: +.Lcompile_expression_call: lw a0, 20(sp) addi a1, sp, 8 call lex_next @@ -520,32 +497,140 @@ _build_expression: lw a1, 28(sp) call compile_call - j .Lbuild_expression_end + j .Lcompile_expression_end -.Lbuild_expression_literal: +.Lcompile_expression_literal: lw t1, 36(sp) li t0, 0x00202c00 # \0,_ or t0, t0, t1 sw t0, 16(sp) li t0, 0x6120696c # li a sw t0, 12(sp) - addi a0, sp, 12 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 12 + call _write_s - lw a0, 32(sp) - lw a1, 28(sp) - call _write_out + lw a0, 28(sp) + lw a1, 32(sp) + call _write_s li a0, '\n' - call _put_char + call _write_c - j .Lbuild_expression_advance + j .Lcompile_expression_advance -.Lbuild_expression_advance: +.Lcompile_expression_advance: lw s1, 20(sp) -.Lbuild_expression_end: +.Lcompile_expression_end: + # Epilogue. + lw ra, 44(sp) + lw s0, 40(sp) + addi sp, sp, 48 + ret + +# Expression taking an identifier address. +# +# Parameters: +# a0 - Register number as character +.type compile_at_expression, @function +compile_at_expression: + # Prologue. + addi sp, sp, -48 + sw ra, 44(sp) + sw s0, 40(sp) + addi s0, sp, 48 + + sw a0, 36(sp) + + mv a0, s1 + addi a1, sp, 24 + call lex_next + mv s1, a0 + + lw a0, 28(sp) + lw a1, 32(sp) + call symbol_table_find + sw a0, 20(sp) + lw t0, 0(a0) + + li t1, INFO_PARAMETER + beq t0, t1, .Lcompile_at_expression_parameter + + li t1, INFO_LOCAL + beq t0, t1, .Lcompile_at_expression_local + + unimp + +.Lcompile_at_expression_local: + lw a0, 36(sp) + li t0, 0x20 # _ + sw t0, 16(sp) + li t0, 0x2c707320 # _sp, + sw t0, 12(sp) + li t0, 0x2c006120 # _a\0, + sw t0, 8(sp) + sb a0, 10(sp) + li t0, 0x69646461 # addi + sw t0, 4(sp) + li a0, 13 + addi a1, sp, 4 + call _write_s + + lw a0, 20(sp) + lw a0, 8(a0) + call _write_i + + j .Lcompile_at_expression_end + +.Lcompile_at_expression_parameter: + lw a0, 36(sp) + li t0, 0x20 # _ + sw t0, 16(sp) + li t0, 0x2c307320 # _s0, + sw t0, 12(sp) + li t0, 0x2c006120 # _a\0, + sw t0, 8(sp) + sb a0, 10(sp) + li t0, 0x69646461 # addi + sw t0, 4(sp) + li a0, 13 + addi a1, sp, 4 + call _write_s + + lw a0, 20(sp) + lw a0, 8(a0) + call _write_i + + j .Lcompile_at_expression_end + +.Lcompile_at_expression_undefined: + lw a0, 36(sp) + li t0, 0x20 # _ + sw t0, 16(sp) + li t0, 0x2c707320 # _sp, + sw t0, 12(sp) + li t0, 0x2c006120 # _a\0, + sw t0, 8(sp) + sb a0, 10(sp) + li t0, 0x69646461 # addi + sw t0, 4(sp) + li a0, 13 + addi a1, sp, 4 + call _write_s + + lw a0, 32(sp) + lw a1, 28(sp) + addi a0, a1, -4 # Skip the "loca" variable prefix. + addi a1, a0, 4 # Skip the "loca" variable prefix. + call _write_s + + j .Lcompile_at_expression_end + +.Lcompile_at_expression_end: + li a0, '\n' + call _write_c + # Epilogue. lw ra, 44(sp) lw s0, 40(sp) @@ -583,49 +668,48 @@ compile_designator_expression: sw t0, 12(sp) li t0, 0x61207773 # sw a sw t0, 8(sp) - addi a0, sp, 8 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 8 + call _write_s - lw a0, 20(sp) - lw a1, 16(sp) - addi a0, a0, 4 # Skip the "loca" variable prefix. - addi a1, a1, -4 # Skip the "loca" variable prefix. - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + addi a0, a0, -4 # Skip the "loca" variable prefix. + addi a1, a1, 4 # Skip the "loca" variable prefix. + call _write_s li t0, '\n' sw t0, 12(sp) li t0, 0x29707328 # (sp) sw t0, 8(sp) - addi a0, sp, 8 - li a1, 5 - call _write_out + li a0, 5 + addi a1, sp, 8 + call _write_s j .Lcompile_designator_expression_end .Lcompile_designator_expression_saved: li t0, 0x20766d # mv_ sw t0, 12(sp) - addi a0, sp, 12 - li a1, 3 - call _write_out + li a0, 3 + addi a1, sp, 12 + call _write_s - lw a0, 20(sp) - lw a1, 16(sp) - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + call _write_s li t0, 0x0a # \n sw t0, 12(sp) li t0, 0x3061202c # , a0 sw t0, 8(sp) - addi a0, sp, 8 - li a1, 5 - call _write_out + li a0, 5 + addi a1, sp, 8 + call _write_s j .Lcompile_designator_expression_end .Lcompile_designator_expression_end: - # Epilogue. lw ra, 28(sp) lw s0, 24(sp) @@ -708,15 +792,15 @@ compile_call: .Lcompile_call_argument: li a0, 0 - call _build_expression + call compile_expression li t0, 0x202c30 # 0,_ sw t0, 8(sp) li t0, 0x61207773 # sw a sw t0, 4(sp) - addi a0, sp, 4 - li a1, 7 - call _write_out + li a0, 7 + addi a1, sp, 4 + call _write_s lw t0, 12(sp) # Argument count for a procedure call. @@ -725,15 +809,15 @@ compile_call: li a0, -4 mul a0, t0, a0 addi a0, a0, 60 - call _printi + call _write_i li t0, '\n' sw t0, 8(sp) li t0, 0x29707328 # (sp) sw t0, 4(sp) - addi a0, sp, 4 - li a1, 5 - call _write_out + li a0, 5 + addi a1, sp, 4 + call _write_s lbu t0, (s1) li t1, ',' @@ -752,25 +836,25 @@ compile_call: .Lcompile_call_restore: # Just go through all a0-a5 registers and read them from stack. # If this stack value contains garbage, the procedure just shouldn't use it. - la a0, asm_restore_parameters - li a1, ASM_RESTORE_PARAMETERS_SIZE - call _write_out + li a0, ASM_RESTORE_PARAMETERS_SIZE + la a1, asm_restore_parameters + call _write_s .Lcompile_call_perform: li t0, 0x20 sw t0, 8(sp) li t0, 0x6c6c6163 # call sw t0, 4(sp) - addi a0, sp, 4 - li a1, 5 - call _write_out + li a0, 5 + addi a1, sp, 4 + call _write_s - lw a0, 20(sp) - lw a1, 16(sp) - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + call _write_s li a0, '\n' - call _put_char + call _write_c addi s1, s1, 1 # Skip the close paren. @@ -816,9 +900,9 @@ compile_module_declaration: sw s0, 16(sp) addi s0, sp, 24 - la a0, global_start - li a1, GLOBAL_START_SIZE - call _write_out + li a0, GLOBAL_START_SIZE + la a1, global_start + call _write_s # Skip "program". mv a0, s1 @@ -848,9 +932,9 @@ compile_constant_section: bne t0, t1, .Lcompile_constant_section_end mv s1, a0 - la a0, section_rodata - li a1, SECTION_RODATA_SIZE - call _write_out + li a0, SECTION_RODATA_SIZE + la a1, section_rodata + call _write_s .Lcompile_constant_section_item: mv a0, s1 @@ -888,30 +972,30 @@ compile_constant: call lex_next # Skip the assignment sign. mv s1, a0 # Write identifier the identifier. - lw a0, 20(sp) - lw a1, 16(sp) - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + call _write_s # : .long li t0, 0x20676e6f # ong_ sw t0, 4(sp) li t0, 0x6c2e203a # : .l sw t0, 0(sp) - mv a0, sp - li a1, 8 - call _write_out + li a0, 8 + mv a1, sp + call _write_s mv a0, s1 addi a1, sp, 12 call lex_next mv s1, a0 - lw a0, 20(sp) # Save the literal pointer before advancing it. - lw a1, 16(sp) # The literal length. - call _write_out + lw a0, 16(sp) # The literal length. + lw a1, 20(sp) # Save the literal pointer before advancing it. + call _write_s li a0, '\n' - call _put_char + call _write_c # Epilogue. lw ra, 28(sp) @@ -936,9 +1020,9 @@ compile_global_section: bne t0, t1, .Lcompile_global_section_end mv s1, a0 - la a0, section_bss - li a1, SECTION_BSS_SIZE - call _write_out + li a0, SECTION_BSS_SIZE + la a1, section_bss + call _write_s .Lcompile_global_section_item: mv a0, s1 @@ -987,37 +1071,37 @@ compile_global: mv s1, a0 # .type identifier, @object - la a0, asm_type - li a1, ASM_TYPE_SIZE - call _write_out + li a0, ASM_TYPE_SIZE + la a1, asm_type + call _write_s - lw a0, 36(sp) - lw a1, 32(sp) - call _write_out + lw a0, 32(sp) + lw a1, 36(sp) + call _write_s - la a0, asm_type_object - li a1, ASM_TYPE_OBJECT_SIZE - call _write_out + li a0, ASM_TYPE_OBJECT_SIZE + la a1, asm_type_object + call _write_s # identifier: .zero size - lw a0, 36(sp) - lw a1, 32(sp) - call _write_out + lw a0, 32(sp) + lw a1, 36(sp) + call _write_s li t0, 0x206f7265 # ero_ sw t0, 12(sp) li t0, 0x7a2e203a # : .z sw t0, 8(sp) - addi a0, sp, 8 - li a1, 8 - call _write_out + li a0, 8 + addi a1, sp, 8 + call _write_s - lw a0, 24(sp) - lw a1, 20(sp) - call _write_out + lw a0, 20(sp) + lw a1, 24(sp) + call _write_s li a0, '\n' - call _put_char + call _write_c # Epilogue. lw ra, 44(sp) @@ -1136,7 +1220,8 @@ compile_parameters: sw s0, 40(sp) addi s0, sp, 48 - sw zero, 12(sp) # Parameter offset counter. + li t0, -12 + sw t0, 12(sp) # Parameter offset counter. mv a0, s1 addi a1, sp, 28 @@ -1173,7 +1258,7 @@ compile_parameters: call symbol_table_insert lw t0, 12(sp) - addi t0, t0, 4 + addi t0, t0, -4 sw t0, 12(sp) # Read the comma between the parameters or a closing paren. @@ -1185,7 +1270,7 @@ compile_parameters: li t1, TOKEN_COMMA bne t0, t1, .Lcompile_parameters_end # If it is a comma, read the name of the next parameter. - addi a1, sp, 16 + addi a1, sp, 28 call lex_next mv s1, a0 @@ -1217,7 +1302,12 @@ compile_procedure: lw a0, 16(sp) lw a1, 20(sp) - call _write_procedure_head + call write_procedure_head + + /* DEBUG */ + lw a0, 20(sp) + lw a1, 16(sp) + call _write_error # Save the state of the symbol table before we enter the procedure scope. la t0, symbol_table @@ -1234,36 +1324,23 @@ compile_procedure: mv s1, a0 # Generate the procedure prologue with a predefined stack size. - la a0, prologue - li a1, PROLOGUE_SIZE - call _write_out + li a0, PROLOGUE_SIZE + la a1, prologue + call _write_s # Save passed arguments on the stack. - la a0, asm_preserve_parameters - li a1, ASM_PRESERVE_PARAMETERS_SIZE - call _write_out + li a0, ASM_PRESERVE_PARAMETERS_SIZE + la a1, asm_preserve_parameters + call _write_s # Generate the body of the procedure. call compile_statements mv s1, a0 # Skip end. # Generate the procedure epilogue with a predefined stack size. - la a0, epilogue - li a1, EPILOGUE_SIZE - call _write_out - - /* DEBUG - lw a0, 16(sp) - lw a1, 20(sp) - call symbol_table_find - beqz a0, .x -*/ - lw a0, 20(sp) - lw a1, 16(sp) - call _write_error - - call symbol_table_dump - /* DEBUG */ + li a0, EPILOGUE_SIZE + la a1, epilogue + call _write_s # Restore the symbol table, removing symbols local to this procedure. la t0, symbol_table @@ -1296,16 +1373,16 @@ compile_goto: li t0, 0x2e206a # j . sw t0, 12(sp) - addi a0, sp, 12 - li a1, 3 - call _write_out + li a0, 3 + addi a1, sp, 12 + call _write_s - lw a0, 8(sp) # Saved dot position. - lw a1, 4(sp) - call _write_out + lw a0, 4(sp) + lw a1, 8(sp) # Saved dot position. + call _write_s li a0, '\n' - call _put_char + call _write_c # Epilogue. lw ra, 28(sp) @@ -1330,14 +1407,14 @@ compile_label: mv s1, a0 li a0, '.' - call _put_char - lw a0, 16(sp) - lw a1, 12(sp) - call _write_out + call _write_c + lw a0, 12(sp) + lw a1, 16(sp) + call _write_s li a0, ':' - call _put_char + call _write_c li a0, '\n' - call _put_char + call _write_c # Epilogue. lw ra, 28(sp) @@ -1398,35 +1475,35 @@ compile_if: li t0, 0x62626262 # bbbb sb t0, 11(sp) - addi a0, sp, 11 - li a1, 13 - call _write_out + li a0, 13 + addi a1, sp, 11 + call _write_s # Write the label counter. mv a0, s2 - call _printi + call _write_i li a0, '\n' - call _put_char + call _write_c call compile_statements mv s1, a0 # Skip end. # Write the label prefix. - addi a0, sp, 20 - li a1, 4 - call _write_out + li a0, 4 + addi a1, sp, 20 + call _write_s # Write the label counter. mv a0, s2 - call _printi + call _write_i # Finalize the label. li t0, 0x0a3a # :\n sh t0, 16(sp) - addi a0, sp, 16 - li a1, 2 - call _write_out + li a0, 2 + addi a1, sp, 16 + call _write_s addi s2, s2, 1 # Increment the label counter. @@ -1443,8 +1520,8 @@ compile_if: # Parameters: # a0 - Identifier length. # a0 - Identifier pointer. -.type _write_procedure_head, @function -_write_procedure_head: +.type write_procedure_head, @function +write_procedure_head: # Prologue. addi sp, sp, -32 sw ra, 28(sp) @@ -1455,27 +1532,27 @@ _write_procedure_head: sw a1, 20(sp) # .type identifier, @function - la a0, asm_type - li a1, ASM_TYPE_SIZE - call _write_out + li a0, ASM_TYPE_SIZE + la a1, asm_type + call _write_s - lw a0, 20(sp) - lw a1, 16(sp) - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + call _write_s - la a0, asm_type_function - li a1, ASM_TYPE_FUNCTION_SIZE - call _write_out + li a0, ASM_TYPE_FUNCTION_SIZE + la a1, asm_type_function + call _write_s - lw a0, 20(sp) - lw a1, 16(sp) - call _write_out + lw a0, 16(sp) + lw a1, 20(sp) + call _write_s li t0, 0x0a3a # :\n sw t0, 12(sp) - addi a0, sp, 12 - li a1, 2 - call _write_out + li a0, 2 + addi a1, sp, 12 + call _write_s # Epilogue. lw ra, 28(sp) @@ -1592,9 +1669,9 @@ compile_text_section: sw s0, 8(sp) addi s0, sp, 16 - la a0, section_text - li a1, SECTION_TEXT_SIZE - call _write_out + li a0, SECTION_TEXT_SIZE + la a1, section_text + call _write_s # Epilogue. lw ra, 12(sp) @@ -1611,9 +1688,9 @@ compile_entry_point: addi s0, sp, 32 # .type _start, @function - la a0, asm_start - li a1, ASM_START_SIZE - call _write_out + li a0, ASM_START_SIZE + la a1, asm_start + call _write_s mv a0, s1 addi a1, sp, 4 @@ -1624,9 +1701,9 @@ compile_entry_point: call compile_statements mv s1, a0 # Skip end. - la a0, asm_exit - li a1, ASM_EXIT_SIZE - call _write_out + li a0, ASM_EXIT_SIZE + la a1, asm_exit + call _write_s # Epilogue. lw ra, 28(sp) |
