diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2017-05-29 23:02:36 +0000 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gcc.gnu.org> | 2017-05-29 23:02:36 +0000 |
commit | 3904010d5b65338b03dd5203ca2c2a26bb6aeb46 (patch) | |
tree | e5c8121f813592baedd7678849e0d042632f705f /gcc | |
parent | 4dbe373cfc4268284de8bb4e78e61294c381c518 (diff) | |
download | gcc-3904010d5b65338b03dd5203ca2c2a26bb6aeb46.zip gcc-3904010d5b65338b03dd5203ca2c2a26bb6aeb46.tar.gz gcc-3904010d5b65338b03dd5203ca2c2a26bb6aeb46.tar.bz2 |
gcc: xtensa: fix fprintf format specifiers
HOST_WIDE_INT may not be long as assumed in print_operand and
xtensa_emit_call. Use HOST_WIDE_INT_PRINT_DEC/HOST_WIDE_INT_PRINT_HEX
format strings instead of %ld/0x%lx. This fixes incorrect assembly code
generation by the compiler running on armhf host.
2017-05-29 Max Filippov <jcmvbkbc@gmail.com>
gcc/
* config/xtensa/xtensa.c (xtensa_emit_call): Use
HOST_WIDE_INT_PRINT_HEX instead of 0x%lx format string.
(print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of %ld
format string.
From-SVN: r248586
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/xtensa/xtensa.c | 11 |
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dafe9b6..1642d23 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-05-29 Max Filippov <jcmvbkbc@gmail.com> + + * config/xtensa/xtensa.c (xtensa_emit_call): Use + HOST_WIDE_INT_PRINT_HEX instead of 0x%lx format string. + (print_operand): Use HOST_WIDE_INT_PRINT_DEC instead of %ld + format string. + 2017-05-29 Eric Botcazou <ebotcazou@adacore.com> * doc/install.texi (Options specification): Restore entry of diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 015dd10..df80ad9 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -1780,7 +1780,8 @@ xtensa_emit_call (int callop, rtx *operands) rtx tgt = operands[callop]; if (GET_CODE (tgt) == CONST_INT) - sprintf (result, "call%d\t0x%lx", WINDOW_SIZE, INTVAL (tgt)); + sprintf (result, "call%d\t" HOST_WIDE_INT_PRINT_HEX, + WINDOW_SIZE, INTVAL (tgt)); else if (register_operand (tgt, VOIDmode)) sprintf (result, "callx%d\t%%%d", WINDOW_SIZE, callop); else @@ -2351,14 +2352,14 @@ print_operand (FILE *file, rtx x, int letter) case 'L': if (GET_CODE (x) == CONST_INT) - fprintf (file, "%ld", (32 - INTVAL (x)) & 0x1f); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, (32 - INTVAL (x)) & 0x1f); else output_operand_lossage ("invalid %%L value"); break; case 'R': if (GET_CODE (x) == CONST_INT) - fprintf (file, "%ld", INTVAL (x) & 0x1f); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) & 0x1f); else output_operand_lossage ("invalid %%R value"); break; @@ -2372,7 +2373,7 @@ print_operand (FILE *file, rtx x, int letter) case 'd': if (GET_CODE (x) == CONST_INT) - fprintf (file, "%ld", INTVAL (x)); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); else output_operand_lossage ("invalid %%d value"); break; @@ -2437,7 +2438,7 @@ print_operand (FILE *file, rtx x, int letter) else if (GET_CODE (x) == MEM) output_address (GET_MODE (x), XEXP (x, 0)); else if (GET_CODE (x) == CONST_INT) - fprintf (file, "%ld", INTVAL (x)); + fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); else output_addr_const (file, x); } |