NAME=v850 preludes
FILE=bins/v850/hello-v850e
CMDS=<<EOF
aap
afl
EOF
EXPECT=<<EOF
0x0010006c    1     36 sym._compute
0x00100090    1     64 sym._main
0x001000d0    5     74 sym.___main
0x0010011a    3     34 sym._exit
0x00101e6c   20    170 sym.___call_exitprocs
0x00101f16    3     64 sym.__exit
0x0010013c    1     24 sym.__printf_r
0x00100170  226   3778 sym.__vfprintf_r
0x00100158    1     24 fcn.00100158
0x0010069a   81   1374 fcn.0010069a
0x00101cb8    1     24 sym._vfprintf
0x00101cd0    5    146 sym.___sbprintf
0x00101d64   27    264 sym.___swsetup_r
0x00101f58   21    332 sym._quorem
0x0010213a  234   4760 fcn.0010213a
0x00104f0c   12    272 sym.___d2b
0x00104a70   15    188 sym.___pow5mult
0x001048e8   22    392 sym.___multiply
0x00104632    3     30 sym.__Bfree
0x00104b2c   16    276 sym.___lshift
0x001047d8   12     86 sym.___hi0bits
0x00104c82   22    396 sym.___mdiff
0x00104650    9    198 sym.___multadd
0x00104c40    6     66 sym.___mcmp
0x00104590    4     28 sym._memcpy
0x001063e0    4     78 sym.___assert_func
0x001065be    1     26 sym._fiprintf
0x00105380  145   2252 sym.__vfiprintf_r
0x0010747e    1     16 sym._abort
0x0010767a    1     18 sym._raise
0x0010758e   11    126 sym.__raise_r
0x00107704    1     12 sym.__getpid_r
0x00107710    1      4 sym.__getpid
0x001076d2    4     50 sym.__kill_r
0x001034d0   40    428 sym.___sflush_r
0x0010367c    6     68 sym.__fflush_r
0x001036c0    3     40 sym._fflush
0x00103cba    8     76 sym.__fwalk_reent
0x001036ec    1    106 sym._std
0x001045ac    4     24 sym._memset
0x00103756    1     18 sym.__cleanup_r
0x00103768    1     88 sym.___sinit.part___0
0x001037c4    3     60 sym.___sfmoreglue
0x00103e62  119   1806 sym.__malloc_r
0x00103800   13    180 sym.___sfp
0x001038b8    1     18 fcn.001038b8
0x001038ca    3     20 sym.___sinit
0x001038ea    1     18 fcn.001038ea
0x00103c72    8     72 sym.__fwalk
0x00103900    1     18 fcn.00103900
0x00103912    7    196 sym.__malloc_trim_r
0x001039d6   41    668 sym.__free_r
0x00103d1c    6    122 sym.___swhatbuf_r
0x00106728    4     50 sym.__fstat_r
0x00103d96   10    204 sym.___smakebuf_r
0x00106b62    4     46 sym.__isatty_r
0x001045c8    9    106 sym.__Balloc
0x00104716   15    194 sym.___s2b
0x001048b4    3     52 sym.___i2b
0x00104e58   14    180 sym.___b2d
0x0010501c    4    148 sym.___ratio
0x001050d2    3     52 fcn.001050d2
0x001051c2    4     46 sym.__sbrk_r
0x001051f0    3     50 sym.___sread
0x00106cce    4     52 sym.__read_r
0x00105226    3     70 sym.___swrite
0x0010526c    3     52 sym.___sseek
0x00106c00    4     52 sym.__lseek_r
0x001052a0    1     16 sym.___sclose
0x001064be    4     46 sym.__close_r
0x001052e0   12    132 sym.___sprint_r.part___0
0x00105364    3     28 sym.___sprint_r
0x00106300    1     24 sym._vfiprintf
0x00106318    5    146 sym.___sbprintf_1
0x001063ae    4     50 fcn.001063ae
0x00106430    1     10 fcn.00106430
0x0010643e   12    128 fcn.0010643e
0x001064ec   18    172 sym.__fclose_r
0x0010659e    1     12 fcn.0010659e
0x001065aa    1     20 sym.__fiprintf_r
0x001065d8   17    198 sym.___fputwc
0x0010669e    3     44 sym.__fputwc_r
0x001066ca    6     94 sym._fputwc
0x00106b90    7     78 sym.__setlocale_r
0x00106bea    1     22 sym._setlocale
0x00106c34    1     34 sym.__mbtowc_r
0x00106d02   73   1322 sym.__realloc_r
0x0010722c    5     82 sym.__sbrk
0x001072c2   19    248 sym.___swbuf_r
0x001073ba    1     22 sym.___swbuf
0x001073d0    5     70 sym.__wcrtomb_r
0x00107416    1     24 sym._wcrtomb
0x0010742e    1     22 sym.__wctomb_r
0x00107468    1     22 sym.__write
0x001052cc    3     18 loc.___trap0
0x00107490    1     18 fcn.00107490
0x001074a4    1     20 fcn.001074a4
0x001074bc    1     24 sym.__lseek
0x001074d4    1     22 sym.__read
0x001074ea    6     46 sym.__init_signal_r.part___0
0x00107518    3     26 sym.__init_signal_r
0x00107532    8     92 sym.__signal_r
0x0010760c   13    110 sym.___sigtramp_r
0x0010768c    1     22 sym._signal
0x001076a6    3     26 fcn.001076a6
0x001076c6    1     12 fcn.001076c6
0x00107714    1     24 sym.__kill
0x0010772c    3     92 sym.___unorddf2
EOF
RUN

