summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sparc/sparc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sparc/sparc.h')
-rw-r--r--src/devices/cpu/sparc/sparc.h40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/devices/cpu/sparc/sparc.h b/src/devices/cpu/sparc/sparc.h
index 14edcd19d01..1a3351c57fe 100644
--- a/src/devices/cpu/sparc/sparc.h
+++ b/src/devices/cpu/sparc/sparc.h
@@ -54,7 +54,7 @@ public:
uint8_t get_asi() { return 0; }
uint32_t pc() { return m_pc; }
- void set_mae() override { m_mae = 1; }
+ void set_mae() override { m_mae = true; }
void add_asi_desc(std::function<void (sparc_disassembler *)> f) { m_asi_desc_adder = f; }
@@ -71,7 +71,6 @@ protected:
void execute_taddcc(uint32_t op);
void execute_sub(uint32_t op);
void execute_tsubcc(uint32_t op);
- void execute_logical(uint32_t op);
void execute_shift(uint32_t op);
void execute_mulscc(uint32_t op);
void execute_rdsr(uint32_t op);
@@ -85,7 +84,25 @@ protected:
#endif
inline void execute_group2(uint32_t op);
- void execute_load(uint32_t op);
+ inline void execute_ldd(uint32_t op);
+ inline void execute_ld(uint32_t op);
+ inline void execute_ldsh(uint32_t op);
+ inline void execute_lduh(uint32_t op);
+ inline void execute_ldsb(uint32_t op);
+ inline void execute_ldub(uint32_t op);
+ inline void execute_lddfpr(uint32_t op);
+ inline void execute_ldfpr(uint32_t op);
+ inline void execute_ldfsr(uint32_t op);
+ inline void execute_lddcpr(uint32_t op);
+ inline void execute_ldcpr(uint32_t op);
+ inline void execute_ldcsr(uint32_t op);
+ inline void execute_ldda(uint32_t op);
+ inline void execute_lda(uint32_t op);
+ inline void execute_ldsha(uint32_t op);
+ inline void execute_lduha(uint32_t op);
+ inline void execute_ldsba(uint32_t op);
+ inline void execute_lduba(uint32_t op);
+
void execute_store(uint32_t op);
void execute_ldstub(uint32_t op);
#if SPARCV8
@@ -93,8 +110,21 @@ protected:
#endif
inline void execute_group3(uint32_t op);
+ enum set_cc
+ {
+ NOCC = 0,
+ USECC
+ };
+
+ template <set_cc SETCC> void execute_and(const uint32_t op);
+ template <set_cc SETCC> void execute_or(const uint32_t op);
+ template <set_cc SETCC> void execute_xor(const uint32_t op);
+ template <set_cc SETCC> void execute_andn(const uint32_t op);
+ template <set_cc SETCC> void execute_orn(const uint32_t op);
+ template <set_cc SETCC> void execute_xnor(const uint32_t op);
+
bool evaluate_condition(uint32_t op);
- void execute_bicc(uint32_t op);
+ inline void execute_bicc(uint32_t op);
void execute_ticc(uint32_t op);
void select_trap();
void execute_trap();
@@ -216,7 +246,7 @@ protected:
bool m_privileged_asr[32];
bool m_illegal_instruction_asr[32];
bool m_mae;
- bool m_annul;
+ bool m_no_annul;
bool m_hold_bus;
int m_icount;
int m_stashed_icount;