diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2008-02-05 14:51:48 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2013-03-14 22:45:15 +0100 |
commit | 22686a1383c4a4a319eaaa6b16b1a9540114bd66 (patch) | |
tree | 04e12086f9187c150ba6a33db0368b9903e50363 /libc/sysdeps/linux/metag/setjmp.S | |
parent | 37439e66a31f251eba39604885f57099a43d943d (diff) |
Add support for the Meta architecture
Meta cores are 32-bit, hardware multithreaded, general purpose, embedded
processors which also feature a DSP instruction set, and can be found in
many digital radios. They are capable of running different operating
systems on different hardware threads, for example a digital radio might
run RTOSes for DAB decoding and audio decoding on 3 hardware threads,
and run Linux on the 4th hardware thread to manage the user interface,
networking etc. HTPs are also capable of running SMP Linux on multiple
hardware threads.
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps/linux/metag/setjmp.S')
-rw-r--r-- | libc/sysdeps/linux/metag/setjmp.S | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/metag/setjmp.S b/libc/sysdeps/linux/metag/setjmp.S new file mode 100644 index 000000000..f00b4a841 --- /dev/null +++ b/libc/sysdeps/linux/metag/setjmp.S @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2013 Imagination Technologies Ltd. + * + * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +!!! setjmp and variants + .text + +!! int _setjmp (jmp_buf __env) +!! Store the calling environment in ENV, not saving the signal mask. +!! Return 0. */ + .global __setjmp + .type __setjmp,function +__setjmp: + MOV D0Ar2,#0 + B ___sigsetjmp1 + .size __setjmp,.-__setjmp + +!! int setjmp (jmp_buf __env) +!! Store the calling environment in ENV, also saving the signal mask. +!! Return 0. */ + .global _setjmp + .type _setjmp,function +_setjmp: + MOV D0Ar2,#1 + !! fall through to __sigsetjmp + .size _setjmp,.-_setjmp + +!! int __sigsetjmp (jmp_buf __env, int __savemask) +!! Store the calling environment in ENV, also saving the +!! signal mask if SAVEMASK is nonzero. Return 0. +!! This is the internal name for `sigsetjmp'. + .global ___sigsetjmp + .type ___sigsetjmp,function +___sigsetjmp: +___sigsetjmp1: + !! Save A0/A1 regs + MSETL [D1Ar1++],A0.0,A0.1 + !! Use A0.3 as temp + MOV A0.3,D1Ar1 + !! Rewind D1Ar1 that was modified above + SUB D1Ar1,D1Ar1,#(2*8) + !! Save D0/D1 regs + MSETL [A0.3++],D0FrT,D0.5,D0.6,D0.7 + !! Tail call __sigjmp_save +#ifdef __PIC__ + B ___sigjmp_save@PLT +#else + B ___sigjmp_save +#endif + .size ___sigsetjmp,.-___sigsetjmp |