On 6/6/19 12:45 PM, Peter Maydell wrote:
> + n = (a->imm4h << 28) & 0x80000000;
> + i = ((a->imm4h << 4) & 0x70) | a->imm4l;
> + if (i & 0x40) {
> + i |= 0x780;
> + } else {
> + i |= 0x800;
> + }
> + n |= i << 19;
Can we reuse vfp_expand_imm here? Given that you don't have pure code motion
from the old code (due to field extraction) it doesn't feel wrong to go ahead
and fix this wart now.
> +VMOV_imm_sp ---- 1110 1.11 imm4h:4 .... 1010 0000 imm4l:4 \
> + vd=%vd_sp
We should concatenate imm4h and imm4l here, so that trans_VMOV_imm_* only needs
to do "n = vfp_expand_imm(MO_32, a->imm);".
(We can't use !function to expand the whole float constant because the
decodetree fields are "int", and we'd need to store a "uint64_t" for dp. C.f.
the SVE trans_FDUP.)
r~