From d007212b8483e13406470acfe9b46deec15adf41 Mon Sep 17 00:00:00 2001
From: iliya <iliya.saroukha@hes-so.ch>
Date: Wed, 10 Jan 2024 19:39:15 +0100
Subject: [PATCH] feat: one function for permutting between modes & computing
 user stack size dynamically

---
 assembleur.s | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/assembleur.s b/assembleur.s
index b17deb7..7732ea6 100644
--- a/assembleur.s
+++ b/assembleur.s
@@ -9,30 +9,24 @@
 .global reset_user_stack
 .global switch_to_user_mode
 .global switch_to_supervisor_mode
+.global switch_mode
 .global change_ret
 .extern user_stack DATA				// this adress can be read like: ldr Rx, =user_stack
 
 reset_user_stack:
 	ldr r0, =user_stack
-	add r0, r0, #8192 				// 2048 * word_size
+	mov r1, USER_STACK_SIZE
+	lsl r1, r1, #2			// (e.g. multiply by word size == 4 bytes)
+	add r0, r1
 	msr PSP, r0
-	mov r1, #3
-	msr CONTROL, r1
-	isb
+	mov r2, #3
+	msr CONTROL, r2
 	bx  lr
 
-switch_to_user_mode:
-	mrs r0, control
-	mov r0, #3
-	msr control, r0
-	isb
-	bx lr
-
-switch_to_supervisor_mode:
-	mrs r0, control
-	mov r0, #0
-	msr control, r0
-	isb
+switch_mode:
+	mrs r1, control
+	mov r1, r0
+	msr control, r1
 	bx lr
 
 /*************************/
-- 
GitLab