get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2223533/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2223533,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2223533/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/ad-dUojo7PeLr-t3@tucnak/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<ad-dUojo7PeLr-t3@tucnak>",
    "date": "2026-04-15T14:14:42",
    "name": "bitintlower, v2: Padding bit fixes, part 1 [PR123635]",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "43604257569dcae7579ec70726dbcd13762f54e0",
    "submitter": {
        "id": 671,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/671/?format=api",
        "name": "Jakub Jelinek",
        "email": "jakub@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/ad-dUojo7PeLr-t3@tucnak/mbox/",
    "series": [
        {
            "id": 499994,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/499994/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=499994",
            "date": "2026-04-15T14:14:42",
            "name": "bitintlower, v2: Padding bit fixes, part 1 [PR123635]",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499994/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2223533/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223533/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=Ry6D1JjB;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=Ry6D1JjB",
            "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "sourceware.org; spf=pass smtp.mailfrom=redhat.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwjpj4wmMz1yHM\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 00:15:25 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id D09C14BA23C0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 14:15:23 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 9E0484BA2E07\n for <gcc-patches@gcc.gnu.org>; Wed, 15 Apr 2026 14:14:53 +0000 (GMT)",
            "from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-189-TmXD-98EPNSU7zONZpw6OQ-1; Wed,\n 15 Apr 2026 10:14:48 -0400",
            "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id C4AD219560B9; Wed, 15 Apr 2026 14:14:46 +0000 (UTC)",
            "from tucnak.zalov.cz (unknown [10.44.33.129])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with\n ESMTPS\n id 0467C30001A4; Wed, 15 Apr 2026 14:14:45 +0000 (UTC)",
            "from tucnak.zalov.cz (localhost [127.0.0.1])\n by tucnak.zalov.cz (8.18.1/8.18.1) with ESMTPS id 63FEEghd2015116\n (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT);\n Wed, 15 Apr 2026 16:14:42 +0200",
            "(from jakub@localhost)\n by tucnak.zalov.cz (8.18.1/8.18.1/Submit) id 63FEEgFC2015115;\n Wed, 15 Apr 2026 16:14:42 +0200"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org D09C14BA23C0",
            "OpenDKIM Filter v2.11.0 sourceware.org 9E0484BA2E07"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 9E0484BA2E07",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 9E0484BA2E07",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776262493; cv=none;\n b=hSNcFKdWHlre/gfiLUPx+VILfyoxalDl69DIGZqZGCdyYHnxWwO2XWd5yGwRU6s57F8decTzH2zpA8LcRBm+DvG98O9oPb5mA14uuoGU3oHTKGS7BWIeByDeeczeMgTZaSleump5X9k04S3qRtfU0iTF0eR4jEJAHEO+9Hp87GA=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776262493; c=relaxed/simple;\n bh=J1cQ/1Wkzonhunhw+IWXG2Gqig3KW5wekVjzkqKCYuc=;\n h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version;\n b=fN30E/7+cPVQ7lrGXfbq8doi3MaJXPhpbglITAMdGh59lhHaQ3S0Q4qV2fgnjQtbJfGC3N126YTlz3N2qoHkCzd8lpdi3QeWlW2ZOR4yoyKcQLWXo0qb/OxvpiwGkg5ArA3SSoYYk7LYF+pdBpoNIdybQycITCcHlykyffO3zHc=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776262493;\n h=from:from:reply-to:reply-to:subject:subject:date:date:\n message-id:message-id:to:to:cc:cc:mime-version:mime-version:\n content-type:content-type:in-reply-to:in-reply-to:  references:references;\n bh=c8m8QbmXpySAG1iqqdOKj1a37jwbHM6JokFHpT2gP/A=;\n b=Ry6D1JjBwbP7xNM6NOMsMfOJrfuH5dpX06LmF43kTgxBy9BL/Abehmud25um7dpJXNAtgl\n Q5cpY4Xqntjmd/ghr45gzxjPJSSwSIVay1XUdro/gdX35TuNb1wIwlgDPaCUUZPz7jtkhY\n 60bU1jJnhzZ3x200jS6CWvIpK3RsWyY=",
        "X-MC-Unique": "TmXD-98EPNSU7zONZpw6OQ-1",
        "X-Mimecast-MFC-AGG-ID": "TmXD-98EPNSU7zONZpw6OQ_1776262487",
        "Date": "Wed, 15 Apr 2026 16:14:42 +0200",
        "From": "Jakub Jelinek <jakub@redhat.com>",
        "To": "Richard Biener <rguenther@suse.de>",
        "Cc": "gcc-patches@gcc.gnu.org,\n Andre Simoes Dias Vieira <Andre.SimoesDiasVieira@arm.com>,\n Palmer Dabbelt <palmer@dabbelt.com>, Robin Dapp <rdapp.gcc@gmail.com>",
        "Subject": "[PATCH] bitintlower, v2: Padding bit fixes, part 1 [PR123635]",
        "Message-ID": "<ad-dUojo7PeLr-t3@tucnak>",
        "References": "<ad9geEOhFRyA9Fwq@tucnak>\n <11po881q-qrq7-q160-958o-5qs7po1os88q@fhfr.qr>",
        "MIME-Version": "1.0",
        "In-Reply-To": "<11po881q-qrq7-q160-958o-5qs7po1os88q@fhfr.qr>",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "e5OZHUEiQ5MOCoOiFxF7Rnjmjn-Cd5S1uZ47SBsKQGw_1776262487",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain; charset=us-ascii",
        "Content-Disposition": "inline",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Reply-To": "Jakub Jelinek <jakub@redhat.com>",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "On Wed, Apr 15, 2026 at 01:05:17PM +0200, Richard Biener wrote:\n> > Bootstrapped/regtested on x86_64-linux, i686-linux, aarch64-linux and\n> > s390x-linux, ok for trunk if somebody tests this on arm-linux-gnueabi or\n> > riscv*-linux?\n> \n> OK, but can we use an enum for the extend type please?\n\nSo like this?\n\n2026-04-15  Jakub Jelinek  <jakub@redhat.com>\n\n\tPR middle-end/123635\n\t* target.h (enum bitint_ext): New.\n\t(struct bitint_info): Change extend type from bool to enum bitint_ext\n\tand document it.\n\t* gimple-lower-bitint.cc (bitint_extended): Change type from bool\n\tto enum bitint_ext.\n\t(bitint_precision_kind): Change bitint_extended to bitint_ext_partial\n\tfrom bitint_ext_full if limb_mode is the same as abi_limb_mode.\n\t(bitint_large_huge::limb_access_type): For\n\tbitint_extended == bitint_ext_full allow access to the most\n\tsignificant limb solely with padding bits if present.\n\t(bitint_large_huge::lower_mergeable_stmt): Handle\n\tbitint_extended == bitint_ext_full extension if needed.\n\t(bitint_large_huge::lower_muldiv_stmt): Likewise.\n\t(bitint_large_huge::lower_float_conv_stmt): Likewise.\n\t* config/aarch64/aarch64.cc (aarch64_bitint_type_info): Set\n\tinfo->extended to bitint_ext_undef rather than false.\n\t* config/arm/arm.cc (arm_bitint_type_info): Set\n\tinfo->extended to bitint_ext_full rather than true.\n\t* config/i386/i386.cc (ix86_bitint_type_info): Set\n\tinfo->extended to bitint_ext_undef rather than false.\n\t* config/loongarch/loongarch.cc (loongarch_bitint_type_info): Set\n\tinfo->extended to bitint_ext_partial rather than true.\n\t* config/riscv/riscv.cc (riscv_bitint_type_info): Set\n\tinfo->extended to bitint_ext_full rather than true.\n\t* config/s390/s390.cc (s390_bitint_type_info): Likewise.\n\n\t* gcc.dg/bitintext.h: Handle __riscv__ like __arm__.\n\t* gcc.dg/torture/bitint-86.c: New test.\n\t* gcc.dg/torture/bitint-87.c: New test.\n\n\n\n\tJakub",
    "diff": "--- gcc/target.h.jj\t2026-03-27 10:17:14.548323983 +0100\n+++ gcc/target.h\t2026-04-15 16:09:18.525546771 +0200\n@@ -68,13 +68,22 @@ union cumulative_args_t { void *p; };\n \n #endif /* !CHECKING_P */\n \n+/* Values for bitint_info::extended below.  */\n+\n+enum bitint_ext { bitint_ext_undef, bitint_ext_partial, bitint_ext_full };\n+\n /* Target properties of _BitInt(N) type.  _BitInt(N) is to be represented\n    as series of abi_limb_mode CEIL (N, GET_MODE_PRECISION (abi_limb_mode))\n    limbs, ordered from least significant to most significant if !big_endian,\n    otherwise from most significant to least significant.  If extended is\n-   false, the bits above or equal to N are undefined when stored in a register\n-   or memory, otherwise they are zero or sign extended depending on if\n-   it is unsigned _BitInt(N) or _BitInt(N) / signed _BitInt(N).\n+   bitint_ext_undef, the bits above or equal to N are undefined when stored in\n+   a register or memory, if extended is bitint_ext_full, they are zero or sign\n+   extended depending on if it is unsigned _BitInt(N) or\n+   _BitInt(N) / signed _BitInt(N), if extended is bitint_ext_partial, then bits\n+   above or equal to N and below\n+   M = CEIL (N, GET_MODE_PRECISION (limb_mode)) * GET_MODE_PRECISION (limb_mode)\n+   are zero or sign extended as specified above and bits above or equal to M\n+   are undefined.\n    limb_mode is either the same as abi_limb_mode, or some narrower mode\n    in which _BitInt lowering should actually perform operations in and\n    what libgcc _BitInt helpers should use.\n@@ -87,7 +96,7 @@ union cumulative_args_t { void *p; };\n struct bitint_info {\n   machine_mode abi_limb_mode, limb_mode;\n   bool big_endian;\n-  bool extended;\n+  enum bitint_ext extended;\n };\n \n /* Types of memory operation understood by the \"by_pieces\" infrastructure.\n--- gcc/gimple-lower-bitint.cc.jj\t2026-04-14 09:27:02.221287531 +0200\n+++ gcc/gimple-lower-bitint.cc\t2026-04-14 18:45:43.191371265 +0200\n@@ -77,7 +77,8 @@ enum bitint_prec_kind {\n \n static int small_max_prec, mid_min_prec, large_min_prec, huge_min_prec;\n static int limb_prec, abi_limb_prec;\n-static bool bitint_big_endian, bitint_extended;\n+static bool bitint_big_endian;\n+static enum bitint_ext bitint_extended;\n \n /* Categorize _BitInt(PREC) as small, middle, large or huge.  */\n \n@@ -104,6 +105,8 @@ bitint_precision_kind (int prec)\n     }\n   bitint_big_endian = info.big_endian;\n   bitint_extended = info.extended;\n+  if (info.limb_mode == info.abi_limb_mode && bitint_extended == bitint_ext_full)\n+    bitint_extended = bitint_ext_partial;\n   if (!large_min_prec\n       && GET_MODE_PRECISION (limb_mode) <= MAX_FIXED_MODE_SIZE)\n     large_min_prec = MAX_FIXED_MODE_SIZE + 1;\n@@ -599,7 +602,11 @@ bitint_large_huge::limb_access_type (tre\n     return m_limb_type;\n   unsigned HOST_WIDE_INT i = tree_to_uhwi (idx);\n   unsigned int prec = TYPE_PRECISION (type);\n-  gcc_assert (i * limb_prec < prec);\n+  gcc_assert (i * limb_prec < prec\n+\t      || (bitint_extended == bitint_ext_full\n+\t\t  && abi_limb_prec > limb_prec\n+\t\t  && i * limb_prec\n+\t\t     < CEIL (prec, abi_limb_prec) * abi_limb_prec));\n   if (bitint_big_endian\n       ? (i != 0 || (prec % limb_prec) == 0)\n       : (i + 1) * limb_prec <= prec)\n@@ -2870,6 +2877,16 @@ bitint_large_huge::lower_mergeable_stmt\n     = (prec != (unsigned) TYPE_PRECISION (type)\n        && (CEIL ((unsigned) TYPE_PRECISION (type), limb_prec)\n \t   > CEIL (prec, limb_prec)));\n+  if (bitint_extended == bitint_ext_full\n+      && !eq_p\n+      && abi_limb_prec > limb_prec\n+      && ((CEIL ((unsigned) TYPE_PRECISION (type), abi_limb_prec)\n+\t   * abi_limb_prec / limb_prec) > CEIL (prec, limb_prec)))\n+    {\n+      if (prec == (unsigned) TYPE_PRECISION (type))\n+\tsext = !TYPE_UNSIGNED (type);\n+      separate_ext = true;\n+    }\n   unsigned dst_idx_off = 0;\n   if (separate_ext && bitint_big_endian)\n     dst_idx_off = (CEIL ((unsigned) TYPE_PRECISION (type), limb_prec)\n@@ -3107,6 +3124,11 @@ bitint_large_huge::lower_mergeable_stmt\n       kind = bitint_precision_kind (type);\n       unsigned start = CEIL (prec, limb_prec);\n       prec = TYPE_PRECISION (type);\n+      if (bitint_extended == bitint_ext_full && abi_limb_prec > limb_prec)\n+\t{\n+\t  prec = CEIL (prec, abi_limb_prec) * abi_limb_prec;\n+\t  kind = bitint_precision_kind (prec);\n+\t}\n       unsigned total = CEIL (prec, limb_prec);\n       idx = idx_first = idx_next = NULL_TREE;\n       if (prec <= (start + 2 + (bo_shift != 0)) * limb_prec)\n@@ -3964,6 +3986,7 @@ bitint_large_huge::lower_muldiv_stmt (tr\n   gcc_assert (TREE_CODE (type) == BITINT_TYPE\n \t      && bitint_precision_kind (type) >= bitint_prec_large);\n   int prec = TYPE_PRECISION (type), prec1, prec2;\n+  bool zero_ms_limb = false;\n   rhs1 = handle_operand_addr (rhs1, stmt, NULL, &prec1);\n   rhs2 = handle_operand_addr (rhs2, stmt, NULL, &prec2);\n   if (obj == NULL_TREE)\n@@ -3979,6 +4002,18 @@ bitint_large_huge::lower_muldiv_stmt (tr\n       lhs = force_gimple_operand_gsi (&m_gsi, lhs, true,\n \t\t\t\t      NULL_TREE, true, GSI_SAME_STMT);\n     }\n+  if (bitint_extended == bitint_ext_full\n+      && abi_limb_prec > limb_prec\n+      && (CEIL (prec, abi_limb_prec) * abi_limb_prec\n+\t  > CEIL (prec, limb_prec) * limb_prec))\n+    {\n+      /* unsigned multiplication needs to wrap around, so we can't\n+\t increase prec.  */\n+      if (rhs_code == MULT_EXPR && TYPE_UNSIGNED (type))\n+\tzero_ms_limb = true;\n+      else\n+\tprec = CEIL (prec, abi_limb_prec) * abi_limb_prec;\n+    }\n   tree sitype = lang_hooks.types.type_for_mode (SImode, 0);\n   gimple *g;\n   switch (rhs_code)\n@@ -4032,6 +4067,13 @@ bitint_large_huge::lower_muldiv_stmt (tr\n \t  add_eh_edge (e2->src, e1);\n \t}\n     }\n+  if (zero_ms_limb)\n+    {\n+      unsigned int i = CEIL (prec, abi_limb_prec) * abi_limb_prec / limb_prec;\n+      g = gimple_build_assign (limb_access (type, obj, size_int (i - 1), true),\n+\t\t\t       build_zero_cst (m_limb_type));\n+      insert_before (g);\n+    }\n }\n \n /* Lower large/huge _BitInt conversion to/from floating point.  */\n@@ -4046,8 +4088,15 @@ bitint_large_huge::lower_float_conv_stmt\n   gimple *g;\n   if (rhs_code == FIX_TRUNC_EXPR)\n     {\n-      int prec = TYPE_PRECISION (TREE_TYPE (lhs));\n-      if (!TYPE_UNSIGNED (TREE_TYPE (lhs)))\n+      tree type = TREE_TYPE (lhs);\n+      int prec = TYPE_PRECISION (type);\n+      bool extend_ms_limb = false;\n+      if (bitint_extended == bitint_ext_full\n+\t  && abi_limb_prec > limb_prec\n+\t  && (CEIL (prec, abi_limb_prec) * abi_limb_prec\n+\t      > CEIL (prec, limb_prec) * limb_prec))\n+\textend_ms_limb = true;\n+      if (!TYPE_UNSIGNED (type))\n \tprec = -prec;\n       if (obj == NULL_TREE)\n \t{\n@@ -4081,6 +4130,32 @@ bitint_large_huge::lower_float_conv_stmt\n \t\t\t\t      lhs, build_int_cst (sitype, prec),\n \t\t\t\t      rhs1);\n       insert_before (g);\n+      if (extend_ms_limb)\n+\t{\n+\t  unsigned int i\n+\t    = (CEIL (prec < 0 ? -prec : prec, abi_limb_prec)\n+\t       * abi_limb_prec / limb_prec);\n+\t  tree val;\n+\t  if (prec < 0)\n+\t    {\n+\t      g = gimple_build_assign (make_ssa_name (m_limb_type),\n+\t\t\t\t       limb_access (type, obj,\n+\t\t\t\t\t\t    size_int (i - 2),\n+\t\t\t\t\t\t    true));\n+\t      insert_before (g);\n+\t      g = gimple_build_assign (make_ssa_name (m_limb_type),\n+\t\t\t\t       RSHIFT_EXPR, gimple_assign_lhs (g),\n+\t\t\t\t       build_int_cst (unsigned_type_node,\n+\t\t\t\t\t\t      limb_prec - 1));\n+\t      insert_before (g);\n+\t      val = gimple_assign_lhs (g);\n+\t    }\n+\t  else\n+\t    val = build_zero_cst (m_limb_type);\n+\t  g = gimple_build_assign (limb_access (type, obj, size_int (i - 1),\n+\t\t\t\t\t\ttrue), val);\n+\t  insert_before (g);\n+\t}\n     }\n   else\n     {\n--- gcc/config/aarch64/aarch64.cc.jj\t2026-04-10 08:45:20.699812103 +0200\n+++ gcc/config/aarch64/aarch64.cc\t2026-04-14 13:05:23.358474454 +0200\n@@ -30497,7 +30497,7 @@ aarch64_bitint_type_info (int n, struct\n   else\n     info->abi_limb_mode = info->limb_mode;\n   info->big_endian = TARGET_BIG_END;\n-  info->extended = false;\n+  info->extended = bitint_ext_undef;\n   return true;\n }\n \n--- gcc/config/arm/arm.cc.jj\t2026-03-30 11:56:53.023841345 +0200\n+++ gcc/config/arm/arm.cc\t2026-04-14 13:05:31.620334159 +0200\n@@ -35933,7 +35933,7 @@ arm_bitint_type_info (int n, struct biti\n   else\n     info->abi_limb_mode = info->limb_mode;\n   info->big_endian = TARGET_BIG_END;\n-  info->extended = true;\n+  info->extended = bitint_ext_full;\n   return true;\n }\n \n--- gcc/config/i386/i386.cc.jj\t2026-04-14 08:39:48.626636548 +0200\n+++ gcc/config/i386/i386.cc\t2026-04-14 13:05:37.917227233 +0200\n@@ -27719,7 +27719,7 @@ ix86_bitint_type_info (int n, struct bit\n     info->limb_mode = DImode;\n   info->abi_limb_mode = info->limb_mode;\n   info->big_endian = false;\n-  info->extended = false;\n+  info->extended = bitint_ext_undef;\n   return true;\n }\n \n--- gcc/config/loongarch/loongarch.cc.jj\t2026-04-02 14:18:31.926538351 +0200\n+++ gcc/config/loongarch/loongarch.cc\t2026-04-14 13:05:41.762161943 +0200\n@@ -11391,7 +11391,7 @@ loongarch_bitint_type_info (int n, struc\n     info->abi_limb_mode = TImode;\n \n   info->big_endian = false;\n-  info->extended = true;\n+  info->extended = bitint_ext_partial;\n   return true;\n }\n \n--- gcc/config/riscv/riscv.cc.jj\t2026-04-10 08:45:20.701812067 +0200\n+++ gcc/config/riscv/riscv.cc\t2026-04-14 13:05:46.023089589 +0200\n@@ -14926,7 +14926,7 @@ riscv_bitint_type_info (int n, struct bi\n     info->abi_limb_mode = DImode;\n \n   info->big_endian = TARGET_BIG_ENDIAN;\n-  info->extended = true;\n+  info->extended = bitint_ext_full;\n   return true;\n }\n \n--- gcc/config/s390/s390.cc.jj\t2026-04-01 19:09:38.325343788 +0200\n+++ gcc/config/s390/s390.cc\t2026-04-14 13:05:49.527030090 +0200\n@@ -18851,7 +18851,7 @@ s390_bitint_type_info (int n, struct bit\n     info->limb_mode = DImode;\n   info->abi_limb_mode = info->limb_mode;\n   info->big_endian = true;\n-  info->extended = true;\n+  info->extended = bitint_ext_full;\n   return true;\n }\n \n--- gcc/testsuite/gcc.dg/bitintext.h.jj\t2026-03-27 10:17:16.871286076 +0100\n+++ gcc/testsuite/gcc.dg/bitintext.h\t2026-04-14 12:26:15.243964985 +0200\n@@ -16,7 +16,7 @@ do_copy (void *p, const void *q, __SIZE_\n #define CEIL(x,y) (((x) + (y) - 1) / (y))\n \n /* Promote a _BitInt type to include its padding bits.  */\n-#if defined (__s390x__) || defined(__arm__)\n+#if defined (__s390x__) || defined(__arm__) || defined(__riscv__)\n #define PROMOTED_SIZE(x) sizeof (x)\n #elif defined(__loongarch__)\n #define PROMOTED_SIZE(x) (sizeof (x) > 8 ? CEIL (S (x), 64) * 8 : sizeof (x))\n@@ -24,7 +24,8 @@ do_copy (void *p, const void *q, __SIZE_\n \n /* Macro to test whether (on targets where psABI requires it) _BitInt\n    with padding bits have those filled with sign or zero extension.  */\n-#if defined(__s390x__) || defined(__arm__) || defined(__loongarch__)\n+#if defined(__s390x__) || defined(__arm__) || defined(__loongarch__) \\\n+    || defined(__riscv__)\n #define BEXTC1(x, uns) \\\n   do {\t\t\t\t\t\t\t  \\\n     uns _BitInt(PROMOTED_SIZE (x) * __CHAR_BIT__) __x;\t  \\\n--- gcc/testsuite/gcc.dg/torture/bitint-86.c.jj\t2026-04-14 13:52:03.448042878 +0200\n+++ gcc/testsuite/gcc.dg/torture/bitint-86.c\t2026-04-14 15:49:40.833426638 +0200\n@@ -0,0 +1,96 @@\n+/* PR middle-end/123635 */\n+/* { dg-do run { target bitint } } */\n+/* { dg-require-effective-target sync_char_short } */\n+/* { dg-options \"-std=c23 -pedantic-errors\" } */\n+/* { dg-skip-if \"\" { ! run_expensive_tests }  { \"*\" } { \"-O0\" \"-O2\" } } */\n+/* { dg-skip-if \"\" { ! run_expensive_tests } { \"-flto\" } { \"\" } } */\n+\n+#if __BITINT_MAXWIDTH__ >= 1025\n+_BitInt(513) a, b, c, d;\n+unsigned _BitInt(513) e, f, g, h;\n+_BitInt(1025) i, j, k, l;\n+unsigned _BitInt(1025) m, n, o, p;\n+#endif\n+\n+#include \"../bitintext.h\"\n+\n+#if __BITINT_MAXWIDTH__ >= 1025\n+[[gnu::noipa]] void\n+f1 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,\n+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v)\n+{\n+  a = q + r;\n+  BEXTC (a);\n+  b = r + s;\n+  BEXTC (b);\n+  c = q - r;\n+  BEXTC (c);\n+  d = q - s;\n+  BEXTC (d);\n+  e = t + u;\n+  BEXTC (e);\n+  f = u + v;\n+  BEXTC (f);\n+  g = t - u;\n+  BEXTC (g);\n+  h = t - v;\n+  BEXTC (h);\n+}\n+\n+[[gnu::noipa]] void\n+f2 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,\n+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v)\n+{\n+  i = q + r;\n+  BEXTC (i);\n+  j = r + s;\n+  BEXTC (j);\n+  k = q - r;\n+  BEXTC (k);\n+  l = q - s;\n+  BEXTC (l);\n+  m = t + u;\n+  BEXTC (m);\n+  n = u + v;\n+  BEXTC (n);\n+  o = t - u;\n+  BEXTC (o);\n+  p = t - v;\n+  BEXTC (p);\n+}\n+#endif\n+\n+int\n+main ()\n+{\n+#if __BITINT_MAXWIDTH__ >= 1025\n+  __builtin_memset (&a, 0x55, sizeof (a));\n+  __builtin_memset (&b, 0xaa, sizeof (b));\n+  __builtin_memset (&c, 0x55, sizeof (c));\n+  __builtin_memset (&d, 0xaa, sizeof (d));\n+  __builtin_memset (&e, 0x55, sizeof (e));\n+  __builtin_memset (&f, 0xaa, sizeof (f));\n+  __builtin_memset (&g, 0x55, sizeof (g));\n+  __builtin_memset (&h, 0xaa, sizeof (h));\n+  f1 (-2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,\n+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,\n+      8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,\n+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,\n+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,\n+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb);\n+  __builtin_memset (&i, 0x55, sizeof (i));\n+  __builtin_memset (&j, 0xaa, sizeof (j));\n+  __builtin_memset (&k, 0x55, sizeof (k));\n+  __builtin_memset (&l, 0xaa, sizeof (l));\n+  __builtin_memset (&m, 0x55, sizeof (m));\n+  __builtin_memset (&n, 0xaa, sizeof (n));\n+  __builtin_memset (&o, 0x55, sizeof (o));\n+  __builtin_memset (&p, 0xaa, sizeof (p));\n+  f2 (-2639616085193412675089727272130019765984398127278861998378045997173219392866835944828454559654047247059773556852593471531433454810831298259785611283536204wb,\n+      -7234121192495298112713936268702056205915537824658323839255206188456944966709752205781440683757949161649123152428620619997014209098183677328840647884700332wb,\n+      8654283549227219676537451326576929768614001427323560383705131223498505581982738964879437520020436012891649083646965651378407397436785749860023553778646861wb,\n+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,\n+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281151uwb,\n+      513612209045189503622076474995216606086383139671427104179978688982034117764664711277072795083902951564358998498109412142322138933760173628255697435284781uwb);\n+#endif\n+}\n--- gcc/testsuite/gcc.dg/torture/bitint-87.c.jj\t2026-04-14 15:48:02.591099982 +0200\n+++ gcc/testsuite/gcc.dg/torture/bitint-87.c\t2026-04-14 15:56:45.479193714 +0200\n@@ -0,0 +1,85 @@\n+/* PR middle-end/123635 */\n+/* { dg-do run { target bitint } } */\n+/* { dg-require-effective-target sync_char_short } */\n+/* { dg-options \"-std=c23 -pedantic-errors\" } */\n+/* { dg-skip-if \"\" { ! run_expensive_tests }  { \"*\" } { \"-O0\" \"-O2\" } } */\n+/* { dg-skip-if \"\" { ! run_expensive_tests } { \"-flto\" } { \"\" } } */\n+\n+#if __BITINT_MAXWIDTH__ >= 513\n+_BitInt(513) a, b, c, d;\n+unsigned _BitInt(513) e, f, g, h;\n+_BitInt(513) i, j, k;\n+unsigned _BitInt(513) l, m, n;\n+#endif\n+\n+#include \"../bitintext.h\"\n+\n+#if __BITINT_MAXWIDTH__ >= 513\n+[[gnu::noipa]] void\n+f1 (_BitInt(513) q, _BitInt(513) r, _BitInt(513) s,\n+    unsigned _BitInt(513) t, unsigned _BitInt(513) u, unsigned _BitInt(513) v)\n+{\n+  a = q * r;\n+  BEXTC (a);\n+  b = r * s;\n+  BEXTC (b);\n+  c = q / r;\n+  BEXTC (c);\n+  d = q / s;\n+  BEXTC (d);\n+  e = t * u;\n+  BEXTC (e);\n+  f = u * v;\n+  BEXTC (f);\n+  g = t / u;\n+  BEXTC (g);\n+  h = t / v;\n+  BEXTC (h);\n+}\n+\n+[[gnu::noipa]] void\n+f2 (float q, double r, long double s, float t, double u, long double v)\n+{\n+  i = q;\n+  BEXTC (i);\n+  j = r;\n+  BEXTC (j);\n+  k = s;\n+  BEXTC (k);\n+  l = t;\n+  BEXTC (l);\n+  m = u;\n+  BEXTC (m);\n+  n = v;\n+  BEXTC (n);\n+}\n+#endif\n+\n+int\n+main ()\n+{\n+#if __BITINT_MAXWIDTH__ >= 513\n+  __builtin_memset (&a, 0x55, sizeof (a));\n+  __builtin_memset (&b, 0xaa, sizeof (b));\n+  __builtin_memset (&c, 0x55, sizeof (c));\n+  __builtin_memset (&d, 0xaa, sizeof (d));\n+  __builtin_memset (&e, 0x55, sizeof (e));\n+  __builtin_memset (&f, 0xaa, sizeof (f));\n+  __builtin_memset (&g, 0x55, sizeof (g));\n+  __builtin_memset (&h, 0xaa, sizeof (h));\n+  f1 (-53323980256963787505256507743137477556434962931963225515943461794698643113423wb,\n+      -10076482373458251489901780456236592759327822657780415144730546867053397315531wb,\n+      9430367348600775477158545473775377451258484445522540280907903691748059121081wb,\n+      15046745594550617619205422464231805109110883864578289024439083517871820578179553927615539526791313634437787081814763432804808038115388367331529035246240655uwb,\n+      20633637828717837096174917874088391607464281656818868213468970773994599068609617673436080725569780340050358299419252926775025136778754971701553110169281uwb,\n+      5136122090451895036220764749952166060863831396714271041799786889820341177646647112770727950839029515643589984981094121423221389337601736282556974uwb);\n+  __builtin_memset (&i, 0x55, sizeof (i));\n+  __builtin_memset (&j, 0xaa, sizeof (j));\n+  __builtin_memset (&k, 0x55, sizeof (k));\n+  __builtin_memset (&l, 0xaa, sizeof (l));\n+  __builtin_memset (&m, 0x55, sizeof (m));\n+  __builtin_memset (&n, 0xaa, sizeof (n));\n+  f2 (12345678.5f, -234567891234567.125, 123465987893275.53244532L,\n+      12345678.5f, 234567891234567.125, 123465987893275.53244532L);\n+#endif\n+}\n",
    "prefixes": []
}