From patchwork Thu Jul 13 08:38:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 107589 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp1923704qge; Thu, 13 Jul 2017 01:39:05 -0700 (PDT) X-Received: by 10.84.163.75 with SMTP id n11mr8814413plg.186.1499935145418; Thu, 13 Jul 2017 01:39:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499935145; cv=none; d=google.com; s=arc-20160816; b=JZ2P+jdbQRhokA3GnTTzvjedu4XMocAcloxbnMB1eZ/4Zh7drh13qPpFkaMLajPUmi xZChq44aT21B7dxeCWEu3eKKw3F0GhSb9iLYxr0MOGU50no3e54txEl2ZThHXXusfhWh RXKyYX5BT0hNoxKzGU00EQgvxO0E3l72/gPhfnOX6HjyXrJyN/tKk2q9MEJWIYL+YN3c qDKDJ7I09Ah9lGdrdvU0Nscc1Y7JvLES7lX0Oj0/A/QHGDmfhTIIU5fmPbEUsVRp+qS+ 6/kZliHziXj9jqgOLmqDdhLP9L946vJMQI+pIsTF6MA2Kxx2BlBh5PjIkILc5SAqj9e2 xRPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:mail-followup-to:to:from:delivered-to:sender:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mailing-list:dkim-signature:domainkey-signature :arc-authentication-results; bh=nLIzZm5RUN/TM0Vmq7o+PM1eYPnT4NwUDETfssfJxzI=; b=ZIUhdfBGEyV0u5KkCM/dibxATRLqpK741jsKKOc3+uZldpCPlevsCthvpeFBxehwWP NKqkKvhI2zGSJLAhQkLC6O/NdURfS8zUwE3XjuT3YYpUpEgMrsRXNivh4n+4QYoMtumm YkpWsNb0F1YmppNThCt9Ckg7m242NoXntkqwwinu1ibUj21WB4Bq0J4x8rhiopmvqWwr O+O+1o8AB8vVtJ+YqiB3hBxuOJLbk1r884Xg49fHRmzNJUbtc0pX5Xu0GAmKmv7LEB0w 0w12cs2fZWe3s5SzmSMzegz8mum9IWHz98uZVAnzaN7JtI1DtVLGhB8opu3l5uWDT95v /Qaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.b=aaDwBkTm; spf=pass (google.com: domain of gcc-patches-return-457993-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-457993-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id k22si3769147pfa.197.2017.07.13.01.39.05 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Jul 2017 01:39:05 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-457993-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.b=aaDwBkTm; spf=pass (google.com: domain of gcc-patches-return-457993-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-457993-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=default; b=j2ERbcdU8ZMSe3sHD02epMS5kjxTN cefloT2OlRA6quPzQ89D1sezEUeFaPtdKJzTJrfk6XcQ7i3zsPy+xeWgA28NKgco fvkcHVbdTry62e74DxzbIFnFZLvFFVw5Qdd5bWGFJDiXUhdyCkT9CSVYb21TXqmM 01bHWF5183g2cw= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; s=default; bh=9nHBBzK5FBDJGvBjP7xU3mPtSYc=; b=aaD wBkTmOb2Gf/+X51ZTbjeJIOJ1Ypt5EgADkTb2J5lfqEDyUvl7WnOQ+95VvQ6cSZ/ 0+YRIcDKg7Dj9G9+Tau4WQdLWORUkGO43Q1MQLlUgn4qRg4TUgSgW6bxfJJJ0+Gh nQemVxmg9bHkMC8jdrKIgYDq8Y+y/xeL5SAkO+ks= Received: (qmail 71444 invoked by alias); 13 Jul 2017 08:38:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 66455 invoked by uid 89); 13 Jul 2017 08:38:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-15.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=foldable, 20170612, 21051 X-HELO: mail-wm0-f53.google.com Received: from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com) (74.125.82.53) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Jul 2017 08:38:45 +0000 Received: by mail-wm0-f53.google.com with SMTP id f67so17933070wmh.1 for ; Thu, 13 Jul 2017 01:38:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:mail-followup-to:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=nLIzZm5RUN/TM0Vmq7o+PM1eYPnT4NwUDETfssfJxzI=; b=qhj8ebLwTBfVdigI2y5eIzuYqWhQHwI2dYhwN2qovZWLFNDyG5vBeSfqim/YBurtMH W8xHWxad2X840HDev6L9OFMyjCQtuHesguVTStd6BxiyGXe2FnU4/THbKShtMK8Bdoem mjsueBgfQRtmd7MNWQ0mF+Xh2O6AzhSIRJBy0nYHKfYXZ3CoR2wAsqq8JuH8VBAEvN6N E5kURR39ea3Zi992QcgD/4uq8SxYZ2K64oulZkc1q0PRLxLv1JH7cC/yTg0sybN9jFs3 dcf7tIaNTKg//+bix4h8IuFEBhZYG4IGjdwz1jEmp4/2pW3kpGiERS/8lqsFt9IOwh5c bcUw== X-Gm-Message-State: AIVw112dgrFNGN1VEM1+KZdv5/Jvf/Lk+BbuFNDoK0uxaSH9b9oVjO21 uoxV9KBLsUHG12jMfk5WSg== X-Received: by 10.28.11.21 with SMTP id 21mr1227526wml.105.1499935123127; Thu, 13 Jul 2017 01:38:43 -0700 (PDT) Received: from localhost (92.40.249.184.threembb.co.uk. [92.40.249.184]) by smtp.gmail.com with ESMTPSA id b195sm2133589wmf.0.2017.07.13.01.38.41 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 13 Jul 2017 01:38:42 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [03/77] Allow machine modes to be classes References: <8760ewohsv.fsf@linaro.org> Date: Thu, 13 Jul 2017 09:38:40 +0100 In-Reply-To: <8760ewohsv.fsf@linaro.org> (Richard Sandiford's message of "Thu, 13 Jul 2017 09:35:44 +0100") Message-ID: <87shi0n33j.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 This patch makes various changes that allow modes like SImode to be classes rather than enums. Firstly, it adds inline functions for all mode size properties, with the macros being simple wrappers around them. This is necessary for the __builtin_constant_p trick to continue working effectively when the mode arguments are slightly more complex (but still foldable at compile time). These inline functions are trivial and heavily used. There's not much point keeping them out-of-line at -O0: if anything it would make debugging harder rather than easier, and it would also slow things down. The patch therefore marks them as "always_inline", if that's available. Later patches use this approach too. Using inline functions means that it's no longer possible to pass an int to GET_MODE_PRECISION etc. The Fortran and powerpcspe-c.c parts are needed to avoid instances of that. The patch continues to use enums for gencondmd.c, so that more mode comparisons are integer constant expressions when checking for always-true or always-false conditions. This is the only intended use of USE_ENUM_MODES. The patch also enforces the previous replacement of case statements by defining modes as: #define FOOmode ((void) 0, E_FOOmode) This adds no overhead but makes sure that new uses of "case FOOmode:" don't accidentally creep in when FOOmode has no specific class associated with it. 2017-07-13 Richard Sandiford Alan Hayward David Sherwood gcc/ * genconditions.c (write_header): Add a "#define USE_ENUM_MODES". * genmodes.c (emit_insn_modes_h): Define FOOmode to E_FOOmode if USE_ENUM_MODES is defined and to ((void) 0, E_FOOmode) otherwise. * machmode.h (mode_size): Move earlier in file. (mode_precision): Likewise. (mode_inner): Likewise. (mode_nunits): Likewise. (mode_unit_size): Likewise. (unit_unit_precision): Likewise. (mode_wider): Likewise. (mode_2xwider): Likewise. (machine_mode): New class. (mode_to_bytes): New function. (mode_to_bits): Likewise. (mode_to_precision): Likewise. (mode_to_inner): Likewise. (mode_to_unit_size): Likewise. (mode_to_unit_precision): Likewise. (mode_to_nunits): Likewise. (GET_MODE_SIZE): Use mode_to_bytes. (GET_MODE_BITSIZE): Use mode_to_bits. (GET_MODE_PRECISION): Use mode_to_precision. (GET_MODE_INNER): Use mode_to_inner. (GET_MODE_UNIT_SIZE): Use mode_to_unit_size. (GET_MODE_UNIT_PRECISION): Use mode_to_unit_precision. (GET_MODE_NUNITS): Use mode_to_nunits. * system.h (ALWAYS_INLINE): New macro. * config/powerpcspe/powerpcspe-c.c (altivec_resolve_overloaded_builtin): Use machine_mode instead of int for arg1_mode and arg2_mode. gcc/fortran/ * trans-types.c (gfc_init_kinds): Use machine_mode instead of int for "mode". Index: gcc/genconditions.c =================================================================== --- gcc/genconditions.c 2017-02-23 19:54:12.000000000 +0000 +++ gcc/genconditions.c 2017-07-13 09:18:20.866501621 +0100 @@ -67,6 +67,7 @@ #define CHECKING_P 0\n\ #undef ENABLE_RTL_FLAG_CHECKING\n\ #undef ENABLE_GC_CHECKING\n\ #undef ENABLE_GC_ALWAYS_COLLECT\n\ +#define USE_ENUM_MODES\n\ \n\ #include \"coretypes.h\"\n\ #include \"tm.h\"\n\ Index: gcc/genmodes.c =================================================================== --- gcc/genmodes.c 2017-07-13 09:18:17.576867543 +0100 +++ gcc/genmodes.c 2017-07-13 09:18:20.866501621 +0100 @@ -1155,8 +1155,12 @@ enum machine_mode\n{"); printf ("%*s/* %s:%d */\n", 27 - count_, "", trim_filename (m->file), m->line); printf ("#define HAVE_%smode\n", m->name); - printf ("#define %smode E_%smode\n", + printf ("#ifdef USE_ENUM_MODES\n"); + printf ("#define %smode E_%smode\n", m->name, m->name); + printf ("#else\n"); + printf ("#define %smode ((void) 0, E_%smode)\n", m->name, m->name); + printf ("#endif\n"); } puts (" MAX_MACHINE_MODE,\n"); Index: gcc/machmode.h =================================================================== --- gcc/machmode.h 2017-07-02 10:05:20.996539436 +0100 +++ gcc/machmode.h 2017-07-13 09:18:20.866501621 +0100 @@ -20,6 +20,15 @@ Software Foundation; either version 3, o #ifndef HAVE_MACHINE_MODES #define HAVE_MACHINE_MODES +extern CONST_MODE_SIZE unsigned short mode_size[NUM_MACHINE_MODES]; +extern const unsigned short mode_precision[NUM_MACHINE_MODES]; +extern const unsigned char mode_inner[NUM_MACHINE_MODES]; +extern const unsigned char mode_nunits[NUM_MACHINE_MODES]; +extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES]; +extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES]; +extern const unsigned char mode_wider[NUM_MACHINE_MODES]; +extern const unsigned char mode_2xwider[NUM_MACHINE_MODES]; + /* Get the name of mode MODE as a string. */ extern const char * const mode_name[NUM_MACHINE_MODES]; @@ -174,22 +183,98 @@ #define CLASS_HAS_WIDER_MODES_P(CLASS) #define POINTER_BOUNDS_MODE_P(MODE) \ (GET_MODE_CLASS (MODE) == MODE_POINTER_BOUNDS) -/* Get the size in bytes and bits of an object of mode MODE. */ +/* Return the base GET_MODE_SIZE value for MODE. */ -extern CONST_MODE_SIZE unsigned short mode_size[NUM_MACHINE_MODES]; +ALWAYS_INLINE unsigned short +mode_to_bytes (machine_mode mode) +{ +#if GCC_VERSION >= 4001 + return (__builtin_constant_p (mode) + ? mode_size_inline (mode) : mode_size[mode]); +#else + return mode_size[mode]; +#endif +} + +/* Return the base GET_MODE_BITSIZE value for MODE. */ + +ALWAYS_INLINE unsigned short +mode_to_bits (machine_mode mode) +{ + return mode_to_bytes (mode) * BITS_PER_UNIT; +} + +/* Return the base GET_MODE_PRECISION value for MODE. */ + +ALWAYS_INLINE unsigned short +mode_to_precision (machine_mode mode) +{ + return mode_precision[mode]; +} + +/* Return the base GET_MODE_INNER value for MODE. */ + +ALWAYS_INLINE machine_mode +mode_to_inner (machine_mode mode) +{ +#if GCC_VERSION >= 4001 + return (machine_mode) (__builtin_constant_p (mode) + ? mode_inner_inline (mode) : mode_inner[mode]); +#else + return (machine_mode) mode_inner[mode]; +#endif +} + +/* Return the base GET_MODE_UNIT_SIZE value for MODE. */ + +ALWAYS_INLINE unsigned char +mode_to_unit_size (machine_mode mode) +{ #if GCC_VERSION >= 4001 -#define GET_MODE_SIZE(MODE) \ - ((unsigned short) (__builtin_constant_p (MODE) \ - ? mode_size_inline (MODE) : mode_size[MODE])) + return (__builtin_constant_p (mode) + ? mode_unit_size_inline (mode) : mode_unit_size[mode]); #else -#define GET_MODE_SIZE(MODE) ((unsigned short) mode_size[MODE]) + return mode_unit_size[mode]; #endif -#define GET_MODE_BITSIZE(MODE) \ - ((unsigned short) (GET_MODE_SIZE (MODE) * BITS_PER_UNIT)) +} + +/* Return the base GET_MODE_UNIT_PRECISION value for MODE. */ + +ALWAYS_INLINE unsigned short +mode_to_unit_precision (machine_mode mode) +{ +#if GCC_VERSION >= 4001 + return (__builtin_constant_p (mode) + ? mode_unit_precision_inline (mode) : mode_unit_precision[mode]); +#else + return mode_unit_precision[mode]; +#endif +} + +/* Return the base GET_MODE_NUNITS value for MODE. */ + +ALWAYS_INLINE unsigned short +mode_to_nunits (machine_mode mode) +{ +#if GCC_VERSION >= 4001 + return (__builtin_constant_p (mode) + ? mode_nunits_inline (mode) : mode_nunits[mode]); +#else + return mode_nunits[mode]; +#endif +} + +/* Get the size in bytes of an object of mode MODE. */ + +#define GET_MODE_SIZE(MODE) (mode_to_bytes (MODE)) + +/* Get the size in bits of an object of mode MODE. */ + +#define GET_MODE_BITSIZE(MODE) (mode_to_bits (MODE)) /* Get the number of value bits of an object of mode MODE. */ -extern const unsigned short mode_precision[NUM_MACHINE_MODES]; -#define GET_MODE_PRECISION(MODE) mode_precision[MODE] + +#define GET_MODE_PRECISION(MODE) (mode_to_precision (MODE)) /* Get the number of integral bits of an object of mode MODE. */ extern CONST_MODE_IBIT unsigned char mode_ibit[NUM_MACHINE_MODES]; @@ -210,51 +295,22 @@ #define GET_MODE_MASK(MODE) mode_mask_ar mode of the vector elements. For complex modes it is the mode of the real and imaginary parts. For other modes it is MODE itself. */ -extern const unsigned char mode_inner[NUM_MACHINE_MODES]; -#if GCC_VERSION >= 4001 -#define GET_MODE_INNER(MODE) \ - ((machine_mode) (__builtin_constant_p (MODE) \ - ? mode_inner_inline (MODE) : mode_inner[MODE])) -#else -#define GET_MODE_INNER(MODE) ((machine_mode) mode_inner[MODE]) -#endif +#define GET_MODE_INNER(MODE) (mode_to_inner (MODE)) /* Get the size in bytes or bits of the basic parts of an object of mode MODE. */ -extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES]; -#if GCC_VERSION >= 4001 -#define GET_MODE_UNIT_SIZE(MODE) \ - ((unsigned char) (__builtin_constant_p (MODE) \ - ? mode_unit_size_inline (MODE) : mode_unit_size[MODE])) -#else -#define GET_MODE_UNIT_SIZE(MODE) mode_unit_size[MODE] -#endif +#define GET_MODE_UNIT_SIZE(MODE) mode_to_unit_size (MODE) #define GET_MODE_UNIT_BITSIZE(MODE) \ ((unsigned short) (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)) -extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES]; -#if GCC_VERSION >= 4001 -#define GET_MODE_UNIT_PRECISION(MODE) \ - ((unsigned short) (__builtin_constant_p (MODE) \ - ? mode_unit_precision_inline (MODE)\ - : mode_unit_precision[MODE])) -#else -#define GET_MODE_UNIT_PRECISION(MODE) mode_unit_precision[MODE] -#endif - +#define GET_MODE_UNIT_PRECISION(MODE) (mode_to_unit_precision (MODE)) -/* Get the number of units in the object. */ +/* Get the number of units in an object of mode MODE. This is 2 for + complex modes and the number of elements for vector modes. */ -extern const unsigned char mode_nunits[NUM_MACHINE_MODES]; -#if GCC_VERSION >= 4001 -#define GET_MODE_NUNITS(MODE) \ - ((unsigned char) (__builtin_constant_p (MODE) \ - ? mode_nunits_inline (MODE) : mode_nunits[MODE])) -#else -#define GET_MODE_NUNITS(MODE) mode_nunits[MODE] -#endif +#define GET_MODE_NUNITS(MODE) (mode_to_nunits (MODE)) /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ Index: gcc/system.h =================================================================== --- gcc/system.h 2017-06-12 17:05:23.281759459 +0100 +++ gcc/system.h 2017-07-13 09:18:20.866501621 +0100 @@ -745,6 +745,12 @@ #define gcc_checking_assert(EXPR) gcc_as #define gcc_checking_assert(EXPR) ((void)(0 && (EXPR))) #endif +#if GCC_VERSION >= 4000 +#define ALWAYS_INLINE inline __attribute__ ((always_inline)) +#else +#define ALWAYS_INLINE inline +#endif + /* Use gcc_unreachable() to mark unreachable locations (like an unreachable default case of a switch. Do not use gcc_assert(0). */ #if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING Index: gcc/config/powerpcspe/powerpcspe-c.c =================================================================== --- gcc/config/powerpcspe/powerpcspe-c.c 2017-07-13 09:18:19.088697749 +0100 +++ gcc/config/powerpcspe/powerpcspe-c.c 2017-07-13 09:18:20.865501731 +0100 @@ -6504,8 +6504,8 @@ altivec_resolve_overloaded_builtin (loca if (fcode == P6_OV_BUILTIN_CMPB) { int overloaded_code; - int arg1_mode = TYPE_MODE (types[0]); - int arg2_mode = TYPE_MODE (types[1]); + machine_mode arg1_mode = TYPE_MODE (types[0]); + machine_mode arg2_mode = TYPE_MODE (types[1]); if (nargs != 2) { Index: gcc/fortran/trans-types.c =================================================================== --- gcc/fortran/trans-types.c 2017-05-03 08:46:30.890861653 +0100 +++ gcc/fortran/trans-types.c 2017-07-13 09:18:20.865501731 +0100 @@ -362,22 +362,23 @@ #define NAMED_SUBROUTINE(a,b,c,d) \ void gfc_init_kinds (void) { - unsigned int mode; + machine_mode mode; int i_index, r_index, kind; bool saw_i4 = false, saw_i8 = false; bool saw_r4 = false, saw_r8 = false, saw_r10 = false, saw_r16 = false; - for (i_index = 0, mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode++) + for (i_index = 0, mode = MIN_MODE_INT; mode <= MAX_MODE_INT; + mode = (machine_mode) ((int) mode + 1)) { int kind, bitsize; - if (!targetm.scalar_mode_supported_p ((machine_mode) mode)) + if (!targetm.scalar_mode_supported_p (mode)) continue; /* The middle end doesn't support constants larger than 2*HWI. Perhaps the target hook shouldn't have accepted these either, but just to be safe... */ - bitsize = GET_MODE_BITSIZE ((machine_mode) mode); + bitsize = GET_MODE_BITSIZE (mode); if (bitsize > 2*HOST_BITS_PER_WIDE_INT) continue; @@ -417,15 +418,16 @@ gfc_init_kinds (void) /* Set the maximum integer kind. Used with at least BOZ constants. */ gfc_max_integer_kind = gfc_integer_kinds[i_index - 1].kind; - for (r_index = 0, mode = MIN_MODE_FLOAT; mode <= MAX_MODE_FLOAT; mode++) + for (r_index = 0, mode = MIN_MODE_FLOAT; mode <= MAX_MODE_FLOAT; + mode = (machine_mode) ((int) mode + 1)) { const struct real_format *fmt = - REAL_MODE_FORMAT ((machine_mode) mode); + REAL_MODE_FORMAT (mode); int kind; if (fmt == NULL) continue; - if (!targetm.scalar_mode_supported_p ((machine_mode) mode)) + if (!targetm.scalar_mode_supported_p (mode)) continue; /* Only let float, double, long double and __float128 go through.