summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sh/shsim/start/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sh/shsim/start/start.S')
-rw-r--r--c/src/lib/libbsp/sh/shsim/start/start.S55
1 files changed, 55 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sh/shsim/start/start.S b/c/src/lib/libbsp/sh/shsim/start/start.S
new file mode 100644
index 0000000000..9b5c0798a8
--- /dev/null
+++ b/c/src/lib/libbsp/sh/shsim/start/start.S
@@ -0,0 +1,55 @@
+ .section .text
+ .global start
+start:
+ mov.l stack_k,r15
+
+ ! zero out bss
+ mov.l edata_k,r0
+ mov.l end_k,r1
+ mov #0,r2
+start_l:
+ mov.l r2,@r0
+ add #4,r0
+ cmp/ge r0,r1
+ bt start_l
+
+#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY)
+ mov.l set_fpscr_k, r1
+ jsr @r1
+ mov #0,r4
+ lds r3,fpscr
+#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) */
+
+ ! call the mainline
+ mov.l boot_card_k,r0
+ jsr @r0
+ or r0,r0
+
+ ! call exit
+ mov r0,r4
+ mov.l exit_k,r0
+ jsr @r0
+ or r0,r0
+
+ .align 2
+#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
+set_fpscr_k:
+ .long ___set_fpscr
+#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(SH4_SINGLE_ONLY) */
+stack_k:
+ .long _stack
+edata_k:
+ .long _edata
+end_k:
+ .long _end
+boot_card_k:
+ .long _boot_card
+exit_k:
+ .long _exit
+
+#ifdef __ELF__
+ .section .stack,"aw"
+#else
+ .section .stack
+#endif
+_stack: .long 0xdeaddead