NAME=AVR: aeso on call
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
e asm.bits=8
wx 0xf8 0x94 0x08 0xe0 0x0e 0xbf 0x0f 0xe5 0x0d 0xbf 0x0e 0x94 0x08 0x00 0x88 0x95 0x08 0x95
aei
aeim 0x00000100 0xffff avr_ram
6aeso
ar pc
ar pc = 0
7aes
ar pc
EOF
EXPECT=<<EOF
pc = 0x0000000e
pc = 0x0000000e
EOF
RUN

# des tests are checked against Microchip's AVR Simulator emulating ATxmega128A1
NAME=AVR: des encrypt
FILE=malloc://1024
CMDS=<<EOF
(regs ;ar 8~:0..16) # show regs r0-r15
e asm.arch=avr
wx 0b941b942b943b944b945b946b947b948b949b94ab94bb94cb94db94eb94fb94
ar r0 = 0x41
ar r1 = 0x20
ar r2 = 0x52
ar r3 = 0x69
ar r4 = 0x76
ar r5 = 0x61
ar r6 = 0x6c
ar r7 = 0x20
ar r8 = 0x41
ar r9 = 0x70
ar r10 = 0x70
ar r11 = 0x65
ar r12 = 0x61
ar r13 = 0x72
ar r14 = 0x73
ar r15 = 0x21
.(regs)
aei
?e -- round 0; aes; .(regs)
?e -- round 1; aes; .(regs)
?e -- round 2; aes; .(regs)
?e -- round 3; aes; .(regs)
?e -- round 4; aes; .(regs)
?e -- round 5; aes; .(regs)
?e -- round 6; aes; .(regs)
?e -- round 7; aes; .(regs)
?e -- round 8; aes; .(regs)
?e -- round 9; aes; .(regs)
?e -- round 10; aes; .(regs)
?e -- round 11; aes; .(regs)
?e -- round 12; aes; .(regs)
?e -- round 13; aes; .(regs)
?e -- round 14; aes; .(regs)
?e -- round 15; aes; .(regs)
ar pcl
EOF
EXPECT=<<EOF
r0 = 0x00000041
r1 = 0x00000020
r2 = 0x00000052
r3 = 0x00000069
r4 = 0x00000076
r5 = 0x00000061
r6 = 0x0000006c
r7 = 0x00000020
r8 = 0x00000041
r9 = 0x00000070
r10 = 0x00000070
r11 = 0x00000065
r12 = 0x00000061
r13 = 0x00000072
r14 = 0x00000073
r15 = 0x00000021
-- round 0
r0 = 0x00000000
r1 = 0x00000018
r2 = 0x000000a9
r3 = 0x000000bc
r4 = 0x0000001b
r5 = 0x00000010
r6 = 0x00000036
r7 = 0x0000001a
r8 = 0x00000071
r9 = 0x00000070
r10 = 0x00000064
r11 = 0x00000061
r12 = 0x00000073
r13 = 0x00000072
r14 = 0x00000021
r15 = 0x00000081
-- round 1
r0 = 0x00000022
r1 = 0x00000004
r2 = 0x0000007e
r3 = 0x0000007c
r4 = 0x0000008d
r5 = 0x00000080
r6 = 0x00000091
r7 = 0x00000025
r8 = 0x00000071
r9 = 0x00000064
r10 = 0x00000060
r11 = 0x00000063
r12 = 0x00000073
r13 = 0x00000020
r14 = 0x00000081
r15 = 0x000000e9
-- round 2
r0 = 0x00000091
r1 = 0x00000000
r2 = 0x0000003d
r3 = 0x000000b4
r4 = 0x000000e6
r5 = 0x00000060
r6 = 0x000000c8
r7 = 0x00000098
r8 = 0x00000061
r9 = 0x00000062
r10 = 0x00000062
r11 = 0x00000021
r12 = 0x00000081
r13 = 0x000000e8
r14 = 0x000000e9
r15 = 0x000000c3
-- round 3
r0 = 0x00000062
r1 = 0x00000022
r2 = 0x0000001c
r3 = 0x0000005a
r4 = 0x000000f1
r5 = 0x0000003a
r6 = 0x00000046
r7 = 0x0000004e
r8 = 0x00000063
r9 = 0x00000020
r10 = 0x00000080
r11 = 0x000000e9
r12 = 0x000000e9
r13 = 0x000000c2
r14 = 0x000000c1
r15 = 0x000000d1
-- round 4
r0 = 0x0000003b
r1 = 0x00000091
r2 = 0x00000026
r3 = 0x00000085
r4 = 0x000000f0
r5 = 0x00000035
r6 = 0x00000003
r7 = 0x0000008d
r8 = 0x00000081
r9 = 0x000000e8
r10 = 0x000000e8
r11 = 0x000000c3
r12 = 0x000000c1
r13 = 0x000000d0
r14 = 0x000000d1
r15 = 0x00000041
-- round 5
r0 = 0x0000009d
r1 = 0x0000006a
r2 = 0x00000019
r3 = 0x000000ea
r4 = 0x00000072
r5 = 0x000000ba
r6 = 0x00000089
r7 = 0x0000006e
r8 = 0x000000e9
r9 = 0x000000c2
r10 = 0x000000d0
r11 = 0x000000d1
r12 = 0x000000d1
r13 = 0x00000040
r14 = 0x00000001
r15 = 0x000000cd
-- round 6
r0 = 0x00000064
r1 = 0x000000b5
r2 = 0x0000002e
r3 = 0x000000ff
r4 = 0x0000009b
r5 = 0x0000005f
r6 = 0x000000c4
r7 = 0x00000015
r8 = 0x000000d1
r9 = 0x000000d0
r10 = 0x000000d0
r11 = 0x00000051
r12 = 0x00000001
r13 = 0x000000cc
r14 = 0x000000cd
r15 = 0x00000091
-- round 7
r0 = 0x000000ba
r1 = 0x0000005a
r2 = 0x00000097
r3 = 0x0000005f
r4 = 0x000000ef
r5 = 0x0000008f
r6 = 0x000000e2
r7 = 0x00000008
r8 = 0x000000d1
r9 = 0x00000050
r10 = 0x00000010
r11 = 0x000000dd
r12 = 0x000000cd
r13 = 0x00000090
r14 = 0x000000a1
r15 = 0x000000a1
-- round 8
r0 = 0x0000007f
r1 = 0x0000002d
r2 = 0x000000e9
r3 = 0x0000002f
r4 = 0x000000df
r5 = 0x000000cd
r6 = 0x000000f3
r7 = 0x00000026
r8 = 0x00000051
r9 = 0x00000010
r10 = 0x000000dc
r11 = 0x000000dd
r12 = 0x00000091
r13 = 0x000000a0
r14 = 0x000000a1
r15 = 0x000000a1
-- round 9
r0 = 0x0000003f
r1 = 0x00000096
r2 = 0x000000dc
r3 = 0x0000001f
r4 = 0x0000006f
r5 = 0x00000066
r6 = 0x00000051
r7 = 0x00000039
r8 = 0x000000dd
r9 = 0x000000dc
r10 = 0x00000080
r11 = 0x000000a1
r12 = 0x000000a1
r13 = 0x000000a0
r14 = 0x000000a9
r15 = 0x00000021
-- round 10
r0 = 0x000000bf
r1 = 0x000000c9
r2 = 0x0000004e
r3 = 0x000000ad
r4 = 0x00000095
r5 = 0x00000099
r6 = 0x0000002a
r7 = 0x00000094
r8 = 0x00000081
r9 = 0x000000a0
r10 = 0x000000b0
r11 = 0x000000b1
r12 = 0x000000a9
r13 = 0x00000020
r14 = 0x000000a7
r15 = 0x000000a7
-- round 11
r0 = 0x0000007f
r1 = 0x000000c6
r2 = 0x000000af
r3 = 0x000000fe
r4 = 0x0000004a
r5 = 0x000000ee
r6 = 0x000000bd
r7 = 0x00000040
r8 = 0x000000b1
r9 = 0x000000b0
r10 = 0x000000b8
r11 = 0x00000031
r12 = 0x000000a7
r13 = 0x000000a6
r14 = 0x00000001
r15 = 0x00000041
-- round 12
r0 = 0x0000003d
r1 = 0x000000c3
r2 = 0x00000057
r3 = 0x00000055
r4 = 0x0000008d
r5 = 0x0000007d
r6 = 0x00000054
r7 = 0x000000aa
r8 = 0x000000b9
r9 = 0x00000030
r10 = 0x000000b6
r11 = 0x000000b7
r12 = 0x00000001
r13 = 0x00000040
r14 = 0x00000061
r15 = 0x00000061
-- round 13
r0 = 0x0000001e
r1 = 0x00000061
r2 = 0x000000a1
r3 = 0x00000008
r4 = 0x000000c4
r5 = 0x000000b6
r6 = 0x00000028
r7 = 0x00000075
r8 = 0x000000b7
r9 = 0x000000b6
r10 = 0x00000010
r11 = 0x00000041
r12 = 0x00000061
r13 = 0x00000060
r14 = 0x00000065
r15 = 0x00000061
-- round 14
r0 = 0x000000a5
r1 = 0x000000ba
r2 = 0x00000072
r3 = 0x00000006
r4 = 0x00000060
r5 = 0x0000007b
r6 = 0x000000b4
r7 = 0x000000b8
r8 = 0x00000011
r9 = 0x00000040
r10 = 0x00000070
r11 = 0x00000071
r12 = 0x00000065
r13 = 0x00000060
r14 = 0x00000073
r15 = 0x00000073
-- round 15
r0 = 0x000000f5
r1 = 0x000000fe
r2 = 0x00000027
r3 = 0x00000016
r4 = 0x00000061
r5 = 0x0000003f
r6 = 0x000000f5
r7 = 0x000000bc
r8 = 0x00000041
r9 = 0x00000070
r10 = 0x00000070
r11 = 0x00000065
r12 = 0x00000061
r13 = 0x00000072
r14 = 0x00000073
r15 = 0x00000021
pcl = 0x00000020
EOF
RUN

