18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *  ARM execution defines
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *  Copyright (c) 2003 Fabrice Bellard
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This library is free software; you can redistribute it and/or
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * modify it under the terms of the GNU Lesser General Public
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * License as published by the Free Software Foundation; either
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * version 2 of the License, or (at your option) any later version.
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This library is distributed in the hope that it will be useful,
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Lesser General Public License for more details.
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * You should have received a copy of the GNU Lesser General Public
175285864985be9077e58e42235af6582dee72e841David 'Digit' Turner * License along with this library; if not, see <http://www.gnu.org/licenses/>.
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "config.h"
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "dyngen-exec.h"
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
220b3979707c09e058442c22d046b326ce244edda1Andrew HsiehGLOBAL_REGISTER_VARIABLE_DECL struct CPUARMState *env asm(AREG0);
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "cpu.h"
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "exec-all.h"
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void env_to_regs(void)
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void regs_to_env(void)
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int cpu_has_work(CPUState *env)
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return (env->interrupt_request &
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner            (CPU_INTERRUPT_FIQ | CPU_INTERRUPT_HARD | CPU_INTERRUPT_EXITTB));
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline int cpu_halted(CPUState *env) {
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (!env->halted)
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        return 0;
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* An interrupt wakes the CPU even if the I and F CPSR bits are
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       set.  We use EXITTB to silently wake CPU without causing an
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       actual interrupt.  */
475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (cpu_has_work(env)) {
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        env->halted = 0;
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        return 0;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return EXCP_HALTED;
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(CONFIG_USER_ONLY)
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "softmmu_exec.h"
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid raise_exception(int);
595285864985be9077e58e42235af6582dee72e841David 'Digit' Turnerstatic inline void cpu_pc_from_tb(CPUState *env, TranslationBlock *tb)
605285864985be9077e58e42235af6582dee72e841David 'Digit' Turner{
615285864985be9077e58e42235af6582dee72e841David 'Digit' Turner    env->regs[15] = tb->pc;
625285864985be9077e58e42235af6582dee72e841David 'Digit' Turner}
635285864985be9077e58e42235af6582dee72e841David 'Digit' Turner
64