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

📄 op.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
字号:
/* *  Alpha emulation cpu micro-operations for qemu. * *  Copyright (c) 2007 Jocelyn Mayer * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#define DEBUG_OP#include "config.h"#include "exec.h"#include "host-utils.h"#include "op_helper.h"#define REG 0#include "op_template.h"#define REG 1#include "op_template.h"#define REG 2#include "op_template.h"#define REG 3#include "op_template.h"#define REG 4#include "op_template.h"#define REG 5#include "op_template.h"#define REG 6#include "op_template.h"#define REG 7#include "op_template.h"#define REG 8#include "op_template.h"#define REG 9#include "op_template.h"#define REG 10#include "op_template.h"#define REG 11#include "op_template.h"#define REG 12#include "op_template.h"#define REG 13#include "op_template.h"#define REG 14#include "op_template.h"#define REG 15#include "op_template.h"#define REG 16#include "op_template.h"#define REG 17#include "op_template.h"#define REG 18#include "op_template.h"#define REG 19#include "op_template.h"#define REG 20#include "op_template.h"#define REG 21#include "op_template.h"#define REG 22#include "op_template.h"#define REG 23#include "op_template.h"#define REG 24#include "op_template.h"#define REG 25#include "op_template.h"#define REG 26#include "op_template.h"#define REG 27#include "op_template.h"#define REG 28#include "op_template.h"#define REG 29#include "op_template.h"#define REG 30#include "op_template.h"#define REG 31#include "op_template.h"/* Debug stuff */void OPPROTO op_no_op (void){#if !defined (DEBUG_OP)    __asm__ __volatile__("nop" : : : "memory");#endif    RETURN();}void OPPROTO op_tb_flush (void){    helper_tb_flush();    RETURN();}/* Load and stores */#define MEMSUFFIX _raw#include "op_mem.h"#if !defined(CONFIG_USER_ONLY)#define MEMSUFFIX _kernel#include "op_mem.h"#define MEMSUFFIX _executive#include "op_mem.h"#define MEMSUFFIX _supervisor#include "op_mem.h"#define MEMSUFFIX _user#include "op_mem.h"/* This is used for pal modes */#define MEMSUFFIX _data#include "op_mem.h"#endif/* Special operation for load and store */void OPPROTO op_n7 (void){    T0 &= ~(uint64_t)0x7;    RETURN();}/* Misc */void OPPROTO op_excp (void){    helper_excp(PARAM(1), PARAM(2));    RETURN();}void OPPROTO op_load_amask (void){    helper_amask();    RETURN();}void OPPROTO op_load_pcc (void){    helper_load_pcc();    RETURN();}void OPPROTO op_load_implver (void){    helper_load_implver();    RETURN();}void OPPROTO op_load_fpcr (void){    helper_load_fpcr();    RETURN();}void OPPROTO op_store_fpcr (void){    helper_store_fpcr();    RETURN();}void OPPROTO op_load_irf (void){    helper_load_irf();    RETURN();}void OPPROTO op_set_irf (void){    helper_set_irf();    RETURN();}void OPPROTO op_clear_irf (void){    helper_clear_irf();    RETURN();}void OPPROTO op_exit_tb (void){    EXIT_TB();}/* Arithmetic */void OPPROTO op_addq (void){    T0 += T1;    RETURN();}void OPPROTO op_addqv (void){    helper_addqv();    RETURN();}void OPPROTO op_addl (void){    T0 = (int64_t)((int32_t)(T0 + T1));    RETURN();}void OPPROTO op_addlv (void){    helper_addlv();    RETURN();}void OPPROTO op_subq (void){    T0 -= T1;    RETURN();}void OPPROTO op_subqv (void){    helper_subqv();    RETURN();}void OPPROTO op_subl (void){    T0 = (int64_t)((int32_t)(T0 - T1));    RETURN();}void OPPROTO op_sublv (void){    helper_sublv();    RETURN();}void OPPROTO op_s4 (void){    T0 <<= 2;    RETURN();}void OPPROTO op_s8 (void){    T0 <<= 3;    RETURN();}void OPPROTO op_mull (void){    T0 = (int64_t)((int32_t)T0 * (int32_t)T1);    RETURN();}void OPPROTO op_mullv (void){    helper_mullv();    RETURN();}void OPPROTO op_mulq (void){    T0 = (int64_t)T0 * (int64_t)T1;    RETURN();}void OPPROTO op_mulqv (void){    helper_mulqv();    RETURN();}void OPPROTO op_umulh (void){    uint64_t tl, th;    mulu64(&tl, &th, T0, T1);    T0 = th;    RETURN();}/* Logical */void OPPROTO op_and (void){    T0 &= T1;    RETURN();}void OPPROTO op_bic (void){    T0 &= ~T1;    RETURN();}void OPPROTO op_bis (void){    T0 |= T1;    RETURN();}void OPPROTO op_eqv (void){    T0 ^= ~T1;    RETURN();}void OPPROTO op_ornot (void){    T0 |= ~T1;    RETURN();}void OPPROTO op_xor (void){    T0 ^= T1;    RETURN();}void OPPROTO op_sll (void){    T0 <<= T1;    RETURN();}void OPPROTO op_srl (void){    T0 >>= T1;    RETURN();}void OPPROTO op_sra (void){    T0 = (int64_t)T0 >> T1;    RETURN();}void OPPROTO op_sextb (void){    T0 = (int64_t)((int8_t)T0);    RETURN();}void OPPROTO op_sextw (void){    T0 = (int64_t)((int16_t)T0);    RETURN();}void OPPROTO op_ctpop (void){    helper_ctpop();    RETURN();}void OPPROTO op_ctlz (void){    helper_ctlz();    RETURN();}void OPPROTO op_cttz (void){    helper_cttz();    RETURN();}void OPPROTO op_mskbl (void){    helper_mskbl();    RETURN();}void OPPROTO op_extbl (void){    helper_extbl();    RETURN();}void OPPROTO op_insbl (void){    helper_insbl();    RETURN();}void OPPROTO op_mskwl (void){    helper_mskwl();    RETURN();}void OPPROTO op_extwl (void){    helper_extwl();    RETURN();}void OPPROTO op_inswl (void){    helper_inswl();    RETURN();}void OPPROTO op_mskll (void){    helper_mskll();    RETURN();}void OPPROTO op_extll (void){    helper_extll();    RETURN();}void OPPROTO op_insll (void){    helper_insll();    RETURN();}void OPPROTO op_zap (void){    helper_zap();    RETURN();}void OPPROTO op_zapnot (void){    helper_zapnot();    RETURN();}void OPPROTO op_mskql (void){    helper_mskql();    RETURN();}void OPPROTO op_extql (void){    helper_extql();    RETURN();}void OPPROTO op_insql (void){    helper_insql();    RETURN();}void OPPROTO op_mskwh (void){    helper_mskwh();    RETURN();}void OPPROTO op_inswh (void){    helper_inswh();    RETURN();}void OPPROTO op_extwh (void){    helper_extwh();    RETURN();}void OPPROTO op_msklh (void){    helper_msklh();    RETURN();}void OPPROTO op_inslh (void){    helper_inslh();    RETURN();}void OPPROTO op_extlh (void){    helper_extlh();    RETURN();}void OPPROTO op_mskqh (void){    helper_mskqh();    RETURN();}void OPPROTO op_insqh (void){    helper_insqh();    RETURN();}void OPPROTO op_extqh (void){    helper_extqh();    RETURN();}/* Tests */void OPPROTO op_cmpult (void){    if (T0 < T1)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpule (void){    if (T0 <= T1)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpeq (void){    if (T0 == T1)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmplt (void){    if ((int64_t)T0 < (int64_t)T1)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmple (void){    if ((int64_t)T0 <= (int64_t)T1)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpbge (void){    helper_cmpbge();    RETURN();}void OPPROTO op_cmpeqz (void){    if (T0 == 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpnez (void){    if (T0 != 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpltz (void){    if ((int64_t)T0 < 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmplez (void){    if ((int64_t)T0 <= 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpgtz (void){    if ((int64_t)T0 > 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmpgez (void){    if ((int64_t)T0 >= 0)        T0 = 1;    else        T0 = 0;    RETURN();}void OPPROTO op_cmplbs (void){    T0 &= 1;    RETURN();}void OPPROTO op_cmplbc (void){    T0 = (~T0) & 1;    RETURN();}/* Branches */void OPPROTO op_branch (void){    env->pc = T0 & ~3;    RETURN();}void OPPROTO op_addq1 (void){    T1 += T0;    RETURN();}#if 0 // Qemu does not know how to do this...void OPPROTO op_bcond (void){    if (T0)        env->pc = T1 & ~3;    else        env->pc = PARAM(1);    RETURN();}#elsevoid OPPROTO op_bcond (void){    if (T0)        env->pc = T1 & ~3;    else        env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2);    RETURN();}#endif#if 0 // Qemu does not know how to do this...void OPPROTO op_update_pc (void){    env->pc = PARAM(1);    RETURN();}#elsevoid OPPROTO op_update_pc (void){    env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2);    RETURN();}#endif/* Optimization for 32 bits hosts architectures */void OPPROTO op_update_pc32 (void){    env->pc = (uint64_t)PARAM(1);    RETURN();}/* IEEE floating point arithmetic *//* S floating (single) */void OPPROTO op_adds (void){    FT0 = float32_add(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_subs (void){    FT0 = float32_sub(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_muls (void){    FT0 = float32_mul(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_divs (void){    FT0 = float32_div(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_sqrts (void){    helper_sqrts();    RETURN();}void OPPROTO op_cpys (void){    helper_cpys();    RETURN();}void OPPROTO op_cpysn (void){    helper_cpysn();    RETURN();}void OPPROTO op_cpyse (void){    helper_cpyse();    RETURN();}void OPPROTO op_itofs (void){    helper_itofs();    RETURN();}void OPPROTO op_ftois (void){    helper_ftois();    RETURN();}/* T floating (double) */void OPPROTO op_addt (void){    FT0 = float64_add(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_subt (void){    FT0 = float64_sub(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_mult (void){    FT0 = float64_mul(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_divt (void){    FT0 = float64_div(FT0, FT1, &FP_STATUS);    RETURN();}void OPPROTO op_sqrtt (void){    helper_sqrtt();    RETURN();}void OPPROTO op_cmptun (void){    helper_cmptun();    RETURN();}void OPPROTO op_cmpteq (void){    helper_cmpteq();    RETURN();}void OPPROTO op_cmptle (void){    helper_cmptle();    RETURN();}void OPPROTO op_cmptlt (void){    helper_cmptlt();    RETURN();}void OPPROTO op_itoft (void){    helper_itoft();    RETURN();}void OPPROTO op_ftoit (void){    helper_ftoit();    RETURN();}/* VAX floating point arithmetic *//* F floating */void OPPROTO op_addf (void){    helper_addf();    RETURN();}void OPPROTO op_subf (void){    helper_subf();    RETURN();}void OPPROTO op_mulf (void){    helper_mulf();    RETURN();}void OPPROTO op_divf (void){    helper_divf();    RETURN();}void OPPROTO op_sqrtf (void){    helper_sqrtf();    RETURN();}void OPPROTO op_cmpfeq (void){    helper_cmpfeq();    RETURN();}void OPPROTO op_cmpfne (void){    helper_cmpfne();    RETURN();}void OPPROTO op_cmpflt (void){    helper_cmpflt();    RETURN();}void OPPROTO op_cmpfle (void){    helper_cmpfle();    RETURN();}void OPPROTO op_cmpfgt (void){    helper_cmpfgt();    RETURN();}void OPPROTO op_cmpfge (void){    helper_cmpfge();    RETURN();}void OPPROTO op_itoff (void){    helper_itoff();    RETURN();}/* G floating */void OPPROTO op_addg (void){    helper_addg();    RETURN();}void OPPROTO op_subg (void){    helper_subg();    RETURN();}void OPPROTO op_mulg (void){    helper_mulg();    RETURN();}void OPPROTO op_divg (void){    helper_divg();    RETURN();}void OPPROTO op_sqrtg (void){    helper_sqrtg();    RETURN();}void OPPROTO op_cmpgeq (void){    helper_cmpgeq();    RETURN();}void OPPROTO op_cmpglt (void){    helper_cmpglt();    RETURN();}void OPPROTO op_cmpgle (void){    helper_cmpgle();    RETURN();}/* Floating point format conversion */void OPPROTO op_cvtst (void){    FT0 = (float)FT0;    RETURN();}void OPPROTO op_cvtqs (void){    helper_cvtqs();    RETURN();}void OPPROTO op_cvtts (void){    FT0 = (float)FT0;    RETURN();}void OPPROTO op_cvttq (void){    helper_cvttq();    RETURN();}void OPPROTO op_cvtqt (void){    helper_cvtqt();    RETURN();}void OPPROTO op_cvtqf (void){    helper_cvtqf();    RETURN();}void OPPROTO op_cvtgf (void){    helper_cvtgf();    RETURN();}void OPPROTO op_cvtgd (void){    helper_cvtgd();    RETURN();}void OPPROTO op_cvtgq (void){    helper_cvtgq();    RETURN();}void OPPROTO op_cvtqg (void){    helper_cvtqg();    RETURN();}void OPPROTO op_cvtdg (void){    helper_cvtdg();    RETURN();}void OPPROTO op_cvtlq (void){    helper_cvtlq();    RETURN();}void OPPROTO op_cvtql (void){    helper_cvtql();    RETURN();}void OPPROTO op_cvtqlv (void){    helper_cvtqlv();    RETURN();}void OPPROTO op_cvtqlsv (void){    helper_cvtqlsv();    RETURN();}/* PALcode support special instructions */#if !defined (CONFIG_USER_ONLY)void OPPROTO op_hw_rei (void){    env->pc = env->ipr[IPR_EXC_ADDR] & ~3;    env->ipr[IPR_EXC_ADDR] = env->ipr[IPR_EXC_ADDR] & 1;    /* XXX: re-enable interrupts and memory mapping */    RETURN();}void OPPROTO op_hw_ret (void){    env->pc = T0 & ~3;    env->ipr[IPR_EXC_ADDR] = T0 & 1;    /* XXX: re-enable interrupts and memory mapping */    RETURN();}void OPPROTO op_mfpr (void){    helper_mfpr(PARAM(1));    RETURN();}void OPPROTO op_mtpr (void){    helper_mtpr(PARAM(1));    RETURN();}void OPPROTO op_set_alt_mode (void){    env->saved_mode = env->ps & 0xC;    env->ps = (env->ps & ~0xC) | (env->ipr[IPR_ALT_MODE] & 0xC);    RETURN();}void OPPROTO op_restore_mode (void){    env->ps = (env->ps & ~0xC) | env->saved_mode;    RETURN();}void OPPROTO op_ld_phys_to_virt (void){    helper_ld_phys_to_virt();    RETURN();}void OPPROTO op_st_phys_to_virt (void){    helper_st_phys_to_virt();    RETURN();}#endif /* !defined (CONFIG_USER_ONLY) */

⌨️ 快捷键说明

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