NAME=AVR: des decrypt
FILE=malloc://1024
CMDS=<<EOF
(regs ;ar 8~:0..16) # show regs r0-r15
e asm.arch=avr
wx 58940b941b942b943b944b945b946b947b948b949b94ab94bb94cb94db94eb94fb94
ar r0 = 0xf5
ar r1 = 0xfe
ar r2 = 0x27
ar r3 = 0x16
ar r4 = 0x61
ar r5 = 0x3f
ar r6 = 0xf5
ar r7 = 0xbc
ar r8 = 0x41
ar r9 = 0x70
ar r10 = 0x70
ar r11 = 0x65
ar r12 = 0x61
ar r13 = 0x72
ar r14 = 0x73
ar r15 = 0x21
.(regs)
aei
aes
?e decrypt?; ar hf
?e -- round 0; aes; .(regs)
?e -- round 1; aes; .(regs)
?e -- round 2; aes; .(regs)
?e -- round 3; aes; .(regs)
?e -- round 4; aes; .(regs)
?e -- round 5; aes; .(regs)
?e -- round 6; aes; .(regs)
?e -- round 7; aes; .(regs)
?e -- round 8; aes; .(regs)
?e -- round 9; aes; .(regs)
?e -- round 10; aes; .(regs)
?e -- round 11; aes; .(regs)
?e -- round 12; aes; .(regs)
?e -- round 13; aes; .(regs)
?e -- round 14; aes; .(regs)
?e -- round 15; aes; .(regs)
ar pcl
arb~[5-]~:0
EOF
EXPECT=<<EOF
r0 = 0x000000f5
r1 = 0x000000fe
r2 = 0x00000027
r3 = 0x00000016
r4 = 0x00000061
r5 = 0x0000003f
r6 = 0x000000f5
r7 = 0x000000bc
r8 = 0x00000041
r9 = 0x00000070
r10 = 0x00000070
r11 = 0x00000065
r12 = 0x00000061
r13 = 0x00000072
r14 = 0x00000073
r15 = 0x00000021
decrypt?
hf = 0x00000001
-- round 0
r0 = 0x0000005a
r1 = 0x00000075
r2 = 0x000000b1
r3 = 0x00000009
r4 = 0x00000090
r5 = 0x000000b7
r6 = 0x00000078
r7 = 0x00000074
r8 = 0x00000011
r9 = 0x00000040
r10 = 0x00000070
r11 = 0x00000071
r12 = 0x00000065
r13 = 0x00000060
r14 = 0x00000073
r15 = 0x00000073
-- round 1
r0 = 0x0000002d
r1 = 0x00000092
r2 = 0x00000052
r3 = 0x00000004
r4 = 0x000000c8
r5 = 0x00000079
r6 = 0x00000014
r7 = 0x000000ba
r8 = 0x000000b7
r9 = 0x000000b6
r10 = 0x00000010
r11 = 0x00000041
r12 = 0x00000061
r13 = 0x00000060
r14 = 0x00000065
r15 = 0x00000061
-- round 2
r0 = 0x0000003e
r1 = 0x000000c3
r2 = 0x000000ab
r3 = 0x000000aa
r4 = 0x0000004e
r5 = 0x000000be
r6 = 0x000000a8
r7 = 0x00000055
r8 = 0x000000b9
r9 = 0x00000030
r10 = 0x000000b6
r11 = 0x000000b7
r12 = 0x00000001
r13 = 0x00000040
r14 = 0x00000061
r15 = 0x00000061
-- round 3
r0 = 0x000000bf
r1 = 0x000000c9
r2 = 0x0000005f
r3 = 0x000000fd
r4 = 0x00000085
r5 = 0x000000dd
r6 = 0x0000007e
r7 = 0x00000080
r8 = 0x000000b1
r9 = 0x000000b0
r10 = 0x000000b8
r11 = 0x00000031
r12 = 0x000000a7
r13 = 0x000000a6
r14 = 0x00000001
r15 = 0x00000041
-- round 4
r0 = 0x0000007f
r1 = 0x000000c6
r2 = 0x0000008d
r3 = 0x0000005e
r4 = 0x0000006a
r5 = 0x00000066
r6 = 0x00000015
r7 = 0x00000068
r8 = 0x00000081
r9 = 0x000000a0
r10 = 0x000000b0
r11 = 0x000000b1
r12 = 0x000000a9
r13 = 0x00000020
r14 = 0x000000a7
r15 = 0x000000a7
-- round 5
r0 = 0x0000003f
r1 = 0x00000069
r2 = 0x000000ec
r3 = 0x0000002f
r4 = 0x0000009f
r5 = 0x00000099
r6 = 0x000000a2
r7 = 0x00000036
r8 = 0x000000dd
r9 = 0x000000dc
r10 = 0x00000080
r11 = 0x000000a1
r12 = 0x000000a1
r13 = 0x000000a0
r14 = 0x000000a9
r15 = 0x00000021
-- round 6
r0 = 0x000000bf
r1 = 0x0000001e
r2 = 0x000000d6
r3 = 0x0000001f
r4 = 0x000000ef
r5 = 0x000000ce
r6 = 0x000000f3
r7 = 0x00000019
r8 = 0x00000051
r9 = 0x00000010
r10 = 0x000000dc
r11 = 0x000000dd
r12 = 0x00000091
r13 = 0x000000a0
r14 = 0x000000a1
r15 = 0x000000a1
-- round 7
r0 = 0x00000075
r1 = 0x000000a5
r2 = 0x0000006b
r3 = 0x000000af
r4 = 0x000000df
r5 = 0x0000004f
r6 = 0x000000d1
r7 = 0x00000004
r8 = 0x000000d1
r9 = 0x00000050
r10 = 0x00000010
r11 = 0x000000dd
r12 = 0x000000cd
r13 = 0x00000090
r14 = 0x000000a1
r15 = 0x000000a1
-- round 8
r0 = 0x00000098
r1 = 0x0000007a
r2 = 0x0000001d
r3 = 0x000000ff
r4 = 0x00000067
r5 = 0x000000af
r6 = 0x000000c8
r7 = 0x0000002a
r8 = 0x000000d1
r9 = 0x000000d0
r10 = 0x000000d0
r11 = 0x00000051
r12 = 0x00000001
r13 = 0x000000cc
r14 = 0x000000cd
r15 = 0x00000091
-- round 9
r0 = 0x0000006e
r1 = 0x00000095
r2 = 0x00000026
r3 = 0x000000d5
r4 = 0x000000b1
r5 = 0x00000075
r6 = 0x00000046
r7 = 0x0000009d
r8 = 0x000000e9
r9 = 0x000000c2
r10 = 0x000000d0
r11 = 0x000000d1
r12 = 0x000000d1
r13 = 0x00000040
r14 = 0x00000001
r15 = 0x000000cd
-- round 10
r0 = 0x00000037
r1 = 0x00000062
r2 = 0x00000019
r3 = 0x0000004a
r4 = 0x000000f0
r5 = 0x0000003a
r6 = 0x00000003
r7 = 0x0000004e
r8 = 0x00000081
r9 = 0x000000e8
r10 = 0x000000e8
r11 = 0x000000c3
r12 = 0x000000c1
r13 = 0x000000d0
r14 = 0x000000d1
r15 = 0x00000041
-- round 11
r0 = 0x00000091
r1 = 0x00000011
r2 = 0x0000002c
r3 = 0x000000a5
r4 = 0x000000f2
r5 = 0x00000035
r6 = 0x00000089
r7 = 0x0000008d
r8 = 0x00000063
r9 = 0x00000020
r10 = 0x00000080
r11 = 0x000000e9
r12 = 0x000000e9
r13 = 0x000000c2
r14 = 0x000000c1
r15 = 0x000000d1
-- round 12
r0 = 0x00000062
r1 = 0x00000000
r2 = 0x0000003e
r3 = 0x00000078
r4 = 0x000000d9
r5 = 0x00000090
r6 = 0x000000c4
r7 = 0x00000064
r8 = 0x00000061
r9 = 0x00000062
r10 = 0x00000062
r11 = 0x00000021
r12 = 0x00000081
r13 = 0x000000e8
r14 = 0x000000e9
r15 = 0x000000c3
-- round 13
r0 = 0x00000011
r1 = 0x00000008
r2 = 0x000000bd
r3 = 0x000000bc
r4 = 0x0000004e
r5 = 0x00000040
r6 = 0x00000062
r7 = 0x0000001a
r8 = 0x00000071
r9 = 0x00000064
r10 = 0x00000060
r11 = 0x00000063
r12 = 0x00000073
r13 = 0x00000020
r14 = 0x00000081
r15 = 0x000000e9
-- round 14
r0 = 0x00000000
r1 = 0x00000024
r2 = 0x00000056
r3 = 0x0000007c
r4 = 0x00000027
r5 = 0x00000020
r6 = 0x00000039
r7 = 0x00000025
r8 = 0x00000071
r9 = 0x00000070
r10 = 0x00000064
r11 = 0x00000061
r12 = 0x00000073
r13 = 0x00000072
r14 = 0x00000021
r15 = 0x00000081
-- round 15
r0 = 0x00000041
r1 = 0x00000020
r2 = 0x00000052
r3 = 0x00000069
r4 = 0x00000076
r5 = 0x00000061
r6 = 0x0000006c
r7 = 0x00000020
r8 = 0x00000041
r9 = 0x00000070
r10 = 0x00000070
r11 = 0x00000065
r12 = 0x00000061
r13 = 0x00000072
r14 = 0x00000073
r15 = 0x00000021
pcl = 0x00000022

