From f4a66d24771f98ddade345d434a7eab0a57c4fc4 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 17 Sep 2018 00:53:38 -0400 Subject: [PATCH] data_processing_bitfield: Move datasize variables after early-exit conditionals Moves the declaration of datasize to the scope that it's used within. This also takes the opportunity to apply const where applicable, and make early-exits all vertically consistent with one another. --- .../impl/data_processing_bitfield.cpp | 73 +++++++++++-------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/src/frontend/A64/translate/impl/data_processing_bitfield.cpp b/src/frontend/A64/translate/impl/data_processing_bitfield.cpp index 9ca50e9b..06da72e6 100644 --- a/src/frontend/A64/translate/impl/data_processing_bitfield.cpp +++ b/src/frontend/A64/translate/impl/data_processing_bitfield.cpp @@ -15,64 +15,79 @@ static IR::U32U64 ReplicateBit(IREmitter& ir, const IR::U32U64& value, u8 bit_po } bool TranslatorVisitor::SBFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd) { - size_t datasize = sf ? 64 : 32; + if (sf && !N) { + return ReservedValue(); + } - if (sf && !N) return ReservedValue(); - if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) return ReservedValue(); + if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) { + return ReservedValue(); + } - u8 R = immr.ZeroExtend(); - u8 S = imms.ZeroExtend(); - auto masks = DecodeBitMasks(N, imms, immr, false); - if (!masks) return ReservedValue(); + const u8 R = immr.ZeroExtend(); + const u8 S = imms.ZeroExtend(); + const auto masks = DecodeBitMasks(N, imms, immr, false); + if (!masks) { + return ReservedValue(); + } - auto src = X(datasize, Rn); + const size_t datasize = sf ? 64 : 32; + const auto src = X(datasize, Rn); auto bot = ir.And(ir.RotateRight(src, ir.Imm8(R)), I(datasize, masks->wmask)); auto top = ReplicateBit(ir, src, S); top = ir.And(top, I(datasize, ~masks->tmask)); bot = ir.And(bot, I(datasize, masks->tmask)); - X(datasize, Rd, ir.Or(top, bot)); + X(datasize, Rd, ir.Or(top, bot)); return true; } bool TranslatorVisitor::BFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd) { - size_t datasize = sf ? 64 : 32; + if (sf && !N) { + return ReservedValue(); + } - if (sf && !N) return ReservedValue(); - if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) return ReservedValue(); + if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) { + return ReservedValue(); + } - u8 R = immr.ZeroExtend(); - auto masks = DecodeBitMasks(N, imms, immr, false); - if (!masks) return ReservedValue(); + const u8 R = immr.ZeroExtend(); + const auto masks = DecodeBitMasks(N, imms, immr, false); + if (!masks) { + return ReservedValue(); + } - auto dst = X(datasize, Rd); - auto src = X(datasize, Rn); + const size_t datasize = sf ? 64 : 32; + const auto dst = X(datasize, Rd); + const auto src = X(datasize, Rn); - auto bot = ir.Or(ir.And(dst, I(datasize, ~masks->wmask)), ir.And(ir.RotateRight(src, ir.Imm8(R)), I(datasize, masks->wmask))); + const auto bot = ir.Or(ir.And(dst, I(datasize, ~masks->wmask)), ir.And(ir.RotateRight(src, ir.Imm8(R)), I(datasize, masks->wmask))); X(datasize, Rd, ir.Or(ir.And(dst, I(datasize, ~masks->tmask)), ir.And(bot, I(datasize, masks->tmask)))); - return true; } bool TranslatorVisitor::UBFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd) { - size_t datasize = sf ? 64 : 32; + if (sf && !N) { + return ReservedValue(); + } - if (sf && !N) return ReservedValue(); - if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) return ReservedValue(); + if (!sf && (N || immr.Bit<5>() || imms.Bit<5>())) { + return ReservedValue(); + } - u8 R = immr.ZeroExtend(); - auto masks = DecodeBitMasks(N, imms, immr, false); - if (!masks) return ReservedValue(); + const u8 R = immr.ZeroExtend(); + const auto masks = DecodeBitMasks(N, imms, immr, false); + if (!masks) { + return ReservedValue(); + } - auto src = X(datasize, Rn); - - auto bot = ir.And(ir.RotateRight(src, ir.Imm8(R)), I(datasize, masks->wmask)); + const size_t datasize = sf ? 64 : 32; + const auto src = X(datasize, Rn); + const auto bot = ir.And(ir.RotateRight(src, ir.Imm8(R)), I(datasize, masks->wmask)); X(datasize, Rd, ir.And(bot, I(datasize, masks->tmask))); - return true; }