loadstore.c
来自「ppc750 system design simulator using sys」· C语言 代码 · 共 1,959 行 · 第 1/5 页
C
1,959 行
/*************************************************************************** loadstore.c - description ------------------- begin : Wed Sep 26 2001 copyright : (C) 2001 Universite Paris Sud and CEA author : Gilles Mouchard email : gilles.mouchard@lri.fr, gilles.mouchard@cea.fr ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#include <loadstore.h>#include <ppcemul.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <xmlize.h>#define EA_U (GPR(RA) + SEXT16(OFS))#define EA (RA ? GPR(RA) + SEXT16(OFS) : SEXT16(OFS))#define EA_UX (GPR(RA) + GPR(RB))#define EA_X (RA ? GPR(RA) + GPR(RB) : GPR(RB))void lbz_impl(ppc_inst_t inst){ addr_t ea = EA; byte_t result = MEM_READ_BYTE(ea); GPR(RD) = (word_t) result;} void lbzu_impl(ppc_inst_t inst){ addr_t ea = EA_U; byte_t result = MEM_READ_BYTE(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;}void lfd_impl(ppc_inst_t inst){ addr_t ea = EA; dword_t result = MEM_READ_DWORD(ea); FPR_DW(FD) = result;}void lfdu_impl(ppc_inst_t inst){ addr_t ea = EA_U; dword_t result = MEM_READ_DWORD(ea); FPR_DW(FD) = result; GPR(RA) = ea;}void lfs_impl(ppc_inst_t inst){ addr_t ea = EA; word_t result = MEM_READ_WORD(ea); FPR_DBL(FD) = (double) *(float *) &result;}void lfsu_impl(ppc_inst_t inst){ addr_t ea = EA_U; word_t result = MEM_READ_WORD(ea); FPR_DBL(FD) = (double) *(float *) &result; GPR(RA) = ea;}void lha_impl(ppc_inst_t inst){ addr_t ea = EA; shalfword_t result = (shalfword_t) MEM_READ_HALF_WORD(ea); GPR(RD) = SEXT16(result);}void lhau_impl(ppc_inst_t inst){ addr_t ea = EA_U; shalfword_t result = (shalfword_t) MEM_READ_HALF_WORD(ea); GPR(RD) = SEXT16(result); GPR(RA) = ea;}void lhz_impl(ppc_inst_t inst){ addr_t ea = EA; halfword_t result = MEM_READ_HALF_WORD(ea); GPR(RD) = (word_t) result;}void lhzu_impl(ppc_inst_t inst){ addr_t ea = EA_U; halfword_t result = MEM_READ_HALF_WORD(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;}void lmw_impl(ppc_inst_t inst) { abort(); }void lwz_impl(ppc_inst_t inst){ addr_t ea = EA; word_t result = MEM_READ_WORD(ea); GPR(RD) = (word_t) result;}void lwzu_impl(ppc_inst_t inst){ addr_t ea = EA_U; word_t result = MEM_READ_WORD(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;}void stb_impl(ppc_inst_t inst){ addr_t ea = EA; MEM_WRITE_BYTE(ea, GPR(RS));}void stbu_impl(ppc_inst_t inst){ addr_t ea = EA_U; MEM_WRITE_BYTE(ea, GPR(RS)); GPR(RA) = ea;}void stfd_impl(ppc_inst_t inst){ addr_t ea = EA; MEM_WRITE_DWORD(ea, FPR_DW(FS));}void stfdu_impl(ppc_inst_t inst){ addr_t ea = EA_U; MEM_WRITE_DWORD(ea, FPR_DW(FS)); GPR(RA) = ea;}void stfs_impl(ppc_inst_t inst){ addr_t ea = EA; float tmp = (float) FPR_DBL(FS); MEM_WRITE_WORD(ea, *(word_t *) &tmp); }void stfsu_impl(ppc_inst_t inst){ addr_t ea = EA_U; float tmp = (float) FPR_DBL(FS); MEM_WRITE_WORD(ea, *(word_t *) &tmp); GPR(RA) = ea;}void sth_impl(ppc_inst_t inst){ addr_t ea = EA; MEM_WRITE_HALF_WORD(ea, GPR(RS));}void sthu_impl(ppc_inst_t inst){ addr_t ea = EA_U; MEM_WRITE_HALF_WORD(ea, GPR(RS)); GPR(RA) = ea;}void stmw_impl(ppc_inst_t inst) { abort(); }void stw_impl(ppc_inst_t inst){ addr_t ea = EA; MEM_WRITE_WORD(ea, GPR(RS));}void stwu_impl(ppc_inst_t inst){ addr_t ea = EA_U; MEM_WRITE_WORD(ea, GPR(RS)); GPR(RA) = ea;}void dcba_impl(ppc_inst_t inst) { abort(); }void dcbf_impl(ppc_inst_t inst) { abort(); }void dcbi_impl(ppc_inst_t inst) { abort(); }void dcbst_impl(ppc_inst_t inst) { abort(); }void dcbt_impl(ppc_inst_t inst) { abort(); }void dcbtst_impl(ppc_inst_t inst) { abort(); }void dcbz_impl(ppc_inst_t inst){ addr_t ea = EA_X; MEM_SET(ea - (ea % 32), 0, 32);}void eciwx_impl(ppc_inst_t inst) { abort(); }void ecowx_impl(ppc_inst_t inst) { abort(); }void eieio_impl(ppc_inst_t inst) { abort(); }void icbi_impl(ppc_inst_t inst) { abort(); }void lbzux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; byte_t result = MEM_READ_BYTE(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;}void lbzx_impl(ppc_inst_t inst){ addr_t ea = EA_X; byte_t result = MEM_READ_BYTE(ea); GPR(RD) = (word_t) result;}void lfdux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; dword_t result = MEM_READ_DWORD(ea); FPR_DW(FD) = result; GPR(RA) = ea;}void lfdx_impl(ppc_inst_t inst){ addr_t ea = EA_X; dword_t result = MEM_READ_DWORD(ea); FPR_DW(FD) = result;}void lfsux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; word_t result = MEM_READ_WORD(ea); FPR_DBL(FD) = (double) *(float *) &result; GPR(RA) = ea;}void lfsx_impl(ppc_inst_t inst){ addr_t ea = EA_X; word_t result = MEM_READ_WORD(ea); FPR_DBL(FD) = (double) *(float *) &result;}void lhaux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; shalfword_t result = (shalfword_t) MEM_READ_HALF_WORD(ea); GPR(RD) = SEXT16(result); GPR(RA) = ea;}void lhax_impl(ppc_inst_t inst){ addr_t ea = EA_X; shalfword_t result = (shalfword_t) MEM_READ_HALF_WORD(ea); GPR(RD) = SEXT16(result);}void lhbrx_impl(ppc_inst_t inst){ addr_t ea = EA_X; halfword_t result = MEM_READ_HALF_WORD_BYTE_REVERSE(ea); GPR(RD) = (word_t) result;}void lhzux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; halfword_t result = MEM_READ_HALF_WORD(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;}void lhzx_impl(ppc_inst_t inst){ addr_t ea = EA_X; halfword_t result = MEM_READ_HALF_WORD(ea); GPR(RD) = (word_t) result;}void lswi_impl(ppc_inst_t inst) { abort(); }void lswx_impl(ppc_inst_t inst) { abort(); }void lwarx_impl(ppc_inst_t inst) { abort(); }void lwbrx_impl(ppc_inst_t inst){ addr_t ea = EA_X; word_t result = MEM_READ_WORD_BYTE_REVERSE(ea); GPR(RD) = (word_t) result;}void lwzux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; word_t result = MEM_READ_WORD(ea); GPR(RD) = (word_t) result; GPR(RA) = ea;} void lwzx_impl(ppc_inst_t inst){ addr_t ea = EA_X; word_t result = MEM_READ_WORD(ea); GPR(RD) = (word_t) result;}void stbux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; MEM_WRITE_BYTE(ea, GPR(RS)); GPR(RA) = ea;}void stbx_impl(ppc_inst_t inst){ addr_t ea = EA_X; MEM_WRITE_BYTE(ea, GPR(RS));}void stfdux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; MEM_WRITE_DWORD(ea, FPR_DW(FS)); GPR(RA) = ea;}void stfdx_impl(ppc_inst_t inst){ addr_t ea = EA_X; MEM_WRITE_DWORD(ea, FPR_DW(FS));}void stfiwx_impl(ppc_inst_t inst) { abort(); }void stfsux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; float tmp = (float) FPR_DBL(FS); MEM_WRITE_WORD(ea, *(word_t *) &tmp); GPR(RA) = ea;}void stfsx_impl(ppc_inst_t inst){ addr_t ea = EA_X; float tmp = (float) FPR_DBL(FS); MEM_WRITE_WORD(ea, *(word_t *) &tmp);}void sthbrx_impl(ppc_inst_t inst){ addr_t ea = EA_X; MEM_WRITE_HALF_WORD_BYTE_REVERSE(ea, GPR(RS));} void sthux_impl(ppc_inst_t inst){ addr_t ea = EA_UX; MEM_WRITE_HALF_WORD(ea, GPR(RS)); GPR(RA) = ea;}void sthx_impl(ppc_inst_t inst){ addr_t ea = EA_X; MEM_WRITE_HALF_WORD(ea, GPR(RS));}void stswi_impl(ppc_inst_t inst) { abort(); }void stswx_impl(ppc_inst_t inst) { abort(); }void stwbrx_impl(ppc_inst_t inst)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?