This patch uses the INT_N interface to define __int24.
Ok for trunk?
Johann
--
AVR: Use INT_N to built-in define __int24.
This patch uses the INT_N interface to define __int24 in avr-modes.def.
Since the testsuite uses -Wpedantic and __int24 is a C/C++ extension,
uses of __int24 and __uint24 is now marked as __extension__.
PR target/118329
gcc/
* config/avr/avr-modes.def b/gcc/config/avr/avr-modes.def:
Add INT_N (PSI, 24).
* config/avr/avr.cc b/gcc/config/avr/avr.cc (avr_init_builtin_int24)
<__int24>: Remove definition.
<__uint24>: Adjust definition to INT_N interface.
gcc/testsuite/
* gcc.target/avr/pr115830-add.c (__int24, __uint24): Add __extension__
to respective typedefs.
* gcc.target/avr/pr115830-sub-ext.c: Same.
* gcc.target/avr/pr115830-sub.c: Same.
* gcc.target/avr/torture/get-mem.c: Same.
* gcc.target/avr/torture/set-mem.c: Same.
* gcc.target/avr/torture/ifelse-c.h: Same.
* gcc.target/avr/torture/ifelse-d.h: Same.
* gcc.target/avr/torture/ifelse-q.h: Same.
* gcc.target/avr/torture/ifelse-r.h: Same.
* gcc.target/avr/torture/int24-mul.c: Same.
* gcc.target/avr/torture/pr109907-2.c: Same.
* gcc.target/avr/torture/pr61443.c: Same.
* gcc.target/avr/torture/pr63633-ice-mult.c: Same.
* gcc.target/avr/torture/shift-l-u24.c: Same.
* gcc.target/avr/torture/shift-r-i24.c: Same.
* gcc.target/avr/torture/shift-r-u24.c: Same.
* gcc.target/avr/torture/add-extend.c: Same.
* gcc.target/avr/torture/sub-extend.c: Same.
* gcc.target/avr/torture/sub-zerox.c: Same.
* gcc.target/avr/torture/test-gprs.h: Same.
diff --git a/gcc/config/avr/avr-modes.def b/gcc/config/avr/avr-modes.def
index e69636a6099..de350135f95 100644
--- a/gcc/config/avr/avr-modes.def
+++ b/gcc/config/avr/avr-modes.def
@@ -18,6 +18,7 @@
<http://www.gnu.org/licenses/>. */
FRACTIONAL_INT_MODE (PSI, 24, 3);
+INT_N (PSI, 24);
/* Used when the N (and Z) flag(s) of SREG are set.
The N flag indicates whether the value is negative.
diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc
index 05a6905b5d6..1b2349ea784 100644
--- a/gcc/config/avr/avr.cc
+++ b/gcc/config/avr/avr.cc
@@ -15336,11 +15336,13 @@ avr_builtin_decl (unsigned id, bool /*initialize_p*/)
static void
avr_init_builtin_int24 (void)
{
- tree int24_type = make_signed_type (GET_MODE_BITSIZE (PSImode));
- tree uint24_type = make_unsigned_type (GET_MODE_BITSIZE (PSImode));
-
- lang_hooks.types.register_builtin_type (int24_type, "__int24");
- lang_hooks.types.register_builtin_type (uint24_type, "__uint24");
+ for (int i = 0; i < NUM_INT_N_ENTS; ++i)
+ if (int_n_data[i].bitsize == 24)
+ {
+ tree uint24_type = int_n_trees[i].unsigned_type;
+ lang_hooks.types.register_builtin_type (uint24_type, "__uint24");
+ break;
+ }
}
diff --git a/gcc/testsuite/gcc.target/avr/pr115830-add.c b/gcc/testsuite/gcc.target/avr/pr115830-add.c
index 99ac89cd0a6..89ce4847141 100644
--- a/gcc/testsuite/gcc.target/avr/pr115830-add.c
+++ b/gcc/testsuite/gcc.target/avr/pr115830-add.c
@@ -5,8 +5,8 @@ typedef __UINT8_TYPE__ u8;
typedef __INT8_TYPE__ i8;
typedef __UINT16_TYPE__ u16;
typedef __INT16_TYPE__ i16;
-typedef __uint24 u24;
-typedef __int24 i24;
+__extension__ typedef __uint24 u24;
+__extension__ typedef __int24 i24;
typedef __UINT32_TYPE__ u32;
typedef __INT32_TYPE__ i32;
diff --git a/gcc/testsuite/gcc.target/avr/pr115830-sub-ext.c b/gcc/testsuite/gcc.target/avr/pr115830-sub-ext.c
index 3fac6ddd0df..3f959ab2cb9 100644
--- a/gcc/testsuite/gcc.target/avr/pr115830-sub-ext.c
+++ b/gcc/testsuite/gcc.target/avr/pr115830-sub-ext.c
@@ -5,8 +5,8 @@ typedef __UINT8_TYPE__ u8;
typedef __INT8_TYPE__ i8;
typedef __UINT16_TYPE__ u16;
typedef __INT16_TYPE__ i16;
-typedef __uint24 u24;
-typedef __int24 i24;
+__extension__ typedef __uint24 u24;
+__extension__ typedef __int24 i24;
typedef __UINT32_TYPE__ u32;
typedef __INT32_TYPE__ i32;
diff --git a/gcc/testsuite/gcc.target/avr/pr115830-sub.c b/gcc/testsuite/gcc.target/avr/pr115830-sub.c
index ef24e74752d..5ad5e8918a1 100644
--- a/gcc/testsuite/gcc.target/avr/pr115830-sub.c
+++ b/gcc/testsuite/gcc.target/avr/pr115830-sub.c
@@ -5,8 +5,8 @@ typedef __UINT8_TYPE__ u8;
typedef __INT8_TYPE__ i8;
typedef __UINT16_TYPE__ u16;
typedef __INT16_TYPE__ i16;
-typedef __uint24 u24;
-typedef __int24 i24;
+__extension__ typedef __uint24 u24;
+__extension__ typedef __int24 i24;
typedef __UINT32_TYPE__ u32;
typedef __INT32_TYPE__ i32;
diff --git a/gcc/testsuite/gcc.target/avr/torture/add-extend.c b/gcc/testsuite/gcc.target/avr/torture/add-extend.c
index 320f510e677..d87077a218b 100644
--- a/gcc/testsuite/gcc.target/avr/torture/add-extend.c
+++ b/gcc/testsuite/gcc.target/avr/torture/add-extend.c
@@ -2,12 +2,12 @@
typedef __UINT8_TYPE__ u8;
typedef __UINT16_TYPE__ u16;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT32_TYPE__ u32;
typedef __INT8_TYPE__ s8;
typedef __INT16_TYPE__ s16;
-typedef __int24 s24;
+__extension__ typedef __int24 s24;
typedef __INT32_TYPE__ s32;
#define NI __attribute__((noipa))
diff --git a/gcc/testsuite/gcc.target/avr/torture/get-mem.c b/gcc/testsuite/gcc.target/avr/torture/get-mem.c
index 38425fe638f..921d4ad2680 100644
--- a/gcc/testsuite/gcc.target/avr/torture/get-mem.c
+++ b/gcc/testsuite/gcc.target/avr/torture/get-mem.c
@@ -4,7 +4,7 @@
typedef __INT8_TYPE__ s8;
typedef __INT16_TYPE__ s16;
-typedef __int24 s24;
+__extension__ typedef __int24 s24;
typedef __INT32_TYPE__ s32;
static const s8 arr8[] = { 12, 23, 34 };
diff --git a/gcc/testsuite/gcc.target/avr/torture/ifelse-c.h b/gcc/testsuite/gcc.target/avr/torture/ifelse-c.h
index e742415d7fd..12701552776 100644
--- a/gcc/testsuite/gcc.target/avr/torture/ifelse-c.h
+++ b/gcc/testsuite/gcc.target/avr/torture/ifelse-c.h
@@ -5,12 +5,12 @@
#ifdef __OPTIMIZE__
typedef __UINT32_TYPE__ u32;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT16_TYPE__ u16;
typedef __UINT8_TYPE__ u8;
typedef __INT32_TYPE__ i32;
-typedef __int24 i24;
+__extension__ typedef __int24 i24;
typedef __INT16_TYPE__ i16;
typedef __INT8_TYPE__ i8;
diff --git a/gcc/testsuite/gcc.target/avr/torture/ifelse-d.h b/gcc/testsuite/gcc.target/avr/torture/ifelse-d.h
index 3ff2494ea6a..82e3e21d331 100644
--- a/gcc/testsuite/gcc.target/avr/torture/ifelse-d.h
+++ b/gcc/testsuite/gcc.target/avr/torture/ifelse-d.h
@@ -6,12 +6,12 @@
#ifdef __OPTIMIZE__
typedef __UINT32_TYPE__ u32;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT16_TYPE__ u16;
typedef __UINT8_TYPE__ u8;
typedef __INT32_TYPE__ i32;
-typedef __int24 i24;
+__extension__ typedef __int24 i24;
typedef __INT16_TYPE__ i16;
typedef __INT8_TYPE__ i8;
diff --git a/gcc/testsuite/gcc.target/avr/torture/ifelse-q.h b/gcc/testsuite/gcc.target/avr/torture/ifelse-q.h
index 6dbb05990e0..0b7c80e408f 100644
--- a/gcc/testsuite/gcc.target/avr/torture/ifelse-q.h
+++ b/gcc/testsuite/gcc.target/avr/torture/ifelse-q.h
@@ -6,12 +6,12 @@
#ifdef __OPTIMIZE__
typedef __UINT32_TYPE__ u32;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT16_TYPE__ u16;
typedef __UINT8_TYPE__ u8;
typedef __INT32_TYPE__ i32;
-typedef __int24 i24;
+__extension__ typedef __int24 i24;
typedef __INT16_TYPE__ i16;
typedef __INT8_TYPE__ i8;
diff --git a/gcc/testsuite/gcc.target/avr/torture/ifelse-r.h b/gcc/testsuite/gcc.target/avr/torture/ifelse-r.h
index 19cd1cc67c4..588ad3a83b1 100644
--- a/gcc/testsuite/gcc.target/avr/torture/ifelse-r.h
+++ b/gcc/testsuite/gcc.target/avr/torture/ifelse-r.h
@@ -5,12 +5,12 @@
#ifdef __OPTIMIZE__
typedef __UINT32_TYPE__ u32;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT16_TYPE__ u16;
typedef __UINT8_TYPE__ u8;
typedef __INT32_TYPE__ i32;
-typedef __int24 i24;
+__extension__ typedef __int24 i24;
typedef __INT16_TYPE__ i16;
typedef __INT8_TYPE__ i8;
diff --git a/gcc/testsuite/gcc.target/avr/torture/int24-mul.c b/gcc/testsuite/gcc.target/avr/torture/int24-mul.c
index 9b29763738c..98df1d0d3c3 100644
--- a/gcc/testsuite/gcc.target/avr/torture/int24-mul.c
+++ b/gcc/testsuite/gcc.target/avr/torture/int24-mul.c
@@ -7,7 +7,10 @@
#define __flash /* empty */
#endif
-const __flash __int24 vals[] =
+__extension__ typedef __uint24 uint24_t;
+__extension__ typedef __int24 int24_t;
+
+const __flash int24_t vals[] =
{
0, 1, 2, 3, -1, -2, -3, 0xff, 0x100, 0x101,
0xffL * 0xff, 0xfffL * 0xfff, 0x101010L, 0xaaaaaaL
@@ -17,7 +20,7 @@ void test_u (void)
{
unsigned int i;
unsigned long la, lb, lc;
- __uint24 a, b, c;
+ uint24_t a, b, c;
int S = sizeof (vals) / sizeof (*vals);
@@ -58,7 +61,7 @@ void test_nu (void)
unsigned long la;
unsigned int i;
int S = sizeof (vals) / sizeof (*vals);
- __uint24 a;
+ uint24_t a;
for (i = 0; i < 500; i++)
{
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr109907-2.c b/gcc/testsuite/gcc.target/avr/torture/pr109907-2.c
index 813a0e083fa..c867a2d0fc6 100644
--- a/gcc/testsuite/gcc.target/avr/torture/pr109907-2.c
+++ b/gcc/testsuite/gcc.target/avr/torture/pr109907-2.c
@@ -5,7 +5,7 @@
typedef __UINT8_TYPE__ uint8_t;
typedef __UINT16_TYPE__ uint16_t;
-typedef __uint24 uint24_t;
+__extension__ typedef __uint24 uint24_t;
typedef __UINT32_TYPE__ uint32_t;
typedef __INT32_TYPE__ int32_t;
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr61443.c b/gcc/testsuite/gcc.target/avr/torture/pr61443.c
index 2e2557b1c13..f70b9e5d88d 100644
--- a/gcc/testsuite/gcc.target/avr/torture/pr61443.c
+++ b/gcc/testsuite/gcc.target/avr/torture/pr61443.c
@@ -9,6 +9,8 @@
#define __memx /* empty */
#endif
+__extension__ typedef __int24 int24_t;
+
#define NC __attribute__((noipa))
void NC vfun (char n, ...)
@@ -30,7 +32,7 @@ void NC vfun (char n, ...)
abort();
break;
case 3:
- if (333333 != va_arg (ap, __int24))
+ if (333333 != va_arg (ap, int24_t))
abort();
break;
case 4:
@@ -67,12 +69,12 @@ void NC boox_hi (const __memx int *p)
vfun (2, *p);
}
-void NC boo_psi (const __flash __int24 *p)
+void NC boo_psi (const __flash int24_t *p)
{
vfun (3, *p);
}
-void NC boox_psi (const __memx __int24 *p)
+void NC boox_psi (const __memx int24_t *p)
{
vfun (3, *p);
}
@@ -99,19 +101,19 @@ void NC boox_di (const __memx long long *p)
const __flash char f_qi = 11;
const __flash int f_hi = 2222;
-const __flash __int24 f_psi = 333333;
+const __flash int24_t f_psi = 333333;
const __flash long f_si = 44444444;
const __flash long long f_di = 8888888888888888;
const __memx char x_qi = 11;
const __memx int x_hi = 2222;
-const __memx __int24 x_psi = 333333;
+const __memx int24_t x_psi = 333333;
const __memx long x_si = 44444444;
const __memx long long x_di = 8888888888888888;
char r_qi = 11;
int r_hi = 2222;
-__int24 r_psi = 333333;
+int24_t r_psi = 333333;
long r_si = 44444444;
long long r_di = 8888888888888888;
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c b/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c
index a523424c325..5568ed689f5 100644
--- a/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c
+++ b/gcc/testsuite/gcc.target/avr/torture/pr63633-ice-mult.c
@@ -6,21 +6,23 @@ void ice_mult32 (int x)
__asm volatile (" " :: "r" (reg = 0x12345 * x));
}
+__extension__ typedef __int24 i24;
+
void ice_mult24 (int x)
{
- register __int24 reg __asm ("20");
+ register i24 reg __asm ("20");
__asm volatile (" " :: "r" (reg = 0x12345 * x));
}
-void ice_sh24 (__int24 x)
+void ice_sh24 (i24 x)
{
- register __int24 reg __asm ("20");
+ register i24 reg __asm ("20");
__asm volatile (" " :: "r" (reg = x << 3));
}
-void ice_sh24b (__int24 x)
+void ice_sh24b (i24 x)
{
- register __int24 reg __asm ("20");
+ register i24 reg __asm ("20");
__asm volatile (" " :: "r" (reg = x << 22));
}
diff --git a/gcc/testsuite/gcc.target/avr/torture/set-mem.c b/gcc/testsuite/gcc.target/avr/torture/set-mem.c
index ca0a29c44eb..ec809f8be66 100644
--- a/gcc/testsuite/gcc.target/avr/torture/set-mem.c
+++ b/gcc/testsuite/gcc.target/avr/torture/set-mem.c
@@ -4,7 +4,7 @@
typedef __INT8_TYPE__ s8;
typedef __INT16_TYPE__ s16;
-typedef __int24 s24;
+__extension__ typedef __int24 s24;
typedef __INT32_TYPE__ s32;
static s8 arr8[3];
diff --git a/gcc/testsuite/gcc.target/avr/torture/shift-l-u24.c b/gcc/testsuite/gcc.target/avr/torture/shift-l-u24.c
index 4fd66f3f621..859be0941af 100644
--- a/gcc/testsuite/gcc.target/avr/torture/shift-l-u24.c
+++ b/gcc/testsuite/gcc.target/avr/torture/shift-l-u24.c
@@ -3,7 +3,7 @@
#define OP <<
#define BITS 24
-typedef __uint24 T;
+__extension__ typedef __uint24 T;
#include "test-shift.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/shift-r-i24.c b/gcc/testsuite/gcc.target/avr/torture/shift-r-i24.c
index 45e1b0bab88..1d92c14730e 100644
--- a/gcc/testsuite/gcc.target/avr/torture/shift-r-i24.c
+++ b/gcc/testsuite/gcc.target/avr/torture/shift-r-i24.c
@@ -3,7 +3,7 @@
#define OP >>
#define BITS 24
-typedef __int24 T;
+__extension__ typedef __int24 T;
#include "test-shift.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/shift-r-u24.c b/gcc/testsuite/gcc.target/avr/torture/shift-r-u24.c
index 6acdd4e2672..628ea77ade1 100644
--- a/gcc/testsuite/gcc.target/avr/torture/shift-r-u24.c
+++ b/gcc/testsuite/gcc.target/avr/torture/shift-r-u24.c
@@ -3,7 +3,7 @@
#define OP >>
#define BITS 24
-typedef __uint24 T;
+__extension__ typedef __uint24 T;
#include "test-shift.h"
diff --git a/gcc/testsuite/gcc.target/avr/torture/sub-extend.c b/gcc/testsuite/gcc.target/avr/torture/sub-extend.c
index ebc403fa479..94ffef3b1f2 100644
--- a/gcc/testsuite/gcc.target/avr/torture/sub-extend.c
+++ b/gcc/testsuite/gcc.target/avr/torture/sub-extend.c
@@ -2,12 +2,12 @@
typedef __UINT8_TYPE__ u8;
typedef __UINT16_TYPE__ u16;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT32_TYPE__ u32;
typedef __INT8_TYPE__ s8;
typedef __INT16_TYPE__ s16;
-typedef __int24 s24;
+__extension__ typedef __int24 s24;
typedef __INT32_TYPE__ s32;
#define NI __attribute__((noipa))
diff --git a/gcc/testsuite/gcc.target/avr/torture/sub-zerox.c b/gcc/testsuite/gcc.target/avr/torture/sub-zerox.c
index 435fc7065f0..8152533d569 100644
--- a/gcc/testsuite/gcc.target/avr/torture/sub-zerox.c
+++ b/gcc/testsuite/gcc.target/avr/torture/sub-zerox.c
@@ -2,7 +2,7 @@
typedef __UINT8_TYPE__ u8;
typedef __UINT16_TYPE__ u16;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT32_TYPE__ u32;
u32 sub_32_8 (u32 a, u8 b) { return a - b; }
diff --git a/gcc/testsuite/gcc.target/avr/torture/test-gprs.h b/gcc/testsuite/gcc.target/avr/torture/test-gprs.h
index a982115e02a..56f358f7c25 100644
--- a/gcc/testsuite/gcc.target/avr/torture/test-gprs.h
+++ b/gcc/testsuite/gcc.target/avr/torture/test-gprs.h
@@ -1,6 +1,6 @@
typedef __UINT8_TYPE__ u8;
typedef __UINT16_TYPE__ u16;
-typedef __uint24 u24;
+__extension__ typedef __uint24 u24;
typedef __UINT32_TYPE__ u32;
typedef __UINT64_TYPE__ u64;