Hi all.

When I decided to implement AVR 8 bit CPU support for QEMU I found this
document
<http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf>
which
listed all AVR instructions.
After that I learned that there are several CPU flavours, I looked into
this GCC file
<https://github.com/gcc-mirror/gcc/blob/master/gcc/config/avr/avr-devices.c> 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
<https://github.com/gcc-mirror/gcc/blob/master/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
| MCU   | DATASHEET URL   |
|-------|-----------------|
|ALL	|http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf										
|AVR1	|http://ww1.microchip.com/downloads/en/devicedoc/doc0838.pdf										
|AVR2	|http://ww1.microchip.com/downloads/en/DeviceDoc/DOC0839.PDF										
|AVR25	|http://ww1.microchip.com/downloads/en/DeviceDoc/doc8371.pdf										
|AVR3	|										
|AVR31	|http://ww1.microchip.com/downloads/en/DeviceDoc/doc0945.pdf										
|AVR35	|http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8303-8-bit-AVR-Microcontroller-tinyAVR-ATtiny1634_Datasheet.pdf										
|AVR4	|http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7530-Automotive-Microcontrollers-ATmega48-ATmega88-ATmega168_Datasheet.pdf										
|AVR5	|http://ww1.microchip.com/downloads/en/DeviceDoc/doc7734.pdf										
|AVR51	|http://ww1.microchip.com/downloads/en/DeviceDoc/doc2467.pdf										
|AVR6	|https://cdn.sparkfun.com/datasheets/Components/General%20IC/2549S.pdf										
|XMEGA2	|http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8069-8-and-16-bit-AVR-AMEGA-A4-Microcontrollers_Datasheet.pdf										
|XMEGA3	|http://ww1.microchip.com/downloads/en/DeviceDoc/40001911A.pdf										
|XMEGA4	|http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8068-8-and16-bit-AVR-XMEGA-A3-Microcontrollers_Datasheet.pdf										
|XMEGA5	|http://ww1.microchip.com/downloads/en/DeviceDoc/atmel-8385-8-and-16-bit-avr-microcontroller-atxmega64a1u-atxmega128a1u_datasheet.pdf										
|XMEGA6	|http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8068-8-and16-bit-AVR-XMEGA-A3-Microcontrollers_Datasheet.pdf										
|XMEGA7	|http://ww1.microchip.com/downloads/en/DeviceDoc/doc8077.pdf										
|AVRTINY	|http://ww1.microchip.com/downloads/en/DeviceDoc/atmel-8127-avr-8-bit-microcontroller-attiny4-attiny5-attiny9-attiny10_datasheet.pdf

----


