]> granicus.if.org Git - yasm/commitdiff
Don't store "determined" immediate len and neg. Both will be determined from
authorPeter Johnson <peter@tortall.net>
Thu, 10 Jan 2002 05:39:25 +0000 (05:39 -0000)
committerPeter Johnson <peter@tortall.net>
Thu, 10 Jan 2002 05:39:25 +0000 (05:39 -0000)
the expr when that's actually possible.

svn path=/trunk/yasm/; revision=456

libyasm/bc-int.h
libyasm/bytecode.c
modules/arch/x86/x86bc.c
src/arch/x86/x86bc.c
src/bc-int.h
src/bytecode.c

index ce8c25ef725a4015e029d7387b4852e7804dfb59..2c3d31f4fa3862e97bf63fac1efb374ed08cd988 100644 (file)
@@ -40,11 +40,8 @@ const void *ea_get_const_data(const effaddr *);
 struct immval {
     /*@only@*/ /*@null@*/ expr *val;
 
-    unsigned char len;         /* length of val (in bytes), 0 if unknown */
-    unsigned char isneg;       /* the value has been explicitly negated */
-
-    unsigned char f_len;       /* final imm length */
-    unsigned char f_sign;      /* 1 if final imm should be signed */
+    unsigned char len;         /* final length (in bytes), 0 if unknown */
+    unsigned char sign;                /* 1 if final imm is treated as signed */
 };
 
 struct bytecode {
index 823e4062c07af769e61d2f93bfabbea58ce2bb1f..9da7136e4303744250715e0712da62a891f379e3 100644 (file)
@@ -75,22 +75,7 @@ unsigned char bytes_static[16];
 immval *
 imm_new_int(unsigned long int_val)
 {
-    immval *im = xmalloc(sizeof(immval));
-
-    im->val = expr_new_ident(ExprInt(intnum_new_int(int_val)));
-
-    if ((int_val & 0xFF) == int_val)
-       im->len = 1;
-    else if ((int_val & 0xFFFF) == int_val)
-       im->len = 2;
-    else
-       im->len = 4;
-
-    im->isneg = 0;
-    im->f_len = 0;
-    im->f_sign = 0;
-
-    return im;
+    return imm_new_expr(expr_new_ident(ExprInt(intnum_new_int(int_val))));
 }
 
 immval *
@@ -100,9 +85,7 @@ imm_new_expr(expr *expr_ptr)
 
     im->val = expr_ptr;
     im->len = 0;
-    im->isneg = 0;
-    im->f_len = 0;
-    im->f_sign = 0;
+    im->sign = 0;
 
     return im;
 }
index 39a67acc3a0fb1892581b0bddb493370a43454d9..26eb452f28dee2a7da48b81ba7b20ba7e9def0d7 100644 (file)
@@ -54,8 +54,8 @@ x86_bc_new_insn(x86_new_insn_data *d)
 
     insn->imm = d->imm;
     if (d->imm) {
-       insn->imm->f_len = d->im_len;
-       insn->imm->f_sign = d->im_sign;
+       insn->imm->len = d->im_len;
+       insn->imm->sign = d->im_sign;
     }
 
     insn->opcode[0] = d->op[0];
@@ -379,12 +379,9 @@ x86_bc_print(FILE *f, const bytecode *bc)
                else
                    fprintf(f, "(nil-SHOULDN'T HAPPEN)");
                fprintf(f, "\n");
-               fprintf(f, "%*sLen=%u, IsNeg=%u\n", indent_level, "",
+               fprintf(f, "%*sLen=%u, Sign=%u\n", indent_level, "",
                        (unsigned int)insn->imm->len,
-                       (unsigned int)insn->imm->isneg);
-               fprintf(f, "%*sFLen=%u, FSign=%u\n", indent_level, "",
-                       (unsigned int)insn->imm->f_len,
-                       (unsigned int)insn->imm->f_sign);
+                       (unsigned int)insn->imm->sign);
                indent_level--;
            }
            fprintf(f, "%*sOpcode: %02x %02x %02x OpLen=%u\n", indent_level,
index 39a67acc3a0fb1892581b0bddb493370a43454d9..26eb452f28dee2a7da48b81ba7b20ba7e9def0d7 100644 (file)
@@ -54,8 +54,8 @@ x86_bc_new_insn(x86_new_insn_data *d)
 
     insn->imm = d->imm;
     if (d->imm) {
-       insn->imm->f_len = d->im_len;
-       insn->imm->f_sign = d->im_sign;
+       insn->imm->len = d->im_len;
+       insn->imm->sign = d->im_sign;
     }
 
     insn->opcode[0] = d->op[0];
@@ -379,12 +379,9 @@ x86_bc_print(FILE *f, const bytecode *bc)
                else
                    fprintf(f, "(nil-SHOULDN'T HAPPEN)");
                fprintf(f, "\n");
-               fprintf(f, "%*sLen=%u, IsNeg=%u\n", indent_level, "",
+               fprintf(f, "%*sLen=%u, Sign=%u\n", indent_level, "",
                        (unsigned int)insn->imm->len,
-                       (unsigned int)insn->imm->isneg);
-               fprintf(f, "%*sFLen=%u, FSign=%u\n", indent_level, "",
-                       (unsigned int)insn->imm->f_len,
-                       (unsigned int)insn->imm->f_sign);
+                       (unsigned int)insn->imm->sign);
                indent_level--;
            }
            fprintf(f, "%*sOpcode: %02x %02x %02x OpLen=%u\n", indent_level,
index ce8c25ef725a4015e029d7387b4852e7804dfb59..2c3d31f4fa3862e97bf63fac1efb374ed08cd988 100644 (file)
@@ -40,11 +40,8 @@ const void *ea_get_const_data(const effaddr *);
 struct immval {
     /*@only@*/ /*@null@*/ expr *val;
 
-    unsigned char len;         /* length of val (in bytes), 0 if unknown */
-    unsigned char isneg;       /* the value has been explicitly negated */
-
-    unsigned char f_len;       /* final imm length */
-    unsigned char f_sign;      /* 1 if final imm should be signed */
+    unsigned char len;         /* final length (in bytes), 0 if unknown */
+    unsigned char sign;                /* 1 if final imm is treated as signed */
 };
 
 struct bytecode {
index 823e4062c07af769e61d2f93bfabbea58ce2bb1f..9da7136e4303744250715e0712da62a891f379e3 100644 (file)
@@ -75,22 +75,7 @@ unsigned char bytes_static[16];
 immval *
 imm_new_int(unsigned long int_val)
 {
-    immval *im = xmalloc(sizeof(immval));
-
-    im->val = expr_new_ident(ExprInt(intnum_new_int(int_val)));
-
-    if ((int_val & 0xFF) == int_val)
-       im->len = 1;
-    else if ((int_val & 0xFFFF) == int_val)
-       im->len = 2;
-    else
-       im->len = 4;
-
-    im->isneg = 0;
-    im->f_len = 0;
-    im->f_sign = 0;
-
-    return im;
+    return imm_new_expr(expr_new_ident(ExprInt(intnum_new_int(int_val))));
 }
 
 immval *
@@ -100,9 +85,7 @@ imm_new_expr(expr *expr_ptr)
 
     im->val = expr_ptr;
     im->len = 0;
-    im->isneg = 0;
-    im->f_len = 0;
-    im->f_sign = 0;
+    im->sign = 0;
 
     return im;
 }