bellard | 7a3f194 | 2003-09-30 20:36:07 +0000 | [diff] [blame] | 1 | #ifndef EXEC_SPARC_H |
| 2 | #define EXEC_SPARC_H 1 |
bellard | 3475187 | 2005-07-02 14:31:34 +0000 | [diff] [blame] | 3 | #include "config.h" |
ths | 8294eba | 2007-03-19 14:47:40 +0000 | [diff] [blame] | 4 | #include "dyngen-exec.h" |
bellard | 7a3f194 | 2003-09-30 20:36:07 +0000 | [diff] [blame] | 5 | |
| 6 | register struct CPUSPARCState *env asm(AREG0); |
bellard | 3475187 | 2005-07-02 14:31:34 +0000 | [diff] [blame] | 7 | |
bellard | e8af50a | 2004-09-30 21:55:55 +0000 | [diff] [blame] | 8 | #define DT0 (env->dt0) |
| 9 | #define DT1 (env->dt1) |
blueswir1 | 1f58732 | 2007-11-25 18:40:20 +0000 | [diff] [blame] | 10 | #define QT0 (env->qt0) |
| 11 | #define QT1 (env->qt1) |
bellard | 7a3f194 | 2003-09-30 20:36:07 +0000 | [diff] [blame] | 12 | |
| 13 | #include "cpu.h" |
| 14 | #include "exec-all.h" |
| 15 | |
bellard | 0d1a29f | 2004-10-12 22:01:28 +0000 | [diff] [blame] | 16 | static inline void env_to_regs(void) |
| 17 | { |
| 18 | } |
| 19 | |
| 20 | static inline void regs_to_env(void) |
| 21 | { |
| 22 | } |
| 23 | |
blueswir1 | 91736d3 | 2008-08-29 20:50:21 +0000 | [diff] [blame] | 24 | /* op_helper.c */ |
blueswir1 | f2bc7e7 | 2008-05-27 17:35:30 +0000 | [diff] [blame] | 25 | void do_interrupt(CPUState *env); |
bellard | 9d89330 | 2005-02-07 23:10:53 +0000 | [diff] [blame] | 26 | |
Igor Kovalenko | 5210977 | 2009-07-12 12:35:31 +0400 | [diff] [blame] | 27 | static inline int cpu_interrupts_enabled(CPUState *env1) |
| 28 | { |
| 29 | #if !defined (TARGET_SPARC64) |
| 30 | if (env1->psret != 0) |
| 31 | return 1; |
| 32 | #else |
| 33 | if (env1->pstate & PS_IE) |
| 34 | return 1; |
| 35 | #endif |
| 36 | |
| 37 | return 0; |
| 38 | } |
| 39 | |
aliguori | 6a4955a | 2009-04-24 18:03:20 +0000 | [diff] [blame] | 40 | static inline int cpu_has_work(CPUState *env1) |
| 41 | { |
| 42 | return (env1->interrupt_request & CPU_INTERRUPT_HARD) && |
Igor Kovalenko | 5210977 | 2009-07-12 12:35:31 +0400 | [diff] [blame] | 43 | cpu_interrupts_enabled(env1); |
aliguori | 6a4955a | 2009-04-24 18:03:20 +0000 | [diff] [blame] | 44 | } |
| 45 | |
| 46 | |
blueswir1 | 2254876 | 2008-05-10 10:12:00 +0000 | [diff] [blame] | 47 | static inline int cpu_halted(CPUState *env1) { |
| 48 | if (!env1->halted) |
ths | bfed01f | 2007-06-03 17:44:37 +0000 | [diff] [blame] | 49 | return 0; |
aliguori | 6a4955a | 2009-04-24 18:03:20 +0000 | [diff] [blame] | 50 | if (cpu_has_work(env1)) { |
blueswir1 | 2254876 | 2008-05-10 10:12:00 +0000 | [diff] [blame] | 51 | env1->halted = 0; |
ths | bfed01f | 2007-06-03 17:44:37 +0000 | [diff] [blame] | 52 | return 0; |
| 53 | } |
| 54 | return EXCP_HALTED; |
| 55 | } |
| 56 | |
bellard | 7a3f194 | 2003-09-30 20:36:07 +0000 | [diff] [blame] | 57 | #endif |