On 5/27/15 05:39, Chen Gang wrote: > On 5/12/15 05:26, Chen Gang wrote: >>>>>> +} >>>>>> + >>>>>> +/* >>>>>> + * Functional Description >>>>>> + * >>>>>> + * uint64_t output = 0; >>>>>> + * uint32_t counter; >>>>>> + * for (counter = 0; counter < (WORD_SIZE / 32); counter++) >>>>>> + * { >>>>>> + * bool asel = ((counter & 1) == 1); >>>>>> + * int in_sel = 0 + counter / 2; >>>>>> + * int32_t srca = get4Byte (rf[SrcA], in_sel); >>>>>> + * int32_t srcb = get4Byte (rf[SrcB], in_sel); >>>>>> + * output = set4Byte (output, counter, (asel ? srca : srcb)); >>>>>> + * } >>>>>> + * rf[Dest] = output; >>>>>> +*/ >>>>>> + >>>>>> +static void gen_v4int_l(struct DisasContext *dc, >>>>>> + uint8_t rdst, uint8_t rsrc, uint8_t rsrcb) >>>>>> +{ >>>>>> + TCGv vdst = dest_gr(dc, rdst); >>>>>> + TCGv tmp = tcg_temp_new_i64(); >>>>>> + >>>>>> + qemu_log_mask(CPU_LOG_TB_IN_ASM, "v4int_l r%d, r%d, r%d\n", >>>>>> + rdst, rsrc, rsrcb); >>>>>> + >>>>>> + tcg_gen_andi_i64(vdst, load_gr(dc, rsrc), 0xffffffff); >>>>>> + tcg_gen_shli_i64(vdst, vdst, 8); >>>>>> + tcg_gen_andi_i64(tmp, load_gr(dc, rsrcb), 0xffffffff); >>>>>> + tcg_gen_or_i64(vdst, vdst, tmp); >>>> >>>> And herein is a bug, that I'd hope using the helper functions would avoid: >>>> you >>>> shift by 8 instead of 32. This function simplifies to >>>> >> OK, thank you very much. >> >>>> tcg_gen_deposit_i64(vdst, load_gr(dc, rsrc), load_gr(dc, rsrcb), >>>> 32, 32); >>>>
Oh, it should be: tcg_gen_deposit_i64(vdst, load_gr(dc, rsrcb), load_gr(dc, rsrc), 32, 32); > > Oh, it is: > > tcg_gen_deposit_i64(vdst, load_gr(dc, rsrc), load_gr(dc, rsrcb), > 0, 32); > >> OK, thanks. >> > > Thanks. > -- Chen Gang Open, share, and attitude like air, water, and life which God blessed