NAME=v850 preludes
FILE=bins/v850/ired_v850
CMDS=<<EOF
aap
afl
EOF
EXPECT=<<EOF
0x0010006c    3    130 sym._io_open
0x001000ee   22    484 sym._hexdump
0x001002d2   14    250 sym._print_fmt
0x00100a84   19    608 sym._str2ut64
0x00100ce4   12    228 sym._hex2byte
0x00100dc8   13    236 sym._hexstr2raw
0x00100eb4    9    280 sym._getcurblk
0x00100fcc    4    272 sym._Nset
0x001010dc    1    120 sym._Nsetf
0x00101156    4    390 fcn.00101156
0x001012de    4    390 fcn.001012de
0x00101466    1    238 fcn.00101466
0x00101556    1    238 fcn.00101556
0x00101646    1    222 fcn.00101646
0x00101726    7    338 fcn.00101726
0x00101878    1     68 sym._error
0x001018bc    6    408 sym._expr
0x00101a54    9    514 sym._term
0x00101c56    6    170 sym._prim
0x00101e70    7    302 fcn.00101e70
0x00101fc6    1     48 fcn.00101fc6
0x0010201e    1     48 fcn.0010201e
0x00102182    1     50 sym._cin_putback
0x001021b4    6    120 sym._r_num_calc_index
0x0010222c    9    172 sym._cin_get
0x001022d8   16    518 sym._cin_get_num
0x001024de   36    866 sym._get_token
0x00102ad0    1     72 sym._load_token
0x00102b18   21    804 sym._r_num_calc
0x00102e3c    5    132 sym._cmd_hexdump
0x00102ec0    7    158 sym._cmd_print
0x00102f5e    7    180 sym._cmd_bytedump
0x00103012   17    810 sym._cmd_search
0x0010333c   10    318 sym._cmd_bsize
0x0010347a    8    506 sym._cmd_seek
0x00103674   10    244 sym._cmd_dump
0x00103768   13    356 sym._cmd_load
0x001038cc   13    342 sym._cmd_write
0x00103a22    4    152 sym._cmd_help
0x00103aba   29    984 sym._cmd_resize
0x00103e92   14    562 sym._cmd_system
0x001040c4    4    262 sym._red_slurpin
0x001041ca    7    238 sym._red_interpret
0x001042b8    8    184 sym._red_cmd
0x001045d4   17    790 sym._red_prompt
0x001048ea   18    454 sym._red_open
0x00104ab0    1     44 sym._red_help
0x00104adc   21    464 sym._main
0x00104ec4   84    986 sym.___udivdi3
0x001052d8    5     74 sym.___main
0x00105322    3     34 sym._exit
0x0010cc08   20    170 sym.___call_exitprocs
0x0010ccb2    3     64 sym.__exit
0x00105344   18    172 sym.__fclose_r
0x001053f6    1     12 fcn.001053f6
0x00105402   40    428 sym.___sflush_r
0x001055ae    6     68 sym.__fflush_r
0x001055f2    3     40 sym._fflush
0x001063de    8     76 sym.__fwalk_reent
0x0010574a    1     24 sym._fgets
0x0010561a   15    304 sym.__fgets_r
0x00105766    1    106 sym._std
0x00106d96    4     24 sym._memset
0x001057d0    1     18 sym.__cleanup_r
0x001057e2    1     88 sym.___sinit.part___0
0x0010583e    3     60 sym.___sfmoreglue
0x0010664c  119   1806 sym.__malloc_r
0x0010587a   13    180 sym.___sfp
0x00105932    1     18 fcn.00105932
0x00105944    3     20 sym.___sinit
0x00105964    1     18 fcn.00105964
0x00106396    8     72 sym.__fwalk
0x0010597a    1     18 fcn.0010597a
0x0010598c    8    174 sym.__fopen_r
0x00105a3a    1     22 sym._fopen
0x00105a50    1     20 sym.__fprintf_r
0x0010aed8  226   3778 sym.__vfprintf_r
0x00105a64    1     26 sym._fprintf
0x00105bbc    1     36 sym._fread
0x00105a7e   16    318 sym.__fread_r
0x00105be0    7    196 sym.__malloc_trim_r
0x00105ca4   41    668 sym.__free_r
0x00105f40    1     12 sym.__fseek_r
0x00105f64   65    784 sym.__fseeko_r
0x00105f4c    1     24 sym._fseek
0x00106274    1     24 sym._fseeko
0x0010628e    4     48 fcn.0010628e
0x001062be   22    198 sym.__ftello_r
0x0010638a    1     12 fcn.0010638a
0x0010642a    8    144 sym.__fwrite_r
0x001064ba    1     36 sym._fwrite
0x001064e2    6    122 sym.___swhatbuf_r
0x0010628c    1      2 sym.__fstat_r
0x0010655c   10    204 sym.___smakebuf_r
0x0010e840    4     46 sym.__isatty_r
0x0010662e    1     12 fcn.0010662e
0x00106640    1     12 fcn.00106640
0x00106db4    4     50 fcn.00106db4
0x00106de6   24    354 sym.__perror_r
0x00106f4e    1     12 fcn.00106f4e
0x00106f5a    1     24 sym.__printf_r
0x00106f76    1     24 fcn.00106f76
0x00106f8e    1     16 sym.__putchar_r
0x0010f67c    8    108 sym.__putc_r
0x00106f9e    1     24 sym._putchar
0x00106fb6    5    152 sym.__puts_r
0x00107054    1     12 fcn.00107054
0x00107060    3     30 sym._lflush
0x0010707e   29    356 sym.___srefill_r
0x001071e2    4     46 sym.__sbrk_r
0x00107210    1     24 sym._setenv
0x0010723a   37    494 sym.__setenv_r
0x0010722e    1     12 fcn.0010722e
0x00107428   11    152 sym.__unsetenv_r
0x001074c0    1     72 sym.__sprintf_r
0x00107d64  218   3664 sym.__svfprintf_r
0x00107508    1     76 sym._sprintf
0x00107554    1     86 sym._sscanf
0x00107cfc    5     28 sym._strlen
0x0010980c   26    428 sym.___ssvfscanf_r
0x001075aa    1     88 sym.__sscanf_r
0x00107602    3     50 sym.___sread
0x0010f6fe    4     52 sym.__read_r
0x00107638    3     70 sym.___swrite
0x0010767e    3     52 sym.___sseek
0x0010e920    4     52 sym.__lseek_r
0x001076b2    1     16 sym.___sclose
0x0010ccf2    4     46 sym.__close_r
0x001076f0    1     12 fcn.001076f0
0x001076fc    3     48 sym.__strdup_r
0x00106d7a    4     28 sym._memcpy
0x0010772c    5     68 sym.__strerror_r
0x00107cd4    1     16 fcn.00107cd4
0x00107cea    1     16 fcn.00107cea
0x00108222   80   1316 fcn.00108222
0x00109fce   55    844 fcn.00109fce
0x001112e6    1     18 sym.__strtod_r
0x0010fe46  284   4940 sym.__strtod_l
0x0010fda0    9     68 sym._strncmp
0x00115808    7     56 sym.___match
0x00115ada    1      8 sym._nan
0x0010ebbc   15    194 sym.___s2b
0x0010ea6e    9    106 sym.__Balloc
0x0010f3b2   12    272 sym.___d2b
0x0010ed5a    3     52 sym.___i2b
0x00114d16    4     78 sym.___assert_func
0x00114e1c    1     26 sym._fiprintf
0x00113b7c  145   2252 sym.__vfiprintf_r
0x00114d06    1     16 sym._abort
0x00115c72    1     18 sym._raise
0x00115b86   11    126 sym.__raise_r
0x00115cfc    1     12 sym.__getpid_r
0x001064de    1      4 sym.__getpid
0x00115cca    4     50 sym.__kill_r
0x0010efd2   16    276 sym.___lshift
0x0010f128   22    396 sym.___mdiff
0x0010f4c2    4    148 sym.___ratio
0x0010f2b4    7     74 sym.___ulp
0x0010ef16   15    188 sym.___pow5mult
0x0010ed8e   22    392 sym.___multiply
0x00115072  128   1942 sym.___gethex
0x0010f5c8    7     78 sym.___copybits
0x0010ead8    3     30 sym.__Bfree
0x0010fde4    4     98 sym._sulp
0x00115840   44    612 sym.___hexnan
0x00109a64    1     58 fcn.00109a64
0x0011280e    7     84 sym.___ssrefill_r
0x00115dd2    3     92 sym.___unorddf2
0x00111664    1     12 sym.__strtol_r
0x001114ec   47    376 sym.__strtol_l.isra___0
0x0010fd68    1      6 sym._nanf
0x0010ade6    1     12 fcn.0010ade6
0x0010adf2    1     24 sym._lseek
0x0010ae0a    1     26 sym._open
0x00106db2    1      2 sym.__open_r
0x0010ae24    1     24 sym._read
0x0010ae3c    3     32 sym.__system_r
0x0010ae5c    3     32 sym._system
0x0010ae82    1     12 fcn.0010ae82
0x0010aeaa    4     46 sym.__unlink_r
0x0010ae8e    1     24 sym._write
0x0010cacc    4     52 sym.__write_r
0x0010b402   81   1374 fcn.0010b402
0x0010ca20    1     24 sym._vfprintf
0x0010ca38    5    146 sym.___sbprintf
0x0010cb00   27    264 sym.___swsetup_r
0x0010cd20   21    332 sym._quorem
0x0010cf02  234   4760 fcn.0010cf02
0x0010ec7e   12     86 sym.___hi0bits
0x0010eaf6    9    198 sym.___multadd
0x0010f0e6    6     66 sym.___mcmp
0x0010e2a2    7     60 sym._fileno
0x0010e372    1     20 fcn.0010e372
0x001138e8    3     18 loc.___trap0
0x0010e78e   15    160 sym.__findenv_r
0x0010e82e    1     18 sym.__getenv_r
0x0010e86e    1     14 sym._iswspace
0x0010e87c    3     30 sym._iswspace_l
0x0010e89a    7     78 sym.__setlocale_r
0x0010e8f4    1     22 sym._setlocale
0x0010e954    5     92 sym.__mbrtowc_r
0x0010e9b0    1     36 sym._mbrtowc
0x0010e9d4    1     34 sym.__mbtowc_r
0x0010f2fe   14    180 sym.___b2d
0x0010f578    3     52 fcn.0010f578
0x0010f66a    1     18 fcn.0010f66a
0x0010f6e8    1     22 sym._putc
0x0010f732   73   1322 sym.__realloc_r
0x0010fc5c    5     82 sym.__sbrk
0x001112f8    1     24 sym._strtod_l
0x00111310    1     28 sym._strtod
0x0011132c   10    222 sym._strtof_l
0x0011140a   10    226 sym._strtof
0x00111670    1     24 sym._strtol_l
0x00111688    1     24 sym._strtol
0x001116a0   42    350 sym.__strtoul_l.isra___0
0x001117fe    1     12 sym.__strtoul_r
0x0011180a    1     24 sym._strtoul_l
0x00111822    1     24 sym._strtoul
0x00111bba    1      6 fcn.00111bba
0x00111f24    1      4 fcn.00111f24
0x00112758   12    182 sym.__sungetc_r
0x00112cf0    1      4 fcn.00112cf0
0x001138fa    7    134 sym.___submore
0x00113980   24    306 sym.__ungetc_r
0x00113ab2    1     22 sym._ungetc
0x00113aca    1     18 fcn.00113aca
0x00113adc   12    132 sym.___sprint_r.part___0
0x00113b60    3     28 sym.___sprint_r
0x00114afc    1     24 sym._vfiprintf
0x00114b14    5    146 sym.___sbprintf_1
0x00114ba8   19    248 sym.___swbuf_r
0x00114ca0    1     22 sym.___swbuf
0x00114cb6    1     22 sym.__wctomb_r
0x00114cf0    1     22 sym.__write
0x00114d66    1     10 fcn.00114d66
0x00114d74   12    128 fcn.00114d74
0x00114df6    1     18 fcn.00114df6
0x00114e08    1     20 sym.__fiprintf_r
0x00114e36   17    198 sym.___fputwc
0x00114efc    3     44 sym.__fputwc_r
0x00114f28    6     94 sym._fputwc
0x00115aac    1     24 sym.__lseek
0x00115ac4    1     22 sym.__read
0x00115ae2    6     46 sym.__init_signal_r.part___0
0x00115b10    3     26 sym.__init_signal_r
0x00115b2a    8     92 sym.__signal_r
0x00115c04   13    110 sym.___sigtramp_r
0x00115c84    1     22 sym._signal
0x00115c9e    3     26 fcn.00115c9e
0x00115cbe    1     12 fcn.00115cbe
0x00115d08    5     70 sym.__wcrtomb_r
0x00115d4e    1     24 sym._wcrtomb
0x00115d66    1     24 sym.__kill
0x00115d7e    3     84 sym.___unordsf2
EOF
RUN

