Werner's Miscellanea
Sign in or create your account | Project List | Help
Werner's Miscellanea Commit Details
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 | ||
---|---|---|
22 | 22 | #include <stdlib.h> |
23 | 23 | #include <stdio.h> |
24 | 24 | #include <string.h> |
25 | #include <assert.h> | |
25 | //#include <assert.h> | |
26 | 26 | |
27 | 27 | #include <fpvm/is.h> |
28 | 28 | #include <fpvm/fpvm.h> |
... | ... | |
31 | 31 | |
32 | 32 | #include <hw/pfpu.h> |
33 | 33 | |
34 | #undef assert | |
35 | #define assert(x) \ | |
36 | do { if (!(x)) { printf("ASSERT: " #x "\n"); abort(); } } \ | |
37 | while (0) | |
34 | 38 | |
35 | 39 | //#define REG_STATS |
36 | 40 | //#define LCPF /* longest critical path first */ |
37 | 41 | |
42 | //#define DEBUG | |
38 | 43 | #ifdef DEBUG |
39 | 44 | #define Dprintf printf |
40 | 45 | #else |
... | ... | |
447 | 452 | } |
448 | 453 | |
449 | 454 | |
450 | static void put_reg_by_setter(struct insn *setter, int vm_reg) | |
455 | static void put_reg_by_ref(struct data_ref *ref, int vm_reg) | |
451 | 456 | { |
457 | struct insn *setter = ref->dep; | |
452 | 458 | struct vm_reg *reg; |
453 | 459 | |
454 | 460 | if (setter) { |
455 | 461 | put_reg(setter->vm_insn->dest); |
456 | if (setter->next_setter) | |
462 | if (setter->next_setter && setter->next_setter != ref->insn) | |
457 | 463 | unblock(setter->next_setter); |
458 | 464 | } else { |
459 | 465 | reg = sc->regs+vm_reg2idx(vm_reg); |
... | ... | |
483 | 489 | |
484 | 490 | switch (insn->arity) { |
485 | 491 | case 3: |
486 | put_reg_by_setter(insn->cond.dep, FPVM_REG_IFB); | |
492 | put_reg_by_ref(&insn->cond, FPVM_REG_IFB); | |
487 | 493 | /* fall through */ |
488 | 494 | case 2: |
489 | 495 | 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); | |
491 | 497 | /* fall through */ |
492 | 498 | case 1: |
493 | 499 | 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); | |
495 | 501 | break; |
496 | 502 | case 0: |
497 | 503 | break; |
Branches:
master