From a546ac2a373c73f052d861e4475de302bdd98b01 Mon Sep 17 00:00:00 2001 From: Alessandro Di Federico Date: Thu, 15 Jul 2021 11:23:31 +0200 Subject: [PATCH] Introduce model::Register::getSize --- include/revng/Model/Register.h | 143 +++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/include/revng/Model/Register.h b/include/revng/Model/Register.h index 7ff86c8d1..184b9759a 100644 --- a/include/revng/Model/Register.h +++ b/include/revng/Model/Register.h @@ -444,6 +444,149 @@ inline llvm::StringRef getRegisterName(Values V) { } } +/// Return the size of the register in bytes +inline size_t getSize(Values V) { + switch (V) { + case Invalid: + revng_abort(); + case eax_x86: + case ebx_x86: + case ecx_x86: + case edx_x86: + case esi_x86: + case edi_x86: + case ebp_x86: + case esp_x86: + return 4; + case rax_x86_64: + case rbx_x86_64: + case rcx_x86_64: + case rdx_x86_64: + case rbp_x86_64: + case rsp_x86_64: + case rsi_x86_64: + case rdi_x86_64: + case r8_x86_64: + case r9_x86_64: + case r10_x86_64: + case r11_x86_64: + case r12_x86_64: + case r13_x86_64: + case r14_x86_64: + case r15_x86_64: + case xmm0_x86_64: + case xmm1_x86_64: + case xmm2_x86_64: + case xmm3_x86_64: + case xmm4_x86_64: + case xmm5_x86_64: + case xmm6_x86_64: + case xmm7_x86_64: + return 8; + case r0_arm: + case r1_arm: + case r2_arm: + case r3_arm: + case r4_arm: + case r5_arm: + case r6_arm: + case r7_arm: + case r8_arm: + case r9_arm: + case r10_arm: + case r11_arm: + case r12_arm: + case r13_arm: + case r14_arm: + return 4; + case x0_aarch64: + case x1_aarch64: + case x2_aarch64: + case x3_aarch64: + case x4_aarch64: + case x5_aarch64: + case x6_aarch64: + case x7_aarch64: + case x8_aarch64: + case x9_aarch64: + case x10_aarch64: + case x11_aarch64: + case x12_aarch64: + case x13_aarch64: + case x14_aarch64: + case x15_aarch64: + case x16_aarch64: + case x17_aarch64: + case x18_aarch64: + case x19_aarch64: + case x20_aarch64: + case x21_aarch64: + case x22_aarch64: + case x23_aarch64: + case x24_aarch64: + case x25_aarch64: + case x26_aarch64: + case x27_aarch64: + case x28_aarch64: + case x29_aarch64: + case lr_aarch64: + case sp_aarch64: + return 8; + case v0_mips: + case v1_mips: + case a0_mips: + case a1_mips: + case a2_mips: + case a3_mips: + case s0_mips: + case s1_mips: + case s2_mips: + case s3_mips: + case s4_mips: + case s5_mips: + case s6_mips: + case s7_mips: + case gp_mips: + case sp_mips: + case fp_mips: + case ra_mips: + return 4; + case r0_systemz: + case r1_systemz: + case r2_systemz: + case r3_systemz: + case r4_systemz: + case r5_systemz: + case r6_systemz: + case r7_systemz: + case r8_systemz: + case r9_systemz: + case r10_systemz: + case r11_systemz: + case r12_systemz: + case r13_systemz: + case r14_systemz: + case r15_systemz: + case f0_systemz: + case f1_systemz: + case f2_systemz: + case f3_systemz: + case f4_systemz: + case f5_systemz: + case f6_systemz: + case f7_systemz: + case f8_systemz: + case f9_systemz: + case f10_systemz: + case f11_systemz: + case f12_systemz: + case f13_systemz: + case f14_systemz: + case f15_systemz: + return 8; + } +} + inline Values fromName(llvm::StringRef Name) { return getValueFromYAMLScalar(Name); }