📄 cpu_support.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 + -