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
echo -- round 0; aes; .(regs)
echo -- round 1; aes; .(regs)
echo -- round 2; aes; .(regs)
echo -- round 3; aes; .(regs)
echo -- round 4; aes; .(regs)
echo -- round 5; aes; .(regs)
echo -- round 6; aes; .(regs)
echo -- round 7; aes; .(regs)
echo -- round 8; aes; .(regs)
echo -- round 9; aes; .(regs)
echo -- round 10; aes; .(regs)
echo -- round 11; aes; .(regs)
echo -- round 12; aes; .(regs)
echo -- round 13; aes; .(regs)
echo -- round 14; aes; .(regs)
echo -- round 15; aes; .(regs)
ar pcl
EOF
EXPECT=<<EOF
r0 = 0x41
r1 = 0x20
r2 = 0x52
r3 = 0x69
r4 = 0x76
r5 = 0x61
r6 = 0x6c
r7 = 0x20
r8 = 0x41
r9 = 0x70
r10 = 0x70
r11 = 0x65
r12 = 0x61
r13 = 0x72
r14 = 0x73
r15 = 0x21
-- round 0
r0 = 0x00
r1 = 0x18
r2 = 0xa9
r3 = 0xbc
r4 = 0x1b
r5 = 0x10
r6 = 0x36
r7 = 0x1a
r8 = 0x71
r9 = 0x70
r10 = 0x64
r11 = 0x61
r12 = 0x73
r13 = 0x72
r14 = 0x21
r15 = 0x81
-- round 1
r0 = 0x22
r1 = 0x04
r2 = 0x7e
r3 = 0x7c
r4 = 0x8d
r5 = 0x80
r6 = 0x91
r7 = 0x25
r8 = 0x71
r9 = 0x64
r10 = 0x60
r11 = 0x63
r12 = 0x73
r13 = 0x20
r14 = 0x81
r15 = 0xe9
-- round 2
r0 = 0x91
r1 = 0x00
r2 = 0x3d
r3 = 0xb4
r4 = 0xe6
r5 = 0x60
r6 = 0xc8
r7 = 0x98
r8 = 0x61
r9 = 0x62
r10 = 0x62
r11 = 0x21
r12 = 0x81
r13 = 0xe8
r14 = 0xe9
r15 = 0xc3
-- round 3
r0 = 0x62
r1 = 0x22
r2 = 0x1c
r3 = 0x5a
r4 = 0xf1
r5 = 0x3a
r6 = 0x46
r7 = 0x4e
r8 = 0x63
r9 = 0x20
r10 = 0x80
r11 = 0xe9
r12 = 0xe9
r13 = 0xc2
r14 = 0xc1
r15 = 0xd1
-- round 4
r0 = 0x3b
r1 = 0x91
r2 = 0x26
r3 = 0x85
r4 = 0xf0
r5 = 0x35
r6 = 0x03
r7 = 0x8d
r8 = 0x81
r9 = 0xe8
r10 = 0xe8
r11 = 0xc3
r12 = 0xc1
r13 = 0xd0
r14 = 0xd1
r15 = 0x41
-- round 5
r0 = 0x9d
r1 = 0x6a
r2 = 0x19
r3 = 0xea
r4 = 0x72
r5 = 0xba
r6 = 0x89
r7 = 0x6e
r8 = 0xe9
r9 = 0xc2
r10 = 0xd0
r11 = 0xd1
r12 = 0xd1
r13 = 0x40
r14 = 0x01
r15 = 0xcd
-- round 6
r0 = 0x64
r1 = 0xb5
r2 = 0x2e
r3 = 0xff
r4 = 0x9b
r5 = 0x5f
r6 = 0xc4
r7 = 0x15
r8 = 0xd1
r9 = 0xd0
r10 = 0xd0
r11 = 0x51
r12 = 0x01
r13 = 0xcc
r14 = 0xcd
r15 = 0x91
-- round 7
r0 = 0xba
r1 = 0x5a
r2 = 0x97
r3 = 0x5f
r4 = 0xef
r5 = 0x8f
r6 = 0xe2
r7 = 0x08
r8 = 0xd1
r9 = 0x50
r10 = 0x10
r11 = 0xdd
r12 = 0xcd
r13 = 0x90
r14 = 0xa1
r15 = 0xa1
-- round 8
r0 = 0x7f
r1 = 0x2d
r2 = 0xe9
r3 = 0x2f
r4 = 0xdf
r5 = 0xcd
r6 = 0xf3
r7 = 0x26
r8 = 0x51
r9 = 0x10
r10 = 0xdc
r11 = 0xdd
r12 = 0x91
r13 = 0xa0
r14 = 0xa1
r15 = 0xa1
-- round 9
r0 = 0x3f
r1 = 0x96
r2 = 0xdc
r3 = 0x1f
r4 = 0x6f
r5 = 0x66
r6 = 0x51
r7 = 0x39
r8 = 0xdd
r9 = 0xdc
r10 = 0x80
r11 = 0xa1
r12 = 0xa1
r13 = 0xa0
r14 = 0xa9
r15 = 0x21
-- round 10
r0 = 0xbf
r1 = 0xc9
r2 = 0x4e
r3 = 0xad
r4 = 0x95
r5 = 0x99
r6 = 0x2a
r7 = 0x94
r8 = 0x81
r9 = 0xa0
r10 = 0xb0
r11 = 0xb1
r12 = 0xa9
r13 = 0x20
r14 = 0xa7
r15 = 0xa7
-- round 11
r0 = 0x7f
r1 = 0xc6
r2 = 0xaf
r3 = 0xfe
r4 = 0x4a
r5 = 0xee
r6 = 0xbd
r7 = 0x40
r8 = 0xb1
r9 = 0xb0
r10 = 0xb8
r11 = 0x31
r12 = 0xa7
r13 = 0xa6
r14 = 0x01
r15 = 0x41
-- round 12
r0 = 0x3d
r1 = 0xc3
r2 = 0x57
r3 = 0x55
r4 = 0x8d
r5 = 0x7d
r6 = 0x54
r7 = 0xaa
r8 = 0xb9
r9 = 0x30
r10 = 0xb6
r11 = 0xb7
r12 = 0x01
r13 = 0x40
r14 = 0x61
r15 = 0x61
-- round 13
r0 = 0x1e
r1 = 0x61
r2 = 0xa1
r3 = 0x08
r4 = 0xc4
r5 = 0xb6
r6 = 0x28
r7 = 0x75
r8 = 0xb7
r9 = 0xb6
r10 = 0x10
r11 = 0x41
r12 = 0x61
r13 = 0x60
r14 = 0x65
r15 = 0x61
-- round 14
r0 = 0xa5
r1 = 0xba
r2 = 0x72
r3 = 0x06
r4 = 0x60
r5 = 0x7b
r6 = 0xb4
r7 = 0xb8
r8 = 0x11
r9 = 0x40
r10 = 0x70
r11 = 0x71
r12 = 0x65
r13 = 0x60
r14 = 0x73
r15 = 0x73
-- round 15
r0 = 0xf5
r1 = 0xfe
r2 = 0x27
r3 = 0x16
r4 = 0x61
r5 = 0x3f
r6 = 0xf5
r7 = 0xbc
r8 = 0x41
r9 = 0x70
r10 = 0x70
r11 = 0x65
r12 = 0x61
r13 = 0x72
r14 = 0x73
r15 = 0x21
pcl = 0x0020
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
echo decrypt?; ar hf
echo -- round 0; aes; .(regs)
echo -- round 1; aes; .(regs)
echo -- round 2; aes; .(regs)
echo -- round 3; aes; .(regs)
echo -- round 4; aes; .(regs)
echo -- round 5; aes; .(regs)
echo -- round 6; aes; .(regs)
echo -- round 7; aes; .(regs)
echo -- round 8; aes; .(regs)
echo -- round 9; aes; .(regs)
echo -- round 10; aes; .(regs)
echo -- round 11; aes; .(regs)
echo -- round 12; aes; .(regs)
echo -- round 13; aes; .(regs)
echo -- round 14; aes; .(regs)
echo -- round 15; aes; .(regs)
ar pcl
arb~[5-]~:0
EOF
EXPECT=<<EOF
r0 = 0xf5
r1 = 0xfe
r2 = 0x27
r3 = 0x16
r4 = 0x61
r5 = 0x3f
r6 = 0xf5
r7 = 0xbc
r8 = 0x41
r9 = 0x70
r10 = 0x70
r11 = 0x65
r12 = 0x61
r13 = 0x72
r14 = 0x73
r15 = 0x21
decrypt?
hf = 0x1
-- round 0
r0 = 0x5a
r1 = 0x75
r2 = 0xb1
r3 = 0x09
r4 = 0x90
r5 = 0xb7
r6 = 0x78
r7 = 0x74
r8 = 0x11
r9 = 0x40
r10 = 0x70
r11 = 0x71
r12 = 0x65
r13 = 0x60
r14 = 0x73
r15 = 0x73
-- round 1
r0 = 0x2d
r1 = 0x92
r2 = 0x52
r3 = 0x04
r4 = 0xc8
r5 = 0x79
r6 = 0x14
r7 = 0xba
r8 = 0xb7
r9 = 0xb6
r10 = 0x10
r11 = 0x41
r12 = 0x61
r13 = 0x60
r14 = 0x65
r15 = 0x61
-- round 2
r0 = 0x3e
r1 = 0xc3
r2 = 0xab
r3 = 0xaa
r4 = 0x4e
r5 = 0xbe
r6 = 0xa8
r7 = 0x55
r8 = 0xb9
r9 = 0x30
r10 = 0xb6
r11 = 0xb7
r12 = 0x01
r13 = 0x40
r14 = 0x61
r15 = 0x61
-- round 3
r0 = 0xbf
r1 = 0xc9
r2 = 0x5f
r3 = 0xfd
r4 = 0x85
r5 = 0xdd
r6 = 0x7e
r7 = 0x80
r8 = 0xb1
r9 = 0xb0
r10 = 0xb8
r11 = 0x31
r12 = 0xa7
r13 = 0xa6
r14 = 0x01
r15 = 0x41
-- round 4
r0 = 0x7f
r1 = 0xc6
r2 = 0x8d
r3 = 0x5e
r4 = 0x6a
r5 = 0x66
r6 = 0x15
r7 = 0x68
r8 = 0x81
r9 = 0xa0
r10 = 0xb0
r11 = 0xb1
r12 = 0xa9
r13 = 0x20
r14 = 0xa7
r15 = 0xa7
-- round 5
r0 = 0x3f
r1 = 0x69
r2 = 0xec
r3 = 0x2f
r4 = 0x9f
r5 = 0x99
r6 = 0xa2
r7 = 0x36
r8 = 0xdd
r9 = 0xdc
r10 = 0x80
r11 = 0xa1
r12 = 0xa1
r13 = 0xa0
r14 = 0xa9
r15 = 0x21
-- round 6
r0 = 0xbf
r1 = 0x1e
r2 = 0xd6
r3 = 0x1f
r4 = 0xef
r5 = 0xce
r6 = 0xf3
r7 = 0x19
r8 = 0x51
r9 = 0x10
r10 = 0xdc
r11 = 0xdd
r12 = 0x91
r13 = 0xa0
r14 = 0xa1
r15 = 0xa1
-- round 7
r0 = 0x75
r1 = 0xa5
r2 = 0x6b
r3 = 0xaf
r4 = 0xdf
r5 = 0x4f
r6 = 0xd1
r7 = 0x04
r8 = 0xd1
r9 = 0x50
r10 = 0x10
r11 = 0xdd
r12 = 0xcd
r13 = 0x90
r14 = 0xa1
r15 = 0xa1
-- round 8
r0 = 0x98
r1 = 0x7a
r2 = 0x1d
r3 = 0xff
r4 = 0x67
r5 = 0xaf
r6 = 0xc8
r7 = 0x2a
r8 = 0xd1
r9 = 0xd0
r10 = 0xd0
r11 = 0x51
r12 = 0x01
r13 = 0xcc
r14 = 0xcd
r15 = 0x91
-- round 9
r0 = 0x6e
r1 = 0x95
r2 = 0x26
r3 = 0xd5
r4 = 0xb1
r5 = 0x75
r6 = 0x46
r7 = 0x9d
r8 = 0xe9
r9 = 0xc2
r10 = 0xd0
r11 = 0xd1
r12 = 0xd1
r13 = 0x40
r14 = 0x01
r15 = 0xcd
-- round 10
r0 = 0x37
r1 = 0x62
r2 = 0x19
r3 = 0x4a
r4 = 0xf0
r5 = 0x3a
r6 = 0x03
r7 = 0x4e
r8 = 0x81
r9 = 0xe8
r10 = 0xe8
r11 = 0xc3
r12 = 0xc1
r13 = 0xd0
r14 = 0xd1
r15 = 0x41
-- round 11
r0 = 0x91
r1 = 0x11
r2 = 0x2c
r3 = 0xa5
r4 = 0xf2
r5 = 0x35
r6 = 0x89
r7 = 0x8d
r8 = 0x63
r9 = 0x20
r10 = 0x80
r11 = 0xe9
r12 = 0xe9
r13 = 0xc2
r14 = 0xc1
r15 = 0xd1
-- round 12
r0 = 0x62
r1 = 0x00
r2 = 0x3e
r3 = 0x78
r4 = 0xd9
r5 = 0x90
r6 = 0xc4
r7 = 0x64
r8 = 0x61
r9 = 0x62
r10 = 0x62
r11 = 0x21
r12 = 0x81
r13 = 0xe8
r14 = 0xe9
r15 = 0xc3
-- round 13
r0 = 0x11
r1 = 0x08
r2 = 0xbd
r3 = 0xbc
r4 = 0x4e
r5 = 0x40
r6 = 0x62
r7 = 0x1a
r8 = 0x71
r9 = 0x64
r10 = 0x60
r11 = 0x63
r12 = 0x73
r13 = 0x20
r14 = 0x81
r15 = 0xe9
-- round 14
r0 = 0x00
r1 = 0x24
r2 = 0x56
r3 = 0x7c
r4 = 0x27
r5 = 0x20
r6 = 0x39
r7 = 0x25
r8 = 0x71
r9 = 0x70
r10 = 0x64
r11 = 0x61
r12 = 0x73
r13 = 0x72
r14 = 0x21
r15 = 0x81
-- round 15
r0 = 0x41
r1 = 0x20
r2 = 0x52
r3 = 0x69
r4 = 0x76
r5 = 0x61
r6 = 0x6c
r7 = 0x20
r8 = 0x41
r9 = 0x70
r10 = 0x70
r11 = 0x65
r12 = 0x61
r13 = 0x72
r14 = 0x73
r15 = 0x21
pcl = 0x0022

