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

📄 op.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
#endifvoid OPPROTO op_srli_T0 (void){    T0 = (uint32_t)T0 >> PARAM1;    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_srli_T0_64 (void){    T0 = (uint64_t)T0 >> PARAM1;    RETURN();}#endifvoid OPPROTO op_srli_T1 (void){    T1 = (uint32_t)T1 >> PARAM1;    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_srli_T1_64 (void){    T1 = (uint64_t)T1 >> PARAM1;    RETURN();}#endif/***                       Floating-Point arithmetic                       ***//* fadd - fadd. */void OPPROTO op_fadd (void){#if USE_PRECISE_EMULATION    do_fadd();#else    FT0 = float64_add(FT0, FT1, &env->fp_status);#endif    RETURN();}/* fsub - fsub. */void OPPROTO op_fsub (void){#if USE_PRECISE_EMULATION    do_fsub();#else    FT0 = float64_sub(FT0, FT1, &env->fp_status);#endif    RETURN();}/* fmul - fmul. */void OPPROTO op_fmul (void){#if USE_PRECISE_EMULATION    do_fmul();#else    FT0 = float64_mul(FT0, FT1, &env->fp_status);#endif    RETURN();}/* fdiv - fdiv. */void OPPROTO op_fdiv (void){#if USE_PRECISE_EMULATION    do_fdiv();#else    FT0 = float64_div(FT0, FT1, &env->fp_status);#endif    RETURN();}/* fsqrt - fsqrt. */void OPPROTO op_fsqrt (void){    do_fsqrt();    RETURN();}/* fre - fre. */void OPPROTO op_fre (void){    do_fre();    RETURN();}/* fres - fres. */void OPPROTO op_fres (void){    do_fres();    RETURN();}/* frsqrte  - frsqrte. */void OPPROTO op_frsqrte (void){    do_frsqrte();    RETURN();}/* fsel - fsel. */void OPPROTO op_fsel (void){    do_fsel();    RETURN();}/***                     Floating-Point multiply-and-add                   ***//* fmadd - fmadd. */void OPPROTO op_fmadd (void){#if USE_PRECISE_EMULATION    do_fmadd();#else    FT0 = float64_mul(FT0, FT1, &env->fp_status);    FT0 = float64_add(FT0, FT2, &env->fp_status);#endif    RETURN();}/* fmsub - fmsub. */void OPPROTO op_fmsub (void){#if USE_PRECISE_EMULATION    do_fmsub();#else    FT0 = float64_mul(FT0, FT1, &env->fp_status);    FT0 = float64_sub(FT0, FT2, &env->fp_status);#endif    RETURN();}/* fnmadd - fnmadd. - fnmadds - fnmadds. */void OPPROTO op_fnmadd (void){    do_fnmadd();    RETURN();}/* fnmsub - fnmsub. */void OPPROTO op_fnmsub (void){    do_fnmsub();    RETURN();}/***                     Floating-Point round & convert                    ***//* frsp - frsp. */void OPPROTO op_frsp (void){#if USE_PRECISE_EMULATION    do_frsp();#else    FT0 = float64_to_float32(FT0, &env->fp_status);#endif    RETURN();}/* fctiw - fctiw. */void OPPROTO op_fctiw (void){    do_fctiw();    RETURN();}/* fctiwz - fctiwz. */void OPPROTO op_fctiwz (void){    do_fctiwz();    RETURN();}#if defined(TARGET_PPC64)/* fcfid - fcfid. */void OPPROTO op_fcfid (void){    do_fcfid();    RETURN();}/* fctid - fctid. */void OPPROTO op_fctid (void){    do_fctid();    RETURN();}/* fctidz - fctidz. */void OPPROTO op_fctidz (void){    do_fctidz();    RETURN();}#endifvoid OPPROTO op_frin (void){    do_frin();    RETURN();}void OPPROTO op_friz (void){    do_friz();    RETURN();}void OPPROTO op_frip (void){    do_frip();    RETURN();}void OPPROTO op_frim (void){    do_frim();    RETURN();}/***                         Floating-Point compare                        ***//* fcmpu */void OPPROTO op_fcmpu (void){    do_fcmpu();    RETURN();}/* fcmpo */void OPPROTO op_fcmpo (void){    do_fcmpo();    RETURN();}/***                         Floating-point move                           ***//* fabs */void OPPROTO op_fabs (void){    FT0 = float64_abs(FT0);    RETURN();}/* fnabs */void OPPROTO op_fnabs (void){    FT0 = float64_abs(FT0);    FT0 = float64_chs(FT0);    RETURN();}/* fneg */void OPPROTO op_fneg (void){    FT0 = float64_chs(FT0);    RETURN();}/* Load and store */#define MEMSUFFIX _raw#include "op_helper.h"#include "op_mem.h"#if !defined(CONFIG_USER_ONLY)#define MEMSUFFIX _user#include "op_helper.h"#include "op_mem.h"#define MEMSUFFIX _kernel#include "op_helper.h"#include "op_mem.h"#define MEMSUFFIX _hypv#include "op_helper.h"#include "op_mem.h"#endif/* Special op to check and maybe clear reservation */void OPPROTO op_check_reservation (void){    if ((uint32_t)env->reserve == (uint32_t)(T0 & ~0x00000003))        env->reserve = (target_ulong)-1ULL;    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_check_reservation_64 (void){    if ((uint64_t)env->reserve == (uint64_t)(T0 & ~0x00000003))        env->reserve = (target_ulong)-1ULL;    RETURN();}#endifvoid OPPROTO op_wait (void){    env->halted = 1;    RETURN();}/* Return from interrupt */#if !defined(CONFIG_USER_ONLY)void OPPROTO op_rfi (void){    do_rfi();    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_rfid (void){    do_rfid();    RETURN();}void OPPROTO op_hrfid (void){    do_hrfid();    RETURN();}#endif/* Exception vectors */void OPPROTO op_store_excp_prefix (void){    T0 &= env->ivpr_mask;    env->excp_prefix = T0;    RETURN();}void OPPROTO op_store_excp_vector (void){    T0 &= env->ivor_mask;    env->excp_vectors[PARAM1] = T0;    RETURN();}#endif/* Trap word */void OPPROTO op_tw (void){    do_tw(PARAM1);    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_td (void){    do_td(PARAM1);    RETURN();}#endif#if !defined(CONFIG_USER_ONLY)/* tlbia */void OPPROTO op_tlbia (void){    ppc_tlb_invalidate_all(env);    RETURN();}/* tlbie */void OPPROTO op_tlbie (void){    ppc_tlb_invalidate_one(env, (uint32_t)T0);    RETURN();}#if defined(TARGET_PPC64)void OPPROTO op_tlbie_64 (void){    ppc_tlb_invalidate_one(env, T0);    RETURN();}#endif#if defined(TARGET_PPC64)void OPPROTO op_slbia (void){    ppc_slb_invalidate_all(env);    RETURN();}void OPPROTO op_slbie (void){    ppc_slb_invalidate_one(env, (uint32_t)T0);    RETURN();}void OPPROTO op_slbie_64 (void){    ppc_slb_invalidate_one(env, T0);    RETURN();}#endif#endif#if !defined(CONFIG_USER_ONLY)/* PowerPC 602/603/755 software TLB load instructions */void OPPROTO op_6xx_tlbld (void){    do_load_6xx_tlb(0);    RETURN();}void OPPROTO op_6xx_tlbli (void){    do_load_6xx_tlb(1);    RETURN();}/* PowerPC 74xx software TLB load instructions */void OPPROTO op_74xx_tlbld (void){    do_load_74xx_tlb(0);    RETURN();}void OPPROTO op_74xx_tlbli (void){    do_load_74xx_tlb(1);    RETURN();}#endif/* 601 specific */void OPPROTO op_load_601_rtcl (void){    T0 = cpu_ppc601_load_rtcl(env);    RETURN();}void OPPROTO op_load_601_rtcu (void){    T0 = cpu_ppc601_load_rtcu(env);    RETURN();}#if !defined(CONFIG_USER_ONLY)void OPPROTO op_store_601_rtcl (void){    cpu_ppc601_store_rtcl(env, T0);    RETURN();}void OPPROTO op_store_601_rtcu (void){    cpu_ppc601_store_rtcu(env, T0);    RETURN();}void OPPROTO op_store_hid0_601 (void){    do_store_hid0_601();    RETURN();}void OPPROTO op_load_601_bat (void){    T0 = env->IBAT[PARAM1][PARAM2];    RETURN();}void OPPROTO op_store_601_batl (void){    do_store_ibatl_601(env, PARAM1, T0);    RETURN();}void OPPROTO op_store_601_batu (void){    do_store_ibatu_601(env, PARAM1, T0);    RETURN();}#endif /* !defined(CONFIG_USER_ONLY) *//* PowerPC 601 specific instructions (POWER bridge) *//* XXX: those micro-ops need tests ! */void OPPROTO op_POWER_abs (void){    if ((int32_t)T0 == INT32_MIN)        T0 = INT32_MAX;    else if ((int32_t)T0 < 0)        T0 = -T0;    RETURN();}void OPPROTO op_POWER_abso (void){    do_POWER_abso();    RETURN();}void OPPROTO op_POWER_clcs (void){    do_POWER_clcs();    RETURN();}void OPPROTO op_POWER_div (void){    do_POWER_div();    RETURN();}void OPPROTO op_POWER_divo (void){    do_POWER_divo();    RETURN();}void OPPROTO op_POWER_divs (void){    do_POWER_divs();    RETURN();}void OPPROTO op_POWER_divso (void){    do_POWER_divso();    RETURN();}void OPPROTO op_POWER_doz (void){    if ((int32_t)T1 > (int32_t)T0)        T0 = T1 - T0;    else        T0 = 0;    RETURN();}void OPPROTO op_POWER_dozo (void){    do_POWER_dozo();    RETURN();}void OPPROTO op_load_xer_cmp (void){    T2 = xer_cmp;    RETURN();}void OPPROTO op_POWER_maskg (void){    do_POWER_maskg();    RETURN();}void OPPROTO op_POWER_maskir (void){    T0 = (T0 & ~T2) | (T1 & T2);    RETURN();}void OPPROTO op_POWER_mul (void){    uint64_t tmp;    tmp = (uint64_t)T0 * (uint64_t)T1;    env->spr[SPR_MQ] = tmp >> 32;    T0 = tmp;    RETURN();}void OPPROTO op_POWER_mulo (void){    do_POWER_mulo();    RETURN();}void OPPROTO op_POWER_nabs (void){    if (T0 > 0)        T0 = -T0;    RETURN();}void OPPROTO op_POWER_nabso (void){    /* nabs never overflows */    if (T0 > 0)        T0 = -T0;    xer_ov = 0;    RETURN();}/* XXX: factorise POWER rotates... */void OPPROTO op_POWER_rlmi (void){    T0 = rotl32(T0, T2) & PARAM1;    T0 |= T1 & (uint32_t)PARAM2;    RETURN();}void OPPROTO op_POWER_rrib (void){    T2 &= 0x1FUL;    T0 = rotl32(T0 & INT32_MIN, T2);    T0 |= T1 & ~rotl32(INT32_MIN, T2);    RETURN();}void OPPROTO op_POWER_sle (void){    T1 &= 0x1FUL;    env->spr[SPR_MQ] = rotl32(T0, T1);    T0 = T0 << T1;    RETURN();}void OPPROTO op_POWER_sleq (void){    uint32_t tmp = env->spr[SPR_MQ];    T1 &= 0x1FUL;    env->spr[SPR_MQ] = rotl32(T0, T1);    T0 = T0 << T1;    T0 |= tmp >> (32 - T1);    RETURN();}void OPPROTO op_POWER_sllq (void){    uint32_t msk = UINT32_MAX;    msk = msk << (T1 & 0x1FUL);    if (T1 & 0x20UL)        msk = ~msk;    T1 &= 0x1FUL;    T0 = (T0 << T1) & msk;    T0 |= env->spr[SPR_MQ] & ~msk;    RETURN();}void OPPROTO op_POWER_slq (void){    uint32_t msk = UINT32_MAX, tmp;    msk = msk << (T1 & 0x1FUL);    if (T1 & 0x20UL)        msk = ~msk;    T1 &= 0x1FUL;    tmp = rotl32(T0, T1);    T0 = tmp & msk;    env->spr[SPR_MQ] = tmp;    RETURN();}void OPPROTO op_POWER_sraq (void){    env->spr[SPR_MQ] = rotl32(T0, 32 - (T1 & 0x1FUL));    if (T1 & 0x20UL)        T0 = UINT32_MAX;    else        T0 = (int32_t)T0 >> T1;    RETURN();}void OPPROTO op_POWER_sre (void){    T1 &= 0x1FUL;    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);    T0 = (int32_t)T0 >> T1;    RETURN();}void OPPROTO op_POWER_srea (void){    T1 &= 0x1FUL;    env->spr[SPR_MQ] = T0 >> T1;    T0 = (int32_t)T0 >> T1;    RETURN();}void OPPROTO op_POWER_sreq (void){    uint32_t tmp;    int32_t msk;    T1 &= 0x1FUL;    msk = INT32_MIN >> T1;    tmp = env->spr[SPR_MQ];    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);    T0 = T0 >> T1;    T0 |= tmp & msk;    RETURN();}void OPPROTO op_POWER_srlq (void){    uint32_t tmp;    int32_t msk;    msk = INT32_MIN >> (T1 & 0x1FUL);    if (T1 & 0x20UL)        msk = ~msk;    T1 &= 0x1FUL;    tmp = env->spr[SPR_MQ];    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);    T0 = T0 >> T1;    T0 &= msk;    T0 |= tmp & ~msk;    RETURN();}void OPPROTO op_POWER_srq (void){    T1 &= 0x1FUL;    env->spr[SPR_MQ] = rotl32(T0, 32 - T1);    T0 = T0 >> T1;    RETURN();}/* POWER instructions not implemented in PowerPC 601 */#if !defined(CONFIG_USER_ONLY)void OPPROTO op_POWER_mfsri (void){    T1 = T0 >> 28;    T0 = env->sr[T1];    RETURN();}void OPPROTO op_POWER_rac (void){    do_POWER_rac();    RETURN();}void OPPROTO op_POWER_rfsvc (void){    do_POWER_rfsvc();    RETURN();}#endif/* PowerPC 602 specific instruction */#if !defined(CONFIG_USER_ONLY)void OPPROTO op_602_mfrom (void){    do_op_602_mfrom();    RETURN();}#endif/* PowerPC 4xx specific micro-ops */void OPPROTO op_405_add_T0_T2 (void){    T0 = (int32_t)T0 + (int32_t)T2;    RETURN();}void OPPROTO op_405_mulchw (void){    T0 = ((int16_t)T0) * ((int16_t)(T1 >> 16));    RETURN();}void OPPROTO op_405_mulchwu (void){    T0 = ((uint16_t)T0) * ((uint16_t)(T1 >> 16));    RETURN();}void OPPROTO op_405_mulhhw (void){    T0 = ((int16_t)(T0 >> 16)) * ((int16_t)(T1 >> 16));    RETURN();}void OPPROTO op_405_mulhhwu (void){    T0 = ((uint16_t)(T0 >> 16)) * ((uint16_t)(T1 >> 16));    RETURN();}void OPPROTO op_405_mullhw (void){    T0 = ((int16_t)T0) * ((int16_t)T1);    RETURN();}void OPPROTO op_405_mullhwu (void){    T0 = ((uint16_t)T0) * ((uint16_t)T1);    RETURN();}void OPPROTO op_405_check_sat (void){    do_405_check_sat();    RETURN();}void OPPROTO op_405_check_ovu (void){    if (likely(T0 >= T2)) {        xer_ov = 0;    } else {        xer_ov = 1;        xer_so = 1;    }    RETURN();}void OPPROTO op_405_check_satu (void){    if (unlikely(T0 < T2)) {        /* Saturate result */        T0 = UINT32_MAX;    }    RETURN();}void OPPROTO op_load_dcr (void){    do_load_dcr();    RETURN();}void OPPROTO op_store_dcr (void){    do_store_dcr();    RETURN();}#if !defined(CONFIG_USER_ONLY)/* Return from critical interrupt : * same as rfi, except nip & MSR are loaded from SRR2/3 instead of SRR0/1 */void OPPROTO op_40x_rfci (void){    do_40x_rfci();    RETURN();}void OPPROTO op_rfci (void){    do_rfci();    RETURN();}void OPPROTO op_rfdi (void){    do_rfdi();    RETURN();}void OPPROTO op_rfmci (void){    do_rfmci();    RETURN();}void OPPROTO op_wrte (void){    /* We don't call do_store_msr here as we won't trigger     * any special case nor change hflags     */    T0 &= 1 << MSR_EE;    env->msr &= ~(1 << MSR_EE);

⌨️ 快捷键说明

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