NAME=v850 random pseudo
FILE=bins/elf/ld-2.27.so
CMDS=<<EOF
s+128
e asm.arch=v850
e asm.cpu=e0
e asm.parser=v850.pseudo
e asm.pseudo=true
b 64
pi~=
EOF
EXPECT=<<EOF
r8[0x1047] = (byte) r24
r0 = r0
r0 = r0
r0 = r0
r0 = r0
r13 = 8
r13 = 0
r9 = r2
r17 = 0x388 | r13
r0 = r0
r9 = r0
r11 = (0x8548 << 16) + r26
r9 = r16
r9 = r8
r9 = r16
r4 == -1
r17 &= r8
r25 = (byte) r8805[0x5]
r9 = r0
r0 = r0
r9 = r8
r24 += r7
r6 *= r31
r0 -= r30
r0 = r0
EOF
RUN

# somehow the CI cant disasm with those plugins, while it runs in local and the plugin is there
NAME=v850.np r0ref
FILE=-
CMDS=<<EOF
-a?~v850
e asm.bits=32
e asm.arch=v850
wx 830c
pd 1
wx e00f71f0
f mmio.ICC = 0xfffff070
pd 1
EOF
EXPECT=<<EOF
v850
            0x00000000      830c           sst.h r1, 6[ep]
            0x00000000      e00f71f0       ld.hu mmio.ICC, r1          ; [0xfffff070:2]=0xffff
