gem5-dev@gem5.org

The gem5 Developer List

View all threads

[M] Change in gem5/gem5[develop]: arch-vega: Add decodings for new MI100 VOP2 insts

MP
Matthew Poremba (Gerrit)
Sat, Apr 22, 2023 12:38 AM

Matthew Poremba has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/70042?usp=email )

Change subject: arch-vega: Add decodings for new MI100 VOP2 insts
......................................................................

arch-vega: Add decodings for new MI100 VOP2 insts

VOP2 with opcodes 55-61 were added in MI100 and are not in Vega10. This
changeset adds the decodings for these instructions.

The changeset does not implement the instructions, however the fatal
message is much more helpful for debugging compared so a generic
decode_invalid handler.

Change-Id: Ibde0880c35ff915bf8e50772df9ce263e55ca893

M src/arch/amdgpu/vega/decoder.cc
M src/arch/amdgpu/vega/gpu_decoder.hh
2 files changed, 84 insertions(+), 28 deletions(-)

diff --git a/src/arch/amdgpu/vega/decoder.cc
b/src/arch/amdgpu/vega/decoder.cc
index 291dd69..fd3a803 100644
--- a/src/arch/amdgpu/vega/decoder.cc
+++ b/src/arch/amdgpu/vega/decoder.cc
@@ -274,34 +274,34 @@
&Decoder::decode_OP_VOP2__V_SUBREV_U32,
&Decoder::decode_OP_VOP2__V_SUBREV_U32,
&Decoder::decode_OP_VOP2__V_SUBREV_U32,

  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_invalid,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16,
    
  •    &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8,
    
  •    &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8,
    
  •    &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8,
    
  •    &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8,
    
  •    &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4,
    
  •    &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4,
    
  •    &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4,
    
  •    &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4,
    
  •    &Decoder::decode_OP_VOP2__V_FMAC_F32,
    
  •    &Decoder::decode_OP_VOP2__V_FMAC_F32,
    
  •    &Decoder::decode_OP_VOP2__V_FMAC_F32,
    
  •    &Decoder::decode_OP_VOP2__V_FMAC_F32,
    
  •    &Decoder::decode_OP_VOP2__V_PK_FMAC_F16,
    
  •    &Decoder::decode_OP_VOP2__V_PK_FMAC_F16,
    
  •    &Decoder::decode_OP_VOP2__V_PK_FMAC_F16,
    
  •    &Decoder::decode_OP_VOP2__V_PK_FMAC_F16,
    
  •    &Decoder::decode_OP_VOP2__V_XNOR_B32,
    
  •    &Decoder::decode_OP_VOP2__V_XNOR_B32,
    
  •    &Decoder::decode_OP_VOP2__V_XNOR_B32,
    
  •    &Decoder::decode_OP_VOP2__V_XNOR_B32,
        &Decoder::subDecode_OP_VOPC,
        &Decoder::subDecode_OP_VOPC,
        &Decoder::subDecode_OP_VOPC,
    

