⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_support.s

📁 toppers操作系统源码
💻 S
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  Copyright (C) 2001-2004 by Industrial Technology Institute, *                              Miyagi Prefectural Government, JAPAN *  *  惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation  *  によって给山されている GNU General Public License の Version 2 に淡 *  揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア *  を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 *      脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 *      荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 *      の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 *      脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ *      とˉ *    (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 *        侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに *        鼠桂することˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お *  よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も *  崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 *  儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: cpu_support.S,v 1.2 2004/10/07 17:10:56 honda Exp $ *//* *  プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈PowerPC脱∷ *     カ〖ネル柒婶で蝗脱する年盗 */#define	_MACRO_ONLY#include "jsp_kernel.h"#include "offset.h"/* *  TCB菇陇挛のオフセットのチェック *   15ビットに箭まっていないと射规橙磨が弹こり、 *   袋略する瓢侯にならない。 */#define CHECK_OFFSET(offset)	(((offset)&~0x8fff) != 0)#if CHECK_OFFSET(TCB_pc) || CHECK_OFFSET(TCB_sp) 		\    || CHECK_OFFSET(TCB_enatex) || CHECK_OFFSET(TCB_texptn) 	\    || CHECK_OFFSET(TCB_tinib) || CHECK_OFFSET(TINIB_task) 	\    || CHECK_OFFSET(TINIB_exinf) 	ここでコンパイルエラ〖#endif/* * 毋嘲借妄の涟染で锣闰するレジスタ眶 *   绕脱レジスタ¨gpr0-1,3-12 *   泼检レジスタ¨LR,CTR,XER,SRR0,SRR1 */#define NUM_REG			17/*  レジスタを略闰するのに涩妥なバイト眶  */#define GPR0_12_SPRG_AREA_SIZE  (NUM_REG*4 + 4)  		/*  +4は毋嘲妥傍戎规を瘦赂するスペ〖ス  */		/*  庙罢¨4バイト董肠になっている  */#define GPR13_31_AREA_SIZE      (19*4)  /*  gpr13-31  */    /*     * 庙罢     *   MPC860は赦瓢井眶爬レジスタがないため、この婶尸は     *   テストされていない     */#ifdef SUPPORT_FLOATING_POINT_REG/*  ハ〖ドウェアで赦瓢井眶爬レジスタが悸刘されている眷圭  */#define FPR_AREA_SIZE       (32*8+8)    /*  fpr0-31,FPSCR  */#define FPR0_13_AREA_SIZE   (14*8+8)    /*  fpr0-14,FPSCR  */#define FPR14_31_AREA_SIZE  (18*8)      /*  fpr15-31  */#else   /*  SUPPORT_FLOATING_POINT_REG  *//*  ハ〖ドウェアで赦瓢井眶爬レジスタが悸刘されていない眷圭  */#define FPR_AREA_SIZE       0           /*  fpr0-31,FPSCR  */#define FPR0_13_AREA_SIZE   0           /*  fpr0-14,FPSCR  */#define FPR14_31_AREA_SIZE  0           /*  fpr15-31  */#endif  /* SUPPORT_FLOATING_POINT_REG */    /* *  充哈み、CPU毋嘲减烧箕のレジスタの略闰 *  庙罢 *   赦瓢井眶爬レジスタの略闰はディスパッチ钙び叫しがあるとき *   ∈タスクスイッチの材墙拉があるとき∷のみ乖う。 *   充哈みハンドラやCPU毋嘲ハンドラ柒で赦瓢井眶爬レジスタを *   蝗脱する眷圭は、称ハンドラ柒で赦瓢井眶爬レジスタの略闰】 *   牲傅を乖うこと。 *    *   r4のSRR1はCPU毋嘲券栏箕のCPUロック觉轮冉侍にも蝗脱する。 *    */#define SAVE_GPR0_12_SPRG                   \    subi    sp, sp, GPR0_12_SPRG_AREA_SIZE; \    stw     r0, 0*4(sp);                    \    stw     r3, 1*4(sp);                    \    stw     r4, 2*4(sp);                    \    stw     r5, 3*4(sp);                    \    stw     r6, 4*4(sp);                    \    stw     r7, 5*4(sp);                    \    stw     r8, 6*4(sp);                    \    stw     r9, 7*4(sp);                    \    stw     r10, 8*4(sp);                   \    stw     r11, 9*4(sp);                   \    stw     r12,10*4(sp);                   \    mfspr   r3, SRR0;                       \    stw     r3, 11*4(sp);                   \    mfspr   r4, SRR1;                       \    stw     r4, 12*4(sp);                   \    mfspr   r5, LR;                         \    stw     r5, 13*4(sp);                   \    mfspr   r6, CTR;                        \    stw     r6, 14*4(sp);                   \    mfcr    r7;             /*  CR  */      \    stw     r7, 15*4(sp);                   \    mfspr   r8, XER;                        \    stw     r8, 16*4(sp)/*   *  充哈み、CPU毋嘲减烧箕のレジスタの牲傅 *    ∈gpr0-1,3-12, 泼检レジスタの牲傅∷ *   *    ディスパッチ钙び叫しがない眷圭 */#define LOAD_R0_12_SPRG                         \    /*  泼检レジスタの牲傅  */                  \    lwz     r3, 11*4(sp);                       \    mtspr   SRR0, r3;                           \    lwz     r4, 12*4(sp);                       \    mtspr   SRR1, r4;                           \    lwz     r5, 13*4(sp);                       \    mtspr   LR, r5;                             \    lwz     r6, 14*4(sp);                       \    mtspr   CTR, r6;                            \    lwz     r7, 15*4(sp);                       \    mtcr    r7;             /*  CR  */          \    lwz     r8, 16*4(sp);                       \    mtspr   XER, r8;                            \    /*  绕脱レジスタgpr0-1,3-12の牲傅  */       \    lwz     r0, 0*4(sp);                        \    lwz     r3, 1*4(sp);                        \    lwz     r4, 2*4(sp);                        \    lwz     r5, 3*4(sp);                        \    lwz     r6, 4*4(sp);                        \    lwz     r7, 5*4(sp);                        \    lwz     r8, 6*4(sp);                        \    lwz     r9, 7*4(sp);                        \    lwz     r10, 8*4(sp);                       \    lwz     r11, 9*4(sp);                       \    lwz     r12, 10*4(sp)    /*  マクロ年盗ここまで  *//* *  CPU毋嘲の掐庚借妄の柒、称毋嘲ベクタに芹弥する涟染婶尸 *   *   マクロ苞眶 *    exc_no¨毋嘲戎规 *    *   レジスタ充り碰て *    SPRG2¨exc_table∈CPU毋嘲导击ベクタテ〖ブルの黎片アドレス∷ *    CTR¨C咐胳ル〖チンの黎片アドレス *    r3¨CPU毋嘲ハンドラの苞眶 *    r4¨SRR1のコピ〖 */#define MAKE_EXCEPTION_ENTRY(exe_no)                            \    SAVE_GPR0_12_SPRG;  /*  スクラッチレジスタの略闰  */        \                        /*  ∈r4にSRR1がコピ〖される∷  */      \    mr  r3, sp;         /*  CPU毋嘲ハンドラの苞眶肋年  */       \    /*  C咐胳ル〖チンの黎片アドレス肋年  */                     \    mfspr   r5, SPRG2;  /*  r5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -