{"id":809329,"url":"http://patchwork.ozlabs.org/api/patches/809329/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170903163130.14288-1-n54@gmx.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/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":"<20170903163130.14288-1-n54@gmx.com>","list_archive_url":null,"date":"2017-09-03T16:31:30","name":"target/m68k: Change fpu_rom from const static array to switch","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"aa1a8467255d9068b9f6153119c64997ea729ac7","submitter":{"id":11273,"url":"http://patchwork.ozlabs.org/api/people/11273/?format=json","name":"Kamil Rytarowski","email":"n54@gmx.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170903163130.14288-1-n54@gmx.com/mbox/","series":[{"id":1255,"url":"http://patchwork.ozlabs.org/api/series/1255/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1255","date":"2017-09-03T16:31:30","name":"target/m68k: Change fpu_rom from const static array to switch","version":1,"mbox":"http://patchwork.ozlabs.org/series/1255/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/809329/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/809329/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@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xlf2V6lrqz9t2f\n\tfor <incoming@patchwork.ozlabs.org>;\n\tMon,  4 Sep 2017 02:44:18 +1000 (AEST)","from localhost ([::1]:59541 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1doY0P-0000SV-1s\n\tfor incoming@patchwork.ozlabs.org; Sun, 03 Sep 2017 12:44:17 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:42511)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from <n54@gmx.com>)\n\tid 1doXzy-0000Nf-Ql\n\tfor qemu-devel@nongnu.org; Sun, 03 Sep 2017 12:43:55 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <n54@gmx.com>) id 1doXzt-0008Vt-O5\n\tfor qemu-devel@nongnu.org; Sun, 03 Sep 2017 12:43:50 -0400","from mout.gmx.net ([212.227.17.22]:49533)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.71) (envelope-from <n54@gmx.com>) id 1doXzt-0008VC-DV\n\tfor qemu-devel@nongnu.org; Sun, 03 Sep 2017 12:43:45 -0400","from localhost.localdomain ([185.58.161.191]) by mail.gmx.com\n\t(mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id\n\t0MfAog-1e8xUN3yZ8-00OmJg; Sun, 03 Sep 2017 18:43:42 +0200"],"From":"Kamil Rytarowski <n54@gmx.com>","To":"laurent@vivier.eu","Date":"Sun,  3 Sep 2017 18:31:30 +0200","Message-Id":"<20170903163130.14288-1-n54@gmx.com>","X-Mailer":"git-send-email 2.14.1","X-Provags-ID":"V03:K0:5DXUvPsNP8jwy/6Oq2x4gvBI5X5nhj10Q+RTD/PeWMslovmmnPy\n\tJ3weEWG5oyC4ntf6yuQlnrRosm9lEINquaFY7jysqVtTpykm8Yxzw+xutzuXpR6kGfXmKeZ\n\t244g0Ok/I+I1dFwRpUIucuGaxw+yj3bbSJnZO+L2OdKbmzB7dihViH7m4D7qOVdLrDare7N\n\tb81DXpaTX2Lms4ltPjd4Q==","X-UI-Out-Filterresults":"notjunk:1; V01:K0:DCRjWXiWUGI=:4zi1L9RK8uFC3rBu2IiqFR\n\t3H3+RmS2/LG6pWSxjLgsarf1ZfSa+twsBunJQf+UVvU5/32ctvWzE78hX+2crq/L9t/PtaY4L\n\trUC9p3Nuk1+IlZ6mds9fNZvMxPUDfoc0o+rm/NuS2Nzz5doUkHKQvsRg4iN4d726DaO04dp/3\n\t0K7dHXv4n3XdAKy99fM/Zoq4/VXGa3H+FnWg+cOnq2WfclaW8ZNlAG7GgcU6b+Rbbt8aYeEfX\n\tbwr9RoyTBOkFu61PkqtRXoxzK6lv5ns7OMAxpgMyIll3uJ+NBW6tzRapmuNdzPZeiZfVlFWiZ\n\tezq560zzkUE3dfVJTUrAaryV253+hiGwL3EMxJiXXilwQaiibrhV5Vj+Yw54k4ZLZSzOwTIom\n\tzZrDxg3FyKE5ra0Acjek9Zj2WyB+Grb86g+6RY8XTx3UXPWIa+MCoyZD73o8DtXwPsaGtZQG6\n\tCxiNwc38k2VxnoY5Wd15uduf6GOSYyQx1Y8WDPurOg59eZI9X94P+xIpXbzARWRRv4Zc7dXr2\n\tzT/kXAbaBL19UV61VQg+YdWpG93p0MiHpVT3+KKbMTi1dHz6YZ9uR2JQVsVQkSa++OyLW1jGm\n\tWbu5coZN94lSAl1El6GAjG/JaezYgo7CW0vAuyDgHk894HgWlV5yGCSIx9VNKKbSc4Dl6xE0a\n\tyk1HtM6bUVr8iEW6mgZ+wA7o7mEdakxKDuyv+KydXnNXCEKLL9i88cGSB+5tfReMkiEUGsuFE\n\tqOkLCnLuh9GTU9Uag4UZ00KVg8065W9fMMAPklrnxLsU5EsLjT/0yAzgNLSZbzNa1h6etIYP1\n\tEcYbaj0zTl5SkHUHVNDY996KhY6IA==","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"212.227.17.22","Subject":"[Qemu-devel] [PATCH] target/m68k: Change fpu_rom from const static\n\tarray to switch","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://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\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Kamil Rytarowski <n54@gmx.com>, qemu-devel@nongnu.org","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"GCC 4.7.2 on SunOS reports that the values assigned to array members are not\nreal constants:\n\ntarget/m68k/fpu_helper.c:32:5: error: initializer element is not constant\ntarget/m68k/fpu_helper.c:32:5: error: (near initialization for 'fpu_rom[0]')\nrules.mak:66: recipe for target 'target/m68k/fpu_helper.o' failed\n\nConvert the array to switch() to workaround the issue.\n\nThis fixes build on SmartOS (Joyent).\n\nSigned-off-by: Kamil Rytarowski <n54@gmx.com>\n---\n target/m68k/fpu_helper.c | 108 ++++++++++++++++++++++++++++++++++-------------\n 1 file changed, 78 insertions(+), 30 deletions(-)","diff":"diff --git a/target/m68k/fpu_helper.c b/target/m68k/fpu_helper.c\nindex bdfc537c68..13ce40db06 100644\n--- a/target/m68k/fpu_helper.c\n+++ b/target/m68k/fpu_helper.c\n@@ -24,35 +24,6 @@\n #include \"exec/exec-all.h\"\n #include \"exec/cpu_ldst.h\"\n \n-/* Undefined offsets may be different on various FPU.\n- * On 68040 they return 0.0 (floatx80_zero)\n- */\n-\n-static const floatx80 fpu_rom[128] = {\n-    [0x00] = floatx80_pi,                                   /* Pi */\n-    [0x0b] = make_floatx80(0x3ffd, 0x9a209a84fbcff798ULL),  /* Log10(2) */\n-    [0x0c] = make_floatx80(0x4000, 0xadf85458a2bb4a9aULL),  /* e        */\n-    [0x0d] = make_floatx80(0x3fff, 0xb8aa3b295c17f0bcULL),  /* Log2(e)  */\n-    [0x0e] = make_floatx80(0x3ffd, 0xde5bd8a937287195ULL),  /* Log10(e) */\n-    [0x0f] = floatx80_zero,                                 /* Zero     */\n-    [0x30] = floatx80_ln2,                                  /* ln(2)    */\n-    [0x31] = make_floatx80(0x4000, 0x935d8dddaaa8ac17ULL),  /* ln(10)   */\n-    [0x32] = floatx80_one,                                  /* 10^0     */\n-    [0x33] = make_floatx80(0x4002, 0xa000000000000000ULL),  /* 10^1     */\n-    [0x34] = make_floatx80(0x4005, 0xc800000000000000ULL),  /* 10^2     */\n-    [0x35] = make_floatx80(0x400c, 0x9c40000000000000ULL),  /* 10^4     */\n-    [0x36] = make_floatx80(0x4019, 0xbebc200000000000ULL),  /* 10^8     */\n-    [0x37] = make_floatx80(0x4034, 0x8e1bc9bf04000000ULL),  /* 10^16    */\n-    [0x38] = make_floatx80(0x4069, 0x9dc5ada82b70b59eULL),  /* 10^32    */\n-    [0x39] = make_floatx80(0x40d3, 0xc2781f49ffcfa6d5ULL),  /* 10^64    */\n-    [0x3a] = make_floatx80(0x41a8, 0x93ba47c980e98ce0ULL),  /* 10^128   */\n-    [0x3b] = make_floatx80(0x4351, 0xaa7eebfb9df9de8eULL),  /* 10^256   */\n-    [0x3c] = make_floatx80(0x46a3, 0xe319a0aea60e91c7ULL),  /* 10^512   */\n-    [0x3d] = make_floatx80(0x4d48, 0xc976758681750c17ULL),  /* 10^1024  */\n-    [0x3e] = make_floatx80(0x5a92, 0x9e8b3b5dc53d5de5ULL),  /* 10^2048  */\n-    [0x3f] = make_floatx80(0x7525, 0xc46052028a20979bULL),  /* 10^4096  */\n-};\n-\n int32_t HELPER(reds32)(CPUM68KState *env, FPReg *val)\n {\n     return floatx80_to_int32(val->d, &env->fp_status);\n@@ -387,7 +358,84 @@ void HELPER(ftst)(CPUM68KState *env, FPReg *val)\n \n void HELPER(fconst)(CPUM68KState *env, FPReg *val, uint32_t offset)\n {\n-    val->d = fpu_rom[offset];\n+    floatx80 tmp;\n+\n+    /* Undefined offsets may be different on various FPU.\n+     * On 68040 they return 0.0 (floatx80_zero)\n+     */\n+    switch (offset) {\n+    case 0x00:\n+        tmp = floatx80_pi;                                   /* Pi */\n+        break;\n+    case 0x0b:\n+        tmp = make_floatx80(0x3ffd, 0x9a209a84fbcff798ULL);  /* Log10(2) */\n+        break;\n+    case 0x0c:\n+        tmp = make_floatx80(0x4000, 0xadf85458a2bb4a9aULL);  /* e        */\n+        break;\n+    case 0x0d:\n+        tmp = make_floatx80(0x3fff, 0xb8aa3b295c17f0bcULL);  /* Log2(e)  */\n+        break;\n+    case 0x0e:\n+        tmp = make_floatx80(0x3ffd, 0xde5bd8a937287195ULL);  /* Log10(e) */\n+        break;\n+    case 0x0f:\n+        tmp = floatx80_zero;                                 /* Zero     */\n+        break;\n+    case 0x30:\n+        tmp = floatx80_ln2;                                  /* ln(2)    */\n+        break;\n+    case 0x31:\n+        tmp = make_floatx80(0x4000, 0x935d8dddaaa8ac17ULL);  /* ln(10)   */\n+        break;\n+    case 0x32:\n+        tmp = floatx80_one;                                  /* 10^0     */\n+        break;\n+    case 0x33:\n+        tmp = make_floatx80(0x4002, 0xa000000000000000ULL);  /* 10^1     */\n+        break;\n+    case 0x34:\n+        tmp = make_floatx80(0x4005, 0xc800000000000000ULL);  /* 10^2     */\n+        break;\n+    case 0x35:\n+        tmp = make_floatx80(0x400c, 0x9c40000000000000ULL);  /* 10^4     */\n+        break;\n+    case 0x36:\n+        tmp = make_floatx80(0x4019, 0xbebc200000000000ULL);  /* 10^8     */\n+        break;\n+    case 0x37:\n+        tmp = make_floatx80(0x4034, 0x8e1bc9bf04000000ULL);  /* 10^16    */\n+        break;\n+    case 0x38:\n+        tmp = make_floatx80(0x4069, 0x9dc5ada82b70b59eULL);  /* 10^32    */\n+        break;\n+    case 0x39:\n+        tmp = make_floatx80(0x40d3, 0xc2781f49ffcfa6d5ULL);  /* 10^64    */\n+        break;\n+    case 0x3a:\n+        tmp = make_floatx80(0x41a8, 0x93ba47c980e98ce0ULL);  /* 10^128   */\n+        break;\n+    case 0x3b:\n+        tmp = make_floatx80(0x4351, 0xaa7eebfb9df9de8eULL);  /* 10^256   */\n+        break;\n+    case 0x3c:\n+        tmp = make_floatx80(0x46a3, 0xe319a0aea60e91c7ULL);  /* 10^512   */\n+        break;\n+    case 0x3d:\n+        tmp = make_floatx80(0x4d48, 0xc976758681750c17ULL);  /* 10^1024  */\n+        break;\n+    case 0x3e:\n+        tmp = make_floatx80(0x5a92, 0x9e8b3b5dc53d5de5ULL);  /* 10^2048  */\n+        break;\n+    case 0x3f:\n+        tmp = make_floatx80(0x7525, 0xc46052028a20979bULL);  /* 10^4096  */\n+        break;\n+    default:\n+        tmp = floatx80_zero;\n+        break;\n+    }\n+\n+    val->d = tmp;\n }\n \n typedef int (*float_access)(CPUM68KState *env, uint32_t addr, FPReg *fp,\n","prefixes":[]}