summaryrefslogtreecommitdiffstats
path: root/libgloss/cr16/crt1.S
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2010-12-02 19:35:47 +0000
committerJeff Johnston <jjohnstn@redhat.com>2010-12-02 19:35:47 +0000
commit8ae0b98903893e68a52baa9a2e3df574f0d7a39e (patch)
treee6810305a55e34b3b0598e4d04e236ace3b606c6 /libgloss/cr16/crt1.S
parent874a87f8cd93365c3bea0e6e5d14c265e9bb01f6 (diff)
downloadcygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.tar.gz
cygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.tar.bz2
cygnal-8ae0b98903893e68a52baa9a2e3df574f0d7a39e.zip
2010-12-02 Jayant Sonar jayant.sonar@kpitcummins.com
Kaushik Phatak kaushik.phatak@kpitcummins.com * configure.in: Add CR16 support. * configure: Regenerated. * cr16/aclocal.m4: New. * cr16/close.c: New. * cr16/configure: New. * cr16/configure.in: New. * cr16/crt1.S: New. * cr16/crti.S: New. * cr16/crtn.S: New. * cr16/dvz_hndl.c: New. * cr16/_exit.c: New. * cr16/flg_hndl.c: New. * cr16/fstat.c: New. * cr16/_getenv.c: New. * cr16/getpid.c: New. * cr16/iad_hndl.c: New. * cr16/intable.c: New. * cr16/isatty.c: New. * cr16/kill.c: New. * cr16/lseek.c: New. * cr16/Makefile.in: New. * cr16/open.c: New. * cr16/putnum.c: New. * cr16/read.c: New. * cr16/_rename.c: New. * cr16/sbrk.c: New. * cr16/sim.ld: New. * cr16/stat.c: New. * cr16/svc_hndl.c: New. * cr16/time.c: New. * cr16/und_hndl.c: New. * cr16/unlink.c: New. * cr16/write.c: New.
Diffstat (limited to 'libgloss/cr16/crt1.S')
-rw-r--r--libgloss/cr16/crt1.S98
1 files changed, 98 insertions, 0 deletions
diff --git a/libgloss/cr16/crt1.S b/libgloss/cr16/crt1.S
new file mode 100644
index 000000000..eee6fc10b
--- /dev/null
+++ b/libgloss/cr16/crt1.S
@@ -0,0 +1,98 @@
+ ##############################################################################
+ # crt0.s -- CR16 default start-up routine #
+ # #
+ # Copyright (c) 2004 National Semiconductor Corporation #
+ # #
+ # The authors hereby grant permission to use, copy, modify, distribute, #
+ # and license this software and its documentation for any purpose, provided #
+ # that existing copyright notices are retained in all copies and that this #
+ # notice is included verbatim in any distributions. No written agreement, #
+ # license, or royalty fee is required for any of the authorized uses. #
+ # Modifications to this software may be copyrighted by their authors #
+ # and need not follow the licensing terms described here, provided that #
+ # the new terms are clearly indicated on the first page of each file where #
+ # they apply. #
+ # #
+ # This is the start routine of your CR16 program. #
+ # It is linked with your application automatically. You can use #
+ # this routine as a template and modify it to your needs, yet this #
+ # file must be supplied for the compiler. #
+ # It is assumed that the following symbols are defined in your linker #
+ # script: __STACK_START, __ISTACK_START #
+ ##############################################################################
+
+ .text
+#ifdef __CR16CP__
+ .align 4
+#else
+ .align 2
+#endif
+ .global _main
+ .global _atexit
+ .global _exit
+ .global _start
+ .global __fini
+ .global __init
+ .global __STACK_START
+ .global __ISTACK_START
+
+_start:
+
+ #----------------------------------------------------------------------------#
+ # Initialize the stack pointers. The constants __STACK_START and #
+ # __ISTACK_START should be defined in the linker script. #
+
+ movd $__STACK_START, (sp)
+
+ movd $__ISTACK_START, (r1,r0)
+ lprd (r1,r0), isp
+
+ #----------------------------------------------------------------------------#
+ # Initialize the default sections according to the linker script. #
+
+# bal (ra), __init_bss_data
+
+ #----------------------------------------------------------------------#
+ # Set the Extended Dispatch bit in the CFG register. This is the #
+ # default configuration for CR16C. #
+
+ spr cfg, r0 # Set dispatch table width
+ orw $0x100, r0
+ lpr r0, cfg
+
+ #----------------------------------------------------------------------------#
+
+
+ #----------------------------------------------------------------------------#
+ # Handle global and static constructurs execution and setup #
+ # destructors to be called from exit. #
+
+ bal (ra),__init
+ movd $__fini@c, (r3,r2)
+ bal (ra), _atexit
+
+ #----------------------------------------------------------------------------#
+ # Jump to the main function in your application. #
+
+#ifdef __INT32__
+ movd $0, (r3,r2) # Number of arguments
+ movd $0, (r5,r4) # conatins pointer to argument string.
+#else
+ movw $0, r2 # Number of arguments
+ movd $0, (r4,r3) # conatins pointer to argument string.
+#endif
+ bal (ra), _main
+
+ #----------------------------------------------------------------------------#
+ # Upon returning from the main function (if it isn't an infinite loop), #
+ # jump to the exit function. The exit function is located in the #
+ # library 'libc.a'. #
+
+#ifdef __INT32__
+ movd (r1,r0), (r3,r2) # _main return value gets forwarded.
+#else
+ movw r0, r2 # _main return value gets forwarded.
+#endif
+ br _exit # returns control to the functional simulator.
+
+