void display_dump_pixels(display_t* display) { for (uint16_t y = 0; y < 32; y++) { for (uint16_t x = 0; x < 64; x++) { if (display->pixels[(y * 64) + x]) { log_op(" "); } else { log_op("O"); } } log_op("\n"); } log_op("\n"); }
void log_stuff(int operation, char * from, char * to, int dp, int cc, stack stk) { fprintf(stderr, "stack = "); print_list(*stk); fprintf(stderr, "\n%s -(%c%c)-> %s operation ", from, "RDLU"[dp], "lr"[cc], to); log_op(operation); fprintf(stderr, "\n"); }
void nes_cpu_cli(void) { log_op("CLI"); cpu_clr_I(); cpu.pc ++; }
void nes_cpu_php(void) { log_op("PHP"); cpu.stack[cpu.sp --] = cpu.sreg; cpu.pc ++; }
void nes_cpu_pla(void) { log_op("PLA"); cpu.a = cpu.stack[cpu.sp ++]; cpu_check_Z(cpu.a); cpu_check_N(cpu.a); cpu.pc ++; }
void nes_cpu_tsx(void) { log_op("TSX"); cpu.x = cpu.sp; cpu_check_Z(cpu.x); cpu_check_N(cpu.x); cpu.pc ++; }
bool forward_dir(void) { bool ok = true; // ok &= abs_op(); ok &= acos_op(); ok &= acosh_op(); ok &= asin_op(); ok &= asinh_op(); ok &= atan_op(); ok &= atanh_op(); ok &= addpv_op(); ok &= addvv_op(); ok &= cexp_op(); ok &= cosh_op(); ok &= cos_op(); ok &= csum_op(); ok &= dis_op(); ok &= divpv_op(); ok &= divvp_op(); ok &= divvv_op(); ok &= exp_op(); ok &= load_op(); ok &= log_op(); ok &= mulpv_op(); ok &= par_op(); ok &= powpv_op(); ok &= powvp_op(); ok &= powvv_op(); ok &= sign_op(); ok &= sin_op(); ok &= sinh_op(); ok &= subpv_op(); ok &= subvp_op(); ok &= subvv_op(); ok &= sqrt_op(); ok &= tan_op(); ok &= tanh_op(); ok &= usr_op(); // return ok; }
static void stress(int num) { int i, o, op, max_op, skip; unsigned int n, skips, lock_ops, unlock_ops, unlockf_ops, cancel_ops; struct lk *lk; n = skips = lock_ops = unlock_ops = unlockf_ops = cancel_ops = 0; sts_eunlock = sts_ecancel = sts_etimedout = sts_edeadlk = sts_eagain = sts_other = sts_zero = 0; bast_unlock = bast_skip = 0; while (!stress_stop) { if (stress_delay) usleep(stress_delay); process_libdlm(); if (++n == num) break; i = rand_int(0, maxn-1); lk = get_lock(i); if (!lk) continue; max_op = 5; if (stress_lock_only) max_op = 2; o = rand_int(0, max_op); switch (o) { case 0: case 1: case 2: op = Op_lock; break; case 3: op = Op_unlock; break; case 4: op = Op_unlockf; break; case 5: op = Op_cancel; break; default: op = 0; } skip = 0; switch (op) { case Op_lock: if (lk->wait_ast) { skip = 1; break; } noqueue = !!o; our_xid = n; lock(i, rand_int(0, 5)); lock_ops++; log_op("%8x: lock %3d\t%x\n", n, i, lk->lksb.sb_lkid); break; case Op_unlock: if (lk->wait_ast) { skip = 1; break; } if (lk->lastop == Op_unlock || lk->lastop == Op_unlockf) { skip = 1; break; } if (!lk->lksb.sb_lkid) { skip = 1; break; } unlock(i); unlock_ops++; log_op("%8x: unlock %3d\t%x\n", n, i, lk->lksb.sb_lkid); break; case Op_unlockf: if (lk->lastop == Op_unlock || lk->lastop == Op_unlockf) { skip = 1; break; } if (!lk->lksb.sb_lkid) { skip = 1; break; } unlockf(i); unlockf_ops++; log_op("%8x: unlockf %3d\t%x\n", n, i, lk->lksb.sb_lkid); break; case Op_cancel: if (!lk->wait_ast) { skip = 1; break; } if (lk->lastop > Op_lock) { skip = 1; break; } cancel(i); cancel_ops++; log_op("%8x: cancel %3d\t%x\n", n, i, lk->lksb.sb_lkid); break; } if (skip) skips++; } printf("ops: skip %d lock %d unlock %d unlockf %d cancel %d\n", skips, lock_ops, unlock_ops, unlockf_ops, cancel_ops); printf("bast: unlock %u skip %u\n", bast_unlock, bast_skip); printf("ast status: eunlock %d ecancel %d etimedout %d edeadlk %d eagain %d\n", sts_eunlock, sts_ecancel, sts_etimedout, sts_edeadlk, sts_eagain); printf("ast status: zero %d other %d\n", sts_zero, sts_other); }