int word_length,
unsigned char *bufp)
{
- unsigned long x,mask;
+ unsigned long x, mask;
int shift;
- x = cgen_get_insn_value (cd, bufp, word_length);
+ x = cgen_get_insn_value (cd, bufp, word_length, cd->endian);
/* Written this way to avoid undefined behaviour. */
- mask = (((1L << (length - 1)) - 1) << 1) | 1;
+ mask = (1UL << (length - 1) << 1) - 1;
if (CGEN_INSN_LSB0_P)
shift = (start + 1) - length;
else
shift = (word_length - (start + length));
x = (x & ~(mask << shift)) | ((value & mask) << shift);
- cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x);
+ cgen_put_insn_value (cd, bufp, word_length, (bfd_vma) x, cd->endian);
}
#endif /* ! CGEN_INT_INSN_P */
CGEN_INSN_BYTES_PTR buffer)
{
static char errbuf[100];
- /* Written this way to avoid undefined behaviour. */
- unsigned long mask = (((1L << (length - 1)) - 1) << 1) | 1;
+ unsigned long mask;
/* If LENGTH is zero, this operand doesn't contribute to the value. */
if (length == 0)
return NULL;
+ /* Written this way to avoid undefined behaviour. */
+ mask = (1UL << (length - 1) << 1) - 1;
+
if (word_length > 8 * sizeof (CGEN_INSN_INT))
abort ();
#else
cgen_put_insn_value (cd, buffer, min ((unsigned) cd->base_insn_bitsize,
- (unsigned) CGEN_FIELDS_BITSIZE (fields)),
- value);
+ (unsigned) CGEN_FIELDS_BITSIZE (fields)),
+ value, cd->insn_endian);
#endif /* ! CGEN_INT_INSN_P */
{
int shift = insn_length - length;
/* Written this way to avoid undefined behaviour. */
- CGEN_INSN_INT mask = (((1L << (length - 1)) - 1) << 1) | 1;
+ CGEN_INSN_INT mask = length == 0 ? 0 : (1UL << (length - 1) << 1) - 1;
*buf = (*buf & ~(mask << shift)) | ((value & mask) << shift);
}
unsigned long x;
int shift;
- x = cgen_get_insn_value (cd, bufp, word_length);
+ x = cgen_get_insn_value (cd, bufp, word_length, cd->endian);
if (CGEN_INSN_LSB0_P)
shift = (start + 1) - length;
abort ();
if (fill_cache (cd, ex_info, word_offset / 8, word_length / 8, pc) == 0)
- return 0;
+ {
+ *valuep = 0;
+ return 0;
+ }
value = extract_1 (cd, ex_info, start, length, word_length, bufp, pc);
}
#endif /* ! CGEN_INT_INSN_P */
/* Written this way to avoid undefined behaviour. */
- mask = (((1L << (length - 1)) - 1) << 1) | 1;
+ mask = (1UL << (length - 1) << 1) - 1;
value &= mask;
/* sign extend? */
case OR1K_OPERAND_DISP21 :
{
long value = fields->f_disp21;
- value = ((((DI) (value) >> (13))) - (((DI) (pc) >> (13))));
+ value = ((((SI) (value) >> (13))) - (((SI) (pc) >> (13))));
errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_ABS_ADDR), 0, 20, 21, 32, total_length, buffer);
}
break;
case OR1K_OPERAND_DISP26 :
{
long value = fields->f_disp26;
- value = ((DI) (((value) - (pc))) >> (2));
+ value = ((SI) (((value) - (pc))) >> (2));
errmsg = insert_normal (cd, value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 25, 26, 32, total_length, buffer);
}
break;
break;
}
break;
- case OR1K_OPERAND_RADF :
- errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer);
- break;
case OR1K_OPERAND_RADI :
{
{
break;
}
break;
- case OR1K_OPERAND_RBDF :
- errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer);
- break;
case OR1K_OPERAND_RBDI :
{
{
break;
}
break;
- case OR1K_OPERAND_RDDF :
- errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer);
- break;
case OR1K_OPERAND_RDDI :
{
{
{
long value;
length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_ABS_ADDR), 0, 20, 21, 32, total_length, pc, & value);
- value = ((((value) + (((DI) (pc) >> (13))))) * (MAKEDI (0, 8192)));
+ value = ((((value) + (((SI) (pc) >> (13))))) * (8192));
fields->f_disp21 = value;
}
break;
{
long value;
length = extract_normal (cd, ex_info, insn_value, 0|(1<<CGEN_IFLD_SIGNED)|(1<<CGEN_IFLD_PCREL_ADDR), 0, 25, 26, 32, total_length, pc, & value);
- value = ((((value) * (MAKEDI (0, 4)))) + (pc));
+ value = ((((value) * (4))) + (pc));
fields->f_disp26 = value;
}
break;
FLD (f_rad32) = ((FLD (f_r2)) | (((FLD (f_raoff_9_1)) << (5))));
}
break;
- case OR1K_OPERAND_RADF :
- length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2);
- break;
case OR1K_OPERAND_RADI :
{
length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2);
FLD (f_rbd32) = ((FLD (f_r3)) | (((FLD (f_rboff_8_1)) << (5))));
}
break;
- case OR1K_OPERAND_RBDF :
- length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3);
- break;
case OR1K_OPERAND_RBDI :
{
length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3);
FLD (f_rdd32) = ((FLD (f_r1)) | (((FLD (f_rdoff_10_1)) << (5))));
}
break;
- case OR1K_OPERAND_RDDF :
- length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1);
- break;
case OR1K_OPERAND_RDDI :
{
length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1);
case OR1K_OPERAND_RAD32F :
value = fields->f_rad32;
break;
- case OR1K_OPERAND_RADF :
- value = fields->f_r2;
- break;
case OR1K_OPERAND_RADI :
value = fields->f_rad32;
break;
case OR1K_OPERAND_RBD32F :
value = fields->f_rbd32;
break;
- case OR1K_OPERAND_RBDF :
- value = fields->f_r3;
- break;
case OR1K_OPERAND_RBDI :
value = fields->f_rbd32;
break;
case OR1K_OPERAND_RDD32F :
value = fields->f_rdd32;
break;
- case OR1K_OPERAND_RDDF :
- value = fields->f_r1;
- break;
case OR1K_OPERAND_RDDI :
value = fields->f_rdd32;
break;
case OR1K_OPERAND_RAD32F :
value = fields->f_rad32;
break;
- case OR1K_OPERAND_RADF :
- value = fields->f_r2;
- break;
case OR1K_OPERAND_RADI :
value = fields->f_rad32;
break;
case OR1K_OPERAND_RBD32F :
value = fields->f_rbd32;
break;
- case OR1K_OPERAND_RBDF :
- value = fields->f_r3;
- break;
case OR1K_OPERAND_RBDI :
value = fields->f_rbd32;
break;
case OR1K_OPERAND_RDD32F :
value = fields->f_rdd32;
break;
- case OR1K_OPERAND_RDDF :
- value = fields->f_r1;
- break;
case OR1K_OPERAND_RDDI :
value = fields->f_rdd32;
break;
case OR1K_OPERAND_RAD32F :
fields->f_rad32 = value;
break;
- case OR1K_OPERAND_RADF :
- fields->f_r2 = value;
- break;
case OR1K_OPERAND_RADI :
fields->f_rad32 = value;
break;
case OR1K_OPERAND_RBD32F :
fields->f_rbd32 = value;
break;
- case OR1K_OPERAND_RBDF :
- fields->f_r3 = value;
- break;
case OR1K_OPERAND_RBDI :
fields->f_rbd32 = value;
break;
case OR1K_OPERAND_RDD32F :
fields->f_rdd32 = value;
break;
- case OR1K_OPERAND_RDDF :
- fields->f_r1 = value;
- break;
case OR1K_OPERAND_RDDI :
fields->f_rdd32 = value;
break;
case OR1K_OPERAND_RAD32F :
fields->f_rad32 = value;
break;
- case OR1K_OPERAND_RADF :
- fields->f_r2 = value;
- break;
case OR1K_OPERAND_RADI :
fields->f_rad32 = value;
break;
case OR1K_OPERAND_RBD32F :
fields->f_rbd32 = value;
break;
- case OR1K_OPERAND_RBDF :
- fields->f_r3 = value;
- break;
case OR1K_OPERAND_RBDI :
fields->f_rbd32 = value;
break;
case OR1K_OPERAND_RDD32F :
fields->f_rdd32 = value;
break;
- case OR1K_OPERAND_RDDF :
- fields->f_r1 = value;
- break;
case OR1K_OPERAND_RDDI :
fields->f_rdd32 = value;
break;