@@ -4172,6 +4172,55 @@
}

  GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_DOT2C_F32_F16(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_DOT2C_I32_I16(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_DOT4C_I32_I8(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_DOT8C_I32_I4(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_FMAC_F32(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_PK_FMAC_F16(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
  • Decoder::decode_OP_VOP2__V_XNOR_B32(MachInst iFmt)
  • {
  •    fatal("Trying to decode instruction without a class\n");
    
  •    return nullptr;
    
  • }
  • GPUStaticInst*
    Decoder::decode_OP_SOP2__S_ADD_U32(MachInst iFmt)
    {
    return new Inst_SOP2__S_ADD_U32(&iFmt->iFmt_SOP2);
    diff --git a/src/arch/amdgpu/vega/gpu_decoder.hh
    b/src/arch/amdgpu/vega/gpu_decoder.hh
    index 1be4386..af989e0 100644
    --- a/src/arch/amdgpu/vega/gpu_decoder.hh
    +++ b/src/arch/amdgpu/vega/gpu_decoder.hh
    @@ -1358,6 +1358,13 @@
    GPUStaticInst* decode_OP_VOP2__V_ADD_U32(MachInst);
    GPUStaticInst* decode_OP_VOP2__V_SUB_U32(MachInst);
    GPUStaticInst* decode_OP_VOP2__V_SUBREV_U32(MachInst);
  •    GPUStaticInst* decode_OP_VOP2__V_DOT2C_F32_F16(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_DOT2C_I32_I16(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_DOT4C_I32_I8(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_DOT8C_I32_I4(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_FMAC_F32(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_PK_FMAC_F16(MachInst);
    
  •    GPUStaticInst* decode_OP_VOP2__V_XNOR_B32(MachInst);
        GPUStaticInst* decode_OP_VOPC__V_CMP_CLASS_F32(MachInst);
        GPUStaticInst* decode_OP_VOPC__V_CMPX_CLASS_F32(MachInst);
        GPUStaticInst* decode_OP_VOPC__V_CMP_CLASS_F64(MachInst);
    

--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/70042?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings

Gerrit-MessageType: newchange
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ibde0880c35ff915bf8e50772df9ce263e55ca893
Gerrit-Change-Number: 70042
Gerrit-PatchSet: 1
Gerrit-Owner: Matthew Poremba matthew.poremba@amd.com

Matthew Poremba has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/70042?usp=email ) Change subject: arch-vega: Add decodings for new MI100 VOP2 insts ...................................................................... arch-vega: Add decodings for new MI100 VOP2 insts VOP2 with opcodes 55-61 were added in MI100 and are not in Vega10. This changeset adds the decodings for these instructions. The changeset does not implement the instructions, however the fatal message is much more helpful for debugging compared so a generic decode_invalid handler. Change-Id: Ibde0880c35ff915bf8e50772df9ce263e55ca893 --- M src/arch/amdgpu/vega/decoder.cc M src/arch/amdgpu/vega/gpu_decoder.hh 2 files changed, 84 insertions(+), 28 deletions(-) diff --git a/src/arch/amdgpu/vega/decoder.cc b/src/arch/amdgpu/vega/decoder.cc index 291dd69..fd3a803 100644 --- a/src/arch/amdgpu/vega/decoder.cc +++ b/src/arch/amdgpu/vega/decoder.cc @@ -274,34 +274,34 @@ &Decoder::decode_OP_VOP2__V_SUBREV_U32, &Decoder::decode_OP_VOP2__V_SUBREV_U32, &Decoder::decode_OP_VOP2__V_SUBREV_U32, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, - &Decoder::decode_invalid, + &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16, + &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16, + &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16, + &Decoder::decode_OP_VOP2__V_DOT2C_F32_F16, + &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16, + &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16, + &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16, + &Decoder::decode_OP_VOP2__V_DOT2C_I32_I16, + &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8, + &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8, + &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8, + &Decoder::decode_OP_VOP2__V_DOT4C_I32_I8, + &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4, + &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4, + &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4, + &Decoder::decode_OP_VOP2__V_DOT8C_I32_I4, + &Decoder::decode_OP_VOP2__V_FMAC_F32, + &Decoder::decode_OP_VOP2__V_FMAC_F32, + &Decoder::decode_OP_VOP2__V_FMAC_F32, + &Decoder::decode_OP_VOP2__V_FMAC_F32, + &Decoder::decode_OP_VOP2__V_PK_FMAC_F16, + &Decoder::decode_OP_VOP2__V_PK_FMAC_F16, + &Decoder::decode_OP_VOP2__V_PK_FMAC_F16, + &Decoder::decode_OP_VOP2__V_PK_FMAC_F16, + &Decoder::decode_OP_VOP2__V_XNOR_B32, + &Decoder::decode_OP_VOP2__V_XNOR_B32, + &Decoder::decode_OP_VOP2__V_XNOR_B32, + &Decoder::decode_OP_VOP2__V_XNOR_B32, &Decoder::subDecode_OP_VOPC, &Decoder::subDecode_OP_VOPC, &Decoder::subDecode_OP_VOPC, @@ -4172,6 +4172,55 @@ } GPUStaticInst* + Decoder::decode_OP_VOP2__V_DOT2C_F32_F16(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_DOT2C_I32_I16(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_DOT4C_I32_I8(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_DOT8C_I32_I4(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_FMAC_F32(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_PK_FMAC_F16(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* + Decoder::decode_OP_VOP2__V_XNOR_B32(MachInst iFmt) + { + fatal("Trying to decode instruction without a class\n"); + return nullptr; + } + + GPUStaticInst* Decoder::decode_OP_SOP2__S_ADD_U32(MachInst iFmt) { return new Inst_SOP2__S_ADD_U32(&iFmt->iFmt_SOP2); diff --git a/src/arch/amdgpu/vega/gpu_decoder.hh b/src/arch/amdgpu/vega/gpu_decoder.hh index 1be4386..af989e0 100644 --- a/src/arch/amdgpu/vega/gpu_decoder.hh +++ b/src/arch/amdgpu/vega/gpu_decoder.hh @@ -1358,6 +1358,13 @@ GPUStaticInst* decode_OP_VOP2__V_ADD_U32(MachInst); GPUStaticInst* decode_OP_VOP2__V_SUB_U32(MachInst); GPUStaticInst* decode_OP_VOP2__V_SUBREV_U32(MachInst); + GPUStaticInst* decode_OP_VOP2__V_DOT2C_F32_F16(MachInst); + GPUStaticInst* decode_OP_VOP2__V_DOT2C_I32_I16(MachInst); + GPUStaticInst* decode_OP_VOP2__V_DOT4C_I32_I8(MachInst); + GPUStaticInst* decode_OP_VOP2__V_DOT8C_I32_I4(MachInst); + GPUStaticInst* decode_OP_VOP2__V_FMAC_F32(MachInst); + GPUStaticInst* decode_OP_VOP2__V_PK_FMAC_F16(MachInst); + GPUStaticInst* decode_OP_VOP2__V_XNOR_B32(MachInst); GPUStaticInst* decode_OP_VOPC__V_CMP_CLASS_F32(MachInst); GPUStaticInst* decode_OP_VOPC__V_CMPX_CLASS_F32(MachInst); GPUStaticInst* decode_OP_VOPC__V_CMP_CLASS_F64(MachInst); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/70042?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-MessageType: newchange Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Ibde0880c35ff915bf8e50772df9ce263e55ca893 Gerrit-Change-Number: 70042 Gerrit-PatchSet: 1 Gerrit-Owner: Matthew Poremba <matthew.poremba@amd.com>