Exemple #1
0
// 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);
}
Exemple #2
0
// 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);
}
Exemple #3
0
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;
}