EOF
RUN

NAME=AVR: mul
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 019f
aei
(mul x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo sreg; ar sreg)
.(mul 42 13)
.(mul 0xff 0xff)
.(mul 0 42)
.(mul 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x22
r1
r1 = 0x02
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x01
r1
r1 = 0xfe
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x01
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0x08
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x00
EOF
RUN

NAME=AVR: muls
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0102
aei
(muls x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo sreg; ar sreg)
.(muls 42 13)
.(muls 0xff 0xff)
.(muls 0 42)
.(muls 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x22
r1
r1 = 0x02
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x01
r1
r1 = 0x00
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x00
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0xf8
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x01
EOF
RUN

NAME=AVR: mulsu
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0103
aei
(mulsu x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo 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 = 0x22
r1
r1 = 0x02
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x01
r1
r1 = 0xff
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x01
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0x08
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x00
======== 13 * 42 ========
r0
r0 = 0x22
r1
r1 = 0x02
r16
r16 = 0x0d
r17
r17 = 0x2a
sreg
sreg = 0x00
======== 42 * 0 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x2a
r17
r17 = 0x00
sreg
sreg = 0x02
======== 0x80 * 0x10 ========
r0
r0 = 0x00
r1
r1 = 0xf8
r16
r16 = 0x80
r17
r17 = 0x10
sreg
sreg = 0x01
EOF
RUN

NAME=AVR: fmul
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 0903
aei
(fmul x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo sreg; ar sreg)
.(fmul 42 13)
.(fmul 0xff 0xff)
.(fmul 0 42)
.(fmul 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x44
r1
r1 = 0x04
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x02
r1
r1 = 0xfc
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x01
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0x10
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x00
EOF
RUN

NAME=AVR: fmuls
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 8103
aei
(fmuls x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo sreg; ar sreg)
.(fmuls 42 13)
.(fmuls 0xff 0xff)
.(fmuls 0 42)
.(fmuls 0x10 0x80)
EOF
EXPECT=<<EOF
======== 42 * 13 ========
r0
r0 = 0x44
r1
r1 = 0x04
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x02
r1
r1 = 0x00
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x00
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0xf0
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x01
EOF
RUN

NAME=AVR: fmulsu
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
wx 8903
aei
(fmulsu x y; echo ======== ${x} * ${y} ========; ar r16 = ${x}; ar r17 = ${y}; ar pc = 0; aes; echo r0; ar r0; echo r1; ar r1; echo r16; ar r16; echo r17; ar r17; echo 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 = 0x44
r1
r1 = 0x04
r16
r16 = 0x2a
r17
r17 = 0x0d
sreg
sreg = 0x00
======== 0xff * 0xff ========
r0
r0 = 0x02
r1
r1 = 0xfe
r16
r16 = 0xff
r17
r17 = 0xff
sreg
sreg = 0x01
======== 0 * 42 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x00
r17
r17 = 0x2a
sreg
sreg = 0x02
======== 0x10 * 0x80 ========
r0
r0 = 0x00
r1
r1 = 0x10
r16
r16 = 0x10
r17
r17 = 0x80
sreg
sreg = 0x00
======== 13 * 42 ========
r0
r0 = 0x44
r1
r1 = 0x04
r16
r16 = 0x0d
r17
r17 = 0x2a
sreg
sreg = 0x00
======== 42 * 0 ========
r0
r0 = 0x00
r1
r1 = 0x00
r16
r16 = 0x2a
r17
r17 = 0x00
sreg
sreg = 0x02
======== 0x80 * 0x10 ========
r0
r0 = 0x00
r1
r1 = 0xf0
r16
r16 = 0x80
r17
r17 = 0x10
sreg
sreg = 0x01
EOF
RUN

NAME=AVR: adiw
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
aei
(adiw h l x; echo ======== ${h}:${l} + ${x} ========; wa "adiw r27:r26, ${x}"; pi 1; ar r27 = ${h}; ar r26 = ${l}; ar pc = 0; aes; echo r26; ar r26; echo r27; ar r27; echo 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 = 0x3d
r27
r27 = 0xcb
sreg
sreg = 0x14
======== 0x0a:0xfe + 0x3f ========
adiw r27:r26, 0x3f
r26
r26 = 0x3d
r27
r27 = 0x0b
sreg
sreg = 0x00
======== 0xff:0xff + 0x01 ========
adiw r27:r26, 0x01
r26
r26 = 0x00
r27
r27 = 0x00
sreg
sreg = 0x03
======== 0x77:0x7e + 0x03 ========
adiw r27:r26, 0x03
r26
r26 = 0x81
r27
r27 = 0x77
sreg
sreg = 0x00
======== 0x7f:0xfe + 0x03 ========
adiw r27:r26, 0x03
r26
r26 = 0x01
r27
r27 = 0x80
sreg
sreg = 0x0c
======== 0x80:0x00 + 0x01 ========
adiw r27:r26, 0x01
r26
r26 = 0x01
r27
r27 = 0x80
sreg
sreg = 0x14
======== 0x00:0x00 + 0x00 ========
adiw r27:r26, 0x00
r26
r26 = 0x00
r27
r27 = 0x00
sreg
sreg = 0x02
EOF
RUN

NAME=AVR: sbiw
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=avr
aei
(sbiw h l x; echo ======== ${h}:${l} - ${x} ========; wa "sbiw r27:r26, ${x}"; pi 1; ar r27 = ${h}; ar r26 = ${l}; ar pc = 0; aes; echo r26; ar r26; echo r27; ar r27; echo 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 = 0xe2
r27
r27 = 0xc9
sreg
sreg = 0x14
======== 0x00:0x10 - 0x3f ========
sbiw r27:r26, 0x3f
r26
r26 = 0xd1
r27
r27 = 0xff
sreg
sreg = 0x15
======== 0x80:0x00 - 0x01 ========
sbiw r27:r26, 0x01
r26
r26 = 0xff
r27
r27 = 0x7f
sreg
sreg = 0x18
======== 0x80:0x05 - 0x01 ========
sbiw r27:r26, 0x01
r26
r26 = 0x04
r27
r27 = 0x80
sreg
sreg = 0x14
======== 0x00:0x02 - 0x03 ========
sbiw r27:r26, 0x03
r26
r26 = 0xff
r27
r27 = 0xff
sreg
sreg = 0x15
======== 0x00:0x12 - 0x12 ========
sbiw r27:r26, 0x12
r26
r26 = 0x00
r27
r27 = 0x00
sreg
sreg = 0x02
EOF
RUN