EOF
RUN

NAME=v850.np proper imm32 handling
FILE=malloc://1024
CMDS=<<EOF
e asm.arch = v850
wx 210674060000210674061234
pi 2 @0
EOF
EXPECT=<<EOF
mov 0x674, r1
mov 0x34120674, r1
EOF
RUN


NAME=v850 10x bug
FILE=malloc://1024
CMDS=<<EOF
!rasm2 -a v850 -d 01fb
EOF
EXPECT=<<EOF
sld.b 1, lp
EOF
RUN

NAME=v850 cc clobber and preserve register sets
FILE=malloc://16
ARGS=-e anal.arch=v850 -e asm.bits=32
CMDS=<<EOF
k anal/cc/cc.stdc.clobber
k anal/cc/cc.stdc.preserve
EOF
EXPECT=<<EOF
r1,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,lp
r2,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,sp,gp,tp,ep
EOF
RUN

NAME=v850 stack adjustments
FILE=-
ARGS=-a v850 -e asm.bytes=false -e asm.stackptr=true
CMDS=<<EOF
wx 031ee0ff03360024061e1000a619581a631e10007f00
pd 7
ao 1 @ 0xc~stackop
EOF
EXPECT=<<EOF
            0x00000000     0      addi -32, sp, sp
            0x00000004    32+     addi 9216, sp, r6
            0x00000008    32      addi 16, r6, sp
            0x0000000c    32      sub r6, sp
            0x0000000e    32      add -8, sp
            0x00000010    40+     satsubi 16, sp, sp
            0x00000014    56+     jmp [lp]
