void srhand(register int j) { /* Pointer to optab[] entry *//* * * * * * * * * * START OF srhand() * * * * * * * * * */ char *a; register int k; objini(j); FETCH(k); if ((k & 0x38) == 0x30) { badseq(j, k); return; } printf("%s", OPFAM[((k & 0x38) >> 3) + 16]); if (!(j & 1)) putchar('b'); a = mtrans((j & 0xfd), (k & 0xc7), TR_STD); mtrunc(a); printf("\t%s", a); if (j & 2) printf(",cl\n"); else printf(",*1\n"); objout(); } /* * * * * * * * * * * END OF srhand() * * * * * * * * * * */
void pohand(register int j) { /* Pointer to optab[] entry *//* * * * * * * * * * START OF pohand() * * * * * * * * * */ char *a; register int k; objini(j); FETCH(k); if (k & 0x38) { badseq(j, k); return; } printf("%s\t", optab[j].text); a = mtrans((j & 0xfd), k, TR_STD); mtrunc(a); printf("%s\n", a); objout(); } /* * * * * * * * * * * END OF pohand() * * * * * * * * * * */
static inline mat truncate(const mat& m, const double threshold) { mat mtrunc; mtrunc.zeros(m.n_rows, m.n_cols); for (size_t i = 0; i < m.n_rows; i++) for (size_t j = 0; j < m.n_cols; j++) if (m(i, j) >= threshold) mtrunc(i, j) = m(i, j); return mtrunc; }
void mmhand(register int j) { /* Pointer to optab[] entry *//* * * * * * * * * * START OF mmhand() * * * * * * * * * */ char b[80]; char *a; register int k; objini(j); FETCH(k); if (k & 0x38) { badseq(j, k); return; } printf("%s", optab[j].text); if (!(j & 1)) putchar('b'); a = mtrans((j & 0xfd), (k & 0xc7), TR_STD); mtrunc(a); printf("\t%s,", a); if (j & 1) { FETCH(j); FETCH(k); k = (k << 8) | j; if (lookext((long) (k), (PC - 1), b)) printf("#%s\n", b); else { if (k < 100 || k > 65436) printf("#%d\n", (short) k); else printf("#$%04x\n", k); } } else { FETCH(k); printf("*%d\n", k); } objout(); } /* * * * * * * * * * * END OF mmhand() * * * * * * * * * * */
void mjhand(register int j) { /* Pointer to optab[] entry *//* * * * * * * * * * START OF mjhand() * * * * * * * * * */ char *a; register int k; objini(j); FETCH(k); a = mtrans((j & 0xfd), (k & 0xc7), TR_STD); mtrunc(a); switch (((k = objbuf[1]) & 0x38) >> 3) { case 0: printf("\tinc"); if (!(j & 1)) putchar('b'); putchar('\t'); break; case 1: printf("\tdec"); if (!(j & 1)) putchar('b'); putchar('\t'); break; case 2: if (j & 1) printf("\tcall\t@"); else goto BAD; break; case 3: if (j & 1) printf("\tcalli\t@"); else goto BAD; break; case 4: if (j & 1) printf("\tjmp\t@"); else goto BAD; break; case 5: if (j & 1) printf("\tjmpi\t@"); else goto BAD; break; case 6: if (j & 1) printf("\tpush\t"); else goto BAD; break; case 7: BAD: badseq(j, k); return; } printf("%s\n", a); objout(); } /* * * * * * * * * * * END OF mjhand() * * * * * * * * * * */
void mahand(register int j) { /* Pointer to optab[] entry *//* * * * * * * * * * START OF mahand() * * * * * * * * * */ char *a; register int k; char b[80]; objini(j); FETCH(k); a = mtrans((j & 0xfd), (k & 0xc7), TR_STD); mtrunc(a); switch (((k = objbuf[1]) & 0x38) >> 3) { case 0: printf("\ttest"); break; case 1: badseq(j, k); return; case 2: printf("\tnot"); break; case 3: printf("\tneg"); break; case 4: printf("\tmul"); break; case 5: printf("\timul"); break; case 6: printf("\tdiv"); break; case 7: printf("\tidiv"); break; } if (!(j & 1)) putchar('b'); printf("\t%s", a); if (k & 0x38) putchar('\n'); else if (j & 1) { FETCH(j); FETCH(k); k = (k << 8) | j; if (lookext((long) (k), (PC - 1), b)) printf(",#%s\n", b); else printf(",#$%04x\n", k); } else { FETCH(k); printf(",*%d\n", k); } objout(); } /* * * * * * * * * * * END OF mahand() * * * * * * * * * * */