# strcat.asm
# Function: char* strcat(char *dst, char *src)
# Arguments: $a0 - dst, $a1 - src
# Returns: $v0 - dst

.text
.globl strcat

strcat:
    addi $sp, $sp, -8     # Allocate stack space
    sw $ra, 4($sp)        # Save return address
    sw $s0, 0($sp)        # Save s0

    move $s0, $a0         # dst -> s0
    move $t0, $a1         # src -> t0

strcat_loop:
    lb $t1, 0($a0)        # Load byte from dst
    beq $t1, $zero, strcat_copy  # If dst[i] == '\0', jump to copy

    addi $a0, $a0, 1      # dst++

    j strcat_loop         # repeat loop

strcat_copy:
    jal strcopy           # Call strcopy(dst, src)

    move $v0, $s0         # Return aux (dst)
    lw $s0, 0($sp)        # Restore s0
    lw $ra, 4($sp)        # Restore return address
    addi $sp, $sp, 8      # Free stack space
    jr $ra                # Return to caller
