*** alpha.def Mon Aug 31 10:15:20 1998 --- simplesim-3.0/target-alpha/alpha.def Tue Jan 12 13:02:16 1999 *************** *** 225,238 **** --- 225,255 ---- SET_GPR(RA, GPR(RB) + SEXT32(65536 * OFS)); \ } DEFINST(LDAH, 0x09, "ldah", "a,o(b)", IntALU, F_ICOMP, DGPR(RA), DNA, DNA, DGPR(RB), DNA) + /* EV56 BWX extension... */ + #define LDBU_IMPL \ + { \ + byte_t _result; \ + enum md_fault_type _fault; \ + \ + _result = READ_BYTE(GPR(RB) + SEXT(OFS), _fault); \ + if (_fault != md_fault_none) \ + DECLARE_FAULT(_fault); \ + \ + SET_GPR(RA, (quad_t)_result); \ + } + DEFINST(LDBU, 0x0a, + "ldbu", "a,o(b)", + RdPort, F_MEM|F_LOAD|F_DISP, + DGPR(RA), DNA, DNA, DGPR(RB), DNA) + #define LDQ_U_IMPL \ { \ quad_t _result; \ enum md_fault_type _fault; \ \ _result = READ_QUAD((GPR(RB) + SEXT(OFS)) & ~7, _fault); \ if (_fault != md_fault_none) \ *************** *** 241,254 **** --- 258,316 ---- SET_GPR(RA, _result); \ } DEFINST(LDQ_U, 0x0b, "ldq_u", "a,o(b)", RdPort, F_MEM|F_LOAD|F_DISP, DGPR(RA), DNA, DNA, DGPR(RB), DNA) + /* EV56 BWX extension... */ + #define LDWU_IMPL \ + { \ + half_t _result; \ + enum md_fault_type _fault; \ + \ + _result = READ_HALF(GPR(RB) + SEXT(OFS), _fault); \ + if (_fault != md_fault_none) \ + DECLARE_FAULT(_fault); \ + \ + SET_GPR(RA, (quad_t)_result); \ + } + DEFINST(LDWU, 0x0c, + "ldwu", "a,o(b)", + RdPort, F_MEM|F_LOAD|F_DISP, + DGPR(RA), DNA, DNA, DGPR(RB), DNA) + + /* EV56 BWX extension... */ + #define STW_IMPL \ + { \ + enum md_fault_type _fault; \ + \ + WRITE_HALF((half_t)GPR(RA), GPR(RB) + SEXT(OFS), _fault); \ + if (_fault != md_fault_none) \ + DECLARE_FAULT(_fault); \ + } + DEFINST(STW, 0x0d, + "stw", "a,o(b)", + WrPort, F_MEM|F_STORE|F_DISP, + DNA, DNA, DGPR(RA), DGPR(RB), DNA) + + /* EV56 BWX extension... */ + #define STB_IMPL \ + { \ + enum md_fault_type _fault; \ + \ + WRITE_BYTE((byte_t)GPR(RA), GPR(RB) + SEXT(OFS), _fault); \ + if (_fault != md_fault_none) \ + DECLARE_FAULT(_fault); \ + } + DEFINST(STB, 0x0e, + "stb", "a,o(b)", + WrPort, F_MEM|F_STORE|F_DISP, + DNA, DNA, DGPR(RA), DGPR(RB), DNA) + #define STQ_U_IMPL \ { \ enum md_fault_type _fault; \ \ WRITE_QUAD(GPR(RA), (GPR(RB) + SEXT(OFS)) & ~7, _fault); \ if (_fault != md_fault_none) \ DECLARE_FAULT(_fault); \ *************** *** 280,293 **** --- 342,358 ---- DEFLINK(FLTL, 0x17, "fltl", 5, /* FIXME: check this... */0x7f) DEFLINK(MISC, 0x18, "misc", 12, 0x0f) DEFLINK(JMPJSR, 0x1a, "jmpjsr", 14, 0x03) + /* EV56 BWX extension... */ + DEFLINK(EXTS, 0x1c, "exts", 5, 0x7f) + #define LDF_IMPL \ { \ /* FIXME: unimplemented */ \ DECLARE_FAULT(md_fault_unimpl); \ } DEFINST(LDF, 0x20, "ldf (unimpl)", "", *************** *** 2853,2870 **** --- 2918,2998 ---- } DEFINST(JSR_COROUTINE, 0x03, "jsr_coroutine", "a,(b)", IntALU, F_CTRL|F_UNCOND|F_INDIRJMP, DGPR(RA), DNA, DGPR(RB), DNA, DNA) + /* EV56 BWX extension... */ + CONNECT(EXTS) + + /* EV56 BWX extension... */ + DEFLINK(SEXTB_LINK, 0x00, "sextb_link", 12, 1) + + /* EV56 BWX extension... */ + DEFLINK(SEXTW_LINK, 0x01, "sextw_link", 12, 1) + + + /* EV56 BWX extension... */ + CONNECT(SEXTB_LINK) + + /* EV56 BWX extension... */ + #define SEXTB_IMPL \ + { \ + SET_GPR(RC, (quad_t)(squad_t)(sbyte_t)(GPR(RB) & 0xff)); \ + } + DEFINST(SEXTB, 0x00, + "sextb", "b,c", + IntALU, F_ICOMP, + DGPR(RC), DNA, DGPR(RB), DNA, DNA) + + /* EV56 BWX extension... */ + #define SEXTBI_IMPL \ + { \ + SET_GPR(RC, (quad_t)(squad_t)(sbyte_t)(IMM & 0xff)); \ + } + DEFINST(SEXTBI, 0x01, + "sextb", "i,c", + IntALU, F_ICOMP|F_IMM, + DGPR(RC), DNA, DNA, DNA, DNA) + + + /* EV56 BWX extension... */ + CONNECT(SEXTW_LINK) + + /* EV56 BWX extension... */ + #define SEXTW_IMPL \ + { \ + SET_GPR(RC, (quad_t)(squad_t)(shalf_t)(GPR(RB) & 0xffff)); \ + } + DEFINST(SEXTW, 0x00, + "sextw", "b,c", + IntALU, F_ICOMP, + DGPR(RC), DNA, DGPR(RB), DNA, DNA) + + /* EV56 BWX extension... */ + #define SEXTWI_IMPL \ + { \ + SET_GPR(RC, (quad_t)(squad_t)(shalf_t)(IMM & 0xffff)); \ + } + DEFINST(SEXTWI, 0x01, + "sextw", "i,c", + IntALU, F_ICOMP|F_IMM, + DGPR(RC), DNA, DNA, DNA, DNA) + + + /* clean up all definitions... */ #undef LDA_IMPL #undef LDAH_IMPL + #undef LDBU_IMPL #undef LDQ_U_IMPL + #undef LDWU_IMPL + #undef STW_IMPL + #undef STB_IMPL #undef STQ_U_IMPL #undef FLTV_IMPL #undef LDF_IMPL #undef LDG_IMPL #undef LDS_IMPL #undef LDT_IMPL #undef STF_IMPL *************** *** 3065,3075 **** --- 3193,3207 ---- #undef FETCH_M_IMPL #undef RPCC_IMPL #undef _RS_IMPL #undef JMP_IMPL #undef JSR_IMPL #undef RETN_IMPL #undef JSR_COROUTINE_IMPL + #undef SEXTB_IMPL + #undef SEXTBI_IMPL + #undef SEXTW_IMPL + #undef SEXTWI_IMPL #undef DEFINST #undef DEFLINK #undef CONNECT