Hi all.

are there any action items for me?

Regards,
Michael Rolnik

On Thu, Feb 27, 2020 at 10:38 AM Michael Rolnik <mrol...@gmail.com> wrote:

> Hi all.
>
> I don't see how the fact that some MCUs have an instruction and some don't
> within same AVR family.
> Think about gnu binutils (not GCC) these utils have no idea about MCUs all
> they are aware of AVR CPU only.
> However, I don't mind removing -cpu flag.
>
> Regards,
> Michael Ronik
>
> On Fri, Feb 21, 2020 at 5:31 PM Aleksandar Markovic <
> aleksandar.m.m...@gmail.com> wrote:
>
>> On Fri, Feb 21, 2020 at 12:04 PM Michael Rolnik <mrol...@gmail.com>
>> wrote:
>> >
>> > Hi all.
>> >
>> > How is it going?
>> >
>> > Regards,
>> > Michael.
>> >
>>
>> Michael,
>>
>> I think we are very close to merging.
>>
>> There is absolutely no need to support ALL AVR mcus or AVR core types
>> in the first version that will be merged.
>>
>> But this issue (recently discovered during Jaoquin's review) about the
>> fact that an avr core type doesn't determine in a complete way the
>> instruction set of a particular MCU is thorny.
>>
>> Should we switch from "-cpu <avr core type>" to "-cpu <mcu>" (but keep
>> the current avr core type organization for internal purpose)? Or
>> something else?
>>
>> This is a high-level AVR suppot design issue. Let's think about it
>> without a rush.
>>
>> The problem is that once one organization/meaning of that switch is
>> upstreamed, it is very difficult to switch to other. There is a
>> procedural rule that deprecation process lasts at least 8 months, plus
>> there may be some technical obstacles and difficulties.
>>
>> In short, "-cpu <avr core type>" is not enough to emulate accurately a
>> givem program.
>>
>> Regards,
>> Aleksandar
>>
>> > On Mon, Feb 10, 2020 at 9:39 AM Michael Rolnik <mrol...@gmail.com>
>> wrote:
>> >>
>> >> Hi all.
>> >>
>> >> When I decided to implement AVR 8 bit CPU support for QEMU I found
>> this document which listed all AVR instructions.
>> >> After that I learned that there are several CPU flavours, I looked
>> into this GCC file to figure out what are they as I could not find any
>> official document explaining it.
>> >> Then I downloaded several datasheets and created a list of
>> instructions by CPU type (attached).It turned out that there are some
>> variations
>> >> e.g.
>> >> - AVTTINY - some have LDS, some don't
>> >> - AVR1, AVR25 - some have short SP, some don't
>> >> - AVRXMEGA2, AVRXMEGA4, AVRXMEGA5, AVRXMEGA6, AVRXMEGA7 - some have
>> RMW, some don't
>> >> - AVRXMEGA3 - some have RCALL, some don't
>> >>
>> >> I decided to leave CPU flavour definition as suggested by GCC
>> gcc/config/avr/avr-devices.c file and when a specific MCU is created it
>> will set / reset CPU features relevant to it.
>> >>
>> >> I hope this helps.
>> >>
>> >> Best Regards,
>> >> Michael Rolnik
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> On Sat, Feb 8, 2020 at 9:35 AM Aleksandar Markovic <
>> aleksandar.m.m...@gmail.com> wrote:
>> >>>
>> >>>
>> >>>
>> >>> On Sunday, February 2, 2020, Joaquin de Andres <
>> m...@xcancerberox.com.ar> wrote:
>> >>>>
>> >>>> On 1/31/20 1:02 AM, Aleksandar Markovic wrote:
>> >>>>>
>> >>>>> From: Michael Rolnik <mrol...@gmail.com>
>> >>>>>
>> >>>>> AVR core types are:
>> >>>>>
>> >>>>>    - avr1
>> >>>>>    - avr2
>> >>>>>    - avr25
>> >>>>>    - avr3
>> >>>>>    - avr31
>> >>>>>    - avr35
>> >>>>>    - avr4
>> >>>>>    - avr5
>> >>>>>    - avr51
>> >>>>>    - avr6
>> >>>>>    - avrtiny
>> >>>>>    - xmega2
>> >>>>>    - xmega3
>> >>>>>    - xmega4
>> >>>>>    - xmega5
>> >>>>>    - xmega6
>> >>>>>    - xmega7
>> >>>>>
>> >>>>> Each core type covers multiple AVR MCUs, mentioned in the comments
>> >>>>> before definition of particular AVR core type (part of this patch).
>> >>>>>
>> >>>>> AVR core type defines shared features that are valid for all AVR
>> >>>>> MCUs belonging in that type.
>> >>>>>
>> >>>>> [AM: Split a larger AVR introduction patch into logical units]
>> >>>>> Suggested-by: Aleksandar Markovic <aleksandar.m.m...@gmail.com>
>> >>>>>
>> >>>>> Co-developed-by: Michael Rolnik <mrol...@gmail.com>
>> >>>>> Co-developed-by: Sarah Harris <s.e.har...@kent.ac.uk>
>> >>>>> Signed-off-by: Michael Rolnik <mrol...@gmail.com>
>> >>>>> Signed-off-by: Sarah Harris <s.e.har...@kent.ac.uk>
>> >>>>> Signed-off-by: Michael Rolnik <mrol...@gmail.com>
>> >>>>> Acked-by: Igor Mammedov <imamm...@redhat.com>
>> >>>>> Tested-by: Philippe Mathieu-Daudé <phi...@redhat.com>
>> >>>>> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
>> >>>>> Signed-off-by: Aleksandar Markovic <aleksandar.m.m...@gmail.com>
>> >>>>> ---
>> >>>>>   target/avr/cpu.c | 601
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> >>>>>   1 file changed, 601 insertions(+)
>> >>>>>
>> >>>>> diff --git a/target/avr/cpu.c b/target/avr/cpu.c
>> >>>>> index f41a887..e0ae055 100644
>> >>>>> --- a/target/avr/cpu.c
>> >>>>> +++ b/target/avr/cpu.c
>> >>>>> @@ -215,3 +215,604 @@ static void avr_cpu_class_init(ObjectClass
>> *oc, void *data)
>> >>>>>       cc->gdb_num_core_regs = 35;
>> >>>>>       cc->gdb_core_xml_file = "avr-cpu.xml";
>> >>>>>   }
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr1
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * at90s1200, attiny11, attiny12, attiny15, attiny28
>> >>>>> + */
>> >>>>> +static void avr_avr1_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr2
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * at90s2313, at90s2323, at90s2333, at90s2343, attiny22, attiny26,
>> at90s4414,
>> >>>>> + * at90s4433, at90s4434, at90s8515, at90c8534, at90s8535
>> >>>>> + */
>> >>>>> +static void avr_avr2_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr25
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * ata5272, ata6616c, attiny13, attiny13a, attiny2313,
>> attiny2313a, attiny24,
>> >>>>> + * attiny24a, attiny4313, attiny44, attiny44a, attiny441,
>> attiny84, attiny84a,
>> >>>>> + * attiny25, attiny45, attiny85, attiny261, attiny261a, attiny461,
>> attiny461a,
>> >>>>> + * attiny861, attiny861a, attiny43u, attiny87, attiny48, attiny88,
>> attiny828,
>> >>>>> + * attiny841, at86rf401
>> >>>>> + */
>> >>>>> +static void avr_avr25_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr3
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * at43usb355, at76c711
>> >>>>> + */
>> >>>>> +static void avr_avr3_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr31
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atmega103, at43usb320
>> >>>>> + */
>> >>>>> +static void avr_avr31_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr35
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * ata5505, ata6617c, ata664251, at90usb82, at90usb162, atmega8u2,
>> atmega16u2,
>> >>>>> + * atmega32u2, attiny167, attiny1634
>> >>>>> + */
>> >>>>> +static void avr_avr35_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr4
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * ata6285, ata6286, ata6289, ata6612c, atmega8, atmega8a,
>> atmega48, atmega48a,
>> >>>>> + * atmega48p, atmega48pa, atmega48pb, atmega88, atmega88a,
>> atmega88p,
>> >>>>> + * atmega88pa, atmega88pb, atmega8515, atmega8535, atmega8hva,
>> at90pwm1,
>> >>>>> + * at90pwm2, at90pwm2b, at90pwm3, at90pwm3b, at90pwm81
>> >>>>> + */
>> >>>>> +static void avr_avr4_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr5
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * ata5702m322, ata5782, ata5790, ata5790n, ata5791, ata5795,
>> ata5831, ata6613c,
>> >>>>> + * ata6614q, ata8210, ata8510, atmega16, atmega16a, atmega161,
>> atmega162,
>> >>>>> + * atmega163, atmega164a, atmega164p, atmega164pa, atmega165,
>> atmega165a,
>> >>>>> + * atmega165p, atmega165pa, atmega168, atmega168a, atmega168p,
>> atmega168pa,
>> >>>>> + * atmega168pb, atmega169, atmega169a, atmega169p, atmega169pa,
>> atmega16hvb,
>> >>>>> + * atmega16hvbrevb, atmega16m1, atmega16u4, atmega32a, atmega32,
>> atmega323,
>> >>>>> + * atmega324a, atmega324p, atmega324pa, atmega325, atmega325a,
>> atmega325p,
>> >>>>> + * atmega325pa, atmega3250, atmega3250a, atmega3250p,
>> atmega3250pa, atmega328,
>> >>>>> + * atmega328p, atmega328pb, atmega329, atmega329a, atmega329p,
>> atmega329pa,
>> >>>>> + * atmega3290, atmega3290a, atmega3290p, atmega3290pa, atmega32c1,
>> atmega32m1,
>> >>>>> + * atmega32u4, atmega32u6, atmega406, atmega64, atmega64a,
>> atmega640, atmega644,
>> >>>>> + * atmega644a, atmega644p, atmega644pa, atmega645, atmega645a,
>> atmega645p,
>> >>>>> + * atmega6450, atmega6450a, atmega6450p, atmega649, atmega649a,
>> atmega649p,
>> >>>>> + * atmega6490, atmega16hva, atmega16hva2, atmega32hvb,
>> atmega6490a, atmega6490p,
>> >>>>> + * atmega64c1, atmega64m1, atmega64hve, atmega64hve2, atmega64rfr2,
>> >>>>> + * atmega644rfr2, atmega32hvbrevb, at90can32, at90can64,
>> at90pwm161, at90pwm216,
>> >>>>> + * at90pwm316, at90scr100, at90usb646, at90usb647, at94k, m3000
>> >>>>> + */
>> >>>>> +static void avr_avr5_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr51
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atmega128, atmega128a, atmega1280, atmega1281, atmega1284,
>> atmega1284p,
>> >>>>> + * atmega128rfa1, atmega128rfr2, atmega1284rfr2, at90can128,
>> at90usb1286,
>> >>>>> + * at90usb1287
>> >>>>> + */
>> >>>>> +static void avr_avr51_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avr6
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atmega2560, atmega2561, atmega256rfr2, atmega2564rfr2
>> >>>>> + */
>> >>>>> +static void avr_avr6_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_3_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_EIJMP_EICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type avrtiny
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * attiny4, attiny5, attiny9, attiny10, attiny20, attiny40
>> >>>>> + */
>> >>>>> +static void avr_avrtiny_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_1_BYTE_SP);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega2
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atxmega8e5, atxmega16a4, atxmega16d4, atxmega16e5, atxmega32a4,
>> atxmega32c3,
>> >>>>> + * atxmega32d3, atxmega32d4, atxmega16a4u, atxmega16c4,
>> atxmega32a4u,
>> >>>>> + * atxmega32c4, atxmega32e5
>> >>>>> + */
>> >>>>> +static void avr_xmega2_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega3
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * attiny212, attiny214, attiny412, attiny414, attiny416,
>> attiny417, attiny814,
>> >>>>> + * attiny816, attiny817, attiny1614, attiny1616, attiny1617,
>> attiny3214,
>> >>>>> + * attiny3216, attiny3217, atmega808, atmega809, atmega1608,
>> atmega1609,
>> >>>>> + * atmega3208, atmega3209, atmega4808, atmega4809
>> >>>>> + */
>> >>>>> +static void avr_xmega3_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega4
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atxmega64a3, atxmega64d3, atxmega64a3u, atxmega64a4u,
>> atxmega64b1,
>> >>>>> + * atxmega64b3, atxmega64c3, atxmega64d4
>> >>>>> + */
>> >>>>> +static void avr_xmega4_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega5
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atxmega64a1, atxmega64a1u
>> >>>>> + */
>> >>>>> +static void avr_xmega5_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPD);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPY);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega6
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atxmega128a3, atxmega128d3, atxmega192a3, atxmega192d3,
>> atxmega256a3,
>> >>>>> + * atxmega256a3b, atxmega256a3bu, atxmega256d3, atxmega128a3u,
>> atxmega128b1,
>> >>>>> + * atxmega128b3, atxmega128c3, atxmega128d4, atxmega192a3u,
>> atxmega192c3,
>> >>>>> + * atxmega256a3u, atxmega256c3, atxmega384c3, atxmega384d3
>> >>>>> + */
>> >>>>> +static void avr_xmega6_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_3_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_EIJMP_EICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +/*
>> >>>>> + * Setting features of AVR core type xmega7
>> >>>>> + * --------------------------------------
>> >>>>> + *
>> >>>>> + * This type of AVR core is present in the following AVR MCUs:
>> >>>>> + *
>> >>>>> + * atxmega128a1, atxmega128a1u, atxmega128a4u
>> >>>>> + */
>> >>>>> +static void avr_xmega7_initfn(Object *obj)
>> >>>>> +{
>> >>>>> +    AVRCPU *cpu = AVR_CPU(obj);
>> >>>>> +    CPUAVRState *env = &cpu->env;
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_IJMP_ICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ADIW_SBIW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_SRAM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_BREAK);
>> >>>>> +
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_3_BYTE_PC);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_2_BYTE_SP);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPD);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPY);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RAMPZ);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_EIJMP_EICALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_ELPM);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_JMP_CALL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_LPMX);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MOVW);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_MUL);
>> >>>>> +    set_avr_feature(env, AVR_FEATURE_RMW);
>> >>>>> +}
>> >>>>> +
>> >>>>> +typedef struct AVRCPUInfo {
>> >>>>> +    const char *name;
>> >>>>> +    void (*initfn)(Object *obj);
>> >>>>> +} AVRCPUInfo;
>> >>>>> +
>> >>>>> +
>> >>>>> +static void avr_cpu_list_entry(gpointer data, gpointer user_data)
>> >>>>> +{
>> >>>>> +    const char *typename =
>> object_class_get_name(OBJECT_CLASS(data));
>> >>>>> +
>> >>>>> +    qemu_printf("%s\n", typename);
>> >>>>> +}
>> >>>>> +
>> >>>>> +void avr_cpu_list(void)
>> >>>>> +{
>> >>>>> +    GSList *list;
>> >>>>> +    list = object_class_get_list_sorted(TYPE_AVR_CPU, false);
>> >>>>> +    g_slist_foreach(list, avr_cpu_list_entry, NULL);
>> >>>>> +    g_slist_free(list);
>> >>>>> +}
>> >>>>> +
>> >>>>> +#define DEFINE_AVR_CPU_TYPE(model, initfn) \
>> >>>>> +    { \
>> >>>>> +        .parent = TYPE_AVR_CPU, \
>> >>>>> +        .instance_init = initfn, \
>> >>>>> +        .name = AVR_CPU_TYPE_NAME(model), \
>> >>>>> +    }
>> >>>>> +
>> >>>>> +static const TypeInfo avr_cpu_type_info[] = {
>> >>>>> +    {
>> >>>>> +        .name = TYPE_AVR_CPU,
>> >>>>> +        .parent = TYPE_CPU,
>> >>>>> +        .instance_size = sizeof(AVRCPU),
>> >>>>> +        .instance_init = avr_cpu_initfn,
>> >>>>> +        .class_size = sizeof(AVRCPUClass),
>> >>>>> +        .class_init = avr_cpu_class_init,
>> >>>>> +        .abstract = true,
>> >>>>> +    },
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avrtiny", avr_avrtiny_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr1", avr_avr1_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr2", avr_avr2_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr25", avr_avr25_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr3", avr_avr3_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr31", avr_avr31_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr35", avr_avr35_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr4", avr_avr4_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr5", avr_avr5_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr51", avr_avr51_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("avr6", avr_avr6_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega2", avr_xmega2_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega3", avr_xmega3_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega4", avr_xmega4_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega5", avr_xmega5_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega6", avr_xmega6_initfn),
>> >>>>> +    DEFINE_AVR_CPU_TYPE("xmega7", avr_xmega7_initfn),
>> >>>>> +};
>> >>>>> +
>> >>>>> +const char *avr_flags_to_cpu_type(uint32_t flags, const char
>> *def_cpu_type)
>> >>>>> +{
>> >>>>> +    switch (flags & EF_AVR_MACH) {
>> >>>>> +    case bfd_mach_avr1:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr1");
>> >>>>> +    case bfd_mach_avr2:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr2");
>> >>>>> +    case bfd_mach_avr25:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr25");
>> >>>>> +    case bfd_mach_avr3:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr3");
>> >>>>> +    case bfd_mach_avr31:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr31");
>> >>>>> +    case bfd_mach_avr35:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr35");
>> >>>>> +    case bfd_mach_avr4:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr4");
>> >>>>> +    case bfd_mach_avr5:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr5");
>> >>>>> +    case bfd_mach_avr51:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr51");
>> >>>>> +    case bfd_mach_avr6:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avr6");
>> >>>>> +    case bfd_mach_avrtiny:
>> >>>>> +        return AVR_CPU_TYPE_NAME("avrtiny");
>> >>>>> +    case bfd_mach_avrxmega2:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega2");
>> >>>>> +    case bfd_mach_avrxmega3:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega3");
>> >>>>> +    case bfd_mach_avrxmega4:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega4");
>> >>>>> +    case bfd_mach_avrxmega5:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega5");
>> >>>>> +    case bfd_mach_avrxmega6:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega6");
>> >>>>> +    case bfd_mach_avrxmega7:
>> >>>>> +        return AVR_CPU_TYPE_NAME("xmega7");
>> >>>>> +    default:
>> >>>>> +        return def_cpu_type;
>> >>>>> +    }
>> >>>>> +}
>> >>>>> +
>> >>>>> +DEFINE_TYPES(avr_cpu_type_info)
>> >>>>>
>> >>>>
>> >>>> Hi! me again. Following the RC2 discussion. I've being looking in
>> the GCC definition of the architecture and as far as I can understand this
>> definitions are the generic definitions of the arch families.
>> >>>>
>> >>>>  avr_arch_types[] =
>> >>>>  {
>> >>>>    /* unknown device specified */
>> >>>>    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, NULL,
>> AVR_MMCU_DEFAULT },
>> >>>>    /*
>> >>>>      A  M  J  LM E  E  E  X  R  T  d S     FPO     S O   A
>> >>>>      S  U  M  PO L  L  I  M  A  I  a t     lMff    F ff  r
>> >>>>      M  L  P  MV P  P  J  E  M  N  t a     a s     R s   c
>> >>>>               XW M  M  M  G  P  Y  a r     s e       e   h
>> >>>>                     X  P  A  D       t     h t       t   ID   */
>> >>>>    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "1",
>>  "avr1"  },
>> >>>>    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "2",
>>  "avr2"  },
>> >>>>    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "25",
>> "avr25" },
>> >>>>    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "3",
>>  "avr3"  },
>> >>>>    { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0x0060, 0,      32, "31",
>> "avr31" },
>> >>>>    { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "35",
>> "avr35" },
>> >>>>    { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "4",
>>  "avr4"  },
>> >>>>    { 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0x0060, 0,      32, "5",
>>  "avr5"  },
>> >>>>    { 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0x0060, 0,      32, "51",
>> "avr51" },
>> >>>>    { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0x0060, 0,      32, "6",
>>  "avr6"  },
>> >>>>
>> >>>>    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0x0040, 0x4000, 0, "100",
>> "avrtiny"},
>> >>>>    { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0x2000, 0,      0, "102",
>> "avrxmega2" },
>> >>>>    { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0x2000, 0x8000, 0, "103",
>> "avrxmega3" },
>> >>>>    { 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0x2000, 0,      0, "104",
>> "avrxmega4" },
>> >>>>    { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0x2000, 0,      0, "105",
>> "avrxmega5" },
>> >>>>    { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0x2000, 0,      0, "106",
>> "avrxmega6" },
>> >>>>    { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0x2000, 0,      0, "107",
>> "avrxmega7"  }
>> >>>>  };
>> >>>>
>> >>>> And then you have features for the specific microcontrollers:
>> >>>>
>> >>>>  AVR_ISA_RMW
>> >>>>  AVR_SHORT_SP
>> >>>>  AVR_ERRATA_SKIP
>> >>>>  AVR_ISA_LDS
>> >>>>  AVR_ISA_RCALL
>> >>>>
>> >>>> They are mixed in the file 'avr-mcus.def' for family and
>> microcontroller definition. Only looking at the family definition:
>> >>>>
>> >>>>  AVR_MCU ("avr2",             ARCH_AVR2, AVR_ERRATA_SKIP, NULL,
>>         0x0060, 0x0, 0x60000, 0)
>> >>>>  AVR_MCU ("avr25",            ARCH_AVR25, AVR_ISA_NONE, NULL,
>>      0x0060, 0x0, 0x2000, 0)
>> >>>>  AVR_MCU ("avr3",             ARCH_AVR3, AVR_ISA_NONE, NULL,
>>      0x0060, 0x0, 0x6000, 0)
>> >>>>  AVR_MCU ("avr31",            ARCH_AVR31, AVR_ERRATA_SKIP, NULL,
>>          0x0060, 0x0, 0x20000, 0)
>> >>>>  AVR_MCU ("avr35",            ARCH_AVR35, AVR_ISA_NONE, NULL,
>>      0x0100, 0x0, 0x4000, 0)
>> >>>>  AVR_MCU ("avr4",             ARCH_AVR4, AVR_ISA_NONE,  NULL,
>>      0x0060, 0x0, 0x2000, 0)
>> >>>>  AVR_MCU ("avr5",             ARCH_AVR5, AVR_ISA_NONE, NULL,
>>      0x0060, 0x0, 0x4000, 0)
>> >>>>  AVR_MCU ("avr51",            ARCH_AVR51, AVR_ISA_NONE, NULL,
>>      0x0100, 0x0, 0x20000, 0)
>> >>>>  AVR_MCU ("avr6",             ARCH_AVR6, AVR_ISA_NONE, NULL,
>>      0x0200, 0x0, 0x40000, 0)
>> >>>>  AVR_MCU ("avrxmega2",        ARCH_AVRXMEGA2, AVR_ISA_NONE, NULL,
>>          0x2000, 0x0, 0x9000, 0)
>> >>>>  AVR_MCU ("avrxmega3",        ARCH_AVRXMEGA3, AVR_ISA_NONE,  NULL,
>>            0x3f00, 0x0, 0x8000, 0)
>> >>>>  AVR_MCU ("avrxmega4",        ARCH_AVRXMEGA4, AVR_ISA_NONE, NULL,
>>          0x2000, 0x0, 0x11000, 0)
>> >>>>  AVR_MCU ("avrxmega5",        ARCH_AVRXMEGA5, AVR_ISA_NONE, NULL,
>>          0x2000, 0x0, 0x11000, 0)
>> >>>>  AVR_MCU ("avrxmega6",        ARCH_AVRXMEGA6, AVR_ISA_NONE, NULL,
>>              0x2000, 0x0, 0x60000, 0)
>> >>>>  AVR_MCU ("avrxmega7",        ARCH_AVRXMEGA7, AVR_ISA_NONE, NULL,
>>              0x2000, 0x0, 0x22000, 0)
>> >>>>  AVR_MCU ("avrtiny",          ARCH_AVRTINY, AVR_ISA_NONE, NULL,
>>        0x0040, 0x0, 0x400, 0)
>> >>>>  AVR_MCU ("avr1",             ARCH_AVR1, AVR_ISA_NONE, NULL,
>>      0x0060, 0x0, 0x400, 0)
>> >>>>
>> >>>> I don't really understand how do you get to the proposed family
>> definition for qemu. Probably is my fault but if you can help me to
>> understand will be grate!
>> >>>>
>> >>>
>> >>> Michal, can you really give us more details on how this mapping is
>> done?
>> >>>
>> >>> I alredy asked a similar question a while ago, and then you said you
>> used wikipedia article + avr datasheets. Can you give us more detailed info
>> of the whole process of creating ABRFeature list for a particular AVR core
>> type, and how that compares with the corresponding content in gcc, as
>> Joakin brought to our attention?
>> >>>
>> >>> Thanks, Aleksandar
>> >>>
>> >>>
>> >>>
>> >>>>
>> >>>> Regards,
>> >>>> --joa
>> >>
>> >>
>> >>
>> >> --
>> >> Best Regards,
>> >> Michael Rolnik
>> >
>> >
>> >
>> > --
>> > Best Regards,
>> > Michael Rolnik
>>
>
>
> --
> Best Regards,
> Michael Rolnik
>


-- 
Best Regards,
Michael Rolnik

Reply via email to