// initializes both accesses; #bytes is a constant BPatch_memoryAccess::BPatch_memoryAccess(const void *buf, int _sz, Address _addr, bool _isLoad, bool _isStore, unsigned int _bytes, long _imm, int _ra, int _rb, unsigned int _scale, bool _isLoad2, bool _isStore2, unsigned int _bytes2, long _imm2, int _ra2, int _rb2, unsigned int _scale2) : BPatch_instruction(buf, _sz, _addr) { start = new BPatch_addrSpec_NP[nmaxacc_NP]; count = new BPatch_countSpec_NP[nmaxacc_NP]; set1st(_isLoad, _isStore, _imm, _ra, _rb, _bytes, -1, -1, _scale); set2nd(_isLoad2, _isStore2, _bytes2, _imm2, _ra2, _rb2, _scale2); }
// initializes both accesses; #bytes is an expression & not a prefetch BPatch_memoryAccess::BPatch_memoryAccess(const void *buf, int _sz, Address _addr, bool _isLoad, bool _isStore, long _imm_s, int _ra_s, int _rb_s, unsigned int _scale_s, long _imm_c, int _ra_c, int _rb_c, unsigned int _scale_c, bool _isLoad2, bool _isStore2, long _imm2_s, int _ra2_s, int _rb2_s, unsigned int _scale2_s, long _imm2_c, int _ra2_c, int _rb2_c, unsigned int _scale2_c) : BPatch_instruction(buf, _sz, _addr) { start = new BPatch_addrSpec_NP[nmaxacc_NP]; count = new BPatch_countSpec_NP[nmaxacc_NP]; set1st(_isLoad, _isStore, _imm_s, _ra_s, _rb_s, _scale_s, _imm_c, _ra_c, _rb_c, _scale_c, -1, -1, false); set2nd(_isLoad2, _isStore2, _imm2_s, _ra2_s, _rb2_s, _scale2_s, _imm2_c, _ra2_c, _rb2_c, _scale2_c, -1, false); }
void mk2claus() { u_char *keepptr; int keeplen; CLREC *clrec; int len; int save2ln; int prty; int maxprty; int count; int prty2; prty = maxprty = prty2 = 0; clt2nd = maxclptr = NULL; jrt2nd = maxjptr = NULL; selcl = clt1st; if (selcl -> right == R_FZKKGU) { pritiny(); return; } if (cnvlen == selcl -> cllen) { pritiny(); return; } keepptr = cnvstart; keeplen = cnvlen; len = count = 0; for (clrec = selcl ; clrec && count < 5 ; clrec = clrec -> clsort) { cnvstart = keepptr + clrec -> cllen; cnvlen = keeplen - clrec -> cllen; if (len != clrec -> cllen) { if (clt2nd != maxclptr) { free_clall(maxclptr); free_jall(maxjptr); } save2ln = set2nd(clrec); count++; len = clrec -> cllen; prty2 = 0; } if (Termtbl[clrec -> right] & T_SHUUJO) clrec -> cl2len = (u_char)len; else clrec -> cl2len = (u_char)save2ln; if (selcl -> cl2len > clrec -> cl2len) continue; prty = priority(clrec) - prty2; prty2++; if (selcl -> cl2len == clrec -> cl2len) { if (clrec -> cllen == nextcllen) { if (selcl -> cllen != nextcllen) ; else if (prty <= maxprty) continue; } else if (prty <= maxprty) continue; } selcl = clrec; maxprty = prty; if (clt2nd == maxclptr) continue; free_clall(clt2nd); free_jall(jrt2nd); jrt2nd = maxjptr; clt2nd = maxclptr; } if (clt2nd != maxclptr) { free_clall(maxclptr); maxclptr = NULL; free_jall(maxjptr); maxjptr = NULL; } cnvstart = keepptr; cnvlen = keeplen; }