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 *);  | 
