summaryrefslogtreecommitdiff
path: root/plugins/arm/v7/helpers.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/arm/v7/helpers.h')
-rw-r--r--plugins/arm/v7/helpers.h70
1 files changed, 48 insertions, 22 deletions
diff --git a/plugins/arm/v7/helpers.h b/plugins/arm/v7/helpers.h
index 3f8d97c..d41f6e8 100644
--- a/plugins/arm/v7/helpers.h
+++ b/plugins/arm/v7/helpers.h
@@ -26,11 +26,10 @@
#include <arch/immediate.h>
+#include <arch/operands/register.h>
#include "pseudo.h"
-#include "register.h"
-#include "operands/coproc.h"
#include "operands/estate.h"
#include "operands/it.h"
#include "operands/maccess.h"
@@ -38,7 +37,9 @@
#include "operands/reglist.h"
#include "operands/rotation.h"
#include "operands/shift.h"
-#include "operands/specreg.h"
+#include "registers/basic.h"
+#include "registers/coproc.h"
+#include "registers/special.h"
@@ -96,7 +97,12 @@
#define CoProcessor(idx) \
({ \
GArchOperand *__result; \
- __result = g_armv7_coproc_operand_new(idx); \
+ GArchRegister *__reg; \
+ __reg = g_armv7_cp_register_new(idx); \
+ if (__reg == NULL) \
+ __result = NULL; \
+ else \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -216,12 +222,12 @@
#define NextRegister(idx) \
({ \
GArchOperand *__result; \
- GArmV7Register *__reg; \
- __reg = g_armv7_register_new(idx + 1); \
+ GArchRegister *__reg; \
+ __reg = g_armv7_basic_register_new(idx + 1); \
if (__reg == NULL) \
__result = NULL; \
else \
- __result = g_armv7_register_operand_new(__reg); \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -249,12 +255,12 @@
#define Register(idx) \
({ \
GArchOperand *__result; \
- GArmV7Register *__reg; \
- __reg = g_armv7_register_new(idx); \
+ GArchRegister *__reg; \
+ __reg = g_armv7_basic_register_new(idx); \
if (__reg == NULL) \
__result = NULL; \
else \
- __result = g_armv7_register_operand_new(__reg); \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -284,7 +290,12 @@
#define SpecRegAPSR() \
({ \
GArchOperand *__result; \
- __result = g_armv7_specreg_operand_new(SRT_APSR); \
+ GArchRegister *__reg; \
+ __reg = g_armv7_special_register_new(SRT_APSR); \
+ if (__reg == NULL) \
+ __result = NULL; \
+ else \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -292,21 +303,26 @@
#define SpecRegFromMask(mask) \
({ \
GArchOperand *__result; \
+ GArchRegister *__reg; \
switch (mask) \
{ \
case b10: \
- __result = g_armv7_specreg_operand_new(SRT_APSR_NZCVQ); \
+ __reg = g_armv7_special_register_new(SRT_APSR_NZCVQ); \
break; \
case b1: \
- __result = g_armv7_specreg_operand_new(SRT_APSR_G); \
+ __reg = g_armv7_special_register_new(SRT_APSR_G); \
break; \
case b11: \
- __result = g_armv7_specreg_operand_new(SRT_APSR_NZCVQG); \
+ __reg = g_armv7_special_register_new(SRT_APSR_NZCVQG); \
break; \
default: \
- __result = NULL; \
+ __reg = NULL; \
break; \
} \
+ if (__reg == NULL) \
+ __result = NULL; \
+ else \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -314,27 +330,32 @@
#define SpecRegFromReg(reg) \
({ \
GArchOperand *__result; \
+ GArchRegister *__reg; \
switch (reg) \
{ \
case b0: \
- __result = g_armv7_specreg_operand_new(SRT_FPSID); \
+ __reg = g_armv7_special_register_new(SRT_FPSID); \
break; \
case b1: \
- __result = g_armv7_specreg_operand_new(SRT_FPSCR); \
+ __reg = g_armv7_special_register_new(SRT_FPSCR); \
break; \
case b110: \
- __result = g_armv7_specreg_operand_new(SRT_MVFR1); \
+ __reg = g_armv7_special_register_new(SRT_MVFR1); \
break; \
case b111: \
- __result = g_armv7_specreg_operand_new(SRT_MVFR0); \
+ __reg = g_armv7_special_register_new(SRT_MVFR0); \
break; \
case b1000: \
- __result = g_armv7_specreg_operand_new(SRT_FPEXC); \
+ __reg = g_armv7_special_register_new(SRT_FPEXC); \
break; \
default: \
- __result = NULL; \
+ __reg = NULL; \
break; \
} \
+ if (__reg == NULL) \
+ __result = NULL; \
+ else \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})
@@ -342,7 +363,12 @@
#define SpecRegCSPSR(r) \
({ \
GArchOperand *__result; \
- __result = g_armv7_specreg_operand_new(r == 1 ? SRT_SPSR : SRT_CPSR); \
+ GArchRegister *__reg; \
+ __reg = g_armv7_special_register_new(r == 1 ? SRT_SPSR : SRT_CPSR); \
+ if (__reg == NULL) \
+ __result = NULL; \
+ else \
+ __result = g_armv7_register_operand_new(G_ARMV7_REGISTER(__reg)); \
__result; \
})