Date:2011-09-24 03:15:11 (12 years 6 months ago)
Author:Werner Almesberger
Commit:0f80dcf1180cdfd49fc7f118d0719ef0da486039
Message:m1/perf/sched.c: don't try to unblock references of next setter twice (more)

Also changed:
- added commented-out #define DEBUG
- work-around for abort() being a no-op in libbase
Files: m1/perf/sched.c (4 diffs)

Change Details

m1/perf/sched.c
2222#include <stdlib.h>
2323#include <stdio.h>
2424#include <string.h>
25#include <assert.h>
25//#include <assert.h>
2626
2727#include <fpvm/is.h>
2828#include <fpvm/fpvm.h>
...... 
3131
3232#include <hw/pfpu.h>
3333
34#undef assert
35#define assert(x) \
36    do { if (!(x)) { printf("ASSERT: " #x "\n"); abort(); } } \
37    while (0)
3438
3539//#define REG_STATS
3640//#define LCPF /* longest critical path first */
3741
42//#define DEBUG
3843#ifdef DEBUG
3944#define Dprintf printf
4045#else
...... 
447452}
448453
449454
450static void put_reg_by_setter(struct insn *setter, int vm_reg)
455static void put_reg_by_ref(struct data_ref *ref, int vm_reg)
451456{
457    struct insn *setter = ref->dep;
452458    struct vm_reg *reg;
453459
454460    if (setter) {
455461        put_reg(setter->vm_insn->dest);
456        if (setter->next_setter)
462        if (setter->next_setter && setter->next_setter != ref->insn)
457463            unblock(setter->next_setter);
458464    } else {
459465        reg = sc->regs+vm_reg2idx(vm_reg);
...... 
483489
484490    switch (insn->arity) {
485491    case 3:
486        put_reg_by_setter(insn->cond.dep, FPVM_REG_IFB);
492        put_reg_by_ref(&insn->cond, FPVM_REG_IFB);
487493        /* fall through */
488494    case 2:
489495        CODE(sc->cycle).opb = lookup_pfpu_reg(insn->vm_insn->opb);
490        put_reg_by_setter(insn->opb.dep, insn->vm_insn->opb);
496        put_reg_by_ref(&insn->opb, insn->vm_insn->opb);
491497        /* fall through */
492498    case 1:
493499        CODE(sc->cycle).opa = lookup_pfpu_reg(insn->vm_insn->opa);
494        put_reg_by_setter(insn->opa.dep, insn->vm_insn->opa);
500        put_reg_by_ref(&insn->opa, insn->vm_insn->opa);
495501        break;
496502    case 0:
497503        break;

Archive Download the corresponding diff file

Branches:
master



interactive