diff --git a/dispatch.h b/dispatch.h index b7bfb45..c3d1916 100644 --- a/dispatch.h +++ b/dispatch.h @@ -500,6 +500,16 @@ DIGEN(0101256, "SNS 15", d_sns); DIGEN(0101257, "SNS 16", d_sns); DIGEN(0100200, "SMCR", d_smcr); DIGEN(0101200, "SMCS", d_smcs); +DIGEN(0101020, "SS1", d_ssx); +DIGEN(0100020, "SR1", d_srx); +DIGEN(0101010, "SS2", d_ssx); +DIGEN(0100010, "SR2", d_srx); +DIGEN(0101004, "SS3", d_ssx); +DIGEN(0100004, "SR3", d_srx); +DIGEN(0101002, "SS4", d_ssx); +DIGEN(0100002, "SR4", d_srx); +DIGEN(0101036, "SSS", d_ssx); +DIGEN(0100036, "SSR", d_srx); /* initialize class 3 generics */ diff --git a/em.c b/em.c index b96b825..0506cbb 100755 --- a/em.c +++ b/em.c @@ -7421,6 +7421,22 @@ d_sns: /* 0101240 - 0101257 */ INCRP; goto fetch; +d_ssx: /* 0101020, 0101010, 0101004, 0101002: SS1-4, SSS */ + m = (inst & 036) << 11; + TRACE(T_FLOW, " SSx\n"); + RESTRICT(); + if (sswitch & m) + INCRP; + goto fetch; + +d_srx: /* 0100020, 0100010, 0100004, 0100002: SR1-4, SRS */ + m = (inst & 036) << 11; + TRACE(T_FLOW, " SRx\n"); + RESTRICT(); + if (!(sswitch & m)) + INCRP; + goto fetch; + d_smcr: /* 0100200 */ TRACE(T_FLOW, " SMCR\n"); RESTRICT();