EOF
RUN

NAME=v850e0 stack adjustments
FILE=-
ARGS=-a v850 -e asm.bytes=false -e asm.stackptr=true
CMDS=<<EOF
e asm.cpu=e0
wx 581a031ee0ff061e10007f00
pd 4
EOF
EXPECT=<<EOF
            0x00000000     0      add -8, r3
            0x00000002     8+     addi 0xffe0, r3, r3
            0x00000006    40+     addi 0x10, r6, r3
            0x0000000a    40      jmp [r31]
EOF
RUN

NAME=v850 pseudo reorders disp[reg] operands
FILE=malloc://32
ARGS=-a v850
CMDS=<<EOF
wx 40ff0010
ao~pseudo
f sym.a0xBBBBBBBBBB @ 0x1000
ao~pseudo
wx 216a
ao~pseudo
EOF
EXPECT=<<EOF
pseudo: 4096[r0] = (byte) lp
pseudo: r0[0xBBBBBBBBBB] = (byte) lp
pseudo: satadd 1,r13
EOF
RUN

NAME=v850 pseudo with a long flag name in the displacement
FILE=malloc://32
ARGS=-a v850
CMDS=<<EOF
wx 40ff0010
f sym.a0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB @ 0x1000
ao~pseudo
EOF
EXPECT=<<EOF
pseudo: r0[0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB] = (byte) lp
EOF
RUN

