diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-02-09 14:03:11 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-02-09 14:03:11 (GMT) |
commit | 76f44a20a5b277d7cbc441c4e71943d4e5507a9d (patch) | |
tree | beb0d9427677aba523c2ae17c6b33b0c32c280a9 /src/arch | |
parent | 5fb8fb821698f43e9e2306841ff1f5a77876aed8 (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.h | 4 | ||||
-rw-r--r-- | src/arch/immediate.c | 31 | ||||
-rw-r--r-- | src/arch/immediate.h | 3 |
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 *); |