blob: e74253be517e82958590daa45c273186c034ac4e [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
/**
* Converts every ASCII capital letter to a lowercase letter
* until a NULL character is encountered.
*
* @param a0 pointer to the beginning of the null terminated string.
*/
.globl make_lower_case
.type make_lower_case, @function
.balign 256
make_lower_case:
// a0: beginning of string
// t0, t1: lower and upper bound of ascii capital letters
li t0, 0x41
li t1, 0x5A
addi a0, a0, -1
make_lower_case_loop:
addi a0, a0, 1
lb t2, 0(a0)
// Break from the loop if the end of the given string is reached.
beqz t2, make_lower_case_end
// If not a capital letter, skip.
bltu t2, t0, make_lower_case_loop
bgtu t2, t1, make_lower_case_loop
// Make character lower case.
xori t2, t2, 0x20
sb t2, 0(a0)
j make_lower_case_loop
make_lower_case_end:
ret
/**
* The size of the `make_lower_case` function in bytes.
*/
.global kMakeLowerCaseFnSize
kMakeLowerCaseFnSize:
.4byte .-make_lower_case
/**
* Replaces the content of the given string with a constant string (`name`)
* until a NULL character is encountered in either the given string
* or the constant string.
*
* @param a0 pointer to the beginning of the null terminated string.
*/
.globl get_name
.type get_name, @function
.balign 256
get_name:
// a0: beginning of string.
// t0: beginning of replace string.
lui t0, %hi(name)
addi t0, t0, %lo(name)
// t1: relative string pointer (cursor).
mv t1, zero
get_name_loop:
// Load current character from the string
// and break if it is the last (NULL) character.
add t2, t1, a0
lb t4, 0(t2)
beqz t4, get_name_end
// Move the charater from the constant string into the given string.
add t3, t1, t0
lb t4, 0(t3)
sb t4, 0(t2)
// Break if that was the last character (NULL) of the constant string.
beqz t4, get_name_end
// Increment string pointer.
addi t1, t1, 1
j get_name_loop
get_name_end:
ret
name:
.string "My name is Titan, Open Titan"
/**
* The size of the `get_name` function in bytes.
*/
.global kGetNameFnSize
kGetNameFnSize:
.4byte .-get_name