NAME=v850 pseudo set1 with a long flag name in the displacement
FILE=malloc://32
ARGS=-a v850
CMDS=<<EOF
wx c01f0010
f sym.a0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB @ 0x1000
ao~pseudo
EOF
EXPECT=<<EOF
pseudo: r0[0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB] |= (1 << r0[0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB])
EOF
RUN

NAME=v850 scalar register reads and clobbers recover ABI arguments
FILE=malloc://64
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 06507f00
af direct
afvr
af-
wx 003206507f00
af clobbered
afvr
arp~^=A
arp~^=LR
EOF
EXPECT=<<EOF
arg int32_t arg1 @ r6
=A0	r6
=A1	r7
=A2	r8
=A3	r9
=LR	lp
EOF
RUN

NAME=v850 stack loads and argument spills preserve access widths
FILE=malloc://64
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 031ef0ff033704002337060023370900031e10007f00
af loads
afvs
af-
wx 031ef0ff43370400633f060063470900031e10007f00
af stores
afvr
afvs
EOF
EXPECT=<<EOF
var int8_t var_4h @ sp+0x4
var int16_t var_6h @ sp+0x6
var int32_t var_8h @ sp+0x8
arg int32_t arg1 @ r6
arg int32_t arg2 @ r7
arg int32_t arg3 @ r8
var int8_t var_4h @ sp+0x4
var int16_t var_6h @ sp+0x6
var int32_t var_8h @ sp+0x8
EOF
RUN

