/* tc-csky.c -- Assembler for C-SKY
- Copyright (C) 1989-2018 Free Software Foundation, Inc.
+ Copyright (C) 1989-2020 Free Software Foundation, Inc.
Created by Lifang Xia (lifang_xia@c-sky.com)
Contributed by C-SKY Microsystems and Mentor Graphics.
parse_fexp (char *s, expressionS *e, unsigned char isdouble, uint64_t *dbnum)
{
int length; /* Number of chars in an object. */
- register char const *err = NULL; /* Error from scanning float literal. */
- char temp[8];
+ const char *err = NULL; /* Error from scanning float literal. */
+ unsigned char temp[8];
/* input_line_pointer->1st char of a flonum (we hope!). */
input_line_pointer = s;
input_line_pointer += 2;
if (isdouble)
- err = md_atof ('d', temp, &length);
+ err = md_atof ('d', (char *) temp, &length);
else
- err = md_atof ('f', temp, &length);
+ err = md_atof ('f', (char *) temp, &length);
know (length <= 8);
know (err != NULL || length > 0);
{
uint32_t fnum;
if (target_big_endian)
- fnum = (((temp[0] << 24) & 0xffffffff)
- | ((temp[1] << 16) & 0xffffff)
- | ((temp[2] << 8) & 0xffff)
- | (temp[3] & 0xff));
+ fnum = (((uint32_t) temp[0] << 24)
+ | (temp[1] << 16)
+ | (temp[2] << 8)
+ | temp[3]);
else
- fnum = (((temp[3] << 24) & 0xffffffff)
- | ((temp[2] << 16) & 0xffffff)
- | ((temp[1] << 8) & 0xffff)
- | (temp[0] & 0xff));
- e->X_add_number = fnum; }
+ fnum = (((uint32_t) temp[3] << 24)
+ | (temp[2] << 16)
+ | (temp[1] << 8)
+ | temp[0]);
+ e->X_add_number = fnum;
+ }
else
{
if (target_big_endian)
{
- *dbnum = (((temp[0] << 24) & 0xffffffff)
- | ((temp[1] << 16) & 0xffffff)
- | ((temp[2] << 8) & 0xffff)
- | (temp[3] & 0xff));
+ *dbnum = (((uint32_t) temp[0] << 24)
+ | (temp[1] << 16)
+ | (temp[2] << 8)
+ | temp[3]);
*dbnum <<= 32;
- *dbnum |= (((temp[4] << 24) & 0xffffffff)
- | ((temp[5] << 16) & 0xffffff)
- | ((temp[6] << 8) & 0xffff)
- | (temp[7] & 0xff));
+ *dbnum |= (((uint32_t) temp[4] << 24)
+ | (temp[5] << 16)
+ | (temp[6] << 8)
+ | temp[7]);
}
else
{
- *dbnum = (((temp[7] << 24) & 0xffffffff)
- | ((temp[6] << 16) & 0xffffff)
- | ((temp[5] << 8) & 0xffff)
- | (temp[4] & 0xff));
+ *dbnum = (((uint32_t) temp[7] << 24)
+ | (temp[6] << 16)
+ | (temp[5] << 8)
+ | temp[4]);
*dbnum <<= 32;
- *dbnum |= (((temp[3] << 24) & 0xffffffff)
- | ((temp[2] << 16) & 0xffffff)
- | ((temp[1] << 8) & 0xffff)
- | (temp[0] & 0xff));
+ *dbnum |= (((uint32_t) temp[3] << 24)
+ | (temp[2] << 16)
+ | (temp[1] << 8)
+ | temp[0]);
}
}
return input_line_pointer;
case OPRND_TYPE_IMM5b_1_31:
return is_imm_over_range (oper, 1, 31, -1);
case OPRND_TYPE_IMM5b_POWER:
- if (is_imm_over_range (oper, 1, ~(1 << 31), 1 << 31))
+ if (is_imm_over_range (oper, 1, (1u << 31) - 1, 1u << 31))
{
int log;
int val = csky_insn.val[csky_insn.idx - 1];
/* This type for "mgeni" in csky v1 ISA. */
case OPRND_TYPE_IMM5b_7_31_POWER:
- if (is_imm_over_range (oper, 1, ~(1 << 31), 1 << 31))
+ if (is_imm_over_range (oper, 1, (1u << 31) - 1, 1u << 31))
{
int log;
int val = csky_insn.val[csky_insn.idx - 1];
buf[20] = (disp >> 8) & 0xff;
buf[21] = disp & 0xff;
}
+ buf[22] = 0; /* initialise. */
+ buf[23] = 0;
fragp->fr_fix += C32_LEN_PIC;
} /* end if is_unaligned. */
s += nlen;
if (*s != '\0')
{
- csky_show_error (ERROR_BAD_END, 0, NULL, NULL);
+ csky_show_error (ERROR_BAD_END, 0, s, NULL);
return FALSE;
}
if (*reg1 == -1 || *reg2 == -1 || *reg3 == -1)