> > By the way, do I understand it right that if I chain TBs than I need > > to periodically check for pending interrupts myself, otherwise e.g. > > "j $" will create uninterruptible infinite loop? > > No, it won't. It'll create a loop, but it'll be broken by the host > signal handler. Notice no other target is checking for this. > > >>> +DEF_HELPER_0(check_interrupts, void) > >>> +DEF_HELPER_2(waiti, void, i32, i32) > >>> +DEF_HELPER_2(timer_irq, void, i32, i32) > >>> +DEF_HELPER_1(advance_ccount, void, i32) > >> > >> You shouldn't have to manage any of this from within the translator. > > You should *never* have to check for interrupts, or advance cycle counters, > from within the translated code. Interrupt processing, and thus timers, > are handled in between TBs as necessary by generic code.
Well, - cycles fed into advance_ccount may (and on real hardware actually do) depend on executed commands/pipeline/cache hits. Most of this stuff may be counted at the translation time; - timer_irq is a helper that raises IRQ generated by CCOMPARE match; - waiti is a helper for the instruction of the same name; - check_interrupts converts IRQs on enabled interrupt sources into current irq level. Thanks. -- Max