diff options
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-s12z.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gas/config/tc-s12z.c b/gas/config/tc-s12z.c index 736f062..d3b2ea4 100644 --- a/gas/config/tc-s12z.c +++ b/gas/config/tc-s12z.c @@ -614,31 +614,33 @@ lex_opr (uint8_t *buffer, int *n_bytes, expressionS *exp) buffer[3] = 0; if (exp->X_op == O_constant) { - if (exp->X_add_number < (0x1U << 14)) + valueT value = exp->X_add_number; + + if (value < (0x1U << 14)) { *xb = 0x00; *n_bytes = 2; - *xb |= exp->X_add_number >> 8; - buffer[1] = exp->X_add_number; + *xb |= value >> 8; + buffer[1] = value; } - else if (exp->X_add_number < (0x1U << 19)) + else if (value < (0x1U << 19)) { *xb = 0xf8; - if (exp->X_add_number & (0x1U << 17)) + if (value & (0x1U << 17)) *xb |= 0x04; - if (exp->X_add_number & (0x1U << 16)) + if (value & (0x1U << 16)) *xb |= 0x01; *n_bytes = 3; - buffer[1] = exp->X_add_number >> 8; - buffer[2] = exp->X_add_number; + buffer[1] = value >> 8; + buffer[2] = value; } else { *xb = 0xfa; *n_bytes = 4; - buffer[1] = exp->X_add_number >> 16; - buffer[2] = exp->X_add_number >> 8; - buffer[3] = exp->X_add_number; + buffer[1] = value >> 16; + buffer[2] = value >> 8; + buffer[3] = value; } } return 1; |