On 9/11/19 2:25 AM, liuzhiwei wrote: > uint64_t fpr[32]; /* assume both F and D extensions */ > + > + /* vector coprocessor state. */ > + struct { > + union VECTOR { > + float64 f64[VUNIT(64)]; > + float32 f32[VUNIT(32)]; > + float16 f16[VUNIT(16)]; > + uint64_t u64[VUNIT(64)]; > + int64_t s64[VUNIT(64)]; > + uint32_t u32[VUNIT(32)]; > + int32_t s32[VUNIT(32)]; > + uint16_t u16[VUNIT(16)]; > + int16_t s16[VUNIT(16)]; > + uint8_t u8[VUNIT(8)]; > + int8_t s8[VUNIT(8)]; > + } vreg[32]; > + target_ulong vxrm; > + target_ulong vxsat; > + target_ulong vl; > + target_ulong vstart; > + target_ulong vtype; > + float_status fp_status; > + } vfp;
Is there a good reason why you're putting all of these into a sub-structure? And more, a sub-structure whose name, vfp, looks like it is copied from ARM? Why are the vxrm, vxsat, vl, vstart, vtype fields sized target_ulong? I would think that most could be uint32_t. Although I suppose frm is also target_ulong and need not be... Why are you adding a new fp_status field? The new vector floating point instructions set the exact same fflags exception bits as normal fp instructions. r~