EOF
RUN

NAME=AVR: mul
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 019f
aei
(mul x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(mul 42 13)
.(mul 0xff 0xff)
.(mul 0 42)
.(mul 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000022
r1
r1 = 0x00000002
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000001
r1
r1 = 0x000000fe
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000001
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000008
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000000
EOF
RUN

NAME=AVR: muls
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0102
aei
(muls x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(muls 42 13)
.(muls 0xff 0xff)
.(muls 0 42)
.(muls 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000022
r1
r1 = 0x00000002
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000001
r1
r1 = 0x00000000
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000000
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x000000f8
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000001
EOF
RUN

NAME=AVR: mulsu
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0103
aei
(mulsu x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(mulsu 42 13)
.(mulsu 0xff 0xff)
.(mulsu 0 42)
.(mulsu 0x10 0x80)
.(mulsu 13 42)
.(mulsu 42 0)
.(mulsu 0x80 0x10)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000022
r1
r1 = 0x00000002
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000001
r1
r1 = 0x000000ff
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000001
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000008
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000000
======== 13 * 42 ========
r0
r0 = 0x00000022
r1
r1 = 0x00000002
r16
r16 = 0x0000000d
r17
r17 = 0x0000002a
sreg
sreg = 0x00000000
======== 42 * 0 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x0000002a
r17
r17 = 0x00000000
sreg
sreg = 0x00000002
======== 0x80 * 0x10 ========
r0
r0 = 0x00000000
r1
r1 = 0x000000f8
r16
r16 = 0x00000080
r17
r17 = 0x00000010
sreg
sreg = 0x00000001
EOF
RUN

NAME=AVR: fmul
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0903
aei
(fmul x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(fmul 42 13)
.(fmul 0xff 0xff)
.(fmul 0 42)
.(fmul 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000044
r1
r1 = 0x00000004
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000002
r1
r1 = 0x000000fc
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000001
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000010
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000000
EOF
RUN

NAME=AVR: fmuls
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 8103
aei
(fmuls x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(fmuls 42 13)
.(fmuls 0xff 0xff)
.(fmuls 0 42)
.(fmuls 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000044
r1
r1 = 0x00000004
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000002
r1
r1 = 0x00000000
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000000
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x000000f0
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000001
EOF
RUN

NAME=AVR: fmulsu
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 8903
aei
(fmulsu x y; ?e ======== $0 * $1 ========; ar r16 = $0; ar r17 = $1; ar pc = 0; aes; ?e r0; ar r0; ?e r1; ar r1; ?e r16; ar r16; ?e r17; ar r17; ?e sreg; ar sreg)
.(fmulsu 42 13)
.(fmulsu 0xff 0xff)
.(fmulsu 0 42)
.(fmulsu 0x10 0x80)
.(fmulsu 13 42)
.(fmulsu 42 0)
.(fmulsu 0x80 0x10)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x00000044
r1
r1 = 0x00000004
r16
r16 = 0x0000002a
r17
r17 = 0x0000000d
sreg
sreg = 0x00000000
======== 0xff * 0xff ========
r0
r0 = 0x00000002
r1
r1 = 0x000000fe
r16
r16 = 0x000000ff
r17
r17 = 0x000000ff
sreg
sreg = 0x00000001
======== 0 * 42 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x00000000
r17
r17 = 0x0000002a
sreg
sreg = 0x00000002
======== 0x10 * 0x80 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000010
r16
r16 = 0x00000010
r17
r17 = 0x00000080
sreg
sreg = 0x00000000
======== 13 * 42 ========
r0
r0 = 0x00000044
r1
r1 = 0x00000004
r16
r16 = 0x0000000d
r17
r17 = 0x0000002a
sreg
sreg = 0x00000000
======== 42 * 0 ========
r0
r0 = 0x00000000
r1
r1 = 0x00000000
r16
r16 = 0x0000002a
r17
r17 = 0x00000000
sreg
sreg = 0x00000002
======== 0x80 * 0x10 ========
r0
r0 = 0x00000000
r1
r1 = 0x000000f0
r16
r16 = 0x00000080
r17
r17 = 0x00000010
sreg
sreg = 0x00000001
EOF
RUN

NAME=AVR: adiw
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
aei
(adiw h l x; ?e ======== $0:$1 + $2 ========; wa "adiw r27:r26, $2"; pi 1; ar r27 = $0; ar r26 = $1; ar pc = 0; aes; ?e r26; ar r26; ?e r27; ar r27; ?e sreg; ar sreg)
.(adiw 0xca 0xfe 0x3f)
.(adiw 0x0a 0xfe 0x3f)
.(adiw 0xff 0xff 0x01)
.(adiw 0x77 0x7e 0x03)
.(adiw 0x7f 0xfe 0x03)
.(adiw 0x80 0x00 0x01)
.(adiw 0x00 0x00 0x00)
EOF
EXPECT=<<EOF
======== 0xca:0xfe + 0x3f ========
adiw r27:r26, 0x3f
r26
r26 = 0x0000003d
r27
r27 = 0x000000cb
sreg
sreg = 0x00000014
======== 0x0a:0xfe + 0x3f ========
adiw r27:r26, 0x3f
r26
r26 = 0x0000003d
r27
r27 = 0x0000000b
sreg
sreg = 0x00000000
======== 0xff:0xff + 0x01 ========
adiw r27:r26, 0x01
r26
r26 = 0x00000000
r27
r27 = 0x00000000
sreg
sreg = 0x00000003
======== 0x77:0x7e + 0x03 ========
adiw r27:r26, 0x03
r26
r26 = 0x00000081
r27
r27 = 0x00000077
sreg
sreg = 0x00000000
======== 0x7f:0xfe + 0x03 ========
adiw r27:r26, 0x03
r26
r26 = 0x00000001
r27
r27 = 0x00000080
sreg
sreg = 0x0000000c
======== 0x80:0x00 + 0x01 ========
adiw r27:r26, 0x01
r26
r26 = 0x00000001
r27
r27 = 0x00000080
sreg
sreg = 0x00000014
======== 0x00:0x00 + 0x00 ========
adiw r27:r26, 0x00
r26
r26 = 0x00000000
r27
r27 = 0x00000000
sreg
sreg = 0x00000002
EOF
RUN

NAME=AVR: sbiw
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
aei
(sbiw h l x; ?e ======== $0:$1 - $2 ========; wa "sbiw r27:r26, $2"; pi 1; ar r27 = $0; ar r26 = $1; ar pc = 0; aes; ?e r26; ar r26; ?e r27; ar r27; ?e sreg; ar sreg)
.(sbiw 0xca 0x21 0x3f)
.(sbiw 0x00 0x10 0x3f)
.(sbiw 0x80 0x00 0x01)
.(sbiw 0x80 0x05 0x01)
.(sbiw 0x00 0x02 0x03)
.(sbiw 0x00 0x12 0x12)
EOF
EXPECT=<<EOF
======== 0xca:0x21 - 0x3f ========
sbiw r27:r26, 0x3f
r26
r26 = 0x000000e2
r27
r27 = 0x000000c9
sreg
sreg = 0x00000014
======== 0x00:0x10 - 0x3f ========
sbiw r27:r26, 0x3f
r26
r26 = 0x000000d1
r27
r27 = 0x000000ff
sreg
sreg = 0x00000015
======== 0x80:0x00 - 0x01 ========
sbiw r27:r26, 0x01
r26
r26 = 0x000000ff
r27
r27 = 0x0000007f
sreg
sreg = 0x00000018
======== 0x80:0x05 - 0x01 ========
sbiw r27:r26, 0x01
r26
r26 = 0x00000004
r27
r27 = 0x00000080
sreg
sreg = 0x00000014
======== 0x00:0x02 - 0x03 ========
sbiw r27:r26, 0x03
r26
r26 = 0x000000ff
r27
r27 = 0x000000ff
sreg
sreg = 0x00000015
======== 0x00:0x12 - 0x12 ========
sbiw r27:r26, 0x12
r26
r26 = 0x00000000
r27
r27 = 0x00000000
sreg
sreg = 0x00000002
EOF
RUN
