Lines Matching +full:global +full:- +full:reset

4  * Copyright (c) 2016-2020 Michael Rolnik
18 * <http://www.gnu.org/licenses/lgpl-2.1.html>
23 #include "qemu/error-report.h"
25 #include "accel/tcg/cpu-ops.h"
27 #include "exec/page-protection.h"
29 #include "accel/tcg/cpu-ldst.h"
30 #include "exec/helper-proto.h"
41 if (env->skip) { in avr_cpu_exec_interrupt()
47 cs->exception_index = EXCP_RESET; in avr_cpu_exec_interrupt()
50 cs->interrupt_request &= ~CPU_INTERRUPT_RESET; in avr_cpu_exec_interrupt()
55 if (cpu_interrupts_enabled(env) && env->intsrc != 0) { in avr_cpu_exec_interrupt()
56 int index = ctz64(env->intsrc); in avr_cpu_exec_interrupt()
57 cs->exception_index = EXCP_INT(index); in avr_cpu_exec_interrupt()
60 env->intsrc &= env->intsrc - 1; /* clear the interrupt */ in avr_cpu_exec_interrupt()
61 if (!env->intsrc) { in avr_cpu_exec_interrupt()
62 cs->interrupt_request &= ~CPU_INTERRUPT_HARD; in avr_cpu_exec_interrupt()
79 uint32_t ret = env->pc_w; in avr_cpu_do_interrupt()
84 if (cs->exception_index == EXCP_RESET) { in avr_cpu_do_interrupt()
86 } else if (env->intsrc != 0) { in avr_cpu_do_interrupt()
87 vector = ctz64(env->intsrc) + 1; in avr_cpu_do_interrupt()
91 do_stb(env, env->sp--, ret, 0); in avr_cpu_do_interrupt()
92 do_stb(env, env->sp--, ret >> 8, 0); in avr_cpu_do_interrupt()
93 do_stb(env, env->sp--, ret >> 16, 0); in avr_cpu_do_interrupt()
95 do_stb(env, env->sp--, ret, 0); in avr_cpu_do_interrupt()
96 do_stb(env, env->sp--, ret >> 8, 0); in avr_cpu_do_interrupt()
98 do_stb(env, env->sp--, ret, 0); in avr_cpu_do_interrupt()
101 env->pc_w = base + vector * size; in avr_cpu_do_interrupt()
102 env->sregI = 0; /* clear Global Interrupt Flag */ in avr_cpu_do_interrupt()
104 cs->exception_index = -1; in avr_cpu_do_interrupt()
155 cs->exception_index = EXCP_HLT; in helper_sleep()
167 cs->exception_index = EXCP_DEBUG; in helper_unsupported()
179 cs->exception_index = EXCP_DEBUG; in helper_debug()
187 cs->exception_index = EXCP_DEBUG; in helper_break()
193 qemu_log_mask(LOG_UNIMP, "WDG reset (not implemented)\n"); in helper_wdr()
199 * does not expect global temps to be modified -- a global may be
201 * read these, as TCG does make sure the global temps are saved
210 return env->r[addr]; in avr_cpu_reg1_read()
214 * The range 0x38-0x3f of the i/o space is mapped to cpu regs.
224 return 0xff & (env->rampD >> 16); in avr_cpu_reg2_read()
226 return 0xff & (env->rampX >> 16); in avr_cpu_reg2_read()
228 return 0xff & (env->rampY >> 16); in avr_cpu_reg2_read()
230 return 0xff & (env->rampZ >> 16); in avr_cpu_reg2_read()
232 return 0xff & (env->eind >> 16); in avr_cpu_reg2_read()
234 return env->sp & 0x00ff; in avr_cpu_reg2_read()
236 return 0xff & (env->sp >> 8); in avr_cpu_reg2_read()
249 env->fullacc = true; in avr_cpu_trap_write()
250 cpu_loop_exit_restore(cs, cs->mem_io_pc); in avr_cpu_trap_write()
275 env->fullacc = false; in helper_fullwr()
280 env->r[addr] = data; in helper_fullwr()
285 env->rampD = data << 16; in helper_fullwr()
290 env->rampX = data << 16; in helper_fullwr()
295 env->rampY = data << 16; in helper_fullwr()
300 env->rampZ = data << 16; in helper_fullwr()
304 env->eind = data << 16; in helper_fullwr()
307 env->sp = (env->sp & 0xff00) | data; in helper_fullwr()
311 env->sp = (env->sp & 0x00ff) | (data << 8); in helper_fullwr()