diff options
author | Marco Liebel <quic_mliebel@quicinc.com> | 2023-05-22 10:47:08 -0700 |
---|---|---|
committer | Taylor Simpson <tsimpson@quicinc.com> | 2023-05-26 07:03:41 -0700 |
commit | 3fd49e22171a019beebffdda081380a5276525a6 (patch) | |
tree | ffe3fa9d78e37ce94aa2d3a8b60315c465e10d42 /hw/ide | |
parent | 0d57cd61d95fbbe86a1ce3b2ef2f8f1254b4116a (diff) | |
download | qemu-3fd49e22171a019beebffdda081380a5276525a6.zip qemu-3fd49e22171a019beebffdda081380a5276525a6.tar.gz qemu-3fd49e22171a019beebffdda081380a5276525a6.tar.bz2 |
Hexagon (target/hexagon) Fix assignment to tmp registers
The order in which instructions are generated by gen_insn() influences
assignment to tmp registers. During generation, tmp instructions (e.g.
generate_V6_vassign_tmp) use vreg_src_off() to determine what kind of
register to use as source. If some instruction (e.g.
generate_V6_vmpyowh_64_acc) uses a tmp register but is generated prior
to the corresponding tmp instruction, the vregs_updated_tmp bit map
isn't updated in time.
Exmple:
{ v14.tmp = v16; v25 = v14 } This works properly because
generate_V6_vassign_tmp is generated before generate_V6_vassign
and the bit map is updated.
{ v15:14.tmp = vcombine(v21, v16); v25:24 += vmpyo(v18.w,v14.h) }
This does not work properly because vmpyo is generated before
vcombine and therefore the bit map does not yet know that there's
a tmp register.
The parentheses in the decoding function were in the wrong place.
Moving them to the correct location makes shuffling of .tmp vector
registers work as expected.
Signed-off-by: Marco Liebel <quic_mliebel@quicinc.com>
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
Tested-by: Taylor Simpson <tsimpson@quicinc.com>
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
Reviewed-by: Brian Cain <bcain@quicinc.com>
Message-Id: <20230522174708.464197-1-quic_mliebel@quicinc.com>
Diffstat (limited to 'hw/ide')
0 files changed, 0 insertions, 0 deletions