Skip to content

Commit

Permalink
Fix signed printing with printInt8 and printInt16
Browse files Browse the repository at this point in the history
  • Loading branch information
Rot127 committed Sep 1, 2024
1 parent e2a7803 commit ac0ae88
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 6 deletions.
48 changes: 43 additions & 5 deletions SStream.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,20 +209,58 @@ void printInt32Bang(SStream *O, int32_t val)
}
}

void printInt8(SStream *O, int8_t val)
{
SSTREAM_RETURN_IF_CLOSED(O);
if (val >= 0) {
if (val > HEX_THRESHOLD)
SStream_concat(O, "0x%" PRIx8, val);
else
SStream_concat(O, "%" PRId8, val);
} else {
if (val <- HEX_THRESHOLD) {
if (val == INT8_MIN)
SStream_concat(O, "-0x%" PRIx8, (int8_t)val);
else
SStream_concat(O, "-0x%" PRIx8, (int8_t)-val);
} else
SStream_concat(O, "-%u", -val);
}
}

void printInt16(SStream *O, int16_t val)
{
SSTREAM_RETURN_IF_CLOSED(O);
if (val >= 0) {
if (val > HEX_THRESHOLD)
SStream_concat(O, "0x%" PRIx16, val);
else
SStream_concat(O, "%" PRId16, val);
} else {
if (val <- HEX_THRESHOLD) {
if (val == INT16_MIN)
SStream_concat(O, "-0x%" PRIx16, (int16_t)val);
else
SStream_concat(O, "-0x%" PRIx16, (int16_t)-val);
} else
SStream_concat(O, "-%u", -val);
}
}

void printInt32(SStream *O, int32_t val)
{
SSTREAM_RETURN_IF_CLOSED(O);
if (val >= 0) {
if (val > HEX_THRESHOLD)
SStream_concat(O, "0x%x", val);
SStream_concat(O, "0x%" PRIx32, val);
else
SStream_concat(O, "%u", val);
SStream_concat(O, "%" PRId32, val);
} else {
if (val <- HEX_THRESHOLD) {
if (val == INT_MIN)
SStream_concat(O, "-0x%x", (uint32_t)val);
if (val == INT32_MIN)
SStream_concat(O, "-0x%" PRIx32, (int32_t)val);
else
SStream_concat(O, "-0x%x", (uint32_t)-val);
SStream_concat(O, "-0x%" PRIx32, (int32_t)-val);
} else
SStream_concat(O, "-%u", -val);
}
Expand Down
2 changes: 2 additions & 0 deletions SStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ void printUInt64(SStream *O, uint64_t val);

void printInt32Bang(SStream *O, int32_t val);

void printInt8(SStream *O, int8_t val);
void printInt16(SStream *O, int16_t val);
void printInt32(SStream *O, int32_t val);

void printUInt32Bang(SStream *O, uint32_t val);
Expand Down
9 changes: 8 additions & 1 deletion arch/SystemZ/SystemZInstPrinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,14 @@ DEFINE_printUImmOperand(48);
MCOperand_getImm(MCInst_getOperand(MI, (OpNum))); \
CS_ASSERT( \
(CONCAT(isInt, N)(Value) && "Invalid simm argument")); \
printInt64(markup_OS(O, Markup_Immediate), Value); \
if (N == 8) \
printInt8(markup_OS(O, Markup_Immediate), Value); \
else if (N == 16) \
printInt16(markup_OS(O, Markup_Immediate), Value); \
else if (N == 32) \
printInt32(markup_OS(O, Markup_Immediate), Value); \
else \
CS_ASSERT(0 && "Unreachable"); \
}
DEFINE_printSImmOperand(8);
DEFINE_printSImmOperand(16);
Expand Down

0 comments on commit ac0ae88

Please sign in to comment.