summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-02-09 14:03:11 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-02-09 14:03:11 (GMT)
commit76f44a20a5b277d7cbc441c4e71943d4e5507a9d (patch)
treebeb0d9427677aba523c2ae17c6b33b0c32c280a9 /src/arch
parent5fb8fb821698f43e9e2306841ff1f5a77876aed8 (diff)
Set the initial display value and avoided to pad octal and decimal values.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/archbase.h4
-rw-r--r--src/arch/immediate.c31
-rw-r--r--src/arch/immediate.h3
3 files changed, 36 insertions, 2 deletions
diff --git a/src/arch/archbase.h b/src/arch/archbase.h
index fc6fe4d..867030d 100644
--- a/src/arch/archbase.h
+++ b/src/arch/archbase.h
@@ -85,10 +85,10 @@ typedef enum _MemoryDataSize
case 2: \
__result = MDS_16_BITS_UNSIGNED; \
break; \
- case 4: \
+ case 3 ... 4: \
__result = MDS_32_BITS_UNSIGNED; \
break; \
- case 8: \
+ case 5 ... 8: \
__result = MDS_64_BITS_UNSIGNED; \
break; \
default: \
diff --git a/src/arch/immediate.c b/src/arch/immediate.c
index cd36de2..40533ae 100644
--- a/src/arch/immediate.c
+++ b/src/arch/immediate.c
@@ -172,6 +172,8 @@ static void g_imm_operand_class_init(GImmOperandClass *klass)
static void g_imm_operand_init(GImmOperand *operand)
{
operand->zpad = false;
+
+ operand->def_display = IOD_HEX;
operand->display = IOD_HEX;
}
@@ -741,6 +743,8 @@ size_t g_imm_operand_to_string(const GImmOperand *operand, AsmSyntax syntax, cha
{
case IOD_BIN:
case IOD_CHAR:
+ case IOD_OCT:
+ case IOD_DEC:
zpad = "";
break;
default:
@@ -883,6 +887,33 @@ static void g_imm_operand_print(const GImmOperand *operand, GBufferLine *line, A
/******************************************************************************
* *
* Paramètres : operand = opérande à traiter. *
+* pos = valeur résultante. [OUT] *
+* *
+* Description : Convertit une valeur immédiate en position de type phys_t. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_imm_operand_to_phys_t(const GImmOperand *operand, phys_t *pos)
+{
+ bool result; /* Bilan à renvoyer */
+
+ result = !MDS_IS_SIGNED(operand->size);
+
+ if (result)
+ *pos = operand->raw;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : operand = opérande à traiter. *
* addr = valeur résultante. [OUT] *
* *
* Description : Convertit une valeur immédiate en adresse de type virt_t. *
diff --git a/src/arch/immediate.h b/src/arch/immediate.h
index 640ac50..e6da2f4 100644
--- a/src/arch/immediate.h
+++ b/src/arch/immediate.h
@@ -119,6 +119,9 @@ bool g_imm_operand_is_null(const GImmOperand *);
/* Construit la chaîne de caractères correspondant à l'opérande. */
size_t g_imm_operand_to_string(const GImmOperand *, AsmSyntax, char [IMM_MAX_SIZE]);
+/* Convertit une valeur immédiate en position de type phys_t. */
+bool g_imm_operand_to_phys_t(const GImmOperand *, phys_t *);
+
/* Convertit une valeur immédiate en adresse de type virt_t. */
bool g_imm_operand_to_virt_t(const GImmOperand *, virt_t *);