diff options
author | Fabien Chouteau <chouteau@adacore.com> | 2011-01-24 12:56:56 +0100 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2011-01-24 20:54:34 +0000 |
commit | 4a2ba232843ac4197c586c1f0f0adbb1eb02fe34 (patch) | |
tree | d24803cef3f9de4140d0b7f599a44675e68e468a /target-sparc | |
parent | b04d98905400aeb7dd62ce938d7eecddf2816817 (diff) | |
download | hqemu-4a2ba232843ac4197c586c1f0f0adbb1eb02fe34.zip hqemu-4a2ba232843ac4197c586c1f0f0adbb1eb02fe34.tar.gz |
SPARC: Add asr17 register support
This register is activated by CPU_FEATURE_ASR17 in the feature field.
Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'target-sparc')
-rw-r--r-- | target-sparc/cpu.h | 1 | ||||
-rw-r--r-- | target-sparc/helper.c | 3 | ||||
-rw-r--r-- | target-sparc/translate.c | 11 |
3 files changed, 14 insertions, 1 deletions
diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h index 5c50d9e..6f5990b 100644 --- a/target-sparc/cpu.h +++ b/target-sparc/cpu.h @@ -267,6 +267,7 @@ typedef struct sparc_def_t { #define CPU_FEATURE_CMT (1 << 12) #define CPU_FEATURE_GL (1 << 13) #define CPU_FEATURE_TA0_SHUTDOWN (1 << 14) /* Shutdown on "ta 0x0" */ +#define CPU_FEATURE_ASR17 (1 << 15) #ifndef TARGET_SPARC64 #define CPU_DEFAULT_FEATURES (CPU_FEATURE_FLOAT | CPU_FEATURE_SWAP | \ CPU_FEATURE_MUL | CPU_FEATURE_DIV | \ diff --git a/target-sparc/helper.c b/target-sparc/helper.c index ec6ac27..2f3d1e6 100644 --- a/target-sparc/helper.c +++ b/target-sparc/helper.c @@ -1288,7 +1288,8 @@ static const sparc_def_t sparc_defs[] = { .mmu_sfsr_mask = 0xffffffff, .mmu_trcr_mask = 0xffffffff, .nwindows = 8, - .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN, + .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_TA0_SHUTDOWN | + CPU_FEATURE_ASR17, }, #endif }; diff --git a/target-sparc/translate.c b/target-sparc/translate.c index dff0f19..e26462e 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -2067,6 +2067,17 @@ static void disas_sparc_insn(DisasContext * dc) case 0x10 ... 0x1f: /* implementation-dependent in the SPARCv8 manual, rdy on the microSPARC II */ + /* Read Asr17 */ + if (rs1 == 0x11 && dc->def->features & CPU_FEATURE_ASR17) { + TCGv r_const; + + /* Read Asr17 for a Leon3 monoprocessor */ + r_const = tcg_const_tl((1 << 8) + | (dc->def->nwindows - 1)); + gen_movl_TN_reg(rd, r_const); + tcg_temp_free(r_const); + break; + } #endif gen_movl_TN_reg(rd, cpu_y); break; |