target/avr: Introduce enumeration AVRFeature

This patch introduces enumeration "AVRFeature" that will be
used for defining various AVR core types.

[AM: Split a larger AVR introduction patch into logical units]
Suggested-by: Aleksandar Markovic <aleksandar.m.mail@gmail.com>
Co-developed-by: Michael Rolnik <mrolnik@gmail.com>
Co-developed-by: Sarah Harris <S.E.Harris@kent.ac.uk>
Signed-off-by: Michael Rolnik <mrolnik@gmail.com>
Signed-off-by: Sarah Harris <S.E.Harris@kent.ac.uk>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Aleksandar Markovic <aleksandar.m.mail@gmail.com>
Acked-by: Igor Mammedov <imammedo@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Thomas Huth <huth@tuxfamily.org>
Message-Id: <20200705140315.260514-8-huth@tuxfamily.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
Michael Rolnik 2020-01-26 19:32:33 +01:00 committed by Philippe Mathieu-Daudé
parent 12b3540547
commit 25a08409ab

View file

@ -72,6 +72,42 @@
*/
#define OFFSET_IO_REGISTERS (OFFSET_DATA + NUMBER_OF_CPU_REGISTERS)
typedef enum AVRFeature {
AVR_FEATURE_SRAM,
AVR_FEATURE_1_BYTE_PC,
AVR_FEATURE_2_BYTE_PC,
AVR_FEATURE_3_BYTE_PC,
AVR_FEATURE_1_BYTE_SP,
AVR_FEATURE_2_BYTE_SP,
AVR_FEATURE_BREAK,
AVR_FEATURE_DES,
AVR_FEATURE_RMW, /* Read Modify Write - XCH LAC LAS LAT */
AVR_FEATURE_EIJMP_EICALL,
AVR_FEATURE_IJMP_ICALL,
AVR_FEATURE_JMP_CALL,
AVR_FEATURE_ADIW_SBIW,
AVR_FEATURE_SPM,
AVR_FEATURE_SPMX,
AVR_FEATURE_ELPMX,
AVR_FEATURE_ELPM,
AVR_FEATURE_LPMX,
AVR_FEATURE_LPM,
AVR_FEATURE_MOVW,
AVR_FEATURE_MUL,
AVR_FEATURE_RAMPD,
AVR_FEATURE_RAMPX,
AVR_FEATURE_RAMPY,
AVR_FEATURE_RAMPZ,
} AVRFeature;
typedef struct CPUAVRState CPUAVRState;
struct CPUAVRState {
@ -126,6 +162,16 @@ hwaddr avr_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
int avr_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
int avr_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
static inline int avr_feature(CPUAVRState *env, AVRFeature feature)
{
return (env->features & (1U << feature)) != 0;
}
static inline void set_avr_feature(CPUAVRState *env, int feature)
{
env->features |= (1U << feature);
}
#define cpu_list avr_cpu_list
#define cpu_signal_handler cpu_avr_signal_handler
#define cpu_mmu_index avr_cpu_mmu_index