| ALL | AVR1 | AVR2 | AVR25 |AVR3 | AVR31 | AVR35 | AVR4 | AVR5 | AVR6 | AVRTINY | XMEGA2 | XMAGA3 | XMAGA4 | XMAGA5 | XMAGA6 | XMAGA7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| 
|ADC	|ADC	|ADC	|ADC	|	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC	|ADC
|ADD	|ADD	|ADD	|ADD	|	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD	|ADD
|ADIW	|	|ADIW	|ADIW	|	|ADIW	|ADIW	|ADIW	|ADIW	|ADIW	|ADIW	|	|ADIW	|ADIW	|ADIW	|ADIW	|ADIW	|ADIW
|AND	|AND	|AND	|AND	|	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND	|AND
|ANDI	|ANDI	|ANDI	|ANDI	|	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI	|ANDI
|ASR	|ASR	|ASR	|ASR	|	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR	|ASR
|BCLR	|BCLR	|BCLR	|BCLR	|	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR	|BCLR
|BLD	|BLD	|BLD	|BLD	|	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD	|BLD
|BRBC	|BRBC	|BRBC	|BRBC	|	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC	|BRBC
|BRBS	|BRBS	|BRBS	|BRBS	|	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS	|BRBS
|BRCC	|BRCC	|BRCC	|BRCC	|	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC	|BRCC
|BRCS	|BRCS	|BRCS	|BRCS	|	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS	|BRCS
|BREAK	|	|	|BREAK	|	|	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK	|BREAK
|BREQ	|BREQ	|BREQ	|BREQ	|	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ	|BREQ
|BRGE	|BRGE	|BRGE	|BRGE	|	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE	|BRGE
|BRHC	|BRHC	|BRHC	|BRHC	|	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC	|BRHC
|BRHS	|BRHS	|BRHS	|BRHS	|	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS	|BRHS
|BRID	|BRID	|BRID	|BRID	|	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID	|BRID
|BRIE	|BRIE	|BRIE	|BRIE	|	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE	|BRIE
|BRLO	|BRLO	|BRLO	|BRLO	|	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO	|BRLO
|BRLT	|BRLT	|BRLT	|BRLT	|	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT	|BRLT
|BRMI	|BRMI	|BRMI	|BRMI	|	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI	|BRMI
|BRNE	|BRNE	|BRNE	|BRNE	|	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE	|BRNE
|BRPL	|BRPL	|BRPL	|BRPL	|	|BRPL	|BRPL	|BRPL	|BRPL	|BRPL	|BRPL	|BRPL	|BRPL	|	|BRPL	|BRPL	|BRPL	|BRPL
|BRSH	|BRSH	|BRSH	|BRSH	|	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH	|BRSH
|BRTC	|BRTC	|BRTC	|BRTC	|	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC	|BRTC
|BRTS	|BRTS	|BRTS	|BRTS	|	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS	|BRTS
|BRVC	|BRVC	|BRVC	|BRVC	|	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC	|BRVC
|BRVS	|BRVS	|BRVS	|BRVS	|	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS	|BRVS
|BSET	|BSET	|BSET	|BSET	|	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET	|BSET
|BST	|BST	|BST	|BST	|	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST	|BST
|CALL	|	|	|	|	|CALL	|CALL	|CALL	|CALL	|CALL	|CALL	|	|CALL	|CALL	|CALL	|CALL	|CALL	|CALL
|CBI	|CBI	|CBI	|CBI	|	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI	|CBI
|CBR	|CBR	|CBR	|CBR	|	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR	|CBR
|CLC	|CLC	|CLC	|CLC	|	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC	|CLC
|CLH	|CLH	|CLH	|CLH	|	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH	|CLH
|CLI	|CLI	|CLI	|CLI	|	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI	|CLI
|CLN	|CLN	|CLN	|CLN	|	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN	|CLN
|CLR	|CLR	|CLR	|CLR	|	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR	|CLR
|CLS	|CLS	|CLS	|CLS	|	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS	|CLS
|CLT	|CLT	|CLT	|CLT	|	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT	|CLT
|CLV	|CLV	|CLV	|CLV	|	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV	|CLV
|CLZ	|CLZ	|CLZ	|CLZ	|	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ	|CLZ
|COM	|COM	|COM	|COM	|	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM	|COM
|CP	|CP	|CP	|CP	|	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP	|CP
|CPC	|CPC	|CPC	|CPC	|	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC	|CPC
|CPI	|CPI	|CPI	|CPI	|	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI	|CPI
|CPSE	|CPSE	|CPSE	|CPSE	|	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE	|CPSE
|DEC	|DEC	|DEC	|DEC	|	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC	|DEC
|DES	|	|	|	|	|	|	|	|	|	|	|	|DES	|	|DES	|DES	|DES	|DES
|EICALL	|	|	|	|	|	|	|	|	|	|EICALL	|	|EICALL	|	|EICALL	|EICALL	|EICALL	|EICALL
|EIJMP	|	|	|	|	|	|	|	|	|	|EIJMP	|	|EIJMP	|	|EIJMP	|EIJMP	|EIJMP	|EIJMP
|EIND	|	|	|	|	|	|	|	|	|	|	|	|EIND	|	|EIND	|EIND	|EIND	|EIND
|ELPM	|	|	|	|	|ELPM	|	|	|	|ELPM	|ELPM	|	|ELPM	|	|ELPM	|ELPM	|ELPM	|ELPM
|EOR	|EOR	|EOR	|EOR	|	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR	|EOR
|FMUL	|	|	|	|	|	|	|FMUL	|FMUL	|FMUL	|FMUL	|	|FMUL	|FMUL	|FMUL	|FMUL	|FMUL	|FMUL
|FMULS	|	|	|	|	|	|	|FMULS	|FMULS	|FMULS	|FMULS	|	|FMULS	|FMULS	|FMULS	|FMULS	|FMULS	|FMULS
|FMULSU	|	|	|	|	|	|	|FMULSU	|FMULSU	|FMULSU	|FMULSU	|	|FMULSU	|FMULSU	|FMULSU	|FMULSU	|FMULSU	|FMULSU
|ICALL	|	|ICALL	|ICALL	|	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL	|ICALL
|IJMP	|	|IJMP	|IJMP	|	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP	|IJMP
|IN	|IN	|IN	|IN	|	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN	|IN
|INC	|INC	|INC	|INC	|	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC	|INC
|JMP	|	|	|	|	|JMP	|JMP	|JMP	|JMP	|JMP	|JMP	|	|JMP	|JMP	|JMP	|JMP	|JMP	|JMP
|LAC	|	|	|	|	|	|	|	|	|	|	|	|	|	|	|LAC	|	|
|LAS	|	|	|	|	|	|	|	|	|	|	|	|	|	|	|LAS	|	|
|LAT	|	|	|	|	|	|	|	|	|	|	|	|	|	|	|LAT	|	|
|LD	|LD	|LD	|LD	|	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD	|LD
|LDD	|	|LDD	|LDD	|	|LDD	|LDD	|LDD	|LDD	|LDD	|LDD	|	|LDD	|LDD	|LDD	|LDD	|LDD	|LDD
|LDI	|LDI	|LDI	|LDI	|	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI	|LDI
|LDS	|	|LDS	|LDS	|	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS	|LDS
|LPM	|	|LPM	|LPM	|	|LPM	|LPM	|LPM	|LPM	|LPM	|LPM	|	|LPM	|LPM	|LPM	|LPM	|LPM	|LPM
|LSL	|LSL	|LSL	|LSL	|	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL	|LSL
|LSR	|LSR	|LSR	|LSR	|	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR	|LSR
|MOV	|MOV	|MOV	|MOV	|	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV	|MOV
|MOVW	|	|	|MOVW	|	|	|MOVW	|MOVW	|MOVW	|MOVW	|MOVW	|	|MOVW	|MOVW	|MOVW	|MOVW	|MOVW	|MOVW
|MUL	|	|	|	|	|	|	|MUL	|MUL	|MUL	|MUL	|	|MUL	|MUL	|MUL	|MUL	|MUL	|MUL
|MULS	|	|	|	|	|	|	|MULS	|MULS	|MULS	|MULS	|	|MULS	|MULS	|MULS	|MULS	|MULS	|MULS
|MULSU	|	|	|	|	|	|	|MULSU	|MULSU	|MULSU	|MULSU	|	|MULSU	|MULSU	|MULSU	|MULSU	|MULSU	|MULSU
|NEG	|NEG	|NEG	|NEG	|	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG	|NEG
|NOP	|NOP	|NOP	|NOP	|	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP	|NOP
|OR	|OR	|OR	|OR	|	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR	|OR
|ORI	|ORI	|ORI	|ORI	|	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI	|ORI
|OUT	|OUT	|OUT	|OUT	|	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT	|OUT
|POP	|	|POP	|POP	|	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP	|POP
|PUSH	|	|PUSH	|PUSH	|	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH	|PUSH
|RCALL	|RCALL	|RCALL	|RCALL	|	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL	|RCALL
|RET	|RET	|RET	|RET	|	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET	|RET
|RETI	|RETI	|RETI	|RETI	|	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI	|RETI
|RJMP	|RJMP	|RJMP	|RJMP	|	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP	|RJMP
|ROL	|ROL	|ROL	|ROL	|	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL	|ROL
|ROR	|ROR	|ROR	|ROR	|	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR	|ROR
|SBC	|SBC	|SBC	|SBC	|	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC	|SBC
|SBCI	|SBCI	|SBCI	|SBCI	|	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI	|SBCI
|SBI	|SBI	|SBI	|SBI	|	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI	|SBI
|SBIC	|SBIC	|SBIC	|SBIC	|	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC	|SBIC
|SBIS	|SBIS	|SBIS	|SBIS	|	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS	|SBIS
|SBIW	|	|SBIW	|SBIW	|	|SBIW	|SBIW	|SBIW	|SBIW	|SBIW	|SBIW	|	|SBIW	|SBIW	|SBIW	|SBIW	|SBIW	|SBIW
|SBR	|SBR	|SBR	|SBR	|	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR	|SBR
|SBRC	|SBRC	|SBRC	|SBRC	|	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC	|SBRC
|SBRS	|SBRS	|SBRS	|SBRS	|	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS	|SBRS
|SEC	|SEC	|SEC	|SEC	|	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC	|SEC
|SEH	|SEH	|SEH	|SEH	|	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH	|SEH
|SEI	|SEI	|SEI	|SEI	|	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI	|SEI
|SEN	|SEN	|SEN	|SEN	|	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN	|SEN
|SER	|SER	|SER	|SER	|	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER	|SER
|SES	|SES	|SES	|SES	|	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES	|SES
|SET	|SET	|SET	|SET	|	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET	|SET
|SEV	|SEV	|SEV	|SEV	|	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV	|SEV
|SEZ	|SEZ	|SEZ	|SEZ	|	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ	|SEZ
|SLEEP	|SLEEP	|SLEEP	|SLEEP	|	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP	|SLEEP
|SPM	|	|	|SPM	|	|	|SPM	|SPM	|SPM	|SPM	|SPM	|	|SPM	|	|SPM	|SPM	|SPM	|SPM
|ST	|ST	|ST	|ST	|	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST	|ST
|STD	|	|STD	|STD	|	|STD	|STD	|STD	|STD	|STD	|STD	|	|STD	|STD	|STD	|STD	|STD	|STD
|STS	|	|STS	|STS	|	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS	|STS
|SUB	|SUB	|SUB	|SUB	|	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB	|SUB
|SUBI	|SUBI	|SUBI	|SUBI	|	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI	|SUBI
|SWAP	|SWAP	|SWAP	|SWAP	|	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP	|SWAP
|TST	|TST	|TST	|TST	|	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST	|TST
|WDR	|WDR	|WDR	|WDR	|	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR	|WDR
|XCH	|	|	|	|	|	|	|	|	|	|	|	|	|	|	|XCH	|	|

Reply via email to