NAME=v850 address taken locals and stack arguments use the ABI frame
FILE=malloc://64
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 031ef0ff23360400031e10007f00
af address_taken
afvs
af-
wx 233700007f00
af probe
afs int probe(int a, int b, int c, int d, int fifth)
afva
afvs
EOF
EXPECT=<<EOF
var int32_t var_4h @ sp+0x4
arg int fifth @ sp+0x0
EOF
RUN

NAME=v850 signed loads and absolute references expose access widths
FILE=malloc://64
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 0337fcff23370600203709f0
aoj @0~{[0].ptrsize}
aoj @0~{[0].sign}
aoj @0~{[0].direction}
aoj @4~{[0].ptrsize}
aoj @8~{[0].ptr}
aoj @8~{[0].refptr}
EOF
EXPECT=<<EOF
1
true
read
2
4294963208
4
EOF
RUN

NAME=v850 absolute stores retain displacements in disassembly and ESIL
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 400763814007000060075182203709f0
pi 4
aoe 4
EOF
EXPECT=<<EOF
st.b r0, 0xffff8163
st.b r0, 0[r0]
st.w r0, 0xffff8250
ld.w 0xfffff008, r6
0x00000000 r0,-32413,r0,+,0xffffffff,&,=[1],0,r0,:=
0x00000004 r0,0,r0,+,0xffffffff,&,=[1],0,r0,:=
0x00000008 r0,-32176,r0,+,0xffffffff,&,=[4],0,r0,:=
0x0000000c -4088,r0,+,0xffffffff,&,[4],r6,:=,0,r0,:=
EOF
RUN

NAME=v850 prepare and dispose allocate the full frame and restore in reverse order
FILE=malloc://1024
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 8807610048067f00
ao 1~^stack
ao 1 @4~^stack
aei
ar sp=0x300
ar r29=0x11223344
ar lp=0x88
ar pc=0
aes
ar sp
pxw 8 @0x2f8
ar r29=0
ar lp=0
aes
ar sp
ar r29
ar lp
ar pc
EOF
EXPECT=<<EOF
stackop: inc
stackptr: 24
stackop: inc
stackptr: 18446744073709551592
0x000002e8
0x000002f8  0x00000088 0x11223344                        ....D3".
0x00000300
0x11223344
0x00000088
0x00000088
EOF
RUN

NAME=v850 prepare locals are not stack arguments
FILE=malloc://64
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 880761004307000048067f00
af frame
afvs
EOF
EXPECT=<<EOF
var int8_t var_0h @ sp+0x0
EOF
RUN

NAME=v850 IAR ABI recovers seed buffer and length without a false movhi argument
FILE=malloc://64
ARGS=-a v850 -b 32 -e anal.cc=iar
CMDS=<<EOF
wx 0538444681fe2846e806e10be52906287f00
af checksum
afcrj
afvr
EOF
EXPECT=<<EOF
{"ret":"r1","args":["r1","tp","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18","r19"]}
arg int32_t arg1 @ r1
arg int32_t arg2 @ tp
arg int32_t arg3 @ r6
EOF
RUN

NAME=v850 branch conditions and address arithmetic remain distinct from x86 suffixes
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx 92059a05
aoj @0~{[0].cond}
aoj @2~{[0].cond}
wx 2846e80685008600
ao 1~pseudo
ao 1 @4~pseudo
ao 1 @6~pseudo
EOF
EXPECT=<<EOF
eq
ne
pseudo: r8 = r8 + 1768
pseudo: tp &= 0xff
pseudo: r6 &= 0xff
EOF
RUN

NAME=v850 unsigned halfword division preserves quotient remainder and aliased operands
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx e50f8232
aei
ar pc=0
ar tp=0xabcd000a
ar r1=96
aes
ar r1
ar r6
ar ov
ar z
wx e50f820a
ar pc=0
ar tp=10
ar r1=96
aes
ar r1
wx e50f822a
ar pc=0
ar tp=10
ar r1=96
aes
ar r1
ar tp
ar pc=0
ar tp=0
ar r1=96
aes
ar ov
EOF
EXPECT=<<EOF
0x00000009
0x00000006
0x00000000
0x00000000
0x00000006
0x00000009
0x00000006
0x00000001
EOF
RUN

