riscv: use simplest asm expression when possible

Let's take advantage of assembler pseudoinstructions:

- convert `addi rd, rs, 0` to `mv rd, rs`
- convert `jal x0, somewhere` to `j somewhere`
- convert `csrrs x0, csrreg, rs` to `csrs csrreg, rs`
- convert `fscsr x0, rs` to `fscsr rs`

And simplify zero offsets to simply 0.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
This commit is contained in:
Nicolas Pitre 2022-02-21 21:36:55 -05:00 committed by Anas Nashif
commit 9ed17943b9
3 changed files with 18 additions and 18 deletions

View file

@ -66,7 +66,7 @@
#define LOAD_FP_CALLEE_SAVED(reg) \
RV_OP_LOADREG t2, _thread_offset_to_fcsr(reg) ;\
fscsr x0, t2 ;\
fscsr t2 ;\
DO_FP_CALLEE_SAVED(RV_OP_LOADFPREG, reg)
#define COPY_ESF_FP_STATE(to_reg, from_reg, temp) \
@ -362,7 +362,7 @@ skip_store_fp_callee_saved_user:
is_priv_sp:
/* Clear user mode variable */
la t0, is_user_mode
sb zero, 0x00(t0)
sb zero, 0(t0)
#endif /* CONFIG_USERSPACE */
/*
@ -378,13 +378,13 @@ is_priv_sp:
jal ra, __soc_is_irq
/* If a0 != 0, jump to is_interrupt */
addi t1, x0, 0
mv t1, zero
bnez a0, is_interrupt
#ifdef CONFIG_USERSPACE
/* Reset IRQ flag */
la t1, irq_flag
sb zero, 0x00(t1)
sb zero, 0(t1)
#endif /* CONFIG_USERSPACE */
/*
@ -420,7 +420,7 @@ is_priv_sp:
* If _Fault shall return, set return address to
* no_reschedule to restore stack.
*/
addi a0, sp, 0
mv a0, sp
#ifdef CONFIG_USERSPACE
/* Check if we are in user thread */
@ -654,7 +654,7 @@ is_interrupt:
#ifdef CONFIG_USERSPACE
la t0, irq_flag
li t2, 0x1
sb t2, 0x00(t0)
sb t2, 0(t0)
#endif /* CONFIG_USERSPACE */
#if (CONFIG_USERSPACE == 0) && (CONFIG_PMP_STACK_GUARD == 0)
@ -664,7 +664,7 @@ is_interrupt:
*/
/* Save thread stack pointer to temp register t0 */
addi t0, sp, 0
mv t0, sp
/* Switch to interrupt stack */
la t2, _kernel
@ -747,7 +747,7 @@ on_thread_stack:
#if !defined(CONFIG_USERSPACE) && !defined(CONFIG_PMP_STACK_GUARD)
/* Restore thread stack pointer */
RV_OP_LOADREG t0, 0x00(sp)
addi sp, t0, 0
mv sp, t0
#endif /* !CONFIG_USERSPACE && !CONFIG_PMP_STACK_GUARD */
#ifdef CONFIG_STACK_SENTINEL
@ -886,7 +886,7 @@ skip_callee_saved_reg:
*/
RV_OP_STOREREG sp, _thread_offset_to_sp(t1)
la t2, _k_neg_eagain
lw t3, 0x00(t2)
lw t3, 0(t2)
sw t3, _thread_offset_to_swap_return_value(t1)
/* Get next thread to schedule. */
@ -916,7 +916,7 @@ skip_callee_saved_reg:
* mstatus will be restored later on.
*/
li t2, MSTATUS_FS_INIT
csrrs x0, mstatus, t2
csrs mstatus, t2
LOAD_FP_CALLEE_SAVED(t1)
@ -956,7 +956,7 @@ skip_load_fp_callee_saved:
/* Set user mode variable */
li t2, 0x1
la t3, is_user_mode
sb t2, 0x00(t3)
sb t2, 0(t3)
kernel_swap:
#endif /* CONFIG_USERSPACE */
@ -1025,10 +1025,10 @@ no_reschedule:
/* Set user mode variable */
li t1, 0x1
la t0, is_user_mode
sb t1, 0x00(t0)
sb t1, 0(t0)
la t0, irq_flag
lb t0, 0x00(t0)
lb t0, 0(t0)
bnez t0, no_enter_user
/* Clear ESF saved in User Stack */

View file

@ -52,14 +52,14 @@ boot_first_core:
/*
* Enable floating-point.
*/
li t0, MSTATUS_FS_INIT
csrrs x0, mstatus, t0
li t0, MSTATUS_FS_INIT
csrs mstatus, t0
/*
* Floating-point rounding mode set to IEEE-754 default, and clear
* all exception flags.
*/
fscsr x0, x0
fscsr zero
#endif
#ifdef CONFIG_INIT_STACKS

View file

@ -51,7 +51,7 @@ SECTION_FUNC(exception.other, arch_swap)
csrrs t0, mstatus, a0
/* Set value of return register a0 to value of register t2 */
addi a0, t2, 0
mv a0, t2
/* Return */
ret
@ -72,4 +72,4 @@ SECTION_FUNC(TEXT, z_thread_entry_wrapper)
* return address set to 0 to indicate a non-returning function call.
*/
jal x0, z_thread_entry
j z_thread_entry