mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2024-12-25 23:41:05 +00:00
75 lines
2.6 KiB
Diff
75 lines
2.6 KiB
Diff
|
From a3d07c8a2a9564b57ebcae8463c1541a37c97c34 Mon Sep 17 00:00:00 2001
|
||
|
From: Max Filippov <jcmvbkbc@gmail.com>
|
||
|
Date: Sun, 28 May 2017 19:56:56 -0700
|
||
|
Subject: [PATCH] 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-28 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.
|
||
|
|
||
|
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
|
||
|
---
|
||
|
gcc/config/xtensa/xtensa.c | 11 ++++++-----
|
||
|
1 file changed, 6 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c
|
||
|
index 70f698a..2bdf5cc 100644
|
||
|
--- a/gcc/config/xtensa/xtensa.c
|
||
|
+++ b/gcc/config/xtensa/xtensa.c
|
||
|
@@ -1776,7 +1776,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
|
||
|
@@ -2347,14 +2348,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;
|
||
|
@@ -2368,7 +2369,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;
|
||
|
@@ -2433,7 +2434,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);
|
||
|
}
|
||
|
--
|
||
|
2.1.4
|
||
|
|