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~

Reply via email to