the expr when that's actually possible.
svn path=/trunk/yasm/; revision=456
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 {
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 *
im->val = expr_ptr;
im->len = 0;
- im->isneg = 0;
- im->f_len = 0;
- im->f_sign = 0;
+ im->sign = 0;
return im;
}
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];
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,
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];
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,
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 {
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 *
im->val = expr_ptr;
im->len = 0;
- im->isneg = 0;
- im->f_len = 0;
- im->f_sign = 0;
+ im->sign = 0;
return im;
}