NAME=v850 signed division handles overflow and signed remainders
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx e50fc032
aei
ar pc=0
ar tp=-1
ar r1=0x80000000
aes
ar r1
ar r6
ar ov
ar pc=0
ar tp=10
ar r1=-96
aes
ar r1
ar r6
ar ov
EOF
EXPECT=<<EOF
0x80000000
0x00000000
0x00000001
0xfffffff7
0xfffffffa
0x00000000
EOF
RUN

NAME=v850 PSW bitfields alias the architectural status word
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
ar psw=0xff
ar npi
ar epi
ar id
ar sat
ar cy
ar ov
ar s
ar z
ar psw=0
ar npi=1
ar epi=1
ar id=1
ar sat=1
ar cy=1
ar ov=1
ar s=1
ar z=1
ar psw
ar psw=0x85
ar npi
ar epi
ar id
ar cy
ar ov
ar s
ar z
EOF
EXPECT=<<EOF
0x00000001
0x00000001
0x00000001
0x00000001
0x00000001
0x00000001
0x00000001
0x00000001
0x000000ff
0x00000001
0x00000000
0x00000000
0x00000000
0x00000001
0x00000000
0x00000001
EOF
RUN

NAME=v850 DI and EI change only PSW ID and are privileged moves
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx e0076001e0876001
aoj @0~{[0].type}
aoj @4~{[0].type}
aoj @0~{[0].family}
aei
ar pc=0
ar psw=0x85
aes
ar psw
aes
ar psw
e asm.cpu=e0
aoj @0~{[0].mnemonic}
aoj @4~{[0].mnemonic}
ar pc=0
ar psw=0x85
aes
ar psw
aes
ar psw
EOF
EXPECT=<<EOF
mov
mov
priv
0x000000a5
0x00000085
di
ei
0x000000a5
0x00000085
EOF
RUN

NAME=v850 RETI selects the saved context from the original EP and NP
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx e0074001
aoj~{[0].type}
aei
ar eipc=0x120
ar eipsw=0x85
ar fepc=0x240
ar fepsw=0x4a
ar psw=0
ar pc=0
aes
ar pc
ar psw
ar psw=64
ar pc=0
aes
ar pc
ar psw
ar psw=128
ar pc=0
aes
ar pc
ar psw
ar psw=192
ar pc=0
aes
ar pc
ar psw
e asm.cpu=e0
ar psw=0
ar pc=0
aes
ar pc
ar psw
ar psw=64
ar pc=0
aes
ar pc
ar psw
ar psw=128
ar pc=0
aes
ar pc
ar psw
ar psw=192
ar pc=0
aes
ar pc
ar psw
EOF
EXPECT=<<EOF
ret
0x00000120
0x00000085
0x00000120
0x00000085
0x00000240
0x0000004a
0x00000120
0x00000085
0x00000120
0x00000085
0x00000120
0x00000085
0x00000240
0x0000004a
0x00000120
0x00000085
EOF
RUN

NAME=v850 EI and FE interrupt returns restore their own saved context
FILE=malloc://32
ARGS=-a v850 -b 32
CMDS=<<EOF
wx e0074801e0074a01e5070001ffd76039
e asm.cpu=e2v3
aoj @0~{[0].type}
aoj @4~{[0].type}
aoj @8~{[0].type}
aoj @8~{[0].family}
aoj @8~{[0].val}
aoj @12~{[0].type}
aoj @12~{[0].family}
aoj @12~{[0].val}
aei
ar eipc=0x120
ar eipsw=0x85
ar fepc=0x240
ar fepsw=0x4a
ar psw=0x80
ar pc=0
aes
ar pc
ar psw
ar pc=4
ar psw=0x40
aes
ar pc
ar psw
EOF
EXPECT=<<EOF
ret
ret
swi
priv
5
swi
priv
255
0x00000120
0x00000085
0x00000240
0x0000004a
EOF
RUN
