From 8ca3f0a453ab745382e2c0632466531c5f0743a4 Mon Sep 17 00:00:00 2001 From: Dmitry Selyutin Date: Thu, 7 Sep 2023 22:29:46 +0300 Subject: [PATCH] libsvp64: support paired operands --- src/libsvp64/codegen.py | 18 +++++++++++++----- src/libsvp64/svp64.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/libsvp64/codegen.py b/src/libsvp64/codegen.py index 6faff32b..4e06e0ad 100644 --- a/src/libsvp64/codegen.py +++ b/src/libsvp64/codegen.py @@ -301,16 +301,24 @@ class DisGenSource(Source): yield "flags = SVP64_OPERAND_SIGNED;" self.emit("break;") - def gpr_handler(span): - yield from generic_handler(span, "SVP64_OPERAND_GPR") - - def fpr_handler(span): - yield from generic_handler(span, "SVP64_OPERAND_FPR") + def gpr_handler(span, pair=False): + if not pair: + yield from generic_handler(span, "SVP64_OPERAND_GPR") + else: + yield from generic_handler(span, "(SVP64_OPERAND_GPR | SVP64_OPERAND_PAIR)") + + def fpr_handler(span, pair=False): + if not pair: + yield from generic_handler(span, "SVP64_OPERAND_FPR") + else: + yield from generic_handler(span, "(SVP64_OPERAND_FPR | SVP64_OPERAND_PAIR)") handlers = { insndb.SignedOperand: signed_handler, insndb.GPROperand: gpr_handler, insndb.FPROperand: fpr_handler, + insndb.GPRPairOperand: lambda span: gpr_handler(span, True), + insndb.FPRPairOperand: lambda span: fpr_handler(span, True), } self.emit(f"case 0x{(path + 1):02x}: /* {', '.join(node.names)} */") with self: diff --git a/src/libsvp64/svp64.h b/src/libsvp64/svp64.h index 7b502024..f377c97a 100644 --- a/src/libsvp64/svp64.h +++ b/src/libsvp64/svp64.h @@ -35,6 +35,7 @@ struct svp64_operand { #define SVP64_OPERAND_SIGNED (UINT32_C(1) << UINT32_C(0)) #define SVP64_OPERAND_GPR (UINT32_C(1) << UINT32_C(1)) #define SVP64_OPERAND_FPR (UINT32_C(1) << UINT32_C(2)) +#define SVP64_OPERAND_PAIR (UINT32_C(1) << UINT32_C(3)) struct svp64_ctx { struct svp64_record const *record; -- 2.30.2