On 8/23/19 8:28 AM, Peter Maydell wrote:
>> + gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), mop | s->be_data);
>> + disas_set_da_iss(s, mop, a->rt | ISSIsAcqRel | ISSIsWrite);
...
>> - switch (op1) {
>> - case 0: /* stl */
>> - gen_aa32_st32_iss(s, tmp, addr,
>> - get_mem_index(s),
>> - rm | ISSIsAcqRel);
>> - break;
>> - case 2: /* stlb */
>> - gen_aa32_st8_iss(s, tmp, addr,
>> - get_mem_index(s),
>> - rm | ISSIsAcqRel);
>> - break;
>> - case 3: /* stlh */
>> - gen_aa32_st16_iss(s, tmp, addr,
>> - get_mem_index(s),
>> - rm | ISSIsAcqRel);
>> - break;
>
> Any particular reason for doing separate gen_aa32_st_i32()
> and disas_set_da_iss() calls rather than using the _gen_aa32_st32_iss()
> function that the old decoder did?
I think gen_aa32_st_i32 with the MemOp argument is preferable to a switch
statement that enumerates the different sizes.
We don't have a version of gen_aa32_st_i32 that also passes the ISS. While we
could add one, a separate call seems just as easy.
r~