{"id":2222606,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2222606/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260413073215.29968-1-richard.henderson@linaro.org/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.2/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260413073215.29968-1-richard.henderson@linaro.org>","list_archive_url":null,"date":"2026-04-13T07:32:15","name":"[for-11.1] linux-user/arm: Remove nwfpe","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"844d20122f7911bd14274fb99f92c1ab285db883","submitter":{"id":72104,"url":"http://patchwork.ozlabs.org/api/1.2/people/72104/?format=json","name":"Richard Henderson","email":"richard.henderson@linaro.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260413073215.29968-1-richard.henderson@linaro.org/mbox/","series":[{"id":499656,"url":"http://patchwork.ozlabs.org/api/1.2/series/499656/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=499656","date":"2026-04-13T07:32:15","name":"[for-11.1] linux-user/arm: Remove nwfpe","version":1,"mbox":"http://patchwork.ozlabs.org/series/499656/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2222606/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2222606/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=ZnS8hJEx;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fvJzW3Hwdz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 17:33:11 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wCBme-0005vs-Ud; Mon, 13 Apr 2026 03:32:36 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wCBmY-0005vY-KI\n for qemu-devel@nongnu.org; Mon, 13 Apr 2026 03:32:32 -0400","from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wCBmT-0003ex-KA\n for qemu-devel@nongnu.org; Mon, 13 Apr 2026 03:32:30 -0400","by mail-pg1-x534.google.com with SMTP id\n 41be03b00d2f7-c76b0cda2aeso1653524a12.2\n for <qemu-devel@nongnu.org>; Mon, 13 Apr 2026 00:32:24 -0700 (PDT)","from stoup.. (bg30dj032xp6rdh0yngy.ip6.superloop.au.\n [2401:d002:dc0f:2100:a7b4:d4f1:5b23:321f])\n by smtp.gmail.com with ESMTPSA id\n 41be03b00d2f7-c79216ff41dsm8518363a12.2.2026.04.13.00.32.20\n for <qemu-devel@nongnu.org>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 13 Apr 2026 00:32:22 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776065543; x=1776670343; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:to\n :from:from:to:cc:subject:date:message-id:reply-to;\n bh=2O2uS0x/sWOStqs1waweBf+fFiWJpcOuxuQLGiw50ck=;\n b=ZnS8hJExCDgeyuP8cuTs9SG619R0Acln8BrzhBM8PBCf1xQmhuSCpKSeUG6K3n1twd\n 1MG4xCH8/FfnKCYe/ToV1Mfk1Rtof8SeowEtYYDmVQLk9sDHM1VNTkqv1vYDptfchkMh\n /R0iu4JUQ/IZgjSEruOSspLm922qi9x9PIv4+6IkDGQ2nIINfi9Pt9AmpgpeB3VS+sTC\n D5zMJjYez8HCl0+urueN/o/zLnQgLQ7rP02KBTtJCNkkffrBvcerDRlBOeij/412DnbE\n ahUf2cVgrGocN2tXowgyi8X7lHCHPDxWq9gtedslXF1tpZFqVBDwhVGk736AIfpy98+D\n I9cA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776065543; x=1776670343;\n h=content-transfer-encoding:mime-version:message-id:date:subject:to\n :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=2O2uS0x/sWOStqs1waweBf+fFiWJpcOuxuQLGiw50ck=;\n b=DWaqUk4uJR60SXbS7fq6nF9uB3b+wrQkeH8uwlAUdRL3jLeErxA7zezfpT7PHW2erb\n PBDXfXAZJsA6DpioHuYVFGLkrMJ6b5cMlsle8YYr0vk9EpInhQcYaYVrIUOFzgETuy04\n xBjfZ+DyDAnlxu4ucXeVps+RnFi6kjGSafTHBC7KBHXOu8Mz2XPja/LjuvP6R9/tYke3\n d4c/JqEx/c8TpWKBMtCoRTrpAHVn+X+2OwNeFdtOj1vKNSvq7vDCEH/xZCkOAQB5UK4z\n wRH4kT1XQLdDSaeChLVFRUlB2sV1dgoMvvTn2wusWcT754hhBuEErPg/s3KUn6NAGg/G\n 1tPQ==","X-Gm-Message-State":"AOJu0YyNOkpKsbWlgf/BqbgDLMsiaayg5OggPDXgJHwhQfmS1SvoCR5p\n LwvSj2NIEsZM/IWWHKkgfyBevJ+xvahZKGVyKFKtQM1cOqYRYyxJhyb1HxQrrKSNKf8Z4VG7LuP\n Kj/C0sYI=","X-Gm-Gg":"AeBDiestSGkF+y+IkrIOdmF1Pv0keaoMse/kz5RbjOTow1VGl+94Mrit3f3kkWS02BU\n ORzTNk1d6d7m/41GRALBYtSIFK6opzvwVjgKFOKHv6NawAgDMXM1JtZlQmyEqpzEp8zZyC9LgS+\n sKnIJOjvE4BS5/Zostk3duDQyqnZGebD2uEV2tUqxvskRp84yu8hxylkdR7aEE5BrKt69xz35cF\n C5iltgLIs2maroN0edpVegsKX27HbAf/7jQi1dSLUPqsI6Crgugr5qthShecGqp1DDe73NtWU0z\n zhg7sbMZPIPZXfJvaHJzJyM9Anx4S6YCaF9NjWDkH+66KP7/Ol+S1YWWsw+Au8QFdKjEkBvzTQB\n IXpNigA6eiOCWUkQ5TjBG0k7NR6A2ymiqjRy9gEsNpsxrDlCAUYv+3c9wzkW2e3rRGsGlaVXeQG\n qYveMaManq8xo/ABAy+5HBMBV5+3+8Ozm19QlxNs5h68QJhBq6KaLcDMIbOlj/RZtx5xaCiYyqZ\n M2lxRgJEa0uiQ==","X-Received":"by 2002:a05:6a20:12d6:b0:39f:aa3:5e56 with SMTP id\n adf61e73a8af0-39fe3cd7ff9mr13819289637.14.1776065542674;\n Mon, 13 Apr 2026 00:32:22 -0700 (PDT)","From":"Richard Henderson <richard.henderson@linaro.org>","To":"qemu-devel@nongnu.org","Subject":"[PATCH for-11.1] linux-user/arm: Remove nwfpe","Date":"Mon, 13 Apr 2026 17:32:15 +1000","Message-ID":"<20260413073215.29968-1-richard.henderson@linaro.org>","X-Mailer":"git-send-email 2.43.0","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2607:f8b0:4864:20::534;\n envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x534.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"This emulation is present in the linux kernel only for\na very restricted set of configurations:\n\nconfig FPE_NWFPE\n        bool \"NWFPE math emulation\"\n        depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL\n\nEABI is the default for all armv6 capable kernels, so this\nisn't enabled in practice for some time.\n\nGCC removed support for the FPA11 somewhere before gcc-5.\n\nThe code within nwfpe is not thread-safe, using several\nglobal variables.\n\nSigned-off-by: Richard Henderson <richard.henderson@linaro.org>\n---\n linux-user/arm/nwfpe/fpa11.h         | 126 ---------\n linux-user/arm/nwfpe/fpopcode.h      | 390 ---------------------------\n linux-user/arm/nwfpe/fpsr.h          | 107 --------\n linux-user/qemu.h                    |  11 -\n linux-user/arm/cpu_loop.c            |  59 ----\n linux-user/arm/nwfpe/double_cpdo.c   | 296 --------------------\n linux-user/arm/nwfpe/extended_cpdo.c | 273 -------------------\n linux-user/arm/nwfpe/fpa11.c         | 270 -------------------\n linux-user/arm/nwfpe/fpa11_cpdo.c    | 113 --------\n linux-user/arm/nwfpe/fpa11_cpdt.c    | 382 --------------------------\n linux-user/arm/nwfpe/fpa11_cprt.c    | 284 -------------------\n linux-user/arm/nwfpe/fpopcode.c      |  91 -------\n linux-user/arm/nwfpe/single_cpdo.c   | 253 -----------------\n linux-user/arm/meson.build           |   2 -\n linux-user/arm/nwfpe/fpa11.inl       |  50 ----\n linux-user/arm/nwfpe/meson.build     |  10 -\n 16 files changed, 2717 deletions(-)\n delete mode 100644 linux-user/arm/nwfpe/fpa11.h\n delete mode 100644 linux-user/arm/nwfpe/fpopcode.h\n delete mode 100644 linux-user/arm/nwfpe/fpsr.h\n delete mode 100644 linux-user/arm/nwfpe/double_cpdo.c\n delete mode 100644 linux-user/arm/nwfpe/extended_cpdo.c\n delete mode 100644 linux-user/arm/nwfpe/fpa11.c\n delete mode 100644 linux-user/arm/nwfpe/fpa11_cpdo.c\n delete mode 100644 linux-user/arm/nwfpe/fpa11_cpdt.c\n delete mode 100644 linux-user/arm/nwfpe/fpa11_cprt.c\n delete mode 100644 linux-user/arm/nwfpe/fpopcode.c\n delete mode 100644 linux-user/arm/nwfpe/single_cpdo.c\n delete mode 100644 linux-user/arm/nwfpe/fpa11.inl\n delete mode 100644 linux-user/arm/nwfpe/meson.build","diff":"diff --git a/linux-user/arm/nwfpe/fpa11.h b/linux-user/arm/nwfpe/fpa11.h\ndeleted file mode 100644\nindex d459c5da02..0000000000\n--- a/linux-user/arm/nwfpe/fpa11.h\n+++ /dev/null\n@@ -1,126 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.com, 1998-1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#ifndef FPA11_H\n-#define FPA11_H\n-\n-#include \"cpu.h\"\n-\n-#define GET_FPA11() (qemufpa)\n-\n-/*\n- * The processes registers are always at the very top of the 8K\n- * stack+task struct.  Use the same method as 'current' uses to\n- * reach them.\n- */\n-extern CPUARMState *user_registers;\n-\n-#define GET_USERREG() (user_registers)\n-\n-/* Need task_struct */\n-//#include <linux/sched.h>\n-\n-/* includes */\n-#include \"fpsr.h\"\t\t/* FP control and status register definitions */\n-#include \"fpu/softfloat.h\"\n-\n-#define\t\ttypeNone\t\t0x00\n-#define\t\ttypeSingle\t\t0x01\n-#define\t\ttypeDouble\t\t0x02\n-#define\t\ttypeExtended\t\t0x03\n-\n-/*\n- * This must be no more and no less than 12 bytes.\n- */\n-typedef union tagFPREG {\n-   floatx80 fExtended;\n-   float64  fDouble;\n-   float32  fSingle;\n-} FPREG;\n-\n-/*\n- * FPA11 device model.\n- *\n- * This structure is exported to user space.  Do not re-order.\n- * Only add new stuff to the end, and do not change the size of\n- * any element.  Elements of this structure are used by user\n- * space, and must match struct user_fp in include/asm-arm/user.h.\n- * We include the byte offsets below for documentation purposes.\n- *\n- * The size of this structure and FPREG are checked by fpmodule.c\n- * on initialisation.  If the rules have been broken, NWFPE will\n- * not initialise.\n- */\n-typedef struct tagFPA11 {\n-/*   0 */  FPREG fpreg[8];\t\t/* 8 floating point registers */\n-/*  96 */  FPSR fpsr;\t\t\t/* floating point status register */\n-/* 100 */  FPCR fpcr;\t\t\t/* floating point control register */\n-/* 104 */  unsigned char fType[8];\t/* type of floating point value held in\n-\t\t\t\t\t   floating point registers.  One of none\n-\t\t\t\t\t   single, double or extended. */\n-/* 112 */  int initflag;\t\t/* this is special.  The kernel guarantees\n-\t\t\t\t\t   to set it to 0 when a thread is launched,\n-\t\t\t\t\t   so we can use it to detect whether this\n-\t\t\t\t\t   instance of the emulator needs to be\n-\t\t\t\t\t   initialised. */\n-    float_status fp_status;      /* QEMU float emulator status */\n-} FPA11;\n-\n-extern FPA11* qemufpa;\n-\n-void resetFPA11(void);\n-void SetRoundingMode(const unsigned int);\n-void SetRoundingPrecision(const unsigned int);\n-\n-static inline unsigned int readRegister(unsigned int reg)\n-{\n-    return (user_registers->regs[(reg)]);\n-}\n-\n-static inline void writeRegister(unsigned int x, unsigned int y)\n-{\n-#if 0\n-\tprintf(\"writing %d to r%d\\n\",y,x);\n-#endif\n-        user_registers->regs[(x)]=(y);\n-}\n-\n-static inline void writeConditionCodes(unsigned int x)\n-{\n-    cpsr_write(user_registers, x, CPSR_NZCV, CPSRWriteByInstr);\n-}\n-\n-#define ARM_REG_PC 15\n-\n-unsigned int EmulateAll(unsigned int opcode, FPA11* qfpa, CPUARMState* qregs);\n-\n-unsigned int EmulateCPDO(const unsigned int);\n-unsigned int EmulateCPDT(const unsigned int);\n-unsigned int EmulateCPRT(const unsigned int);\n-\n-unsigned int SingleCPDO(const unsigned int opcode);\n-unsigned int DoubleCPDO(const unsigned int opcode);\n-unsigned int ExtendedCPDO(const unsigned int opcode);\n-\n-\n-/* included only for get_user/put_user macros */\n-#include \"qemu.h\"\n-\n-#endif\ndiff --git a/linux-user/arm/nwfpe/fpopcode.h b/linux-user/arm/nwfpe/fpopcode.h\ndeleted file mode 100644\nindex 06cd909850..0000000000\n--- a/linux-user/arm/nwfpe/fpopcode.h\n+++ /dev/null\n@@ -1,390 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#ifndef FPOPCODE_H\n-#define FPOPCODE_H\n-\n-/*\n-ARM Floating Point Instruction Classes\n-| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n-|c o n d|1 1 0 P|U|u|W|L|   Rn  |v|  Fd |0|0|0|1|  o f f s e t  | CPDT\n-|c o n d|1 1 0 P|U|w|W|L|   Rn  |x|  Fd |0|0|0|1|  o f f s e t  | CPDT\n-| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n-|c o n d|1 1 1 0|a|b|c|d|e|  Fn |j|  Fd |0|0|0|1|f|g|h|0|i|  Fm | CPDO\n-|c o n d|1 1 1 0|a|b|c|L|e|  Fn |   Rd  |0|0|0|1|f|g|h|1|i|  Fm | CPRT\n-|c o n d|1 1 1 0|a|b|c|1|e|  Fn |1|1|1|1|0|0|0|1|f|g|h|1|i|  Fm | comparisons\n-| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |\n-\n-CPDT\t\tdata transfer instructions\n-\t\tLDF, STF, LFM, SFM\n-\n-CPDO\t\tdyadic arithmetic instructions\n-\t\tADF, MUF, SUF, RSF, DVF, RDF,\n-\t\tPOW, RPW, RMF, FML, FDV, FRD, POL\n-\n-CPDO\t\tmonadic arithmetic instructions\n-\t\tMVF, MNF, ABS, RND, SQT, LOG, LGN, EXP,\n-\t\tSIN, COS, TAN, ASN, ACS, ATN, URD, NRM\n-\n-CPRT\t\tjoint arithmetic/data transfer instructions\n-\t\tFIX (arithmetic followed by load/store)\n-\t\tFLT (load/store followed by arithmetic)\n-\t\tCMF, CNF CMFE, CNFE (comparisons)\n-\t\tWFS, RFS (write/read floating point status register)\n-\t\tWFC, RFC (write/read floating point control register)\n-\n-cond\t\tcondition codes\n-P\t\tpre/post index bit: 0 = postindex, 1 = preindex\n-U\t\tup/down bit: 0 = stack grows down, 1 = stack grows up\n-W\t\twrite back bit: 1 = update base register (Rn)\n-L\t\tload/store bit: 0 = store, 1 = load\n-Rn\t\tbase register\n-Rd\t\tdestination/source register\n-Fd\t\tfloating point destination register\n-Fn\t\tfloating point source register\n-Fm\t\tfloating point source register or floating point constant\n-\n-uv\t\ttransfer length (TABLE 1)\n-wx\t\tregister count (TABLE 2)\n-abcd\t\tarithmetic opcode (TABLES 3 & 4)\n-ef\t\tdestination size (rounding precision) (TABLE 5)\n-gh\t\trounding mode (TABLE 6)\n-j\t\tdyadic/monadic bit: 0 = dyadic, 1 = monadic\n-i \t\tconstant bit: 1 = constant (TABLE 6)\n-*/\n-\n-/*\n-TABLE 1\n-+-------------------------+---+---+---------+---------+\n-|  Precision              | u | v | FPSR.EP | length  |\n-+-------------------------+---+---+---------+---------+\n-| Single                  | 0 | 0 |    x    | 1 words |\n-| Double                  | 1 | 1 |    x    | 2 words |\n-| Extended                | 1 | 1 |    x    | 3 words |\n-| Packed decimal          | 1 | 1 |    0    | 3 words |\n-| Expanded packed decimal | 1 | 1 |    1    | 4 words |\n-+-------------------------+---+---+---------+---------+\n-Note: x = don't care\n-*/\n-\n-/*\n-TABLE 2\n-+---+---+---------------------------------+\n-| w | x | Number of registers to transfer |\n-+---+---+---------------------------------+\n-| 0 | 1 |  1                              |\n-| 1 | 0 |  2                              |\n-| 1 | 1 |  3                              |\n-| 0 | 0 |  4                              |\n-+---+---+---------------------------------+\n-*/\n-\n-/*\n-TABLE 3: Dyadic Floating Point Opcodes\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-| a | b | c | d | Mnemonic | Description           | Operation             |\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-| 0 | 0 | 0 | 0 | ADF      | Add                   | Fd := Fn + Fm         |\n-| 0 | 0 | 0 | 1 | MUF      | Multiply              | Fd := Fn * Fm         |\n-| 0 | 0 | 1 | 0 | SUF      | Subtract              | Fd := Fn - Fm         |\n-| 0 | 0 | 1 | 1 | RSF      | Reverse subtract      | Fd := Fm - Fn         |\n-| 0 | 1 | 0 | 0 | DVF      | Divide                | Fd := Fn / Fm         |\n-| 0 | 1 | 0 | 1 | RDF      | Reverse divide        | Fd := Fm / Fn         |\n-| 0 | 1 | 1 | 0 | POW      | Power                 | Fd := Fn ^ Fm         |\n-| 0 | 1 | 1 | 1 | RPW      | Reverse power         | Fd := Fm ^ Fn         |\n-| 1 | 0 | 0 | 0 | RMF      | Remainder             | Fd := IEEE rem(Fn/Fm) |\n-| 1 | 0 | 0 | 1 | FML      | Fast Multiply         | Fd := Fn * Fm         |\n-| 1 | 0 | 1 | 0 | FDV      | Fast Divide           | Fd := Fn / Fm         |\n-| 1 | 0 | 1 | 1 | FRD      | Fast reverse divide   | Fd := Fm / Fn         |\n-| 1 | 1 | 0 | 0 | POL      | Polar angle (ArcTan2) | Fd := arctan2(Fn,Fm)  |\n-| 1 | 1 | 0 | 1 |          | undefined instruction | trap                  |\n-| 1 | 1 | 1 | 0 |          | undefined instruction | trap                  |\n-| 1 | 1 | 1 | 1 |          | undefined instruction | trap                  |\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-Note: POW, RPW, POL are deprecated, and are available for backwards\n-      compatibility only.\n-*/\n-\n-/*\n-TABLE 4: Monadic Floating Point Opcodes\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-| a | b | c | d | Mnemonic | Description           | Operation             |\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-| 0 | 0 | 0 | 0 | MVF      | Move                  | Fd := Fm              |\n-| 0 | 0 | 0 | 1 | MNF      | Move negated          | Fd := - Fm            |\n-| 0 | 0 | 1 | 0 | ABS      | Absolute value        | Fd := abs(Fm)         |\n-| 0 | 0 | 1 | 1 | RND      | Round to integer      | Fd := int(Fm)         |\n-| 0 | 1 | 0 | 0 | SQT      | Square root           | Fd := sqrt(Fm)        |\n-| 0 | 1 | 0 | 1 | LOG      | Log base 10           | Fd := log10(Fm)       |\n-| 0 | 1 | 1 | 0 | LGN      | Log base e            | Fd := ln(Fm)          |\n-| 0 | 1 | 1 | 1 | EXP      | Exponent              | Fd := e ^ Fm          |\n-| 1 | 0 | 0 | 0 | SIN      | Sine                  | Fd := sin(Fm)         |\n-| 1 | 0 | 0 | 1 | COS      | Cosine                | Fd := cos(Fm)         |\n-| 1 | 0 | 1 | 0 | TAN      | Tangent               | Fd := tan(Fm)         |\n-| 1 | 0 | 1 | 1 | ASN      | Arc Sine              | Fd := arcsin(Fm)      |\n-| 1 | 1 | 0 | 0 | ACS      | Arc Cosine            | Fd := arccos(Fm)      |\n-| 1 | 1 | 0 | 1 | ATN      | Arc Tangent           | Fd := arctan(Fm)      |\n-| 1 | 1 | 1 | 0 | URD      | Unnormalized round    | Fd := int(Fm)         |\n-| 1 | 1 | 1 | 1 | NRM      | Normalize             | Fd := norm(Fm)        |\n-+---+---+---+---+----------+-----------------------+-----------------------+\n-Note: LOG, LGN, EXP, SIN, COS, TAN, ASN, ACS, ATN are deprecated, and are\n-      available for backwards compatibility only.\n-*/\n-\n-/*\n-TABLE 5\n-+-------------------------+---+---+\n-|  Rounding Precision     | e | f |\n-+-------------------------+---+---+\n-| IEEE Single precision   | 0 | 0 |\n-| IEEE Double precision   | 0 | 1 |\n-| IEEE Extended precision | 1 | 0 |\n-| undefined (trap)        | 1 | 1 |\n-+-------------------------+---+---+\n-*/\n-\n-/*\n-TABLE 5\n-+---------------------------------+---+---+\n-|  Rounding Mode                  | g | h |\n-+---------------------------------+---+---+\n-| Round to nearest (default)      | 0 | 0 |\n-| Round toward plus infinity      | 0 | 1 |\n-| Round toward negative infinity  | 1 | 0 |\n-| Round toward zero               | 1 | 1 |\n-+---------------------------------+---+---+\n-*/\n-\n-/*\n-===\n-=== Definitions for load and store instructions\n-===\n-*/\n-\n-/* bit masks */\n-#define BIT_PREINDEX\t0x01000000\n-#define BIT_UP\t\t0x00800000\n-#define BIT_WRITE_BACK\t0x00200000\n-#define BIT_LOAD\t0x00100000\n-\n-/* masks for load/store */\n-#define MASK_CPDT\t\t0x0c000000  /* data processing opcode */\n-#define MASK_OFFSET\t\t0x000000ff\n-#define MASK_TRANSFER_LENGTH\t0x00408000\n-#define MASK_REGISTER_COUNT\tMASK_TRANSFER_LENGTH\n-#define MASK_COPROCESSOR\t0x00000f00\n-\n-/* Tests for transfer length */\n-#define TRANSFER_SINGLE\t\t0x00000000\n-#define TRANSFER_DOUBLE\t\t0x00008000\n-#define TRANSFER_EXTENDED\t0x00400000\n-#define TRANSFER_PACKED\t\tMASK_TRANSFER_LENGTH\n-\n-/* Get the coprocessor number from the opcode. */\n-#define getCoprocessorNumber(opcode)\t((opcode & MASK_COPROCESSOR) >> 8)\n-\n-/* Get the offset from the opcode. */\n-#define getOffset(opcode)\t\t(opcode & MASK_OFFSET)\n-\n-/* Tests for specific data transfer load/store opcodes. */\n-#define TEST_OPCODE(opcode,mask)\t(((opcode) & (mask)) == (mask))\n-\n-#define LOAD_OP(opcode)   TEST_OPCODE((opcode),MASK_CPDT | BIT_LOAD)\n-#define STORE_OP(opcode)  ((opcode & (MASK_CPDT | BIT_LOAD)) == MASK_CPDT)\n-\n-#define LDF_OP(opcode)\t(LOAD_OP(opcode) && (getCoprocessorNumber(opcode) == 1))\n-#define LFM_OP(opcode)\t(LOAD_OP(opcode) && (getCoprocessorNumber(opcode) == 2))\n-#define STF_OP(opcode)\t(STORE_OP(opcode) && (getCoprocessorNumber(opcode) == 1))\n-#define SFM_OP(opcode)\t(STORE_OP(opcode) && (getCoprocessorNumber(opcode) == 2))\n-\n-#define PREINDEXED(opcode)\t\t((opcode & BIT_PREINDEX) != 0)\n-#define POSTINDEXED(opcode)\t\t((opcode & BIT_PREINDEX) == 0)\n-#define BIT_UP_SET(opcode)\t\t((opcode & BIT_UP) != 0)\n-#define BIT_UP_CLEAR(opcode)\t\t((opcode & BIT_DOWN) == 0)\n-#define WRITE_BACK(opcode)\t\t((opcode & BIT_WRITE_BACK) != 0)\n-#define LOAD(opcode)\t\t\t((opcode & BIT_LOAD) != 0)\n-#define STORE(opcode)\t\t\t((opcode & BIT_LOAD) == 0)\n-\n-/*\n-===\n-=== Definitions for arithmetic instructions\n-===\n-*/\n-/* bit masks */\n-#define BIT_MONADIC\t0x00008000\n-#define BIT_CONSTANT\t0x00000008\n-\n-#define CONSTANT_FM(opcode)\t\t((opcode & BIT_CONSTANT) != 0)\n-#define MONADIC_INSTRUCTION(opcode)\t((opcode & BIT_MONADIC) != 0)\n-\n-/* instruction identification masks */\n-#define MASK_CPDO\t\t0x0e000000  /* arithmetic opcode */\n-#define MASK_ARITHMETIC_OPCODE\t0x00f08000\n-#define MASK_DESTINATION_SIZE\t0x00080080\n-\n-/* dyadic arithmetic opcodes. */\n-#define ADF_CODE\t0x00000000\n-#define MUF_CODE\t0x00100000\n-#define SUF_CODE\t0x00200000\n-#define RSF_CODE\t0x00300000\n-#define DVF_CODE\t0x00400000\n-#define RDF_CODE\t0x00500000\n-#define POW_CODE\t0x00600000\n-#define RPW_CODE\t0x00700000\n-#define RMF_CODE\t0x00800000\n-#define FML_CODE\t0x00900000\n-#define FDV_CODE\t0x00a00000\n-#define FRD_CODE\t0x00b00000\n-#define POL_CODE\t0x00c00000\n-/* 0x00d00000 is an invalid dyadic arithmetic opcode */\n-/* 0x00e00000 is an invalid dyadic arithmetic opcode */\n-/* 0x00f00000 is an invalid dyadic arithmetic opcode */\n-\n-/* monadic arithmetic opcodes. */\n-#define MVF_CODE\t0x00008000\n-#define MNF_CODE\t0x00108000\n-#define ABS_CODE\t0x00208000\n-#define RND_CODE\t0x00308000\n-#define SQT_CODE\t0x00408000\n-#define LOG_CODE\t0x00508000\n-#define LGN_CODE\t0x00608000\n-#define EXP_CODE\t0x00708000\n-#define SIN_CODE\t0x00808000\n-#define COS_CODE\t0x00908000\n-#define TAN_CODE\t0x00a08000\n-#define ASN_CODE\t0x00b08000\n-#define ACS_CODE\t0x00c08000\n-#define ATN_CODE\t0x00d08000\n-#define URD_CODE\t0x00e08000\n-#define NRM_CODE\t0x00f08000\n-\n-/*\n-===\n-=== Definitions for register transfer and comparison instructions\n-===\n-*/\n-\n-#define MASK_CPRT\t\t0x0e000010  /* register transfer opcode */\n-#define MASK_CPRT_CODE\t\t0x00f00000\n-#define FLT_CODE\t\t0x00000000\n-#define FIX_CODE\t\t0x00100000\n-#define WFS_CODE\t\t0x00200000\n-#define RFS_CODE\t\t0x00300000\n-#define WFC_CODE\t\t0x00400000\n-#define RFC_CODE\t\t0x00500000\n-#define CMF_CODE\t\t0x00900000\n-#define CNF_CODE\t\t0x00b00000\n-#define CMFE_CODE\t\t0x00d00000\n-#define CNFE_CODE\t\t0x00f00000\n-\n-/*\n-===\n-=== Common definitions\n-===\n-*/\n-\n-/* register masks */\n-#define MASK_Rd\t\t0x0000f000\n-#define MASK_Rn\t\t0x000f0000\n-#define MASK_Fd\t\t0x00007000\n-#define MASK_Fm\t\t0x00000007\n-#define MASK_Fn\t\t0x00070000\n-\n-/* condition code masks */\n-#define CC_MASK\t\t0xf0000000\n-#define CC_NEGATIVE\t0x80000000\n-#define CC_ZERO\t\t0x40000000\n-#define CC_CARRY\t0x20000000\n-#define CC_OVERFLOW\t0x10000000\n-#define CC_EQ\t\t0x00000000\n-#define CC_NE\t\t0x10000000\n-#define CC_CS\t\t0x20000000\n-#define CC_HS\t\tCC_CS\n-#define CC_CC\t\t0x30000000\n-#define CC_LO\t\tCC_CC\n-#define CC_MI\t\t0x40000000\n-#define CC_PL\t\t0x50000000\n-#define CC_VS\t\t0x60000000\n-#define CC_VC\t\t0x70000000\n-#define CC_HI\t\t0x80000000\n-#define CC_LS\t\t0x90000000\n-#define CC_GE\t\t0xa0000000\n-#define CC_LT\t\t0xb0000000\n-#define CC_GT\t\t0xc0000000\n-#define CC_LE\t\t0xd0000000\n-#define CC_AL\t\t0xe0000000\n-#define CC_NV\t\t0xf0000000\n-\n-/* rounding masks/values */\n-#define MASK_ROUNDING_MODE\t0x00000060\n-#define ROUND_TO_NEAREST\t0x00000000\n-#define ROUND_TO_PLUS_INFINITY\t0x00000020\n-#define ROUND_TO_MINUS_INFINITY\t0x00000040\n-#define ROUND_TO_ZERO\t\t0x00000060\n-\n-#define MASK_ROUNDING_PRECISION\t0x00080080\n-#define ROUND_SINGLE\t\t0x00000000\n-#define ROUND_DOUBLE\t\t0x00000080\n-#define ROUND_EXTENDED\t\t0x00080000\n-\n-/* Get the condition code from the opcode. */\n-#define getCondition(opcode)\t\t(opcode >> 28)\n-\n-/* Get the source register from the opcode. */\n-#define getRn(opcode)\t\t\t((opcode & MASK_Rn) >> 16)\n-\n-/* Get the destination floating point register from the opcode. */\n-#define getFd(opcode)\t\t\t((opcode & MASK_Fd) >> 12)\n-\n-/* Get the first source floating point register from the opcode. */\n-#define getFn(opcode)\t\t((opcode & MASK_Fn) >> 16)\n-\n-/* Get the second source floating point register from the opcode. */\n-#define getFm(opcode)\t\t(opcode & MASK_Fm)\n-\n-/* Get the destination register from the opcode. */\n-#define getRd(opcode)\t\t((opcode & MASK_Rd) >> 12)\n-\n-/* Get the rounding mode from the opcode. */\n-#define getRoundingMode(opcode)\t\t((opcode & MASK_ROUNDING_MODE) >> 5)\n-\n-extern const floatx80 floatx80Constant[];\n-extern const float64 float64Constant[];\n-extern const float32 float32Constant[];\n-\n-static inline floatx80 getExtendedConstant(const unsigned int nIndex)\n-{\n-   return floatx80Constant[nIndex];\n-}\n-\n-static inline float64 getDoubleConstant(const unsigned int nIndex)\n-{\n-   return float64Constant[nIndex];\n-}\n-\n-static inline float32 getSingleConstant(const unsigned int nIndex)\n-{\n-   return float32Constant[nIndex];\n-}\n-\n-unsigned int getRegisterCount(const unsigned int opcode);\n-unsigned int getDestinationSize(const unsigned int opcode);\n-\n-#endif\ndiff --git a/linux-user/arm/nwfpe/fpsr.h b/linux-user/arm/nwfpe/fpsr.h\ndeleted file mode 100644\nindex 8c978f0b8f..0000000000\n--- a/linux-user/arm/nwfpe/fpsr.h\n+++ /dev/null\n@@ -1,107 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.com, 1998-1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#ifndef FPSR_H\n-#define FPSR_H\n-\n-/*\n-The FPSR is a 32 bit register consisting of 4 parts, each exactly\n-one byte.\n-\n-\tSYSTEM ID\n-\tEXCEPTION TRAP ENABLE BYTE\n-\tSYSTEM CONTROL BYTE\n-\tCUMULATIVE EXCEPTION FLAGS BYTE\n-\n-The FPCR is a 32 bit register consisting of bit flags.\n-*/\n-\n-/* SYSTEM ID\n-------------\n-Note: the system id byte is read only  */\n-\n-typedef unsigned int FPSR;  /* type for floating point status register */\n-typedef unsigned int FPCR;  /* type for floating point control register */\n-\n-#define MASK_SYSID\t\t0xff000000\n-#define BIT_HARDWARE\t\t0x80000000\n-#define FP_EMULATOR\t\t0x01000000\t/* System ID for emulator */\n-#define FP_ACCELERATOR\t\t0x81000000\t/* System ID for FPA11 */\n-\n-/* EXCEPTION TRAP ENABLE BYTE\n------------------------------ */\n-\n-#define MASK_TRAP_ENABLE\t0x00ff0000\n-#define MASK_TRAP_ENABLE_STRICT\t0x001f0000\n-#define BIT_IXE\t\t0x00100000   /* inexact exception enable */\n-#define BIT_UFE\t\t0x00080000   /* underflow exception enable */\n-#define BIT_OFE\t\t0x00040000   /* overflow exception enable */\n-#define BIT_DZE\t\t0x00020000   /* divide by zero exception enable */\n-#define BIT_IOE\t\t0x00010000   /* invalid operation exception enable */\n-\n-/* SYSTEM CONTROL BYTE\n----------------------- */\n-\n-#define MASK_SYSTEM_CONTROL\t0x0000ff00\n-#define MASK_TRAP_STRICT\t0x00001f00\n-\n-#define BIT_AC\t0x00001000\t/* use alternative C-flag definition\n-\t\t\t\t   for compares */\n-#define BIT_EP\t0x00000800\t/* use expanded packed decimal format */\n-#define BIT_SO\t0x00000400\t/* select synchronous operation of FPA */\n-#define BIT_NE\t0x00000200\t/* NaN exception bit */\n-#define BIT_ND\t0x00000100\t/* no denormalized numbers bit */\n-\n-/* CUMULATIVE EXCEPTION FLAGS BYTE\n----------------------------------- */\n-\n-#define MASK_EXCEPTION_FLAGS\t\t0x000000ff\n-#define MASK_EXCEPTION_FLAGS_STRICT\t0x0000001f\n-\n-#define BIT_IXC\t\t0x00000010\t/* inexact exception flag */\n-#define BIT_UFC\t\t0x00000008\t/* underflow exception flag */\n-#define BIT_OFC\t\t0x00000004\t/* overfloat exception flag */\n-#define BIT_DZC\t\t0x00000002\t/* divide by zero exception flag */\n-#define BIT_IOC\t\t0x00000001\t/* invalid operation exception flag */\n-\n-/* Floating Point Control Register\n-----------------------------------*/\n-\n-#define BIT_RU\t\t0x80000000\t/* rounded up bit */\n-#define BIT_IE\t\t0x10000000\t/* inexact bit */\n-#define BIT_MO\t\t0x08000000\t/* mantissa overflow bit */\n-#define BIT_EO\t\t0x04000000\t/* exponent overflow bit */\n-#define BIT_SB\t\t0x00000800\t/* store bounce */\n-#define BIT_AB\t\t0x00000400\t/* arithmetic bounce */\n-#define BIT_RE\t\t0x00000200\t/* rounding exception */\n-#define BIT_DA\t\t0x00000100\t/* disable FPA */\n-\n-#define MASK_OP\t\t0x00f08010\t/* AU operation code */\n-#define MASK_PR\t\t0x00080080\t/* AU precision */\n-#define MASK_S1\t\t0x00070000\t/* AU source register 1 */\n-#define MASK_S2\t\t0x00000007\t/* AU source register 2 */\n-#define MASK_DS\t\t0x00007000\t/* AU destination register */\n-#define MASK_RM\t\t0x00000060\t/* AU rounding mode */\n-#define MASK_ALU\t0x9cfff2ff\t/* only ALU can write these bits */\n-#define MASK_RESET\t0x00000d00\t/* bits set on reset, all others cleared */\n-#define MASK_WFC\tMASK_RESET\n-#define MASK_RFC\t~MASK_RESET\n-\n-#endif\ndiff --git a/linux-user/qemu.h b/linux-user/qemu.h\nindex cfe5f45fc4..21afce4088 100644\n--- a/linux-user/qemu.h\n+++ b/linux-user/qemu.h\n@@ -87,11 +87,6 @@ struct vm86_saved_state {\n };\n #endif\n \n-#if defined(TARGET_ARM) && defined(TARGET_ABI32)\n-/* FPU emulator */\n-#include \"nwfpe/fpa11.h\"\n-#endif\n-\n struct emulated_sigtable {\n     int pending; /* true if signal is pending */\n     target_siginfo_t info;\n@@ -99,12 +94,6 @@ struct emulated_sigtable {\n \n struct TaskState {\n     pid_t ts_tid;     /* tid (or pid) of this task */\n-#ifdef TARGET_ARM\n-# ifdef TARGET_ABI32\n-    /* FPA state */\n-    FPA11 fpa;\n-# endif\n-#endif\n #if defined(TARGET_ARM) || defined(TARGET_RISCV)\n     int swi_errno;\n #endif\ndiff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c\nindex 19874f4c72..36f82541c7 100644\n--- a/linux-user/arm/cpu_loop.c\n+++ b/linux-user/arm/cpu_loop.c\n@@ -212,61 +212,6 @@ static bool insn_is_linux_bkpt(uint32_t opcode, bool is_thumb)\n     }\n }\n \n-static bool emulate_arm_fpa11(CPUARMState *env, uint32_t opcode)\n-{\n-    TaskState *ts = get_task_state(env_cpu(env));\n-    int rc = EmulateAll(opcode, &ts->fpa, env);\n-    int raise, enabled;\n-\n-    if (rc == 0) {\n-        /* Illegal instruction */\n-        return false;\n-    }\n-    if (rc > 0) {\n-        /* Everything ok. */\n-        env->regs[15] += 4;\n-        return true;\n-    }\n-\n-    /* FP exception */\n-    rc = -rc;\n-    raise = 0;\n-\n-    /* Translate softfloat flags to FPSR flags */\n-    if (rc & float_flag_invalid) {\n-        raise |= BIT_IOC;\n-    }\n-    if (rc & float_flag_divbyzero) {\n-        raise |= BIT_DZC;\n-    }\n-    if (rc & float_flag_overflow) {\n-        raise |= BIT_OFC;\n-    }\n-    if (rc & float_flag_underflow) {\n-        raise |= BIT_UFC;\n-    }\n-    if (rc & float_flag_inexact) {\n-        raise |= BIT_IXC;\n-    }\n-\n-    /* Accumulate unenabled exceptions */\n-    enabled = ts->fpa.fpsr >> 16;\n-    ts->fpa.fpsr |= raise & ~enabled;\n-\n-    if (raise & enabled) {\n-        /*\n-         * The kernel's nwfpe emulator does not pass a real si_code.\n-         * It merely uses send_sig(SIGFPE, current, 1), which results in\n-         * __send_signal() filling out SI_KERNEL with pid and uid 0 (under\n-         * the \"SEND_SIG_PRIV\" case). That's what our force_sig() does.\n-         */\n-        force_sig(TARGET_SIGFPE);\n-    } else {\n-        env->regs[15] += 4;\n-    }\n-    return true;\n-}\n-\n void cpu_loop(CPUARMState *env)\n {\n     CPUState *cs = env_cpu(env);\n@@ -302,10 +247,6 @@ void cpu_loop(CPUARMState *env)\n                     goto excp_debug;\n                 }\n \n-                if (!env->thumb && emulate_arm_fpa11(env, opcode)) {\n-                    break;\n-                }\n-\n                 force_sig_fault(TARGET_SIGILL, TARGET_ILL_ILLOPN,\n                                 env->regs[15]);\n             }\ndiff --git a/linux-user/arm/nwfpe/double_cpdo.c b/linux-user/arm/nwfpe/double_cpdo.c\ndeleted file mode 100644\nindex d45ece2e2f..0000000000\n--- a/linux-user/arm/nwfpe/double_cpdo.c\n+++ /dev/null\n@@ -1,296 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-\n-float64 float64_exp(float64 Fm);\n-float64 float64_ln(float64 Fm);\n-float64 float64_sin(float64 rFm);\n-float64 float64_cos(float64 rFm);\n-float64 float64_arcsin(float64 rFm);\n-float64 float64_arctan(float64 rFm);\n-float64 float64_log(float64 rFm);\n-float64 float64_tan(float64 rFm);\n-float64 float64_arccos(float64 rFm);\n-float64 float64_pow(float64 rFn,float64 rFm);\n-float64 float64_pol(float64 rFn,float64 rFm);\n-\n-unsigned int DoubleCPDO(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   float64 rFm, rFn = float64_zero;\n-   unsigned int Fd, Fm, Fn, nRc = 1;\n-\n-   //printk(\"DoubleCPDO(0x%08x)\\n\",opcode);\n-\n-   Fm = getFm(opcode);\n-   if (CONSTANT_FM(opcode))\n-   {\n-     rFm = getDoubleConstant(Fm);\n-   }\n-   else\n-   {\n-     switch (fpa11->fType[Fm])\n-     {\n-        case typeSingle:\n-          rFm = float32_to_float64(fpa11->fpreg[Fm].fSingle, &fpa11->fp_status);\n-        break;\n-\n-        case typeDouble:\n-          rFm = fpa11->fpreg[Fm].fDouble;\n-          break;\n-\n-        case typeExtended:\n-            // !! patb\n-\t    //printk(\"not implemented! why not?\\n\");\n-            //!! ScottB\n-            // should never get here, if extended involved\n-            // then other operand should be promoted then\n-            // ExtendedCPDO called.\n-            break;\n-\n-        default: return 0;\n-     }\n-   }\n-\n-   if (!MONADIC_INSTRUCTION(opcode))\n-   {\n-      Fn = getFn(opcode);\n-      switch (fpa11->fType[Fn])\n-      {\n-        case typeSingle:\n-          rFn = float32_to_float64(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);\n-        break;\n-\n-        case typeDouble:\n-          rFn = fpa11->fpreg[Fn].fDouble;\n-        break;\n-\n-        default: return 0;\n-      }\n-   }\n-\n-   Fd = getFd(opcode);\n-   /* !! this switch isn't optimized; better (opcode & MASK_ARITHMETIC_OPCODE)>>24, sort of */\n-   switch (opcode & MASK_ARITHMETIC_OPCODE)\n-   {\n-      /* dyadic opcodes */\n-      case ADF_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_add(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case MUF_CODE:\n-      case FML_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_mul(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SUF_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_sub(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RSF_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_sub(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-      case DVF_CODE:\n-      case FDV_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_div(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RDF_CODE:\n-      case FRD_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_div(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POW_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_pow(rFn,rFm);\n-      break;\n-\n-      case RPW_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_pow(rFm,rFn);\n-      break;\n-#endif\n-\n-      case RMF_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_rem(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POL_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_pol(rFn,rFm);\n-      break;\n-#endif\n-\n-      /* monadic opcodes */\n-      case MVF_CODE:\n-         fpa11->fpreg[Fd].fDouble = rFm;\n-      break;\n-\n-      case MNF_CODE:\n-      {\n-         unsigned int *p = (unsigned int*)&rFm;\n-#if HOST_BIG_ENDIAN\n-         p[0] ^= 0x80000000;\n-#else\n-         p[1] ^= 0x80000000;\n-#endif\n-         fpa11->fpreg[Fd].fDouble = rFm;\n-      }\n-      break;\n-\n-      case ABS_CODE:\n-      {\n-         unsigned int *p = (unsigned int*)&rFm;\n-#if HOST_BIG_ENDIAN\n-         p[0] &= 0x7fffffff;\n-#else\n-         p[1] &= 0x7fffffff;\n-#endif\n-         fpa11->fpreg[Fd].fDouble = rFm;\n-      }\n-      break;\n-\n-      case RND_CODE:\n-      case URD_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_round_to_int(rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SQT_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_sqrt(rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case LOG_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_log(rFm);\n-      break;\n-\n-      case LGN_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_ln(rFm);\n-      break;\n-\n-      case EXP_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_exp(rFm);\n-      break;\n-\n-      case SIN_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_sin(rFm);\n-      break;\n-\n-      case COS_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_cos(rFm);\n-      break;\n-\n-      case TAN_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_tan(rFm);\n-      break;\n-\n-      case ASN_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_arcsin(rFm);\n-      break;\n-\n-      case ACS_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_arccos(rFm);\n-      break;\n-\n-      case ATN_CODE:\n-         fpa11->fpreg[Fd].fDouble = float64_arctan(rFm);\n-      break;\n-#endif\n-\n-      case NRM_CODE:\n-      break;\n-\n-      default:\n-      {\n-        nRc = 0;\n-      }\n-   }\n-\n-   if (0 != nRc) fpa11->fType[Fd] = typeDouble;\n-   return nRc;\n-}\n-\n-#if 0\n-float64 float64_exp(float64 rFm)\n-{\n-  return rFm;\n-//series\n-}\n-\n-float64 float64_ln(float64 rFm)\n-{\n-  return rFm;\n-//series\n-}\n-\n-float64 float64_sin(float64 rFm)\n-{\n-  return rFm;\n-//series\n-}\n-\n-float64 float64_cos(float64 rFm)\n-{\n-   return rFm;\n-   //series\n-}\n-\n-#if 0\n-float64 float64_arcsin(float64 rFm)\n-{\n-//series\n-}\n-\n-float64 float64_arctan(float64 rFm)\n-{\n-  //series\n-}\n-#endif\n-\n-float64 float64_log(float64 rFm)\n-{\n-  return float64_div(float64_ln(rFm),getDoubleConstant(7));\n-}\n-\n-float64 float64_tan(float64 rFm)\n-{\n-  return float64_div(float64_sin(rFm),float64_cos(rFm));\n-}\n-\n-float64 float64_arccos(float64 rFm)\n-{\n-return rFm;\n-   //return float64_sub(halfPi,float64_arcsin(rFm));\n-}\n-\n-float64 float64_pow(float64 rFn,float64 rFm)\n-{\n-  return float64_exp(float64_mul(rFm,float64_ln(rFn)));\n-}\n-\n-float64 float64_pol(float64 rFn,float64 rFm)\n-{\n-  return float64_arctan(float64_div(rFn,rFm));\n-}\n-#endif\ndiff --git a/linux-user/arm/nwfpe/extended_cpdo.c b/linux-user/arm/nwfpe/extended_cpdo.c\ndeleted file mode 100644\nindex 1c8a412292..0000000000\n--- a/linux-user/arm/nwfpe/extended_cpdo.c\n+++ /dev/null\n@@ -1,273 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-\n-floatx80 floatx80_exp(floatx80 Fm);\n-floatx80 floatx80_ln(floatx80 Fm);\n-floatx80 floatx80_sin(floatx80 rFm);\n-floatx80 floatx80_cos(floatx80 rFm);\n-floatx80 floatx80_arcsin(floatx80 rFm);\n-floatx80 floatx80_arctan(floatx80 rFm);\n-floatx80 floatx80_log(floatx80 rFm);\n-floatx80 floatx80_tan(floatx80 rFm);\n-floatx80 floatx80_arccos(floatx80 rFm);\n-floatx80 floatx80_pow(floatx80 rFn,floatx80 rFm);\n-floatx80 floatx80_pol(floatx80 rFn,floatx80 rFm);\n-\n-unsigned int ExtendedCPDO(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   floatx80 rFm, rFn;\n-   unsigned int Fd, Fm, Fn, nRc = 1;\n-\n-   //printk(\"ExtendedCPDO(0x%08x)\\n\",opcode);\n-\n-   Fm = getFm(opcode);\n-   if (CONSTANT_FM(opcode))\n-   {\n-     rFm = getExtendedConstant(Fm);\n-   }\n-   else\n-   {\n-     switch (fpa11->fType[Fm])\n-     {\n-        case typeSingle:\n-          rFm = float32_to_floatx80(fpa11->fpreg[Fm].fSingle, &fpa11->fp_status);\n-        break;\n-\n-        case typeDouble:\n-          rFm = float64_to_floatx80(fpa11->fpreg[Fm].fDouble, &fpa11->fp_status);\n-        break;\n-\n-        case typeExtended:\n-          rFm = fpa11->fpreg[Fm].fExtended;\n-        break;\n-\n-        default: return 0;\n-     }\n-   }\n-\n-   if (!MONADIC_INSTRUCTION(opcode))\n-   {\n-      Fn = getFn(opcode);\n-      switch (fpa11->fType[Fn])\n-      {\n-        case typeSingle:\n-          rFn = float32_to_floatx80(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);\n-        break;\n-\n-        case typeDouble:\n-          rFn = float64_to_floatx80(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status);\n-        break;\n-\n-        case typeExtended:\n-          rFn = fpa11->fpreg[Fn].fExtended;\n-        break;\n-\n-        default: return 0;\n-      }\n-   }\n-\n-   Fd = getFd(opcode);\n-   switch (opcode & MASK_ARITHMETIC_OPCODE)\n-   {\n-      /* dyadic opcodes */\n-      case ADF_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_add(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case MUF_CODE:\n-      case FML_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_mul(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SUF_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_sub(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RSF_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_sub(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-      case DVF_CODE:\n-      case FDV_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_div(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RDF_CODE:\n-      case FRD_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_div(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POW_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_pow(rFn,rFm);\n-      break;\n-\n-      case RPW_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_pow(rFm,rFn);\n-      break;\n-#endif\n-\n-      case RMF_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_rem(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POL_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_pol(rFn,rFm);\n-      break;\n-#endif\n-\n-      /* monadic opcodes */\n-      case MVF_CODE:\n-         fpa11->fpreg[Fd].fExtended = rFm;\n-      break;\n-\n-      case MNF_CODE:\n-         rFm.high ^= 0x8000;\n-         fpa11->fpreg[Fd].fExtended = rFm;\n-      break;\n-\n-      case ABS_CODE:\n-         rFm.high &= 0x7fff;\n-         fpa11->fpreg[Fd].fExtended = rFm;\n-      break;\n-\n-      case RND_CODE:\n-      case URD_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_round_to_int(rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SQT_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_sqrt(rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case LOG_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_log(rFm);\n-      break;\n-\n-      case LGN_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_ln(rFm);\n-      break;\n-\n-      case EXP_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_exp(rFm);\n-      break;\n-\n-      case SIN_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_sin(rFm);\n-      break;\n-\n-      case COS_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_cos(rFm);\n-      break;\n-\n-      case TAN_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_tan(rFm);\n-      break;\n-\n-      case ASN_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_arcsin(rFm);\n-      break;\n-\n-      case ACS_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_arccos(rFm);\n-      break;\n-\n-      case ATN_CODE:\n-         fpa11->fpreg[Fd].fExtended = floatx80_arctan(rFm);\n-      break;\n-#endif\n-\n-      case NRM_CODE:\n-      break;\n-\n-      default:\n-      {\n-        nRc = 0;\n-      }\n-   }\n-\n-   if (0 != nRc) fpa11->fType[Fd] = typeExtended;\n-   return nRc;\n-}\n-\n-#if 0\n-floatx80 floatx80_exp(floatx80 Fm)\n-{\n-//series\n-}\n-\n-floatx80 floatx80_ln(floatx80 Fm)\n-{\n-//series\n-}\n-\n-floatx80 floatx80_sin(floatx80 rFm)\n-{\n-//series\n-}\n-\n-floatx80 floatx80_cos(floatx80 rFm)\n-{\n-//series\n-}\n-\n-floatx80 floatx80_arcsin(floatx80 rFm)\n-{\n-//series\n-}\n-\n-floatx80 floatx80_arctan(floatx80 rFm)\n-{\n-  //series\n-}\n-\n-floatx80 floatx80_log(floatx80 rFm)\n-{\n-  return floatx80_div(floatx80_ln(rFm),getExtendedConstant(7));\n-}\n-\n-floatx80 floatx80_tan(floatx80 rFm)\n-{\n-  return floatx80_div(floatx80_sin(rFm),floatx80_cos(rFm));\n-}\n-\n-floatx80 floatx80_arccos(floatx80 rFm)\n-{\n-   //return floatx80_sub(halfPi,floatx80_arcsin(rFm));\n-}\n-\n-floatx80 floatx80_pow(floatx80 rFn,floatx80 rFm)\n-{\n-  return floatx80_exp(floatx80_mul(rFm,floatx80_ln(rFn)));\n-}\n-\n-floatx80 floatx80_pol(floatx80 rFn,floatx80 rFm)\n-{\n-  return floatx80_arctan(floatx80_div(rFn,rFm));\n-}\n-#endif\ndiff --git a/linux-user/arm/nwfpe/fpa11.c b/linux-user/arm/nwfpe/fpa11.c\ndeleted file mode 100644\nindex 0f1afbd91d..0000000000\n--- a/linux-user/arm/nwfpe/fpa11.c\n+++ /dev/null\n@@ -1,270 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-\n-#include \"fpopcode.h\"\n-\n-//#include \"fpmodule.h\"\n-//#include \"fpmodule.inl\"\n-\n-//#include <asm/system.h>\n-\n-\n-FPA11* qemufpa = NULL;\n-CPUARMState* user_registers;\n-\n-/* Reset the FPA11 chip.  Called to initialize and reset the emulator. */\n-void resetFPA11(void)\n-{\n-  int i;\n-  FPA11 *fpa11 = GET_FPA11();\n-\n-  /* initialize the register type array */\n-  for (i=0;i<=7;i++)\n-  {\n-    fpa11->fType[i] = typeNone;\n-  }\n-\n-  /* FPSR: set system id to FP_EMULATOR, set AC, clear all other bits */\n-  fpa11->fpsr = FP_EMULATOR | BIT_AC;\n-\n-  /* FPCR: set SB, AB and DA bits, clear all others */\n-#ifdef MAINTAIN_FPCR\n-  fpa11->fpcr = MASK_RESET;\n-#endif\n-\n-  /*\n-   * Real FPA11 hardware does not handle NaNs, but always takes an\n-   * exception for them to be software-emulated (ARM7500FE datasheet\n-   * section 10.4). There is no documented architectural requirement\n-   * for NaN propagation rules and it will depend on how the OS\n-   * level software emulation opted to do it. We here use prop_s_ab\n-   * which matches the later VFP hardware choice and how QEMU's\n-   * fpa11 emulation has worked in the past. The real Linux kernel\n-   * does something slightly different: arch/arm/nwfpe/softfloat-specialize\n-   * propagateFloat64NaN() has the curious behaviour that it prefers\n-   * the QNaN over the SNaN, but if both are QNaN it picks A and\n-   * if both are SNaN it picks B. In theory we could add this as\n-   * a NaN propagation rule, but in practice FPA11 emulation is so\n-   * close to totally dead that it's not worth trying to match it at\n-   * this late date.\n-   */\n-  set_float_2nan_prop_rule(float_2nan_prop_s_ab, &fpa11->fp_status);\n-  /*\n-   * Use the same default NaN value as Arm VFP. This doesn't match\n-   * the Linux kernel's nwfpe emulation, which uses an all-1s value.\n-   */\n-  set_float_default_nan_pattern(0b01000000, &fpa11->fp_status);\n-}\n-\n-void SetRoundingMode(const unsigned int opcode)\n-{\n-    int rounding_mode;\n-   FPA11 *fpa11 = GET_FPA11();\n-\n-#ifdef MAINTAIN_FPCR\n-   fpa11->fpcr &= ~MASK_ROUNDING_MODE;\n-#endif\n-   switch (opcode & MASK_ROUNDING_MODE)\n-   {\n-      default:\n-      case ROUND_TO_NEAREST:\n-         rounding_mode = float_round_nearest_even;\n-#ifdef MAINTAIN_FPCR\n-         fpa11->fpcr |= ROUND_TO_NEAREST;\n-#endif\n-      break;\n-\n-      case ROUND_TO_PLUS_INFINITY:\n-         rounding_mode = float_round_up;\n-#ifdef MAINTAIN_FPCR\n-         fpa11->fpcr |= ROUND_TO_PLUS_INFINITY;\n-#endif\n-      break;\n-\n-      case ROUND_TO_MINUS_INFINITY:\n-         rounding_mode = float_round_down;\n-#ifdef MAINTAIN_FPCR\n-         fpa11->fpcr |= ROUND_TO_MINUS_INFINITY;\n-#endif\n-      break;\n-\n-      case ROUND_TO_ZERO:\n-         rounding_mode = float_round_to_zero;\n-#ifdef MAINTAIN_FPCR\n-         fpa11->fpcr |= ROUND_TO_ZERO;\n-#endif\n-      break;\n-  }\n-   set_float_rounding_mode(rounding_mode, &fpa11->fp_status);\n-}\n-\n-void SetRoundingPrecision(const unsigned int opcode)\n-{\n-    FloatX80RoundPrec rounding_precision;\n-    FPA11 *fpa11 = GET_FPA11();\n-#ifdef MAINTAIN_FPCR\n-    fpa11->fpcr &= ~MASK_ROUNDING_PRECISION;\n-#endif\n-    switch (opcode & MASK_ROUNDING_PRECISION) {\n-    case ROUND_SINGLE:\n-        rounding_precision = floatx80_precision_s;\n-#ifdef MAINTAIN_FPCR\n-        fpa11->fpcr |= ROUND_SINGLE;\n-#endif\n-        break;\n-\n-    case ROUND_DOUBLE:\n-        rounding_precision = floatx80_precision_d;\n-#ifdef MAINTAIN_FPCR\n-        fpa11->fpcr |= ROUND_DOUBLE;\n-#endif\n-        break;\n-\n-    case ROUND_EXTENDED:\n-        rounding_precision = floatx80_precision_x;\n-#ifdef MAINTAIN_FPCR\n-        fpa11->fpcr |= ROUND_EXTENDED;\n-#endif\n-        break;\n-\n-    default:\n-        rounding_precision = floatx80_precision_x;\n-        break;\n-    }\n-    set_floatx80_rounding_precision(rounding_precision, &fpa11->fp_status);\n-}\n-\n-/* Emulate the instruction in the opcode. */\n-/* ??? This is not thread safe.  */\n-unsigned int EmulateAll(unsigned int opcode, FPA11* qfpa, CPUARMState* qregs)\n-{\n-  unsigned int nRc = 0;\n-//  unsigned long flags;\n-  FPA11 *fpa11;\n-  unsigned int cp;\n-//  save_flags(flags); sti();\n-\n-  /* Check that this is really an FPA11 instruction: the coprocessor\n-   * field in bits [11:8] must be 1 or 2.\n-   */\n-  cp = (opcode >> 8) & 0xf;\n-  if (cp != 1 && cp != 2) {\n-    return 0;\n-  }\n-\n-  qemufpa=qfpa;\n-  user_registers=qregs;\n-\n-#if 0\n-  fprintf(stderr,\"emulating FP insn 0x%08x, PC=0x%08x\\n\",\n-          opcode, qregs[ARM_REG_PC]);\n-#endif\n-  fpa11 = GET_FPA11();\n-\n-  if (fpa11->initflag == 0)\t\t/* good place for __builtin_expect */\n-  {\n-    resetFPA11();\n-    SetRoundingMode(ROUND_TO_NEAREST);\n-    SetRoundingPrecision(ROUND_EXTENDED);\n-    fpa11->initflag = 1;\n-  }\n-\n-  set_float_exception_flags(0, &fpa11->fp_status);\n-\n-  if (TEST_OPCODE(opcode,MASK_CPRT))\n-  {\n-    //fprintf(stderr,\"emulating CPRT\\n\");\n-    /* Emulate conversion opcodes. */\n-    /* Emulate register transfer opcodes. */\n-    /* Emulate comparison opcodes. */\n-    nRc = EmulateCPRT(opcode);\n-  }\n-  else if (TEST_OPCODE(opcode,MASK_CPDO))\n-  {\n-    //fprintf(stderr,\"emulating CPDO\\n\");\n-    /* Emulate monadic arithmetic opcodes. */\n-    /* Emulate dyadic arithmetic opcodes. */\n-    nRc = EmulateCPDO(opcode);\n-  }\n-  else if (TEST_OPCODE(opcode,MASK_CPDT))\n-  {\n-    //fprintf(stderr,\"emulating CPDT\\n\");\n-    /* Emulate load/store opcodes. */\n-    /* Emulate load/store multiple opcodes. */\n-    nRc = EmulateCPDT(opcode);\n-  }\n-  else\n-  {\n-    /* Invalid instruction detected.  Return FALSE. */\n-    nRc = 0;\n-  }\n-\n-//  restore_flags(flags);\n-  if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))\n-  {\n-    //printf(\"fef 0x%x\\n\",float_exception_flags);\n-    nRc = -get_float_exception_flags(&fpa11->fp_status);\n-  }\n-\n-  //printf(\"returning %d\\n\",nRc);\n-  return(nRc);\n-}\n-\n-#if 0\n-unsigned int EmulateAll1(unsigned int opcode)\n-{\n-  switch ((opcode >> 24) & 0xf)\n-  {\n-     case 0xc:\n-     case 0xd:\n-       if ((opcode >> 20) & 0x1)\n-       {\n-          switch ((opcode >> 8) & 0xf)\n-          {\n-             case 0x1: return PerformLDF(opcode); break;\n-             case 0x2: return PerformLFM(opcode); break;\n-             default: return 0;\n-          }\n-       }\n-       else\n-       {\n-          switch ((opcode >> 8) & 0xf)\n-          {\n-             case 0x1: return PerformSTF(opcode); break;\n-             case 0x2: return PerformSFM(opcode); break;\n-             default: return 0;\n-          }\n-      }\n-     break;\n-\n-     case 0xe:\n-       if (opcode & 0x10)\n-         return EmulateCPDO(opcode);\n-       else\n-         return EmulateCPRT(opcode);\n-     break;\n-\n-     default: return 0;\n-  }\n-}\n-#endif\ndiff --git a/linux-user/arm/nwfpe/fpa11_cpdo.c b/linux-user/arm/nwfpe/fpa11_cpdo.c\ndeleted file mode 100644\nindex 94ac98aef5..0000000000\n--- a/linux-user/arm/nwfpe/fpa11_cpdo.c\n+++ /dev/null\n@@ -1,113 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpopcode.h\"\n-\n-unsigned int EmulateCPDO(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int Fd, nType, nDest, nRc = 1;\n-\n-   //printk(\"EmulateCPDO(0x%08x)\\n\",opcode);\n-\n-   /* Get the destination size.  If not valid let Linux perform\n-      an invalid instruction trap. */\n-   nDest = getDestinationSize(opcode);\n-   if (typeNone == nDest) return 0;\n-\n-   SetRoundingMode(opcode);\n-\n-   /* Compare the size of the operands in Fn and Fm.\n-      Choose the largest size and perform operations in that size,\n-      in order to make use of all the precision of the operands.\n-      If Fm is a constant, we just grab a constant of a size\n-      matching the size of the operand in Fn. */\n-   if (MONADIC_INSTRUCTION(opcode))\n-     nType = nDest;\n-   else\n-     nType = fpa11->fType[getFn(opcode)];\n-\n-   if (!CONSTANT_FM(opcode))\n-   {\n-     register unsigned int Fm = getFm(opcode);\n-     if (nType < fpa11->fType[Fm])\n-     {\n-        nType = fpa11->fType[Fm];\n-     }\n-   }\n-\n-   switch (nType)\n-   {\n-      case typeSingle   : nRc = SingleCPDO(opcode);   break;\n-      case typeDouble   : nRc = DoubleCPDO(opcode);   break;\n-      case typeExtended : nRc = ExtendedCPDO(opcode); break;\n-      default           : nRc = 0;\n-   }\n-\n-   /* If the operation succeeded, check to see if the result in the\n-      destination register is the correct size.  If not force it\n-      to be. */\n-   Fd = getFd(opcode);\n-   nType = fpa11->fType[Fd];\n-   if ((0 != nRc) && (nDest != nType))\n-   {\n-     switch (nDest)\n-     {\n-       case typeSingle:\n-       {\n-         if (typeDouble == nType)\n-           fpa11->fpreg[Fd].fSingle =\n-              float64_to_float32(fpa11->fpreg[Fd].fDouble, &fpa11->fp_status);\n-         else\n-           fpa11->fpreg[Fd].fSingle =\n-              floatx80_to_float32(fpa11->fpreg[Fd].fExtended, &fpa11->fp_status);\n-       }\n-       break;\n-\n-       case typeDouble:\n-       {\n-         if (typeSingle == nType)\n-           fpa11->fpreg[Fd].fDouble =\n-              float32_to_float64(fpa11->fpreg[Fd].fSingle, &fpa11->fp_status);\n-         else\n-           fpa11->fpreg[Fd].fDouble =\n-              floatx80_to_float64(fpa11->fpreg[Fd].fExtended, &fpa11->fp_status);\n-       }\n-       break;\n-\n-       case typeExtended:\n-       {\n-         if (typeSingle == nType)\n-           fpa11->fpreg[Fd].fExtended =\n-              float32_to_floatx80(fpa11->fpreg[Fd].fSingle, &fpa11->fp_status);\n-         else\n-           fpa11->fpreg[Fd].fExtended =\n-              float64_to_floatx80(fpa11->fpreg[Fd].fDouble, &fpa11->fp_status);\n-       }\n-       break;\n-     }\n-\n-     fpa11->fType[Fd] = nDest;\n-   }\n-\n-   return nRc;\n-}\ndiff --git a/linux-user/arm/nwfpe/fpa11_cpdt.c b/linux-user/arm/nwfpe/fpa11_cpdt.c\ndeleted file mode 100644\nindex fee525937c..0000000000\n--- a/linux-user/arm/nwfpe/fpa11_cpdt.c\n+++ /dev/null\n@@ -1,382 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.com, 1998-1999\n-    (c) Philip Blundell, 1998\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-//#include \"fpmodule.h\"\n-//#include \"fpmodule.inl\"\n-\n-//#include <asm/uaccess.h>\n-\n-static inline\n-void loadSingle(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   fpa11->fType[Fn] = typeSingle;\n-   /* FIXME - handle failure of get_user() */\n-   get_user_u32(float32_val(fpa11->fpreg[Fn].fSingle), addr);\n-}\n-\n-static inline\n-void loadDouble(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int *p;\n-   p = (unsigned int*)&fpa11->fpreg[Fn].fDouble;\n-   fpa11->fType[Fn] = typeDouble;\n-#if HOST_BIG_ENDIAN\n-   /* FIXME - handle failure of get_user() */\n-   get_user_u32(p[0], addr); /* sign & exponent */\n-   get_user_u32(p[1], addr + 4);\n-#else\n-   /* FIXME - handle failure of get_user() */\n-   get_user_u32(p[0], addr + 4);\n-   get_user_u32(p[1], addr); /* sign & exponent */\n-#endif\n-}\n-\n-static inline\n-void loadExtended(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int *p;\n-   p = (unsigned int*)&fpa11->fpreg[Fn].fExtended;\n-   fpa11->fType[Fn] = typeExtended;\n-   /* FIXME - handle failure of get_user() */\n-   get_user_u32(p[0], addr);  /* sign & exponent */\n-   get_user_u32(p[1], addr + 8);  /* ls bits */\n-   get_user_u32(p[2], addr + 4);  /* ms bits */\n-}\n-\n-static inline\n-void loadMultiple(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   register unsigned int *p;\n-   unsigned long x;\n-\n-   p = (unsigned int*)&(fpa11->fpreg[Fn]);\n-   /* FIXME - handle failure of get_user() */\n-   get_user_u32(x, addr);\n-   fpa11->fType[Fn] = (x >> 14) & 0x00000003;\n-\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeSingle:\n-      case typeDouble:\n-      {\n-         /* FIXME - handle failure of get_user() */\n-         get_user_u32(p[0], addr + 8);  /* Single */\n-         get_user_u32(p[1], addr + 4);  /* double msw */\n-         p[2] = 0;        /* empty */\n-      }\n-      break;\n-\n-      case typeExtended:\n-      {\n-         /* FIXME - handle failure of get_user() */\n-         get_user_u32(p[1], addr + 8);\n-         get_user_u32(p[2], addr + 4);  /* msw */\n-         p[0] = (x & 0x80003fff);\n-      }\n-      break;\n-   }\n-}\n-\n-static inline\n-void storeSingle(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   float32 val;\n-   register unsigned int *p = (unsigned int*)&val;\n-\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeDouble:\n-         val = float64_to_float32(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status);\n-      break;\n-\n-      case typeExtended:\n-         val = floatx80_to_float32(fpa11->fpreg[Fn].fExtended, &fpa11->fp_status);\n-      break;\n-\n-      default: val = fpa11->fpreg[Fn].fSingle;\n-   }\n-\n-   /* FIXME - handle put_user() failures */\n-   put_user_u32(p[0], addr);\n-}\n-\n-static inline\n-void storeDouble(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   float64 val;\n-   register unsigned int *p = (unsigned int*)&val;\n-\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeSingle:\n-         val = float32_to_float64(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);\n-      break;\n-\n-      case typeExtended:\n-         val = floatx80_to_float64(fpa11->fpreg[Fn].fExtended, &fpa11->fp_status);\n-      break;\n-\n-      default: val = fpa11->fpreg[Fn].fDouble;\n-   }\n-   /* FIXME - handle put_user() failures */\n-#if HOST_BIG_ENDIAN\n-   put_user_u32(p[0], addr);\t/* msw */\n-   put_user_u32(p[1], addr + 4);\t/* lsw */\n-#else\n-   put_user_u32(p[1], addr);\t/* msw */\n-   put_user_u32(p[0], addr + 4);\t/* lsw */\n-#endif\n-}\n-\n-static inline\n-void storeExtended(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   floatx80 val;\n-   register unsigned int *p = (unsigned int*)&val;\n-\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeSingle:\n-         val = float32_to_floatx80(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);\n-      break;\n-\n-      case typeDouble:\n-         val = float64_to_floatx80(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status);\n-      break;\n-\n-      default: val = fpa11->fpreg[Fn].fExtended;\n-   }\n-\n-   /* FIXME - handle put_user() failures */\n-   put_user_u32(p[0], addr); /* sign & exp */\n-   put_user_u32(p[1], addr + 8);\n-   put_user_u32(p[2], addr + 4); /* msw */\n-}\n-\n-static inline\n-void storeMultiple(const unsigned int Fn, target_ulong addr)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   register unsigned int nType, *p;\n-\n-   p = (unsigned int*)&(fpa11->fpreg[Fn]);\n-   nType = fpa11->fType[Fn];\n-\n-   switch (nType)\n-   {\n-      case typeSingle:\n-      case typeDouble:\n-      {\n-         put_user_u32(p[0], addr + 8); /* single */\n-\t put_user_u32(p[1], addr + 4); /* double msw */\n-\t put_user_u32(nType << 14, addr);\n-      }\n-      break;\n-\n-      case typeExtended:\n-      {\n-         put_user_u32(p[2], addr + 4); /* msw */\n-\t put_user_u32(p[1], addr + 8);\n-\t put_user_u32((p[0] & 0x80003fff) | (nType << 14), addr);\n-      }\n-      break;\n-   }\n-}\n-\n-static unsigned int PerformLDF(const unsigned int opcode)\n-{\n-    target_ulong pBase, pAddress, pFinal;\n-    unsigned int nRc = 1,\n-     write_back = WRITE_BACK(opcode);\n-\n-   //printk(\"PerformLDF(0x%08x), Fd = 0x%08x\\n\",opcode,getFd(opcode));\n-\n-   pBase = readRegister(getRn(opcode));\n-   if (ARM_REG_PC == getRn(opcode))\n-   {\n-     pBase += 8;\n-     write_back = 0;\n-   }\n-\n-   pFinal = pBase;\n-   if (BIT_UP_SET(opcode))\n-     pFinal += getOffset(opcode) * 4;\n-   else\n-     pFinal -= getOffset(opcode) * 4;\n-\n-   if (PREINDEXED(opcode)) pAddress = pFinal; else pAddress = pBase;\n-\n-   switch (opcode & MASK_TRANSFER_LENGTH)\n-   {\n-      case TRANSFER_SINGLE  : loadSingle(getFd(opcode),pAddress);   break;\n-      case TRANSFER_DOUBLE  : loadDouble(getFd(opcode),pAddress);   break;\n-      case TRANSFER_EXTENDED: loadExtended(getFd(opcode),pAddress); break;\n-      default: nRc = 0;\n-   }\n-\n-   if (write_back) writeRegister(getRn(opcode),(unsigned int)pFinal);\n-   return nRc;\n-}\n-\n-static unsigned int PerformSTF(const unsigned int opcode)\n-{\n-   target_ulong pBase, pAddress, pFinal;\n-   unsigned int nRc = 1,\n-     write_back = WRITE_BACK(opcode);\n-\n-   //printk(\"PerformSTF(0x%08x), Fd = 0x%08x\\n\",opcode,getFd(opcode));\n-   SetRoundingMode(ROUND_TO_NEAREST);\n-\n-   pBase = readRegister(getRn(opcode));\n-   if (ARM_REG_PC == getRn(opcode))\n-   {\n-     pBase += 8;\n-     write_back = 0;\n-   }\n-\n-   pFinal = pBase;\n-   if (BIT_UP_SET(opcode))\n-     pFinal += getOffset(opcode) * 4;\n-   else\n-     pFinal -= getOffset(opcode) * 4;\n-\n-   if (PREINDEXED(opcode)) pAddress = pFinal; else pAddress = pBase;\n-\n-   switch (opcode & MASK_TRANSFER_LENGTH)\n-   {\n-      case TRANSFER_SINGLE  : storeSingle(getFd(opcode),pAddress);   break;\n-      case TRANSFER_DOUBLE  : storeDouble(getFd(opcode),pAddress);   break;\n-      case TRANSFER_EXTENDED: storeExtended(getFd(opcode),pAddress); break;\n-      default: nRc = 0;\n-   }\n-\n-   if (write_back) writeRegister(getRn(opcode),(unsigned int)pFinal);\n-   return nRc;\n-}\n-\n-static unsigned int PerformLFM(const unsigned int opcode)\n-{\n-   unsigned int i, Fd,\n-     write_back = WRITE_BACK(opcode);\n-   target_ulong pBase, pAddress, pFinal;\n-\n-   pBase = readRegister(getRn(opcode));\n-   if (ARM_REG_PC == getRn(opcode))\n-   {\n-     pBase += 8;\n-     write_back = 0;\n-   }\n-\n-   pFinal = pBase;\n-   if (BIT_UP_SET(opcode))\n-     pFinal += getOffset(opcode) * 4;\n-   else\n-     pFinal -= getOffset(opcode) * 4;\n-\n-   if (PREINDEXED(opcode)) pAddress = pFinal; else pAddress = pBase;\n-\n-   Fd = getFd(opcode);\n-   for (i=getRegisterCount(opcode);i>0;i--)\n-   {\n-     loadMultiple(Fd,pAddress);\n-     pAddress += 12; Fd++;\n-     if (Fd == 8) Fd = 0;\n-   }\n-\n-   if (write_back) writeRegister(getRn(opcode),(unsigned int)pFinal);\n-   return 1;\n-}\n-\n-static unsigned int PerformSFM(const unsigned int opcode)\n-{\n-   unsigned int i, Fd,\n-     write_back = WRITE_BACK(opcode);\n-   target_ulong pBase, pAddress, pFinal;\n-\n-   pBase = readRegister(getRn(opcode));\n-   if (ARM_REG_PC == getRn(opcode))\n-   {\n-     pBase += 8;\n-     write_back = 0;\n-   }\n-\n-   pFinal = pBase;\n-   if (BIT_UP_SET(opcode))\n-     pFinal += getOffset(opcode) * 4;\n-   else\n-     pFinal -= getOffset(opcode) * 4;\n-\n-   if (PREINDEXED(opcode)) pAddress = pFinal; else pAddress = pBase;\n-\n-   Fd = getFd(opcode);\n-   for (i=getRegisterCount(opcode);i>0;i--)\n-   {\n-     storeMultiple(Fd,pAddress);\n-     pAddress += 12; Fd++;\n-     if (Fd == 8) Fd = 0;\n-   }\n-\n-   if (write_back) writeRegister(getRn(opcode),(unsigned int)pFinal);\n-   return 1;\n-}\n-\n-#if 1\n-unsigned int EmulateCPDT(const unsigned int opcode)\n-{\n-  unsigned int nRc = 0;\n-\n-  //printk(\"EmulateCPDT(0x%08x)\\n\",opcode);\n-\n-  if (LDF_OP(opcode))\n-  {\n-    nRc = PerformLDF(opcode);\n-  }\n-  else if (LFM_OP(opcode))\n-  {\n-    nRc = PerformLFM(opcode);\n-  }\n-  else if (STF_OP(opcode))\n-  {\n-    nRc = PerformSTF(opcode);\n-  }\n-  else if (SFM_OP(opcode))\n-  {\n-    nRc = PerformSFM(opcode);\n-  }\n-  else\n-  {\n-    nRc = 0;\n-  }\n-\n-  return nRc;\n-}\n-#endif\ndiff --git a/linux-user/arm/nwfpe/fpa11_cprt.c b/linux-user/arm/nwfpe/fpa11_cprt.c\ndeleted file mode 100644\nindex 04dc2ebb02..0000000000\n--- a/linux-user/arm/nwfpe/fpa11_cprt.c\n+++ /dev/null\n@@ -1,284 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-    (c) Philip Blundell, 1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-#include \"fpa11.inl\"\n-//#include \"fpmodule.h\"\n-//#include \"fpmodule.inl\"\n-\n-unsigned int PerformFLT(const unsigned int opcode);\n-unsigned int PerformFIX(const unsigned int opcode);\n-\n-static unsigned int\n-PerformComparison(const unsigned int opcode);\n-\n-unsigned int EmulateCPRT(const unsigned int opcode)\n-{\n-  unsigned int nRc = 1;\n-\n-  //printk(\"EmulateCPRT(0x%08x)\\n\",opcode);\n-\n-  if (opcode & 0x800000)\n-  {\n-     /* This is some variant of a comparison (PerformComparison will\n-\tsort out which one).  Since most of the other CPRT\n-\tinstructions are oddball cases of some sort or other it makes\n-\tsense to pull this out into a fast path.  */\n-     return PerformComparison(opcode);\n-  }\n-\n-  /* Hint to GCC that we'd like a jump table rather than a load of CMPs */\n-  switch ((opcode & 0x700000) >> 20)\n-  {\n-    case  FLT_CODE >> 20: nRc = PerformFLT(opcode); break;\n-    case  FIX_CODE >> 20: nRc = PerformFIX(opcode); break;\n-\n-    case  WFS_CODE >> 20: writeFPSR(readRegister(getRd(opcode))); break;\n-    case  RFS_CODE >> 20: writeRegister(getRd(opcode),readFPSR()); break;\n-\n-#if 0    /* We currently have no use for the FPCR, so there's no point\n-\t    in emulating it. */\n-    case  WFC_CODE >> 20: writeFPCR(readRegister(getRd(opcode)));\n-    case  RFC_CODE >> 20: writeRegister(getRd(opcode),readFPCR()); break;\n-#endif\n-\n-    default: nRc = 0;\n-  }\n-\n-  return nRc;\n-}\n-\n-unsigned int PerformFLT(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-\n-   unsigned int nRc = 1;\n-   SetRoundingMode(opcode);\n-\n-   switch (opcode & MASK_ROUNDING_PRECISION)\n-   {\n-      case ROUND_SINGLE:\n-      {\n-        fpa11->fType[getFn(opcode)] = typeSingle;\n-        fpa11->fpreg[getFn(opcode)].fSingle =\n-\t   int32_to_float32(readRegister(getRd(opcode)), &fpa11->fp_status);\n-      }\n-      break;\n-\n-      case ROUND_DOUBLE:\n-      {\n-        fpa11->fType[getFn(opcode)] = typeDouble;\n-        fpa11->fpreg[getFn(opcode)].fDouble =\n-            int32_to_float64(readRegister(getRd(opcode)), &fpa11->fp_status);\n-      }\n-      break;\n-\n-      case ROUND_EXTENDED:\n-      {\n-        fpa11->fType[getFn(opcode)] = typeExtended;\n-        fpa11->fpreg[getFn(opcode)].fExtended =\n-\t   int32_to_floatx80(readRegister(getRd(opcode)), &fpa11->fp_status);\n-      }\n-      break;\n-\n-      default: nRc = 0;\n-  }\n-\n-  return nRc;\n-}\n-\n-unsigned int PerformFIX(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int nRc = 1;\n-   unsigned int Fn = getFm(opcode);\n-\n-   SetRoundingMode(opcode);\n-\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeSingle:\n-      {\n-         writeRegister(getRd(opcode),\n-\t               float32_to_int32(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status));\n-      }\n-      break;\n-\n-      case typeDouble:\n-      {\n-         //printf(\"F%d is 0x%\" PRIx64 \"\\n\",Fn,fpa11->fpreg[Fn].fDouble);\n-         writeRegister(getRd(opcode),\n-\t               float64_to_int32(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status));\n-      }\n-      break;\n-\n-      case typeExtended:\n-      {\n-         writeRegister(getRd(opcode),\n-\t               floatx80_to_int32(fpa11->fpreg[Fn].fExtended, &fpa11->fp_status));\n-      }\n-      break;\n-\n-      default: nRc = 0;\n-  }\n-\n-  return nRc;\n-}\n-\n-\n-static __inline unsigned int\n-PerformComparisonOperation(floatx80 Fn, floatx80 Fm)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int flags = 0;\n-\n-   /* test for less than condition */\n-   if (floatx80_lt(Fn,Fm, &fpa11->fp_status))\n-   {\n-      flags |= CC_NEGATIVE;\n-   }\n-\n-   /* test for equal condition */\n-   if (floatx80_eq_quiet(Fn,Fm, &fpa11->fp_status))\n-   {\n-      flags |= CC_ZERO;\n-   }\n-\n-   /* test for greater than or equal condition */\n-   if (floatx80_lt(Fm,Fn, &fpa11->fp_status))\n-   {\n-      flags |= CC_CARRY;\n-   }\n-\n-   writeConditionCodes(flags);\n-   return 1;\n-}\n-\n-/* This instruction sets the flags N, Z, C, V in the FPSR. */\n-\n-static unsigned int PerformComparison(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   unsigned int Fn, Fm;\n-   floatx80 rFn, rFm;\n-   int e_flag = opcode & 0x400000;\t/* 1 if CxFE */\n-   int n_flag = opcode & 0x200000;\t/* 1 if CNxx */\n-   unsigned int flags = 0;\n-\n-   //printk(\"PerformComparison(0x%08x)\\n\",opcode);\n-\n-   Fn = getFn(opcode);\n-   Fm = getFm(opcode);\n-\n-   /* Check for unordered condition and convert all operands to 80-bit\n-      format.\n-      ?? Might be some mileage in avoiding this conversion if possible.\n-      Eg, if both operands are 32-bit, detect this and do a 32-bit\n-      comparison (cheaper than an 80-bit one).  */\n-   switch (fpa11->fType[Fn])\n-   {\n-      case typeSingle:\n-        //printk(\"single.\\n\");\n-\tif (float32_is_any_nan(fpa11->fpreg[Fn].fSingle))\n-\t   goto unordered;\n-        rFn = float32_to_floatx80(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);\n-      break;\n-\n-      case typeDouble:\n-        //printk(\"double.\\n\");\n-\tif (float64_is_any_nan(fpa11->fpreg[Fn].fDouble))\n-\t   goto unordered;\n-        rFn = float64_to_floatx80(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status);\n-      break;\n-\n-      case typeExtended:\n-        //printk(\"extended.\\n\");\n-\tif (floatx80_is_any_nan(fpa11->fpreg[Fn].fExtended))\n-\t   goto unordered;\n-        rFn = fpa11->fpreg[Fn].fExtended;\n-      break;\n-\n-      default: return 0;\n-   }\n-\n-   if (CONSTANT_FM(opcode))\n-   {\n-     //printk(\"Fm is a constant: #%d.\\n\",Fm);\n-     rFm = getExtendedConstant(Fm);\n-     if (floatx80_is_any_nan(rFm))\n-        goto unordered;\n-   }\n-   else\n-   {\n-     //printk(\"Fm = r%d which contains a \",Fm);\n-      switch (fpa11->fType[Fm])\n-      {\n-         case typeSingle:\n-           //printk(\"single.\\n\");\n-\t   if (float32_is_any_nan(fpa11->fpreg[Fm].fSingle))\n-\t      goto unordered;\n-           rFm = float32_to_floatx80(fpa11->fpreg[Fm].fSingle, &fpa11->fp_status);\n-         break;\n-\n-         case typeDouble:\n-           //printk(\"double.\\n\");\n-\t   if (float64_is_any_nan(fpa11->fpreg[Fm].fDouble))\n-\t      goto unordered;\n-           rFm = float64_to_floatx80(fpa11->fpreg[Fm].fDouble, &fpa11->fp_status);\n-         break;\n-\n-         case typeExtended:\n-           //printk(\"extended.\\n\");\n-\t   if (floatx80_is_any_nan(fpa11->fpreg[Fm].fExtended))\n-\t      goto unordered;\n-           rFm = fpa11->fpreg[Fm].fExtended;\n-         break;\n-\n-         default: return 0;\n-      }\n-   }\n-\n-   if (n_flag)\n-   {\n-      rFm.high ^= 0x8000;\n-   }\n-\n-   return PerformComparisonOperation(rFn,rFm);\n-\n- unordered:\n-   /* ?? The FPA data sheet is pretty vague about this, in particular\n-      about whether the non-E comparisons can ever raise exceptions.\n-      This implementation is based on a combination of what it says in\n-      the data sheet, observation of how the Acorn emulator actually\n-      behaves (and how programs expect it to) and guesswork.  */\n-   flags |= CC_OVERFLOW;\n-   flags &= ~(CC_ZERO | CC_NEGATIVE);\n-\n-   if (BIT_AC & readFPSR()) flags |= CC_CARRY;\n-\n-   if (e_flag) float_raise(float_flag_invalid, &fpa11->fp_status);\n-\n-   writeConditionCodes(flags);\n-   return 1;\n-}\ndiff --git a/linux-user/arm/nwfpe/fpopcode.c b/linux-user/arm/nwfpe/fpopcode.c\ndeleted file mode 100644\nindex 6784256d28..0000000000\n--- a/linux-user/arm/nwfpe/fpopcode.c\n+++ /dev/null\n@@ -1,91 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-#include \"fpsr.h\"\n-//#include \"fpmodule.h\"\n-//#include \"fpmodule.inl\"\n-\n-const floatx80 floatx80Constant[] = {\n-  { 0x0000000000000000ULL, 0x0000},\t/* extended 0.0 */\n-  { 0x8000000000000000ULL, 0x3fff},\t/* extended 1.0 */\n-  { 0x8000000000000000ULL, 0x4000},\t/* extended 2.0 */\n-  { 0xc000000000000000ULL, 0x4000},\t/* extended 3.0 */\n-  { 0x8000000000000000ULL, 0x4001},\t/* extended 4.0 */\n-  { 0xa000000000000000ULL, 0x4001},\t/* extended 5.0 */\n-  { 0x8000000000000000ULL, 0x3ffe},\t/* extended 0.5 */\n-  { 0xa000000000000000ULL, 0x4002}\t/* extended 10.0 */\n-};\n-\n-const float64 float64Constant[] = {\n-  const_float64(0x0000000000000000ULL),\t\t/* double 0.0 */\n-  const_float64(0x3ff0000000000000ULL),\t\t/* double 1.0 */\n-  const_float64(0x4000000000000000ULL),\t\t/* double 2.0 */\n-  const_float64(0x4008000000000000ULL),\t\t/* double 3.0 */\n-  const_float64(0x4010000000000000ULL),\t\t/* double 4.0 */\n-  const_float64(0x4014000000000000ULL),\t\t/* double 5.0 */\n-  const_float64(0x3fe0000000000000ULL),\t\t/* double 0.5 */\n-  const_float64(0x4024000000000000ULL)\t\t\t/* double 10.0 */\n-};\n-\n-const float32 float32Constant[] = {\n-  const_float32(0x00000000),\t\t\t\t/* single 0.0 */\n-  const_float32(0x3f800000),\t\t\t\t/* single 1.0 */\n-  const_float32(0x40000000),\t\t\t\t/* single 2.0 */\n-  const_float32(0x40400000),\t\t\t\t/* single 3.0 */\n-  const_float32(0x40800000),\t\t\t\t/* single 4.0 */\n-  const_float32(0x40a00000),\t\t\t\t/* single 5.0 */\n-  const_float32(0x3f000000),\t\t\t\t/* single 0.5 */\n-  const_float32(0x41200000)\t\t\t\t/* single 10.0 */\n-};\n-\n-unsigned int getRegisterCount(const unsigned int opcode)\n-{\n-  unsigned int nRc;\n-\n-  switch (opcode & MASK_REGISTER_COUNT)\n-  {\n-    case 0x00000000: nRc = 4; break;\n-    case 0x00008000: nRc = 1; break;\n-    case 0x00400000: nRc = 2; break;\n-    case 0x00408000: nRc = 3; break;\n-    default: nRc = 0;\n-  }\n-\n-  return(nRc);\n-}\n-\n-unsigned int getDestinationSize(const unsigned int opcode)\n-{\n-  unsigned int nRc;\n-\n-  switch (opcode & MASK_DESTINATION_SIZE)\n-  {\n-    case 0x00000000: nRc = typeSingle; break;\n-    case 0x00000080: nRc = typeDouble; break;\n-    case 0x00080000: nRc = typeExtended; break;\n-    default: nRc = typeNone;\n-  }\n-\n-  return(nRc);\n-}\ndiff --git a/linux-user/arm/nwfpe/single_cpdo.c b/linux-user/arm/nwfpe/single_cpdo.c\ndeleted file mode 100644\nindex 21e177baeb..0000000000\n--- a/linux-user/arm/nwfpe/single_cpdo.c\n+++ /dev/null\n@@ -1,253 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"qemu/osdep.h\"\n-#include \"fpa11.h\"\n-#include \"fpu/softfloat.h\"\n-#include \"fpopcode.h\"\n-\n-float32 float32_exp(float32 Fm);\n-float32 float32_ln(float32 Fm);\n-float32 float32_sin(float32 rFm);\n-float32 float32_cos(float32 rFm);\n-float32 float32_arcsin(float32 rFm);\n-float32 float32_arctan(float32 rFm);\n-float32 float32_log(float32 rFm);\n-float32 float32_tan(float32 rFm);\n-float32 float32_arccos(float32 rFm);\n-float32 float32_pow(float32 rFn,float32 rFm);\n-float32 float32_pol(float32 rFn,float32 rFm);\n-\n-unsigned int SingleCPDO(const unsigned int opcode)\n-{\n-   FPA11 *fpa11 = GET_FPA11();\n-   float32 rFm, rFn = float32_zero;\n-   unsigned int Fd, Fm, Fn, nRc = 1;\n-\n-   Fm = getFm(opcode);\n-   if (CONSTANT_FM(opcode))\n-   {\n-     rFm = getSingleConstant(Fm);\n-   }\n-   else\n-   {\n-     switch (fpa11->fType[Fm])\n-     {\n-        case typeSingle:\n-          rFm = fpa11->fpreg[Fm].fSingle;\n-        break;\n-\n-        default: return 0;\n-     }\n-   }\n-\n-   if (!MONADIC_INSTRUCTION(opcode))\n-   {\n-      Fn = getFn(opcode);\n-      switch (fpa11->fType[Fn])\n-      {\n-        case typeSingle:\n-          rFn = fpa11->fpreg[Fn].fSingle;\n-        break;\n-\n-        default: return 0;\n-      }\n-   }\n-\n-   Fd = getFd(opcode);\n-   switch (opcode & MASK_ARITHMETIC_OPCODE)\n-   {\n-      /* dyadic opcodes */\n-      case ADF_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_add(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case MUF_CODE:\n-      case FML_CODE:\n-        fpa11->fpreg[Fd].fSingle = float32_mul(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SUF_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_sub(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RSF_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_sub(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-      case DVF_CODE:\n-      case FDV_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_div(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-      case RDF_CODE:\n-      case FRD_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_div(rFm,rFn, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POW_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_pow(rFn,rFm);\n-      break;\n-\n-      case RPW_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_pow(rFm,rFn);\n-      break;\n-#endif\n-\n-      case RMF_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_rem(rFn,rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case POL_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_pol(rFn,rFm);\n-      break;\n-#endif\n-\n-      /* monadic opcodes */\n-      case MVF_CODE:\n-         fpa11->fpreg[Fd].fSingle = rFm;\n-      break;\n-\n-      case MNF_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_chs(rFm);\n-      break;\n-\n-      case ABS_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_abs(rFm);\n-      break;\n-\n-      case RND_CODE:\n-      case URD_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_round_to_int(rFm, &fpa11->fp_status);\n-      break;\n-\n-      case SQT_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_sqrt(rFm, &fpa11->fp_status);\n-      break;\n-\n-#if 0\n-      case LOG_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_log(rFm);\n-      break;\n-\n-      case LGN_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_ln(rFm);\n-      break;\n-\n-      case EXP_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_exp(rFm);\n-      break;\n-\n-      case SIN_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_sin(rFm);\n-      break;\n-\n-      case COS_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_cos(rFm);\n-      break;\n-\n-      case TAN_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_tan(rFm);\n-      break;\n-\n-      case ASN_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_arcsin(rFm);\n-      break;\n-\n-      case ACS_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_arccos(rFm);\n-      break;\n-\n-      case ATN_CODE:\n-         fpa11->fpreg[Fd].fSingle = float32_arctan(rFm);\n-      break;\n-#endif\n-\n-      case NRM_CODE:\n-      break;\n-\n-      default:\n-      {\n-        nRc = 0;\n-      }\n-   }\n-\n-   if (0 != nRc) fpa11->fType[Fd] = typeSingle;\n-   return nRc;\n-}\n-\n-#if 0\n-float32 float32_exp(float32 Fm)\n-{\n-//series\n-}\n-\n-float32 float32_ln(float32 Fm)\n-{\n-//series\n-}\n-\n-float32 float32_sin(float32 rFm)\n-{\n-//series\n-}\n-\n-float32 float32_cos(float32 rFm)\n-{\n-//series\n-}\n-\n-float32 float32_arcsin(float32 rFm)\n-{\n-//series\n-}\n-\n-float32 float32_arctan(float32 rFm)\n-{\n-  //series\n-}\n-\n-float32 float32_arccos(float32 rFm)\n-{\n-   //return float32_sub(halfPi,float32_arcsin(rFm));\n-}\n-\n-float32 float32_log(float32 rFm)\n-{\n-  return float32_div(float32_ln(rFm),getSingleConstant(7));\n-}\n-\n-float32 float32_tan(float32 rFm)\n-{\n-  return float32_div(float32_sin(rFm),float32_cos(rFm));\n-}\n-\n-float32 float32_pow(float32 rFn,float32 rFm)\n-{\n-  return float32_exp(float32_mul(rFm,float32_ln(rFn)));\n-}\n-\n-float32 float32_pol(float32 rFn,float32 rFm)\n-{\n-  return float32_arctan(float32_div(rFn,rFm));\n-}\n-#endif\ndiff --git a/linux-user/arm/meson.build b/linux-user/arm/meson.build\nindex 348ffb810d..4f35536c13 100644\n--- a/linux-user/arm/meson.build\n+++ b/linux-user/arm/meson.build\n@@ -1,5 +1,3 @@\n-subdir('nwfpe')\n-\n syscall_nr_generators += {\n   'arm': generator(sh,\n                    arguments: [ meson.current_source_dir() / 'syscallhdr.sh', '@INPUT@', '@OUTPUT@', '@EXTRA_ARGS@' ],\ndiff --git a/linux-user/arm/nwfpe/fpa11.inl b/linux-user/arm/nwfpe/fpa11.inl\ndeleted file mode 100644\nindex 6c6f380d4d..0000000000\n--- a/linux-user/arm/nwfpe/fpa11.inl\n+++ /dev/null\n@@ -1,50 +0,0 @@\n-/*\n-    NetWinder Floating Point Emulator\n-    (c) Rebel.COM, 1998,1999\n-\n-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>\n-\n-    This program is free software; you can redistribute it and/or modify\n-    it under the terms of the GNU General Public License as published by\n-    the Free Software Foundation; either version 2 of the License, or\n-    (at your option) any later version.\n-\n-    This program is distributed in the hope that it will be useful,\n-    but WITHOUT ANY WARRANTY; without even the implied warranty of\n-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n-    GNU General Public License for more details.\n-\n-    You should have received a copy of the GNU General Public License\n-    along with this program; if not, see <http://www.gnu.org/licenses/>.\n-*/\n-\n-#include \"fpa11.h\"\n-\n-/* Read and write floating point status register */\n-static inline unsigned int readFPSR(void)\n-{\n-  FPA11 *fpa11 = GET_FPA11();\n-  return(fpa11->fpsr);\n-}\n-\n-static inline void writeFPSR(FPSR reg)\n-{\n-  FPA11 *fpa11 = GET_FPA11();\n-  /* the sysid byte in the status register is readonly */\n-  fpa11->fpsr = (fpa11->fpsr & MASK_SYSID) | (reg & ~MASK_SYSID);\n-}\n-\n-/* Read and write floating point control register */\n-static inline FPCR readFPCR(void)\n-{\n-  FPA11 *fpa11 = GET_FPA11();\n-  /* clear SB, AB and DA bits before returning FPCR */\n-  return(fpa11->fpcr & ~MASK_RFC);\n-}\n-\n-static inline void writeFPCR(FPCR reg)\n-{\n-  FPA11 *fpa11 = GET_FPA11();\n-  fpa11->fpcr &= ~MASK_WFC;\t\t/* clear SB, AB and DA bits */\n-  fpa11->fpcr |= (reg & MASK_WFC);\t/* write SB, AB and DA bits */\n-}\ndiff --git a/linux-user/arm/nwfpe/meson.build b/linux-user/arm/nwfpe/meson.build\ndeleted file mode 100644\nindex 1c27e55f2a..0000000000\n--- a/linux-user/arm/nwfpe/meson.build\n+++ /dev/null\n@@ -1,10 +0,0 @@\n-linux_user_ss.add(when: 'TARGET_ARM', if_true: files(\n-  'double_cpdo.c',\n-  'extended_cpdo.c',\n-  'fpa11.c',\n-  'fpa11_cpdo.c',\n-  'fpa11_cpdt.c',\n-  'fpa11_cprt.c',\n-  'fpopcode.c',\n-  'single_cpdo.c',\n-))\n","prefixes":["for-11.1"]}