diff --git a/src/broadcom/qpu/qpu_instr.c b/src/broadcom/qpu/qpu_instr.c index c30f4bbbccf..44f20618a5a 100644 --- a/src/broadcom/qpu/qpu_instr.c +++ b/src/broadcom/qpu/qpu_instr.c @@ -179,6 +179,10 @@ v3d_qpu_add_op_name(enum v3d_qpu_add_op op) [V3D_QPU_A_UTOF] = "utof", [V3D_QPU_A_MOV] = "mov", [V3D_QPU_A_FMOV] = "fmov", + [V3D_QPU_A_VPACK] = "vpack", + [V3D_QPU_A_V8PACK] = "v8pack", + [V3D_QPU_A_V10PACK] = "v10pack", + [V3D_QPU_A_V11FPACK] = "v11fpack", }; if (op >= ARRAY_SIZE(op_names)) @@ -201,6 +205,12 @@ v3d_qpu_mul_op_name(enum v3d_qpu_mul_op op) [V3D_QPU_M_MOV] = "mov", [V3D_QPU_M_NOP] = "nop", [V3D_QPU_M_FMUL] = "fmul", + [V3D_QPU_M_FTOUNORM16] = "ftounorm16", + [V3D_QPU_M_FTOSNORM16] = "ftosnorm16", + [V3D_QPU_M_VFTOUNORM8] = "vftounorm8", + [V3D_QPU_M_VFTOSNORM8] = "vftosnorm8", + [V3D_QPU_M_VFTOUNORM10LO] = "vftounorm10lo", + [V3D_QPU_M_VFTOUNORM10HI] = "vftounorm10hi", }; if (op >= ARRAY_SIZE(op_names)) @@ -463,6 +473,10 @@ static const uint8_t add_op_args[] = { [V3D_QPU_A_MOV] = D | A, [V3D_QPU_A_FMOV] = D | A, + [V3D_QPU_A_VPACK] = D | A | B, + [V3D_QPU_A_V8PACK] = D | A | B, + [V3D_QPU_A_V10PACK] = D | A | B, + [V3D_QPU_A_V11FPACK] = D | A | B, }; static const uint8_t mul_op_args[] = { @@ -476,6 +490,12 @@ static const uint8_t mul_op_args[] = { [V3D_QPU_M_NOP] = 0, [V3D_QPU_M_MOV] = D | A, [V3D_QPU_M_FMUL] = D | A | B, + [V3D_QPU_M_FTOUNORM16] = D | A, + [V3D_QPU_M_FTOSNORM16] = D | A, + [V3D_QPU_M_VFTOUNORM8] = D | A, + [V3D_QPU_M_VFTOSNORM8] = D | A, + [V3D_QPU_M_VFTOUNORM10LO] = D | A, + [V3D_QPU_M_VFTOUNORM10HI] = D | A, }; bool diff --git a/src/broadcom/qpu/qpu_instr.h b/src/broadcom/qpu/qpu_instr.h index d408fb426fa..56eee9f9cac 100644 --- a/src/broadcom/qpu/qpu_instr.h +++ b/src/broadcom/qpu/qpu_instr.h @@ -231,6 +231,10 @@ enum v3d_qpu_add_op { /* V3D 7.x */ V3D_QPU_A_FMOV, V3D_QPU_A_MOV, + V3D_QPU_A_VPACK, + V3D_QPU_A_V8PACK, + V3D_QPU_A_V10PACK, + V3D_QPU_A_V11FPACK, }; enum v3d_qpu_mul_op { @@ -244,6 +248,14 @@ enum v3d_qpu_mul_op { V3D_QPU_M_MOV, V3D_QPU_M_NOP, V3D_QPU_M_FMUL, + + /* V3D 7.x */ + V3D_QPU_M_FTOUNORM16, + V3D_QPU_M_FTOSNORM16, + V3D_QPU_M_VFTOUNORM8, + V3D_QPU_M_VFTOSNORM8, + V3D_QPU_M_VFTOUNORM10LO, + V3D_QPU_M_VFTOUNORM10HI, }; enum v3d_qpu_output_pack { diff --git a/src/broadcom/qpu/qpu_pack.c b/src/broadcom/qpu/qpu_pack.c index c547bba9032..54e31e05a59 100644 --- a/src/broadcom/qpu/qpu_pack.c +++ b/src/broadcom/qpu/qpu_pack.c @@ -786,6 +786,9 @@ static const struct opcode_desc add_ops_v71[] = { { 246, 246, .raddr_mask = OP_RANGE(32, 34), V3D_QPU_A_ITOF, 71 }, { 246, 246, .raddr_mask = OP_RANGE(36, 38), V3D_QPU_A_UTOF, 71 }, + { 247, 247, .raddr_mask = ANYOPMASK, V3D_QPU_A_VPACK, 71 }, + { 248, 248, .raddr_mask = ANYOPMASK, V3D_QPU_A_V8PACK, 71 }, + { 249, 249, .raddr_mask = OP_RANGE(0, 2), V3D_QPU_A_FMOV, 71 }, { 249, 249, .raddr_mask = OP_RANGE(4, 6), V3D_QPU_A_FMOV, 71 }, { 249, 249, .raddr_mask = OP_RANGE(8, 10), V3D_QPU_A_FMOV, 71 }, @@ -800,6 +803,8 @@ static const struct opcode_desc add_ops_v71[] = { { 249, 249, .raddr_mask = OP_MASK(15), V3D_QPU_A_MOV, 71 }, { 249, 249, .raddr_mask = OP_MASK(19), V3D_QPU_A_MOV, 71 }, + { 250, 250, .raddr_mask = ANYOPMASK, V3D_QPU_A_V10PACK, 71 }, + { 251, 251, .raddr_mask = ANYOPMASK, V3D_QPU_A_V11FPACK, 71 }, }; static const struct opcode_desc mul_ops_v71[] = { @@ -825,6 +830,13 @@ static const struct opcode_desc mul_ops_v71[] = { { 14, 14, .raddr_mask = OP_MASK(15), V3D_QPU_M_MOV, 71 }, { 14, 14, .raddr_mask = OP_MASK(19), V3D_QPU_M_MOV, 71 }, + { 14, 14, .raddr_mask = OP_MASK(32), V3D_QPU_M_FTOUNORM16, 71 }, + { 14, 14, .raddr_mask = OP_MASK(33), V3D_QPU_M_FTOSNORM16, 71 }, + { 14, 14, .raddr_mask = OP_MASK(34), V3D_QPU_M_VFTOUNORM8, 71 }, + { 14, 14, .raddr_mask = OP_MASK(35), V3D_QPU_M_VFTOSNORM8, 71 }, + { 14, 14, .raddr_mask = OP_MASK(48), V3D_QPU_M_VFTOUNORM10LO, 71 }, + { 14, 14, .raddr_mask = OP_MASK(49), V3D_QPU_M_VFTOUNORM10HI, 71 }, + { 14, 14, .raddr_mask = OP_MASK(63), V3D_QPU_M_NOP, 71 }, { 16, 63, .raddr_mask = ANYOPMASK, V3D_QPU_M_FMUL },