On 19.09.2012, at 13:34, Alexander Graf wrote:

> 
> On 19.09.2012, at 13:29, Peter Maydell wrote:
> 
>> On 19 September 2012 01:14, Richard Henderson <r...@twiddle.net> wrote:
>>> On 09/18/2012 01:18 PM, Alexander Graf wrote:
>>>>> -    /* remember what pgm exeption this was */
>>>>> +    /* Remember what pgm exeption this was.  */
>> 
>> ...if you're changing this comment then at least fix the typo
>> ("exception")...
>> 
>>>>>     tmp = tcg_const_i32(code);
>>>>>     tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUS390XState, int_pgm_code));
>>>>>     tcg_temp_free_i32(tmp);
>>>>> -    tmp = tcg_const_i32(ilc);
>>>>> +    tmp = tcg_const_i32(s->next_pc - s->pc);
>>>> 
>>>> Mind to explain this one?
>>> 
>>> ILC = the size of the insn.  Rather than passing ILC around into
>>> gen_program_exception, get it back from the s->next_pc value that
>>> we stored into DisasContext.
>> 
>> ...but isn't (s-next_pc - s->pc) ilc*2, not ilc? Compare this hunk
>> from elsewhere in the patch:
>> 
>> -        tmp32_2 = tcg_const_i32(ilc * 2);
>> -        tmp32_3 = tcg_const_i32(EXCP_SVC);
>> +        tmp32_2 = tcg_const_i32(s->next_pc - s->pc);
> 
> Yes, it is, and hence it's correct. The exception field encodes the real 
> instruction length, not the ILC bits in the opcode. Maybe the naming is 
> unfortunate...

Or maybe not. For SVC we seem to pass in the full instruction length, while PGM 
only gets ILC. So the above hunk is wrong.

Richard, please double-check all the ilc passing again with the spec.


Alex


Reply via email to