[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[patches] DFP Branch: Move dpd files to own directory
- To: patches@xxxxxxxxxx
- Subject: [patches] DFP Branch: Move dpd files to own directory
- From: "Andreas Krebbel" <krebbel@xxxxxxxxxxxxxxxxxx>
- Date: Fri, 15 Aug 2008 18:55:27 +0200
Hello,
the attached patch moves the files for dpd format decoding into an own
directory. That way they can easily be shared between different
platforms.
Bye,
-Andreas-
2008-08-15 Andreas Krebbel <krebbel1@xxxxxxxxxx>
* dfp/sysdeps/powerpc/decode-decimal.c:
* dfp/sysdeps/powerpc/dpd-private.c:
* dfp/sysdeps/powerpc/dpd-private.h:
* dfp/sysdeps/powerpc/numdigits.h: Moved to ...
* dfp/sysdeps/dfp/dpd/decode-decimal.c:
* dfp/sysdeps/dfp/dpd/dpd-private.c:
* dfp/sysdeps/dfp/dpd/dpd-private.h:
* dfp/sysdeps/dfp/dpd/numdigits.h: ... here.
* dfp/Makefile: Remove decode-decimal and dpd-private.
* dfp/sysdeps/dfp/dpd/Makefile: New file.
* dfp/sysdeps/unix/sysv/linux/powerpc/Implies: New file.
Index: dfp/sysdeps/dfp/dpd/decode-decimal.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/dfp/dpd/decode-decimal.c 2008-08-15 18:13:30.000000000 +0200
***************
*** 0 ****
--- 1,215 ----
+ /* Functions to print the DPD declets for use with printf %Z
+ Copyright (C) 2006, 2007 IBM Corporation.
+
+ Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
+ Ryan S. Arnold <rsa@xxxxxxxxxx>
+
+ The Decimal Floating Point C Library is free software; you can
+ redistribute it and/or modify it under the terms of the GNU Lesser
+ General Public License version 2.1.
+
+ The Decimal Floating Point C Library is distributed in the hope that
+ it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ the GNU Lesser General Public License version 2.1 for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License version 2.1 along with the Decimal Floating Point C Library;
+ if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+ Suite 330, Boston, MA 02111-1307 USA.
+
+ Please see dfp/COPYING.txt for more information. */
+
+ #include <float.h>
+ #include <math.h>
+ #include <fenv.h>
+ #include <string.h>
+
+ #include <decode-decimal.h>
+ #include "dpd-private.h"
+
+ #undef DEBUG_PRINT
+ #define DEBUG_PRINT 0
+ char * __decoded32 (_Decimal32 a, char * str)
+ {
+ union ieee754r_Decimal32 d;
+ struct ieee754r_c_field c_f;
+ int exp;
+ char sign;
+ char lmd;
+ const char *cc0;
+ const char *cc1;
+ char * after_exp = NULL;
+
+ d.sd = a;
+ if (d.ieee.negative)
+ sign = '-';
+ else
+ sign = '+';
+
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL32_Bias;
+ lmd = '0' + c_f.lmd;
+
+ cc0 = &dpd_to_char[d.ieee.cc0][0];
+ cc1 = &dpd_to_char[d.ieee.cc1][0];
+
+ str[0] = sign;
+ str[1] = lmd;
+ str[2] = ',';
+ __dfp_cpydeclet(&str[3], cc0);
+ str[6] = ',';
+ __dfp_cpydeclet(&str[7], cc1);
+ str[10] = 'E';
+ after_exp = __dfp_exptostr(&str[11], exp);
+ if (after_exp != NULL)
+ *after_exp = '\0';
+
+ return str;
+ }
+ #if defined NOT_IN_libc
+ weak_alias (__decoded32, decoded32)
+ #endif
+ libc_hidden_def(__decoded32)
+
+ char * __decoded64 ( _Decimal64 a, char * str )
+ {
+ union ieee754r_Decimal64 d;
+ struct ieee754r_c_field c_f;
+ int exp, i;
+ char sign;
+ char lmd;
+ const char *cc0;
+ const char *cc1;
+ const char *cc2;
+ const char *cc3;
+ const char *cc4;
+ char * after_exp = NULL;
+
+ d.dd = a;
+ if (d.ieee.negative)
+ sign = '-';
+ else
+ sign = '+';
+
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL64_Bias;
+ lmd = '0' + c_f.lmd;
+
+ cc0 = &dpd_to_char[d.ieee.cc0][0];
+ /* Packed fields crossing a word boundary require special handling. */
+ i = d.ieee.cc1H8 << 2;
+ i = i + d.ieee.cc1L2;
+ cc1 = &dpd_to_char[i][0];
+ cc2 = &dpd_to_char[d.ieee.cc2][0];
+ cc3 = &dpd_to_char[d.ieee.cc3][0];
+ cc4 = &dpd_to_char[d.ieee.cc4][0];
+
+ str[0] = sign;
+ str[1] = lmd;
+ str[2] = ',';
+ __dfp_cpydeclet(&str[3], cc0);
+ str[6] = ',';
+ __dfp_cpydeclet(&str[7], cc1);
+ str[10] = ',';
+ __dfp_cpydeclet(&str[11], cc2);
+ str[14] = ',';
+ __dfp_cpydeclet(&str[15], cc3);
+ str[18] = ',';
+ __dfp_cpydeclet(&str[19], cc4);
+ str[22] = 'E';
+ after_exp = __dfp_exptostr(&str[23], exp);
+ if (after_exp != NULL)
+ *after_exp = '\0';
+
+ return str;
+ }
+ #if defined NOT_IN_libc
+ weak_alias (__decoded64, decoded64)
+ #endif
+ libc_hidden_def(__decoded64)
+
+ char * __decoded128 ( _Decimal128 a, char * str )
+ {
+ union ieee754r_Decimal128 d;
+ struct ieee754r_c_field c_f;
+ int exp;/*, i; */
+ char sign;
+ char lmd;
+ const char *cc0;
+ const char *cc1;
+ const char *cc2;
+ const char *cc3;
+ const char *cc4;
+ const char *cc5;
+ const char *cc6;
+ const char *cc7;
+ const char *cc8;
+ const char *cc9;
+ const char *cc10;
+ char * after_exp = NULL;
+
+ d.td = a;
+ if (d.ieee.negative)
+ sign = '-';
+ else
+ sign = '+';
+
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL128_Bias;
+ lmd = '0' + c_f.lmd;
+
+ cc0 = &dpd_to_char[d.ieee.cc0][0];
+ /* Packed fields crossing a word boundary require special handling. */
+ cc1 = &dpd_to_char[((d.ieee.cc1H4<<6) + d.ieee.cc1L6)][0];
+ cc2 = &dpd_to_char[d.ieee.cc2][0];
+ cc3 = &dpd_to_char[d.ieee.cc3][0];
+ cc4 = &dpd_to_char[((d.ieee.cc4H6<<4) + d.ieee.cc4L4)][0];
+ cc5 = &dpd_to_char[d.ieee.cc5][0];
+ cc6 = &dpd_to_char[d.ieee.cc6][0];
+ cc7 = &dpd_to_char[((d.ieee.cc7H8<<2) + d.ieee.cc7L2)][0];
+ cc8 = &dpd_to_char[d.ieee.cc8][0];
+ cc9 = &dpd_to_char[d.ieee.cc9][0];
+ cc10 = &dpd_to_char[d.ieee.cc10][0];
+
+ str[0] = sign;
+ str[1] = lmd;
+ str[2] = ',';
+ __dfp_cpydeclet(&str[3], cc0);
+ str[6] = ',';
+ __dfp_cpydeclet(&str[7], cc1);
+ str[10] = ',';
+ __dfp_cpydeclet(&str[11], cc2);
+ str[14] = ',';
+ __dfp_cpydeclet(&str[15], cc3);
+ str[18] = ',';
+ __dfp_cpydeclet(&str[19], cc4);
+ str[22] = ',';
+ __dfp_cpydeclet(&str[23], cc5);
+ str[26] = ',';
+ __dfp_cpydeclet(&str[27], cc6);
+ str[30] = ',';
+ __dfp_cpydeclet(&str[31], cc7);
+ str[34] = ',';
+ __dfp_cpydeclet(&str[35], cc8);
+ str[38] = ',';
+ __dfp_cpydeclet(&str[39], cc9);
+ str[42] = ',';
+ __dfp_cpydeclet(&str[43], cc10);
+ str[46] = 'E';
+ after_exp = __dfp_exptostr(&str[47], exp);
+ if (after_exp != NULL)
+ *after_exp = '\0';
+
+ return str;
+ }
+ #if defined NOT_IN_libc
+ weak_alias (__decoded128, decoded128)
+ #endif
+ libc_hidden_def(__decoded128)
Index: dfp/sysdeps/dfp/dpd/dpd-private.c
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/dfp/dpd/dpd-private.c 2008-08-15 18:13:30.000000000 +0200
***************
*** 0 ****
--- 1,820 ----
+ /* Data types for DPD format output.
+
+ Copyright (C) 2006, 2007, 2008 IBM Corporation.
+ Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
+
+ The Decimal Floating Point C Library is free software; you can
+ redistribute it and/or modify it under the terms of the GNU Lesser
+ General Public License version 2.1.
+
+ The Decimal Floating Point C Library is distributed in the hope that
+ it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ the GNU Lesser General Public License version 2.1 for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License version 2.1 along with the Decimal Floating Point C Library;
+ if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+ Suite 330, Boston, MA 02111-1307 USA.
+
+ Please see dfp/COPYING.txt for more information. */
+
+ #include <float.h>
+ #include <math.h>
+ #include <fenv.h>
+ #include <string.h>
+
+ #include "dpd-private.h"
+
+ const struct ieee754r_c_field c_decoder[32] = {
+ {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3}, /* 00000-00011 */
+ {0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7}, /* 00100-00111 */
+ {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3}, /* 01000-01011 */
+ {0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7}, /* 01100-01111 */
+ {0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3}, /* 10000-10011 */
+ {0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7}, /* 10100-10111 */
+ {0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9}, /* 11000-11011 */
+ {0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0} /* 11100-11111 */
+ };
+
+ /* Table to encode the "left most" 2 bits of the biased exponent and the
+ "Left Most Digit" into the "C"ombination field. Indexed by [lmd,lm2bits]. */
+ const unsigned char lm2lmd_to_c[10][3] = {
+ {0x00, 0x08, 0x10},
+ {0x01, 0x09, 0x11},
+ {0x02, 0x0a, 0x12},
+ {0x03, 0x0b, 0x13},
+ {0x04, 0x0c, 0x14},
+ {0x05, 0x0d, 0x15},
+ {0x06, 0x0e, 0x16},
+ {0x07, 0x0f, 0x17},
+ {0x18, 0x1a, 0x1c},
+ {0x19, 0x1b, 0x1d}};
+
+ /* Table to convert 3 Densely Packed Decimal digits (10-bits) into
+ 3 ASCII digits (24-bits, 3 bytes). */
+ const char dpd_to_char[1024][4] = {
+ "000", "001", "002", "003", "004", "005", "006", "007", /* 000-007 */
+ "008", "009", "080", "081", "800", "801", "880", "881", /* 008-00f */
+ "010", "011", "012", "013", "014", "015", "016", "017", /* 010-017 */
+ "018", "019", "090", "091", "810", "811", "890", "891", /* 018-01f */
+ "020", "021", "022", "023", "024", "025", "026", "027", /* 020-027 */
+ "028", "029", "082", "083", "820", "821", "808", "809", /* 028-02f */
+ "030", "031", "032", "033", "034", "035", "036", "037", /* 030-037 */
+ "038", "039", "092", "093", "830", "831", "818", "819", /* 038-03f */
+
+ "040", "041", "042", "043", "044", "045", "046", "047", /* 040-047 */
+ "048", "049", "084", "085", "840", "841", "088", "089", /* 048-04f */
+ "050", "051", "052", "053", "054", "055", "056", "057", /* 050-057 */
+ "058", "059", "094", "095", "850", "851", "098", "099", /* 058-05f */
+ "060", "061", "062", "063", "064", "065", "066", "067", /* 060-067 */
+ "068", "069", "086", "087", "860", "861", "888", "889", /* 068-06f */
+ "070", "071", "072", "073", "074", "075", "076", "077", /* 070-077 */
+ "078", "079", "096", "097", "870", "871", "898", "899", /* 078-07f */
+
+ "100", "101", "102", "103", "104", "105", "106", "107", /* 080-087 */
+ "108", "109", "180", "181", "900", "901", "980", "981", /* 088-08f */
+ "110", "111", "112", "113", "114", "115", "116", "117", /* 090-097 */
+ "118", "119", "190", "191", "910", "911", "990", "991", /* 098-09f */
+ "120", "121", "122", "123", "124", "125", "126", "127", /* 0a0-0a7 */
+ "128", "129", "182", "183", "920", "921", "908", "909", /* 0a8-0af */
+ "130", "131", "132", "133", "134", "135", "136", "137", /* 0b0-0b7 */
+ "138", "139", "192", "193", "930", "931", "918", "919", /* 0b8-0bf */
+
+ "140", "141", "142", "143", "144", "145", "146", "147", /* 0c0-0c7 */
+ "148", "149", "184", "185", "940", "941", "188", "189", /* 0c8-0cf */
+ "150", "151", "152", "153", "154", "155", "156", "157", /* 0d0-0d7 */
+ "158", "159", "194", "195", "950", "951", "198", "199", /* 0d8-0df */
+ "160", "161", "162", "163", "164", "165", "166", "167", /* 0e0-0e7 */
+ "168", "169", "186", "187", "960", "961", "988", "989", /* 0e8-0ef */
+ "170", "171", "172", "173", "174", "175", "176", "177", /* 0f0-0f7 */
+ "178", "179", "196", "197", "970", "971", "998", "999", /* 0f8-0ff */
+
+ "200", "201", "202", "203", "204", "205", "206", "207", /* 100-107 */
+ "208", "209", "280", "281", "802", "803", "882", "883", /* 108-10f */
+ "210", "211", "212", "213", "214", "215", "216", "217", /* 110-117 */
+ "218", "219", "290", "291", "812", "813", "892", "893", /* 118-11f */
+ "220", "221", "222", "223", "224", "225", "226", "227", /* 120-127 */
+ "228", "229", "282", "283", "822", "823", "828", "829", /* 128-12f */
+ "230", "231", "232", "233", "234", "235", "236", "237", /* 130-137 */
+ "238", "239", "292", "293", "832", "833", "838", "839", /* 138-13f */
+
+ "240", "241", "242", "243", "244", "245", "246", "247", /* 140-147 */
+ "248", "249", "284", "285", "842", "843", "288", "289", /* 148-14f */
+ "250", "251", "252", "253", "254", "255", "256", "257", /* 150-157 */
+ "258", "259", "294", "295", "852", "853", "298", "299", /* 158-15f */
+ "260", "261", "262", "263", "264", "265", "266", "267", /* 160-167 */
+ "268", "269", "286", "287", "862", "863", "888", "889", /* 168-16f */
+ "270", "271", "272", "273", "274", "275", "276", "277", /* 170-177 */
+ "278", "279", "296", "297", "872", "873", "898", "899", /* 178-17f */
+
+ "300", "301", "302", "303", "304", "305", "306", "307", /* 180-187 */
+ "308", "309", "380", "381", "902", "903", "982", "983", /* 188-18f */
+ "310", "311", "312", "313", "314", "315", "316", "317", /* 190-197 */
+ "318", "319", "390", "391", "912", "913", "992", "993", /* 198-19f */
+ "320", "321", "322", "323", "324", "325", "326", "327", /* 1a0-1a7 */
+ "328", "329", "382", "383", "922", "923", "928", "929", /* 1a8-1af */
+ "330", "331", "332", "333", "334", "335", "336", "337", /* 1b0-1b7 */
+ "338", "339", "392", "393", "932", "933", "938", "939", /* 1b8-1bf */
+
+ "340", "341", "342", "343", "344", "345", "346", "347", /* 1c0-1c7 */
+ "348", "349", "384", "385", "942", "943", "388", "389", /* 1c8-1cf */
+ "350", "351", "352", "353", "354", "355", "356", "357", /* 1d0-1d7 */
+ "358", "359", "394", "395", "952", "953", "398", "399", /* 1d8-1df */
+ "360", "361", "362", "363", "364", "365", "366", "367", /* 1e0-1e7 */
+ "368", "369", "386", "387", "962", "963", "988", "989", /* 1e8-1ef */
+ "370", "371", "372", "373", "374", "375", "376", "377", /* 1f0-1f7 */
+ "378", "379", "396", "397", "972", "973", "998", "999", /* 1f8-1ff */
+
+ "400", "401", "402", "403", "404", "405", "406", "407", /* 200-207 */
+ "408", "409", "480", "481", "804", "805", "884", "885", /* 208-20f */
+ "410", "411", "412", "413", "414", "415", "416", "417", /* 210-217 */
+ "418", "419", "490", "491", "814", "815", "894", "895", /* 218-21f */
+ "420", "421", "422", "423", "424", "425", "426", "427", /* 220-227 */
+ "428", "429", "482", "483", "824", "825", "848", "849", /* 228-22f */
+ "430", "431", "432", "433", "434", "435", "436", "437", /* 230-237 */
+ "438", "439", "492", "493", "834", "835", "858", "859", /* 238-23f */
+
+ "440", "441", "442", "443", "444", "445", "446", "447", /* 240-247 */
+ "448", "449", "484", "485", "844", "845", "488", "489", /* 248-24f */
+ "450", "451", "452", "453", "454", "455", "456", "457", /* 250-257 */
+ "458", "459", "494", "495", "854", "855", "498", "499", /* 258-25f */
+ "460", "461", "462", "463", "464", "465", "466", "467", /* 260-267 */
+ "468", "469", "486", "487", "864", "865", "888", "889", /* 268-26f */
+ "470", "471", "472", "473", "474", "475", "476", "477", /* 270-277 */
+ "478", "479", "496", "497", "874", "875", "898", "899", /* 278-27f */
+
+ "500", "501", "502", "503", "504", "505", "506", "507", /* 280-287 */
+ "508", "509", "580", "581", "904", "905", "984", "985", /* 288-28f */
+ "510", "511", "512", "513", "514", "515", "516", "517", /* 290-297 */
+ "518", "519", "590", "591", "914", "915", "994", "995", /* 298-29f */
+ "520", "521", "522", "523", "524", "525", "526", "527", /* 2a0-2a7 */
+ "528", "529", "582", "583", "924", "925", "948", "949", /* 2a8-2af */
+ "530", "531", "532", "533", "534", "535", "536", "537", /* 2b0-2b7 */
+ "538", "539", "592", "593", "934", "935", "958", "959", /* 2b8-2bf */
+
+ "540", "541", "542", "543", "544", "545", "546", "547", /* 2c0-2c7 */
+ "548", "549", "584", "585", "944", "945", "588", "589", /* 2c8-2cf */
+ "550", "551", "552", "553", "554", "555", "556", "557", /* 2d0-2d7 */
+ "558", "559", "594", "595", "954", "955", "598", "599", /* 2d8-2df */
+ "560", "561", "562", "563", "564", "565", "566", "567", /* 2e0-2e7 */
+ "568", "569", "586", "587", "964", "965", "988", "989", /* 2e8-2ef */
+ "570", "571", "572", "573", "574", "575", "576", "577", /* 2f0-2f7 */
+ "578", "579", "596", "597", "974", "975", "998", "999", /* 2f8-2ff */
+
+ "600", "601", "602", "603", "604", "605", "606", "607", /* 300-307 */
+ "608", "609", "680", "681", "806", "807", "886", "887", /* 308-30f */
+ "610", "611", "612", "613", "614", "615", "616", "617", /* 310-317 */
+ "618", "619", "690", "691", "816", "817", "896", "897", /* 318-31f */
+ "620", "621", "622", "623", "624", "625", "626", "627", /* 320-327 */
+ "628", "629", "682", "683", "826", "827", "868", "869", /* 328-32f */
+ "630", "631", "632", "633", "634", "635", "636", "637", /* 330-337 */
+ "638", "639", "692", "693", "836", "837", "878", "879", /* 338-33f */
+
+ "640", "641", "642", "643", "644", "645", "646", "647", /* 340-347 */
+ "648", "649", "684", "685", "846", "847", "688", "689", /* 348-34f */
+ "650", "651", "652", "653", "654", "655", "656", "657", /* 350-357 */
+ "658", "659", "694", "695", "856", "857", "698", "699", /* 358-35f */
+ "660", "661", "662", "663", "664", "665", "666", "667", /* 360-367 */
+ "668", "669", "686", "687", "866", "867", "888", "889", /* 368-36f */
+ "670", "671", "672", "673", "674", "675", "676", "677", /* 370-377 */
+ "678", "679", "696", "697", "876", "877", "898", "899", /* 378-37f */
+
+ "700", "701", "702", "703", "704", "705", "706", "707", /* 380-387 */
+ "708", "709", "780", "781", "906", "907", "986", "987", /* 388-38f */
+ "710", "711", "712", "713", "714", "715", "716", "717", /* 390-397 */
+ "718", "719", "790", "791", "916", "917", "996", "997", /* 398-39f */
+ "720", "721", "722", "723", "724", "725", "726", "727", /* 3a0-3a7 */
+ "728", "729", "782", "783", "926", "927", "968", "969", /* 3a8-3af */
+ "730", "731", "732", "733", "734", "735", "736", "737", /* 3b0-3b7 */
+ "738", "739", "792", "793", "936", "937", "978", "979", /* 3b8-3bf */
+
+ "740", "741", "742", "743", "744", "745", "746", "747", /* 3c0-3c7 */
+ "748", "749", "784", "785", "946", "947", "788", "789", /* 3c8-3cf */
+ "750", "751", "752", "753", "754", "755", "756", "757", /* 3d0-3d7 */
+ "758", "759", "794", "795", "956", "957", "798", "799", /* 3d8-3df */
+ "760", "761", "762", "763", "764", "765", "766", "767", /* 3e0-3e7 */
+ "768", "769", "786", "787", "966", "967", "988", "989", /* 3e8-3ef */
+ "770", "771", "772", "773", "974", "775", "776", "777", /* 3f0-3f7 */
+ "778", "779", "796", "797", "976", "977", "998", "999" /* 3f8-3ff */
+ };
+
+ /* Table to convert 3 Densely Packed Decimal digits (10-bits) into
+ 3 Binary coded Decimal digits (12-bits). */
+ const short int dpd_to_bcd[1024] = {
+ 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
+ 0x008, 0x009, 0x080, 0x081, 0x800, 0x801, 0x880, 0x881, /* 008-00f */
+ 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
+ 0x018, 0x019, 0x090, 0x091, 0x810, 0x811, 0x890, 0x891, /* 018-01f */
+ 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
+ 0x028, 0x029, 0x082, 0x083, 0x820, 0x821, 0x808, 0x809, /* 028-02f */
+ 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
+ 0x038, 0x039, 0x092, 0x093, 0x830, 0x831, 0x818, 0x819, /* 038-03f */
+
+ 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
+ 0x048, 0x049, 0x084, 0x085, 0x840, 0x841, 0x088, 0x089, /* 048-04f */
+ 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
+ 0x058, 0x059, 0x094, 0x095, 0x850, 0x851, 0x098, 0x099, /* 058-05f */
+ 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
+ 0x068, 0x069, 0x086, 0x087, 0x860, 0x861, 0x888, 0x889, /* 068-06f */
+ 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
+ 0x078, 0x079, 0x096, 0x097, 0x870, 0x871, 0x898, 0x899, /* 078-07f */
+
+ 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 080-087 */
+ 0x108, 0x109, 0x180, 0x181, 0x900, 0x901, 0x980, 0x981, /* 088-08f */
+ 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 090-097 */
+ 0x118, 0x119, 0x190, 0x191, 0x910, 0x911, 0x990, 0x991, /* 098-09f */
+ 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 0a0-0a7 */
+ 0x128, 0x129, 0x182, 0x183, 0x920, 0x921, 0x908, 0x909, /* 0a8-0af */
+ 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 0b0-0b7 */
+ 0x138, 0x139, 0x192, 0x193, 0x930, 0x931, 0x918, 0x919, /* 0b8-0bf */
+
+ 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 0c0-0c7 */
+ 0x148, 0x149, 0x184, 0x185, 0x940, 0x941, 0x188, 0x189, /* 0c8-0cf */
+ 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 0d0-0d7 */
+ 0x158, 0x159, 0x194, 0x195, 0x950, 0x951, 0x198, 0x199, /* 0d8-0df */
+ 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 0e0-0e7 */
+ 0x168, 0x169, 0x186, 0x187, 0x960, 0x961, 0x988, 0x989, /* 0e8-0ef */
+ 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 0f0-0f7 */
+ 0x178, 0x179, 0x196, 0x197, 0x970, 0x971, 0x998, 0x999, /* 0f8-0ff */
+
+ 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 100-107 */
+ 0x208, 0x209, 0x280, 0x281, 0x802, 0x803, 0x882, 0x883, /* 108-10f */
+ 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 110-117 */
+ 0x218, 0x219, 0x290, 0x291, 0x812, 0x813, 0x892, 0x893, /* 118-11f */
+ 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 120-127 */
+ 0x228, 0x229, 0x282, 0x283, 0x822, 0x823, 0x828, 0x829, /* 128-12f */
+ 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 130-137 */
+ 0x238, 0x239, 0x292, 0x293, 0x832, 0x833, 0x838, 0x839, /* 138-13f */
+
+ 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 140-147 */
+ 0x248, 0x249, 0x284, 0x285, 0x842, 0x843, 0x288, 0x289, /* 148-14f */
+ 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 150-157 */
+ 0x258, 0x259, 0x294, 0x295, 0x852, 0x853, 0x298, 0x299, /* 158-15f */
+ 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 160-167 */
+ 0x268, 0x269, 0x286, 0x287, 0x862, 0x863, 0x888, 0x889, /* 168-16f */
+ 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 170-177 */
+ 0x278, 0x279, 0x296, 0x297, 0x872, 0x873, 0x898, 0x899, /* 178-17f */
+
+ 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 180-187 */
+ 0x308, 0x309, 0x380, 0x381, 0x902, 0x903, 0x982, 0x983, /* 188-18f */
+ 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 190-197 */
+ 0x318, 0x319, 0x390, 0x391, 0x912, 0x913, 0x992, 0x993, /* 198-19f */
+ 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 1a0-1a7 */
+ 0x328, 0x329, 0x382, 0x383, 0x922, 0x923, 0x928, 0x929, /* 1a8-1af */
+ 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 1b0-1b7 */
+ 0x338, 0x339, 0x392, 0x393, 0x932, 0x933, 0x938, 0x939, /* 1b8-1bf */
+
+ 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 1c0-1c7 */
+ 0x348, 0x349, 0x384, 0x385, 0x942, 0x943, 0x388, 0x389, /* 1c8-1cf */
+ 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 1d0-1d7 */
+ 0x358, 0x359, 0x394, 0x395, 0x952, 0x953, 0x398, 0x399, /* 1d8-1df */
+ 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 1e0-1e7 */
+ 0x368, 0x369, 0x386, 0x387, 0x962, 0x963, 0x988, 0x989, /* 1e8-1ef */
+ 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 1f0-1f7 */
+ 0x378, 0x379, 0x396, 0x397, 0x972, 0x973, 0x998, 0x999, /* 1f8-1ff */
+
+ 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, /* 200-207 */
+ 0x408, 0x409, 0x480, 0x481, 0x804, 0x805, 0x884, 0x885, /* 208-20f */
+ 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, /* 210-217 */
+ 0x418, 0x419, 0x490, 0x491, 0x814, 0x815, 0x894, 0x895, /* 218-21f */
+ 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, /* 220-227 */
+ 0x428, 0x429, 0x482, 0x483, 0x824, 0x825, 0x848, 0x849, /* 228-22f */
+ 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, /* 230-237 */
+ 0x438, 0x439, 0x492, 0x493, 0x834, 0x835, 0x858, 0x859, /* 238-23f */
+
+ 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, /* 240-247 */
+ 0x448, 0x449, 0x484, 0x485, 0x844, 0x845, 0x488, 0x489, /* 248-24f */
+ 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, /* 250-257 */
+ 0x458, 0x459, 0x494, 0x495, 0x854, 0x855, 0x498, 0x499, /* 258-25f */
+ 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, /* 260-267 */
+ 0x468, 0x469, 0x486, 0x487, 0x864, 0x865, 0x888, 0x889, /* 268-26f */
+ 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, /* 270-277 */
+ 0x478, 0x479, 0x496, 0x497, 0x874, 0x875, 0x898, 0x899, /* 278-27f */
+
+ 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, /* 280-287 */
+ 0x508, 0x509, 0x580, 0x581, 0x904, 0x905, 0x984, 0x985, /* 288-28f */
+ 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, /* 290-297 */
+ 0x518, 0x519, 0x590, 0x591, 0x914, 0x915, 0x994, 0x995, /* 298-29f */
+ 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, /* 2a0-2a7 */
+ 0x528, 0x529, 0x582, 0x583, 0x924, 0x925, 0x948, 0x949, /* 2a8-2af */
+ 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, /* 2b0-2b7 */
+ 0x538, 0x539, 0x592, 0x593, 0x934, 0x935, 0x958, 0x959, /* 2b8-2bf */
+
+ 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, /* 2c0-2c7 */
+ 0x548, 0x549, 0x584, 0x585, 0x944, 0x945, 0x588, 0x589, /* 2c8-2cf */
+ 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, /* 2d0-2d7 */
+ 0x558, 0x559, 0x594, 0x595, 0x954, 0x955, 0x598, 0x599, /* 2d8-2df */
+ 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, /* 2e0-2e7 */
+ 0x568, 0x569, 0x586, 0x587, 0x964, 0x965, 0x988, 0x989, /* 2e8-2ef */
+ 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, /* 2f0-2f7 */
+ 0x578, 0x579, 0x596, 0x597, 0x974, 0x975, 0x998, 0x999, /* 2f8-2ff */
+
+ 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, /* 300-307 */
+ 0x608, 0x609, 0x680, 0x681, 0x806, 0x807, 0x886, 0x887, /* 308-30f */
+ 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, /* 310-317 */
+ 0x618, 0x619, 0x690, 0x691, 0x816, 0x817, 0x896, 0x897, /* 318-31f */
+ 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, /* 320-327 */
+ 0x628, 0x629, 0x682, 0x683, 0x826, 0x827, 0x868, 0x869, /* 328-32f */
+ 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, /* 330-337 */
+ 0x638, 0x639, 0x692, 0x693, 0x836, 0x837, 0x878, 0x879, /* 338-33f */
+
+ 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, /* 340-347 */
+ 0x648, 0x649, 0x684, 0x685, 0x846, 0x847, 0x688, 0x689, /* 348-34f */
+ 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, /* 350-357 */
+ 0x658, 0x659, 0x694, 0x695, 0x856, 0x857, 0x698, 0x699, /* 358-35f */
+ 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, /* 360-367 */
+ 0x668, 0x669, 0x686, 0x687, 0x866, 0x867, 0x888, 0x889, /* 368-36f */
+ 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, /* 370-377 */
+ 0x678, 0x679, 0x696, 0x697, 0x876, 0x877, 0x898, 0x899, /* 378-37f */
+
+ 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, /* 380-387 */
+ 0x708, 0x709, 0x780, 0x781, 0x906, 0x907, 0x986, 0x987, /* 388-38f */
+ 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, /* 390-397 */
+ 0x718, 0x719, 0x790, 0x791, 0x916, 0x917, 0x996, 0x997, /* 398-39f */
+ 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, /* 3a0-3a7 */
+ 0x728, 0x729, 0x782, 0x783, 0x926, 0x927, 0x968, 0x969, /* 3a8-3af */
+ 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, /* 3b0-3b7 */
+ 0x738, 0x739, 0x792, 0x793, 0x936, 0x937, 0x978, 0x979, /* 3b8-3bf */
+
+ 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, /* 3c0-3c7 */
+ 0x748, 0x749, 0x784, 0x785, 0x946, 0x947, 0x788, 0x789, /* 3c8-3cf */
+ 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, /* 3d0-3d7 */
+ 0x758, 0x759, 0x794, 0x795, 0x956, 0x957, 0x798, 0x799, /* 3d8-3df */
+ 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, /* 3e0-3e7 */
+ 0x768, 0x769, 0x786, 0x787, 0x966, 0x967, 0x988, 0x989, /* 3e8-3ef */
+ 0x770, 0x771, 0x772, 0x773, 0x974, 0x775, 0x776, 0x777, /* 3f0-3f7 */
+ 0x778, 0x779, 0x796, 0x797, 0x976, 0x977, 0x998, 0x999 /* 3f8-3ff */
+ };
+
+ /* Table to convert 3 Binary Coded Decimal digits (12-bits) into
+ 3 Densely Packed Decimal digits (10-bits). */
+ const short int bcd_to_dpd[2464] = {
+ 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
+ 0x008, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 008-00f */
+ 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
+ 0x018, 0x019, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 018-01f */
+ 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
+ 0x028, 0x029, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 028-02f */
+ 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
+ 0x038, 0x039, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 038-03f */
+ 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
+ 0x048, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 048-04f */
+ 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
+ 0x058, 0x059, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 058-05f */
+ 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
+ 0x068, 0x069, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 068-06f */
+ 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
+ 0x078, 0x079, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 078-07f */
+ 0x00a, 0x00b, 0x02a, 0x02b, 0x04a, 0x04b, 0x06a, 0x06b, /* 080-087 */
+ 0x04e, 0x04f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 088-08f */
+ 0x01a, 0x01b, 0x03a, 0x03b, 0x05a, 0x05b, 0x07a, 0x07b, /* 090-097 */
+ 0x05e, 0x05f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 098-09f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a0-0a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a8-0af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b0-0b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b8-0bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c0-0c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c8-0cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d0-0d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d8-0df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e0-0e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e8-0ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f0-0f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f8-0ff */
+ 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, /* 100-107 */
+ 0x088, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 108-10f */
+ 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, /* 110-117 */
+ 0x098, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 118-11f */
+ 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, /* 120-127 */
+ 0x0a8, 0x0a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 128-12f */
+ 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, /* 130-137 */
+ 0x0b8, 0x0b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 138-13f */
+ 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, /* 140-147 */
+ 0x0c8, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 148-14f */
+ 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, /* 150-157 */
+ 0x0d8, 0x0d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 158-15f */
+ 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, /* 160-167 */
+ 0x0e8, 0x0e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 168-16f */
+ 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, /* 170-177 */
+ 0x0f8, 0x0f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 178-17f */
+ 0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca, 0x0cb, 0x0ea, 0x0eb, /* 180-187 */
+ 0x0ce, 0x0cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 188-18f */
+ 0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da, 0x0db, 0x0fa, 0x0fb, /* 190-197 */
+ 0x0de, 0x0df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 198-19f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a0-1a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a8-1af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b0-1b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b8-1bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c0-1c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c8-1cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d0-1d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d8-1df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e0-1e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e8-1ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f0-1f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f8-1ff */
+ 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 200-207 */
+ 0x108, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 208-20f */
+ 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 210-217 */
+ 0x118, 0x119, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 218-21f */
+ 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 220-227 */
+ 0x128, 0x129, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 228-22f */
+ 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 230-237 */
+ 0x138, 0x139, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 238-23f */
+ 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 240-247 */
+ 0x148, 0x149, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 248-24f */
+ 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 250-257 */
+ 0x158, 0x159, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 258-25f */
+ 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 260-267 */
+ 0x168, 0x169, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 268-26f */
+ 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 270-277 */
+ 0x178, 0x179, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 278-27f */
+ 0x10a, 0x10b, 0x12a, 0x12b, 0x14a, 0x14b, 0x16a, 0x16b, /* 280-287 */
+ 0x14e, 0x14f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 288-28f */
+ 0x11a, 0x11b, 0x13a, 0x13b, 0x15a, 0x15b, 0x17a, 0x17b, /* 290-297 */
+ 0x15e, 0x15f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 298-29f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a0-2a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a8-2af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b0-2b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b8-2bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c0-2c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c8-2cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d0-2d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d8-2df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e0-2e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e8-2ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f0-2f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f8-2ff */
+ 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, /* 300-307 */
+ 0x188, 0x189, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 308-30f */
+ 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, /* 310-317 */
+ 0x198, 0x199, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 318-31f */
+ 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, /* 320-327 */
+ 0x1a8, 0x1a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 328-32f */
+ 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, /* 330-337 */
+ 0x1b8, 0x1b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 338-33f */
+ 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, /* 340-347 */
+ 0x1c8, 0x1c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 348-34f */
+ 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, /* 350-357 */
+ 0x1d8, 0x1d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 358-35f */
+ 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, /* 360-367 */
+ 0x1e8, 0x1e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 368-36f */
+ 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, /* 370-377 */
+ 0x1f8, 0x1f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 378-37f */
+ 0x18a, 0x18b, 0x1aa, 0x1ab, 0x1ca, 0x1cb, 0x1ea, 0x1eb, /* 380-387 */
+ 0x1ce, 0x1cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 388-38f */
+ 0x19a, 0x19b, 0x1ba, 0x1bb, 0x1da, 0x1db, 0x1fa, 0x1fb, /* 390-397 */
+ 0x1de, 0x1df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 398-39f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a0-3a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a8-3af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b0-3b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b8-3bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c0-3c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c8-3cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d0-3d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d8-3df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e0-3e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e8-3ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f0-3f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f8-3ff */
+ 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 400-407 */
+ 0x208, 0x209, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 408-40f */
+ 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 410-417 */
+ 0x218, 0x219, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 418-41f */
+ 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 420-427 */
+ 0x228, 0x229, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 428-42f */
+ 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 430-437 */
+ 0x238, 0x239, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 438-43f */
+ 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 440-447 */
+ 0x248, 0x249, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 448-44f */
+ 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 450-457 */
+ 0x258, 0x259, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 458-45f */
+ 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 460-467 */
+ 0x268, 0x269, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 468-46f */
+ 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 470-477 */
+ 0x278, 0x279, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 478-47f */
+ 0x20a, 0x20b, 0x22a, 0x22b, 0x24a, 0x24b, 0x26a, 0x26b, /* 480-487 */
+ 0x24e, 0x24f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 488-48f */
+ 0x21a, 0x21b, 0x23a, 0x23b, 0x25a, 0x25b, 0x27a, 0x27b, /* 490-497 */
+ 0x25e, 0x25f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 498-49f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a0-4a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a8-4af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b0-4b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b8-4bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c0-4c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c8-4cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d0-4d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d8-4df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e0-4e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e8-4ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f0-4f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f8-4ff */
+ 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, /* 500-507 */
+ 0x288, 0x289, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 508-50f */
+ 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, /* 510-517 */
+ 0x298, 0x299, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 518-51f */
+ 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, /* 520-527 */
+ 0x2a8, 0x2a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 528-52f */
+ 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, /* 530-537 */
+ 0x2b8, 0x2b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 538-53f */
+ 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, /* 540-547 */
+ 0x2c8, 0x2c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 548-54f */
+ 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, /* 550-557 */
+ 0x2d8, 0x2d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 558-55f */
+ 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, /* 560-567 */
+ 0x2e8, 0x2e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 568-56f */
+ 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, /* 570-577 */
+ 0x2f8, 0x2f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 578-57f */
+ 0x28a, 0x28b, 0x2aa, 0x2ab, 0x2ca, 0x2cb, 0x2ea, 0x2eb, /* 580-587 */
+ 0x2ce, 0x2cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 588-58f */
+ 0x29a, 0x29b, 0x2ba, 0x2bb, 0x2da, 0x2db, 0x2fa, 0x2fb, /* 590-597 */
+ 0x2de, 0x2df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 598-59f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a0-5a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a8-5af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b0-5b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b8-5bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c0-5c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c8-5cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d0-5d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d8-5df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e0-5e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e8-5ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f0-5f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f8-5ff */
+ 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 600-607 */
+ 0x308, 0x309, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 608-60f */
+ 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 610-617 */
+ 0x318, 0x319, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 618-61f */
+ 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 620-627 */
+ 0x328, 0x329, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 628-62f */
+ 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 630-637 */
+ 0x338, 0x339, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 638-63f */
+ 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 640-647 */
+ 0x348, 0x349, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 648-64f */
+ 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 650-657 */
+ 0x358, 0x359, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 658-65f */
+ 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 660-667 */
+ 0x368, 0x369, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 668-66f */
+ 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 670-677 */
+ 0x378, 0x379, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 678-67f */
+ 0x30a, 0x30b, 0x32a, 0x32b, 0x34a, 0x34b, 0x36a, 0x36b, /* 680-687 */
+ 0x34e, 0x34f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 688-68f */
+ 0x31a, 0x31b, 0x33a, 0x33b, 0x35a, 0x35b, 0x37a, 0x37b, /* 690-697 */
+ 0x35e, 0x35f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 698-69f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a0-6a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a8-6af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b0-6b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b8-6bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c0-6c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c8-6cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d0-6d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d8-6df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e0-6e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e8-6ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f0-6f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f8-6ff */
+ 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, /* 700-707 */
+ 0x388, 0x389, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 708-70f */
+ 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, /* 710-717 */
+ 0x398, 0x399, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 718-71f */
+ 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, /* 720-727 */
+ 0x3a8, 0x3a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 728-72f */
+ 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, /* 730-737 */
+ 0x3b8, 0x3b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 738-73f */
+ 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, /* 740-747 */
+ 0x3c8, 0x3c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 748-74f */
+ 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, /* 750-757 */
+ 0x3d8, 0x3d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 758-75f */
+ 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, /* 760-767 */
+ 0x3e8, 0x3e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 768-76f */
+ 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x000, 0x3f5, 0x3f6, 0x3f7, /* 770-777 */
+ 0x3f8, 0x3f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 778-77f */
+ 0x38a, 0x38b, 0x3aa, 0x3ab, 0x3ca, 0x3cb, 0x3ea, 0x3eb, /* 780-787 */
+ 0x3ce, 0x3cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 788-78f */
+ 0x39a, 0x39b, 0x3ba, 0x3bb, 0x3da, 0x3db, 0x3fa, 0x3fb, /* 790-797 */
+ 0x3de, 0x3df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 798-79f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a0-7a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a8-7af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b0-7b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b8-7bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c0-7c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c8-7cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d0-7d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d8-7df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e0-7e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e8-7ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f0-7f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f8-7ff */
+ 0x00c, 0x00d, 0x10c, 0x10d, 0x20c, 0x20d, 0x30c, 0x30d, /* 800-807 */
+ 0x02e, 0x02f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 808-80f */
+ 0x01c, 0x01d, 0x11c, 0x11d, 0x21c, 0x21d, 0x31c, 0x31d, /* 810-817 */
+ 0x03e, 0x03f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 818-81f */
+ 0x02c, 0x02d, 0x12c, 0x12d, 0x22c, 0x22d, 0x32c, 0x32d, /* 820-827 */
+ 0x12e, 0x12f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 828-82f */
+ 0x03c, 0x03d, 0x13c, 0x13d, 0x23c, 0x23d, 0x33c, 0x33d, /* 830-837 */
+ 0x13e, 0x13f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 838-83f */
+ 0x04c, 0x04d, 0x14c, 0x14d, 0x24c, 0x24d, 0x34c, 0x34d, /* 840-847 */
+ 0x22e, 0x22f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 848-84f */
+ 0x05c, 0x05d, 0x15c, 0x15d, 0x25c, 0x25d, 0x35c, 0x35d, /* 850-857 */
+ 0x23e, 0x23f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 858-85f */
+ 0x06c, 0x06d, 0x16c, 0x16d, 0x26c, 0x26d, 0x36c, 0x36d, /* 860-867 */
+ 0x32e, 0x32f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 868-86f */
+ 0x07c, 0x07d, 0x17c, 0x17d, 0x27c, 0x27d, 0x37c, 0x37d, /* 870-877 */
+ 0x33e, 0x33f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 878-87f */
+ 0x00e, 0x00f, 0x10e, 0x10f, 0x20e, 0x20f, 0x30e, 0x30f, /* 880-887 */
+ 0x06e, 0x06f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 888-88f */
+ 0x01e, 0x01f, 0x11e, 0x11f, 0x21e, 0x21f, 0x31e, 0x31f, /* 890-897 */
+ 0x07e, 0x07f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 898-89f */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a0-8a7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a8-8af */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b0-8b7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b8-8bf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c0-8c7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c8-8cf */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d0-8d7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d8-8df */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e0-8e7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e8-8ef */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f0-8f7 */
+ 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f8-8ff */
+ 0x08c, 0x08d, 0x18c, 0x18d, 0x28c, 0x28d, 0x38c, 0x38d, /* 900-907 */
+ 0x0ae, 0x0af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 908-90f */
+ 0x09c, 0x09d, 0x19c, 0x19d, 0x29c, 0x29d, 0x39c, 0x39d, /* 910-917 */
+ 0x0be, 0x0bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 918-91f */
+ 0x0ac, 0x0ad, 0x1ac, 0x1ad, 0x2ac, 0x2ad, 0x3ac, 0x3ad, /* 920-927 */
+ 0x1ae, 0x1af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 928-92f */
+ 0x0bc, 0x0bd, 0x1bc, 0x1bd, 0x2bc, 0x2bd, 0x3bc, 0x3bd, /* 930-937 */
+ 0x1be, 0x1bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 938-93f */
+ 0x0cc, 0x0cd, 0x1cc, 0x1cd, 0x2cc, 0x2cd, 0x3cc, 0x3cd, /* 940-947 */
+ 0x2ae, 0x2af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 948-94f */
+ 0x0dc, 0x0dd, 0x1dc, 0x1dd, 0x2dc, 0x2dd, 0x3dc, 0x3dd, /* 950-957 */
+ 0x2be, 0x2bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 958-95f */
+ 0x0ec, 0x0ed, 0x1ec, 0x1ed, 0x2ec, 0x2ed, 0x3ec, 0x3ed, /* 960-967 */
+ 0x3ae, 0x3af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 968-96f */
+ 0x0fc, 0x0fd, 0x1fc, 0x1fd, 0x3f4, 0x2fd, 0x3fc, 0x3fd, /* 970-977 */
+ 0x3be, 0x3bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 978-97f */
+ 0x08e, 0x08f, 0x18e, 0x18f, 0x28e, 0x28f, 0x38e, 0x38f, /* 980-987 */
+ 0x0ee, 0x0ef, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 988-98f */
+ 0x09e, 0x09f, 0x19e, 0x19f, 0x29e, 0x29f, 0x39e, 0x39f, /* 990-997 */
+ 0x0fe, 0x0ff, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 998-99f */
+
+ };
+
+ void
+ __get_dpd_digits (int bits, const void *const *args,
+ char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p)
+ {
+
+ int exp;
+ struct ieee754r_c_field c_f;
+ if (bits == 32)
+ {
+ union ieee754r_Decimal32 d;
+ d.sd = *(_Decimal32*)args[0];
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL32_Bias;
+
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
+ str[7] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ }
+ else if (bits == 64)
+ {
+ union ieee754r_Decimal64 d;
+ d.dd = *(_Decimal64*)args[0];
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL64_Bias;
+
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ /* Packed fields crossing a word boundary require special handling. */
+ __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
+ __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+ __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+ __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
+ str[16] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ }
+ else if (bits == 128)
+ {
+ union ieee754r_Decimal128 d;
+ d.td = *(_Decimal128*)args[0];
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL128_Bias;
+
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ /* Packed fields crossing a word boundary require special handling. */
+ __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
+ __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+ __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+ __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
+ __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
+ __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
+ __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
+ __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
+ __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
+ __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
+ str[34] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ }
+
+ str[0] = '0' + c_f.lmd;
+ if (exp_p) *exp_p = exp;
+ if (nan_p) *nan_p = c_f.is_nan;
+ if (inf_p) *inf_p = c_f.is_inf;
+
+ }
+
+ void
+ __get_digits_d32 (_Decimal32 x, char *str, int *exp_p, int *sign_p,
+ int *nan_p, int *inf_p)
+ {
+ int exp;
+ struct ieee754r_c_field c_f;
+ union ieee754r_Decimal32 d;
+ d.sd = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL32_Bias;
+
+ str[0] = '0' + c_f.lmd;
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
+ str[7] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ if (exp_p) *exp_p = exp;
+ if (nan_p) *nan_p = c_f.is_nan;
+ if (inf_p) *inf_p = c_f.is_inf;
+
+ }
+
+ void
+ __get_digits_d64 (_Decimal64 x, char *str, int *exp_p, int *sign_p,
+ int *nan_p, int *inf_p)
+ {
+ int exp;
+ struct ieee754r_c_field c_f;
+ union ieee754r_Decimal64 d;
+ d.dd = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL64_Bias;
+
+ str[0] = '0' + c_f.lmd;
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ /* Packed fields crossing a word boundary require special handling. */
+ __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
+ __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+ __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+ __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
+ str[16] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ if (exp_p) *exp_p = exp;
+ if (nan_p) *nan_p = c_f.is_nan;
+ if (inf_p) *inf_p = c_f.is_inf;
+
+ }
+
+ void
+ __get_digits_d128 (_Decimal128 x, char *str, int *exp_p, int *sign_p,
+ int *nan_p, int *inf_p)
+ {
+ int exp;
+ struct ieee754r_c_field c_f;
+ union ieee754r_Decimal128 d;
+ d.td = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL128_Bias;
+
+ str[0] = '0' + c_f.lmd;
+ __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
+ /* Packed fields crossing a word boundary require special handling. */
+ __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
+ __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
+ __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
+ __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
+ __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
+ __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
+ __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
+ __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
+ __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
+ __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
+ str[34] = '\0';
+ if (sign_p) *sign_p = d.ieee.negative;
+ if (exp_p) *exp_p = exp;
+ if (nan_p) *nan_p = c_f.is_nan;
+ if (inf_p) *inf_p = c_f.is_inf;
+
+ }
+
Index: dfp/sysdeps/dfp/dpd/dpd-private.h
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/dfp/dpd/dpd-private.h 2008-08-15 18:13:31.000000000 +0200
***************
*** 0 ****
--- 1,309 ----
+ /* Data types for DPD format output.
+
+ Copyright (C) 2006, 2007 IBM Corporation.
+ Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
+
+ The Decimal Floating Point C Library is free software; you can
+ redistribute it and/or modify it under the terms of the GNU Lesser
+ General Public License version 2.1.
+
+ The Decimal Floating Point C Library is distributed in the hope that
+ it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ the GNU Lesser General Public License version 2.1 for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License version 2.1 along with the Decimal Floating Point C Library;
+ if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+ Suite 330, Boston, MA 02111-1307 USA.
+
+ Please see dfp/COPYING.txt for more information. */
+
+ #ifndef _DPD_PRIVATE_H
+ #define _DPD_PRIVATE_H 1
+
+ #include <endian.h>
+
+ /* copy the declet in the 'declet' param to the string in the 'str' param. */
+ static inline void __dfp_cpydeclet(char * str, const char * declet)
+ {
+ str[0] = declet[0];
+ str[1] = declet[1];
+ str[2] = declet[2];
+ }
+
+ /* Basically itoa */
+ static inline char* __dfp_exptostr(char *str, int val)
+ {
+ int digit;
+ if (val < 0)
+ {
+ *str++ = '-';
+ val = -val;
+ } else {
+ *str++ = '+';
+ }
+
+ if (val > 999)
+ {
+ digit = val / 1000;
+ val %= 1000;
+ *str++ = '0' + digit;
+ digit = val / 100;
+ val %= 100;
+ *str++ = '0' + digit;
+ digit = val / 10;
+ val %= 10;
+ *str++ = '0' + digit;
+ } else if (val > 99)
+ {
+ digit = val / 100;
+ val %= 100;
+ *str++ = '0' + digit;
+ digit = val / 10;
+ val %= 10;
+ *str++ = '0' + digit;
+ } else if (val > 9)
+ {
+ digit = val / 10;
+ val %= 10;
+ *str++ = '0' + digit;
+ }
+ *str++ = '0' + val;
+
+ return str;
+ }
+
+ union ieee754r_Decimal32
+ {
+ _Decimal32 sd;
+ unsigned int si;
+
+ /* This is the IEEE754r single-precision format. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int bec:6;
+ unsigned int cc0:10;
+ unsigned int cc1:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc1:10;
+ unsigned int cc0:10;
+ unsigned int bec:6;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee;
+
+ /* This format makes it easier to see if a NaN is a signalling NaN. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int signaling_nan:1;
+ unsigned int bec:5;
+ unsigned int cc0:10;
+ unsigned int cc1:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc1:10;
+ unsigned int cc0:10;
+ unsigned int bec:5;
+ unsigned int signaling_nan:1;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee_nan;
+ };
+
+ #define DECIMAL32_Bias 101 /* bias for the exponent */
+ #define DECIMAL32_BEC_bits 6 /* Bits in BEC */
+ #define DECIMAL32_CC_bits 20 /* Bits in CC */
+
+ union ieee754r_Decimal64
+ {
+ _Decimal64 dd;
+ unsigned int di[2];
+
+ /* This is the IEEE754r _Decimal64 format. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int bec:8;
+ unsigned int cc0:10;
+ unsigned int cc1H8:8;
+ unsigned int cc1L2:2;
+ unsigned int cc2:10;
+ unsigned int cc3:10;
+ unsigned int cc4:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc4:10;
+ unsigned int cc3:10;
+ unsigned int cc2:10;
+ unsigned int cc1L2:2;
+ unsigned int cc1H8:8;
+ unsigned int cc0:10;
+ unsigned int bec:8;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee;
+
+ /* This format makes it easier to see if a NaN is a signalling NaN. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int signaling_nan:1;
+ unsigned int bec:7;
+ unsigned int cc0:10;
+ unsigned int cc1H8:8;
+ unsigned int cc1L2:2;
+ unsigned int cc2:10;
+ unsigned int cc3:10;
+ unsigned int cc4:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc4:10;
+ unsigned int cc3:10;
+ unsigned int cc2:10;
+ unsigned int cc1L2:2;
+ unsigned int cc1H8:8;
+ unsigned int cc0:10;
+ unsigned int bec:7;
+ unsigned int signaling_nan:1;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee_nan;
+ };
+
+ #define DECIMAL64_Bias 398 /* bias for the exponent */
+ #define DECIMAL64_BEC_bits 8 /* Bits in BEC */
+ #define DECIMAL64_CC_bits 50 /* Bits in CC */
+
+ union ieee754r_Decimal128
+ {
+ _Decimal128 td;
+ unsigned int ti[4];
+
+ /* This is the IEEE754r _Decimal128 format. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int bec:12;
+ unsigned int cc0:10;
+ unsigned int cc1H4:4;
+ unsigned int cc1L6:6;
+ unsigned int cc2:10;
+ unsigned int cc3:10;
+ unsigned int cc4H6:6;
+ unsigned int cc4L4:4;
+ unsigned int cc5:10;
+ unsigned int cc6:10;
+ unsigned int cc7H8:8;
+ unsigned int cc7L2:2;
+ unsigned int cc8:10;
+ unsigned int cc9:10;
+ unsigned int cc10:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc10:10;
+ unsigned int cc9:10;
+ unsigned int cc8:10;
+ unsigned int cc7L2:2;
+ unsigned int cc7H8:8;
+ unsigned int cc6:10;
+ unsigned int cc5:10;
+ unsigned int cc4L4:4;
+ unsigned int cc4H6:6;
+ unsigned int cc3:10;
+ unsigned int cc2:10;
+ unsigned int cc1L6:6;
+ unsigned int cc1H4:4;
+ unsigned int cc0:10;
+ unsigned int bec:12;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee;
+
+ /* This format makes it easier to see if a NaN is a signalling NaN. */
+ struct
+ {
+ #if __BYTE_ORDER == __BIG_ENDIAN
+ unsigned int negative:1;
+ unsigned int c:5;
+ unsigned int signaling_nan:1;
+ unsigned int bec:11;
+ unsigned int cc0:10;
+ unsigned int cc1H4:4;
+ unsigned int cc1L6:6;
+ unsigned int cc2:10;
+ unsigned int cc3:10;
+ unsigned int cc4H6:6;
+ unsigned int cc4L4:4;
+ unsigned int cc5:10;
+ unsigned int cc6:10;
+ unsigned int cc7H8:8;
+ unsigned int cc7L2:2;
+ unsigned int cc8:10;
+ unsigned int cc9:10;
+ unsigned int cc10:10;
+ #endif /* Big endian. */
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ unsigned int cc10:10;
+ unsigned int cc9:10;
+ unsigned int cc8:10;
+ unsigned int cc7L2:2;
+ unsigned int cc7H8:8;
+ unsigned int cc6:10;
+ unsigned int cc5:10;
+ unsigned int cc4L4:4;
+ unsigned int cc4H6:6;
+ unsigned int cc3:10;
+ unsigned int cc2:10;
+ unsigned int cc1L6:6;
+ unsigned int cc1H4:4;
+ unsigned int cc0:10;
+ unsigned int bec:11;
+ unsigned int signaling_nan:1;
+ unsigned int c:5;
+ unsigned int negative:1;
+ #endif /* Little endian. */
+ } ieee_nan;
+ };
+
+ #define DECIMAL128_Bias 6176 /* bias for the exponent */
+ #define DECIMAL128_BEC_bits 12 /* Bits in BEC */
+ #define DECIMAL128_CC_bits 110 /* Bits in CC */
+
+ struct ieee754r_c_field
+ {
+ unsigned int is_nan:1;
+ unsigned int is_inf:1;
+ unsigned int lm_exp:2;
+ unsigned int lmd:4;
+ };
+
+ extern const struct ieee754r_c_field c_decoder[32];
+ extern const unsigned char lm2lmd_to_c[10][3];
+ extern const char dpd_to_char[1024][4];
+ extern const const short int dpd_to_bcd[1024];
+ extern const short int bcd_to_dpd[2464];
+
+ void __get_digits_d32 (_Decimal32, char*, int*, int*, int *, int *);
+ void __get_digits_d64 (_Decimal64, char*, int*, int*, int *, int *);
+ void __get_digits_d128 (_Decimal128, char*, int*, int*, int *, int *);
+
+ #endif /* _DPD_PRIVATE */
Index: dfp/sysdeps/dfp/dpd/numdigits.h
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/dfp/dpd/numdigits.h 2008-08-15 18:13:31.000000000 +0200
***************
*** 0 ****
--- 1,222 ----
+ /* Number of digits functions.
+
+ Copyright (C) 2006, 2007, 2008 IBM Corporation.
+ Author(s): Pete Eberlein <eberlein@xxxxxxxxxx>
+
+ The Decimal Floating Point C Library is free software; you can
+ redistribute it and/or modify it under the terms of the GNU Lesser
+ General Public License version 2.1.
+
+ The Decimal Floating Point C Library is distributed in the hope that
+ it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ the GNU Lesser General Public License version 2.1 for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License version 2.1 along with the Decimal Floating Point C Library;
+ if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+ Suite 330, Boston, MA 02111-1307 USA.
+
+ Please see dfp/COPYING.txt for more information. */
+
+
+ #ifndef _NUMDIGITS_H
+ #define _NUMDIGITS_H 1
+
+ #define NUMDIGITS_SUPPORT 1
+
+ #ifndef DEC_TYPE
+ #error DEC_TYPE must be declared
+ #endif
+
+ #ifndef _DECIMAL_SIZE
+ #error _DECIMAL_SIZE must be declared
+ #endif
+
+ #include "dpd-private.h"
+ #include <string.h>
+
+ static inline int
+ getexp (DEC_TYPE x)
+ {
+ int exp;
+ struct ieee754r_c_field c_f;
+
+ #if _DECIMAL_SIZE == 32
+ union ieee754r_Decimal32 d;
+ d.sd = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL32_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL32_Bias;
+
+ #elif _DECIMAL_SIZE == 64
+ union ieee754r_Decimal64 d;
+ d.dd = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL64_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL64_Bias;
+
+ #elif _DECIMAL_SIZE == 128
+ union ieee754r_Decimal128 d;
+ d.td = x;
+ c_f = c_decoder[d.ieee.c];
+ exp = c_f.lm_exp << DECIMAL128_BEC_bits;
+ exp += d.ieee.bec;
+ exp -= DECIMAL128_Bias;
+
+ #endif
+
+ return exp;
+ }
+
+
+ static inline DEC_TYPE
+ setexp (DEC_TYPE x, int exp)
+ {
+
+ #if _DECIMAL_SIZE == 32
+ union ieee754r_Decimal32 d;
+ d.sd = x;
+ exp += DECIMAL32_Bias;
+ d.ieee.bec = exp;
+ d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL32_BEC_bits];
+ return d.sd;
+
+ #elif _DECIMAL_SIZE == 64
+ union ieee754r_Decimal64 d;
+ d.dd = x;
+ exp += DECIMAL64_Bias;
+ d.ieee.bec = exp;
+ d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL64_BEC_bits];
+ return d.dd;
+
+ #elif _DECIMAL_SIZE == 128
+ union ieee754r_Decimal128 d;
+ d.td = x;
+ exp += DECIMAL128_Bias;
+ d.ieee.bec = exp;
+ d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL128_BEC_bits];
+ return d.td;
+
+ #endif
+
+ }
+
+ static inline unsigned int
+ __dfp_declet_to_dpd(char *str)
+ {
+ return bcd_to_dpd[(str[0]<<8) + (str[1]<<4) + str[2] - '0'*0x111];
+ }
+
+ static inline DEC_TYPE
+ setdigits (DEC_TYPE x, char *str)
+ {
+ unsigned int bcd;
+ #if _DECIMAL_SIZE == 32
+ union ieee754r_Decimal32 d;
+ d.sd = x;
+ d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
+
+ d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
+ d.ieee.cc1 = __dfp_declet_to_dpd(str+4);
+
+ return d.sd;
+
+ #elif _DECIMAL_SIZE == 64
+ union ieee754r_Decimal64 d;
+ d.dd = x;
+ d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
+
+ d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
+ /* Packed fields crossing a word boundary require special handling. */
+ bcd = __dfp_declet_to_dpd(str+4);
+ d.ieee.cc1H8 = bcd>>2;
+ d.ieee.cc1L2 = bcd;
+ d.ieee.cc2 = __dfp_declet_to_dpd(str+7);
+ d.ieee.cc3 = __dfp_declet_to_dpd(str+10);
+ d.ieee.cc4 = __dfp_declet_to_dpd(str+13);
+
+ return d.dd;
+
+ #elif _DECIMAL_SIZE == 128
+ union ieee754r_Decimal128 d;
+ d.td = x;
+ d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
+
+ d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
+ /* Packed fields crossing a word boundary require special handling. */
+ bcd = __dfp_declet_to_dpd(str+4);
+ d.ieee.cc1H4 = bcd>>6;
+ d.ieee.cc1L6 = bcd;
+ d.ieee.cc2 = __dfp_declet_to_dpd(str+7);
+ d.ieee.cc3 = __dfp_declet_to_dpd(str+10);
+ bcd = __dfp_declet_to_dpd(str+13);
+ d.ieee.cc4H6 = bcd>>4;
+ d.ieee.cc4L4 = bcd;
+ d.ieee.cc5 = __dfp_declet_to_dpd(str+16);
+ d.ieee.cc6 = __dfp_declet_to_dpd(str+19);
+ bcd = __dfp_declet_to_dpd(str+22);
+ d.ieee.cc7H8 = bcd>>2;
+ d.ieee.cc7L2 = bcd;
+ d.ieee.cc8 = __dfp_declet_to_dpd(str+25);
+ d.ieee.cc9 = __dfp_declet_to_dpd(str+28);
+ d.ieee.cc10 = __dfp_declet_to_dpd(str+31);
+
+ return d.td;
+
+ #endif
+ }
+
+
+
+
+ static inline int
+ numdigits (DEC_TYPE x)
+ {
+ int firstdigit = 0;
+ #if _DECIMAL_SIZE == 32
+ char digits[8];
+ __get_digits_d32(x, digits, NULL, NULL, NULL, NULL);
+ #elif _DECIMAL_SIZE == 64
+ char digits[17];
+ __get_digits_d64(x, digits, NULL, NULL, NULL, NULL);
+ #elif _DECIMAL_SIZE == 128
+ char digits[35];
+ __get_digits_d128(x, digits, NULL, NULL, NULL, NULL);
+ #endif
+ while (digits[firstdigit] == '0') firstdigit++;
+
+ return strlen(digits + firstdigit);
+ }
+
+ static inline DEC_TYPE
+ left_justify (DEC_TYPE x)
+ {
+ int firstdigit = 0, len;
+ #if _DECIMAL_SIZE == 32
+ char digits[8+7];
+ __get_digits_d32(x, digits, NULL, NULL, NULL, NULL);
+ #elif _DECIMAL_SIZE == 64
+ char digits[17+16];
+ __get_digits_d64(x, digits, NULL, NULL, NULL, NULL);
+ #elif _DECIMAL_SIZE == 128
+ char digits[35+34];
+ __get_digits_d128(x, digits, NULL, NULL, NULL, NULL);
+ #endif
+ while (digits[firstdigit] == '0') firstdigit++;
+ len = strlen(digits + firstdigit);
+ if (len)
+ {
+ /* pad the significant digits with enough trailing zeroes */
+ memset(digits + firstdigit + len, '0', firstdigit);
+ x = setdigits(x, digits + firstdigit);
+ x = setexp(x, getexp(x) - firstdigit);
+ }
+
+ return x;
+ }
+
+
+ #endif /* _NUMDIGITS_H */
Index: dfp/sysdeps/powerpc/decode-decimal.c
===================================================================
*** dfp/sysdeps/powerpc/decode-decimal.c 2008-08-15 18:06:00.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,215 ****
- /* Functions to print the DPD declets for use with printf %Z
- Copyright (C) 2006, 2007 IBM Corporation.
-
- Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
- Ryan S. Arnold <rsa@xxxxxxxxxx>
-
- The Decimal Floating Point C Library is free software; you can
- redistribute it and/or modify it under the terms of the GNU Lesser
- General Public License version 2.1.
-
- The Decimal Floating Point C Library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Lesser General Public License version 2.1 for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License version 2.1 along with the Decimal Floating Point C Library;
- if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- Suite 330, Boston, MA 02111-1307 USA.
-
- Please see dfp/COPYING.txt for more information. */
-
- #include <float.h>
- #include <math.h>
- #include <fenv.h>
- #include <string.h>
-
- #include <decode-decimal.h>
- #include "dpd-private.h"
-
- #undef DEBUG_PRINT
- #define DEBUG_PRINT 0
- char * __decoded32 (_Decimal32 a, char * str)
- {
- union ieee754r_Decimal32 d;
- struct ieee754r_c_field c_f;
- int exp;
- char sign;
- char lmd;
- const char *cc0;
- const char *cc1;
- char * after_exp = NULL;
-
- d.sd = a;
- if (d.ieee.negative)
- sign = '-';
- else
- sign = '+';
-
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL32_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL32_Bias;
- lmd = '0' + c_f.lmd;
-
- cc0 = &dpd_to_char[d.ieee.cc0][0];
- cc1 = &dpd_to_char[d.ieee.cc1][0];
-
- str[0] = sign;
- str[1] = lmd;
- str[2] = ',';
- __dfp_cpydeclet(&str[3], cc0);
- str[6] = ',';
- __dfp_cpydeclet(&str[7], cc1);
- str[10] = 'E';
- after_exp = __dfp_exptostr(&str[11], exp);
- if (after_exp != NULL)
- *after_exp = '\0';
-
- return str;
- }
- #if defined NOT_IN_libc
- weak_alias (__decoded32, decoded32)
- #endif
- libc_hidden_def(__decoded32)
-
- char * __decoded64 ( _Decimal64 a, char * str )
- {
- union ieee754r_Decimal64 d;
- struct ieee754r_c_field c_f;
- int exp, i;
- char sign;
- char lmd;
- const char *cc0;
- const char *cc1;
- const char *cc2;
- const char *cc3;
- const char *cc4;
- char * after_exp = NULL;
-
- d.dd = a;
- if (d.ieee.negative)
- sign = '-';
- else
- sign = '+';
-
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL64_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL64_Bias;
- lmd = '0' + c_f.lmd;
-
- cc0 = &dpd_to_char[d.ieee.cc0][0];
- /* Packed fields crossing a word boundary require special handling. */
- i = d.ieee.cc1H8 << 2;
- i = i + d.ieee.cc1L2;
- cc1 = &dpd_to_char[i][0];
- cc2 = &dpd_to_char[d.ieee.cc2][0];
- cc3 = &dpd_to_char[d.ieee.cc3][0];
- cc4 = &dpd_to_char[d.ieee.cc4][0];
-
- str[0] = sign;
- str[1] = lmd;
- str[2] = ',';
- __dfp_cpydeclet(&str[3], cc0);
- str[6] = ',';
- __dfp_cpydeclet(&str[7], cc1);
- str[10] = ',';
- __dfp_cpydeclet(&str[11], cc2);
- str[14] = ',';
- __dfp_cpydeclet(&str[15], cc3);
- str[18] = ',';
- __dfp_cpydeclet(&str[19], cc4);
- str[22] = 'E';
- after_exp = __dfp_exptostr(&str[23], exp);
- if (after_exp != NULL)
- *after_exp = '\0';
-
- return str;
- }
- #if defined NOT_IN_libc
- weak_alias (__decoded64, decoded64)
- #endif
- libc_hidden_def(__decoded64)
-
- char * __decoded128 ( _Decimal128 a, char * str )
- {
- union ieee754r_Decimal128 d;
- struct ieee754r_c_field c_f;
- int exp;/*, i; */
- char sign;
- char lmd;
- const char *cc0;
- const char *cc1;
- const char *cc2;
- const char *cc3;
- const char *cc4;
- const char *cc5;
- const char *cc6;
- const char *cc7;
- const char *cc8;
- const char *cc9;
- const char *cc10;
- char * after_exp = NULL;
-
- d.td = a;
- if (d.ieee.negative)
- sign = '-';
- else
- sign = '+';
-
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL128_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL128_Bias;
- lmd = '0' + c_f.lmd;
-
- cc0 = &dpd_to_char[d.ieee.cc0][0];
- /* Packed fields crossing a word boundary require special handling. */
- cc1 = &dpd_to_char[((d.ieee.cc1H4<<6) + d.ieee.cc1L6)][0];
- cc2 = &dpd_to_char[d.ieee.cc2][0];
- cc3 = &dpd_to_char[d.ieee.cc3][0];
- cc4 = &dpd_to_char[((d.ieee.cc4H6<<4) + d.ieee.cc4L4)][0];
- cc5 = &dpd_to_char[d.ieee.cc5][0];
- cc6 = &dpd_to_char[d.ieee.cc6][0];
- cc7 = &dpd_to_char[((d.ieee.cc7H8<<2) + d.ieee.cc7L2)][0];
- cc8 = &dpd_to_char[d.ieee.cc8][0];
- cc9 = &dpd_to_char[d.ieee.cc9][0];
- cc10 = &dpd_to_char[d.ieee.cc10][0];
-
- str[0] = sign;
- str[1] = lmd;
- str[2] = ',';
- __dfp_cpydeclet(&str[3], cc0);
- str[6] = ',';
- __dfp_cpydeclet(&str[7], cc1);
- str[10] = ',';
- __dfp_cpydeclet(&str[11], cc2);
- str[14] = ',';
- __dfp_cpydeclet(&str[15], cc3);
- str[18] = ',';
- __dfp_cpydeclet(&str[19], cc4);
- str[22] = ',';
- __dfp_cpydeclet(&str[23], cc5);
- str[26] = ',';
- __dfp_cpydeclet(&str[27], cc6);
- str[30] = ',';
- __dfp_cpydeclet(&str[31], cc7);
- str[34] = ',';
- __dfp_cpydeclet(&str[35], cc8);
- str[38] = ',';
- __dfp_cpydeclet(&str[39], cc9);
- str[42] = ',';
- __dfp_cpydeclet(&str[43], cc10);
- str[46] = 'E';
- after_exp = __dfp_exptostr(&str[47], exp);
- if (after_exp != NULL)
- *after_exp = '\0';
-
- return str;
- }
- #if defined NOT_IN_libc
- weak_alias (__decoded128, decoded128)
- #endif
- libc_hidden_def(__decoded128)
--- 0 ----
Index: dfp/sysdeps/powerpc/dpd-private.c
===================================================================
*** dfp/sysdeps/powerpc/dpd-private.c 2008-08-15 18:06:00.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,820 ****
- /* Data types for DPD format output.
-
- Copyright (C) 2006, 2007, 2008 IBM Corporation.
- Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
-
- The Decimal Floating Point C Library is free software; you can
- redistribute it and/or modify it under the terms of the GNU Lesser
- General Public License version 2.1.
-
- The Decimal Floating Point C Library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Lesser General Public License version 2.1 for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License version 2.1 along with the Decimal Floating Point C Library;
- if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- Suite 330, Boston, MA 02111-1307 USA.
-
- Please see dfp/COPYING.txt for more information. */
-
- #include <float.h>
- #include <math.h>
- #include <fenv.h>
- #include <string.h>
-
- #include "dpd-private.h"
-
- const struct ieee754r_c_field c_decoder[32] = {
- {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 0, 3}, /* 00000-00011 */
- {0, 0, 0, 4}, {0, 0, 0, 5}, {0, 0, 0, 6}, {0, 0, 0, 7}, /* 00100-00111 */
- {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}, {0, 0, 1, 3}, /* 01000-01011 */
- {0, 0, 1, 4}, {0, 0, 1, 5}, {0, 0, 1, 6}, {0, 0, 1, 7}, /* 01100-01111 */
- {0, 0, 2, 0}, {0, 0, 2, 1}, {0, 0, 2, 2}, {0, 0, 2, 3}, /* 10000-10011 */
- {0, 0, 2, 4}, {0, 0, 2, 5}, {0, 0, 2, 5}, {0, 0, 2, 7}, /* 10100-10111 */
- {0, 0, 0, 8}, {0, 0, 0, 9}, {0, 0, 1, 8}, {0, 0, 1, 9}, /* 11000-11011 */
- {0, 0, 2, 8}, {0, 0, 2, 9}, {0, 1, 0, 0}, {1, 0, 0, 0} /* 11100-11111 */
- };
-
- /* Table to encode the "left most" 2 bits of the biased exponent and the
- "Left Most Digit" into the "C"ombination field. Indexed by [lmd,lm2bits]. */
- const unsigned char lm2lmd_to_c[10][3] = {
- {0x00, 0x08, 0x10},
- {0x01, 0x09, 0x11},
- {0x02, 0x0a, 0x12},
- {0x03, 0x0b, 0x13},
- {0x04, 0x0c, 0x14},
- {0x05, 0x0d, 0x15},
- {0x06, 0x0e, 0x16},
- {0x07, 0x0f, 0x17},
- {0x18, 0x1a, 0x1c},
- {0x19, 0x1b, 0x1d}};
-
- /* Table to convert 3 Densely Packed Decimal digits (10-bits) into
- 3 ASCII digits (24-bits, 3 bytes). */
- const char dpd_to_char[1024][4] = {
- "000", "001", "002", "003", "004", "005", "006", "007", /* 000-007 */
- "008", "009", "080", "081", "800", "801", "880", "881", /* 008-00f */
- "010", "011", "012", "013", "014", "015", "016", "017", /* 010-017 */
- "018", "019", "090", "091", "810", "811", "890", "891", /* 018-01f */
- "020", "021", "022", "023", "024", "025", "026", "027", /* 020-027 */
- "028", "029", "082", "083", "820", "821", "808", "809", /* 028-02f */
- "030", "031", "032", "033", "034", "035", "036", "037", /* 030-037 */
- "038", "039", "092", "093", "830", "831", "818", "819", /* 038-03f */
-
- "040", "041", "042", "043", "044", "045", "046", "047", /* 040-047 */
- "048", "049", "084", "085", "840", "841", "088", "089", /* 048-04f */
- "050", "051", "052", "053", "054", "055", "056", "057", /* 050-057 */
- "058", "059", "094", "095", "850", "851", "098", "099", /* 058-05f */
- "060", "061", "062", "063", "064", "065", "066", "067", /* 060-067 */
- "068", "069", "086", "087", "860", "861", "888", "889", /* 068-06f */
- "070", "071", "072", "073", "074", "075", "076", "077", /* 070-077 */
- "078", "079", "096", "097", "870", "871", "898", "899", /* 078-07f */
-
- "100", "101", "102", "103", "104", "105", "106", "107", /* 080-087 */
- "108", "109", "180", "181", "900", "901", "980", "981", /* 088-08f */
- "110", "111", "112", "113", "114", "115", "116", "117", /* 090-097 */
- "118", "119", "190", "191", "910", "911", "990", "991", /* 098-09f */
- "120", "121", "122", "123", "124", "125", "126", "127", /* 0a0-0a7 */
- "128", "129", "182", "183", "920", "921", "908", "909", /* 0a8-0af */
- "130", "131", "132", "133", "134", "135", "136", "137", /* 0b0-0b7 */
- "138", "139", "192", "193", "930", "931", "918", "919", /* 0b8-0bf */
-
- "140", "141", "142", "143", "144", "145", "146", "147", /* 0c0-0c7 */
- "148", "149", "184", "185", "940", "941", "188", "189", /* 0c8-0cf */
- "150", "151", "152", "153", "154", "155", "156", "157", /* 0d0-0d7 */
- "158", "159", "194", "195", "950", "951", "198", "199", /* 0d8-0df */
- "160", "161", "162", "163", "164", "165", "166", "167", /* 0e0-0e7 */
- "168", "169", "186", "187", "960", "961", "988", "989", /* 0e8-0ef */
- "170", "171", "172", "173", "174", "175", "176", "177", /* 0f0-0f7 */
- "178", "179", "196", "197", "970", "971", "998", "999", /* 0f8-0ff */
-
- "200", "201", "202", "203", "204", "205", "206", "207", /* 100-107 */
- "208", "209", "280", "281", "802", "803", "882", "883", /* 108-10f */
- "210", "211", "212", "213", "214", "215", "216", "217", /* 110-117 */
- "218", "219", "290", "291", "812", "813", "892", "893", /* 118-11f */
- "220", "221", "222", "223", "224", "225", "226", "227", /* 120-127 */
- "228", "229", "282", "283", "822", "823", "828", "829", /* 128-12f */
- "230", "231", "232", "233", "234", "235", "236", "237", /* 130-137 */
- "238", "239", "292", "293", "832", "833", "838", "839", /* 138-13f */
-
- "240", "241", "242", "243", "244", "245", "246", "247", /* 140-147 */
- "248", "249", "284", "285", "842", "843", "288", "289", /* 148-14f */
- "250", "251", "252", "253", "254", "255", "256", "257", /* 150-157 */
- "258", "259", "294", "295", "852", "853", "298", "299", /* 158-15f */
- "260", "261", "262", "263", "264", "265", "266", "267", /* 160-167 */
- "268", "269", "286", "287", "862", "863", "888", "889", /* 168-16f */
- "270", "271", "272", "273", "274", "275", "276", "277", /* 170-177 */
- "278", "279", "296", "297", "872", "873", "898", "899", /* 178-17f */
-
- "300", "301", "302", "303", "304", "305", "306", "307", /* 180-187 */
- "308", "309", "380", "381", "902", "903", "982", "983", /* 188-18f */
- "310", "311", "312", "313", "314", "315", "316", "317", /* 190-197 */
- "318", "319", "390", "391", "912", "913", "992", "993", /* 198-19f */
- "320", "321", "322", "323", "324", "325", "326", "327", /* 1a0-1a7 */
- "328", "329", "382", "383", "922", "923", "928", "929", /* 1a8-1af */
- "330", "331", "332", "333", "334", "335", "336", "337", /* 1b0-1b7 */
- "338", "339", "392", "393", "932", "933", "938", "939", /* 1b8-1bf */
-
- "340", "341", "342", "343", "344", "345", "346", "347", /* 1c0-1c7 */
- "348", "349", "384", "385", "942", "943", "388", "389", /* 1c8-1cf */
- "350", "351", "352", "353", "354", "355", "356", "357", /* 1d0-1d7 */
- "358", "359", "394", "395", "952", "953", "398", "399", /* 1d8-1df */
- "360", "361", "362", "363", "364", "365", "366", "367", /* 1e0-1e7 */
- "368", "369", "386", "387", "962", "963", "988", "989", /* 1e8-1ef */
- "370", "371", "372", "373", "374", "375", "376", "377", /* 1f0-1f7 */
- "378", "379", "396", "397", "972", "973", "998", "999", /* 1f8-1ff */
-
- "400", "401", "402", "403", "404", "405", "406", "407", /* 200-207 */
- "408", "409", "480", "481", "804", "805", "884", "885", /* 208-20f */
- "410", "411", "412", "413", "414", "415", "416", "417", /* 210-217 */
- "418", "419", "490", "491", "814", "815", "894", "895", /* 218-21f */
- "420", "421", "422", "423", "424", "425", "426", "427", /* 220-227 */
- "428", "429", "482", "483", "824", "825", "848", "849", /* 228-22f */
- "430", "431", "432", "433", "434", "435", "436", "437", /* 230-237 */
- "438", "439", "492", "493", "834", "835", "858", "859", /* 238-23f */
-
- "440", "441", "442", "443", "444", "445", "446", "447", /* 240-247 */
- "448", "449", "484", "485", "844", "845", "488", "489", /* 248-24f */
- "450", "451", "452", "453", "454", "455", "456", "457", /* 250-257 */
- "458", "459", "494", "495", "854", "855", "498", "499", /* 258-25f */
- "460", "461", "462", "463", "464", "465", "466", "467", /* 260-267 */
- "468", "469", "486", "487", "864", "865", "888", "889", /* 268-26f */
- "470", "471", "472", "473", "474", "475", "476", "477", /* 270-277 */
- "478", "479", "496", "497", "874", "875", "898", "899", /* 278-27f */
-
- "500", "501", "502", "503", "504", "505", "506", "507", /* 280-287 */
- "508", "509", "580", "581", "904", "905", "984", "985", /* 288-28f */
- "510", "511", "512", "513", "514", "515", "516", "517", /* 290-297 */
- "518", "519", "590", "591", "914", "915", "994", "995", /* 298-29f */
- "520", "521", "522", "523", "524", "525", "526", "527", /* 2a0-2a7 */
- "528", "529", "582", "583", "924", "925", "948", "949", /* 2a8-2af */
- "530", "531", "532", "533", "534", "535", "536", "537", /* 2b0-2b7 */
- "538", "539", "592", "593", "934", "935", "958", "959", /* 2b8-2bf */
-
- "540", "541", "542", "543", "544", "545", "546", "547", /* 2c0-2c7 */
- "548", "549", "584", "585", "944", "945", "588", "589", /* 2c8-2cf */
- "550", "551", "552", "553", "554", "555", "556", "557", /* 2d0-2d7 */
- "558", "559", "594", "595", "954", "955", "598", "599", /* 2d8-2df */
- "560", "561", "562", "563", "564", "565", "566", "567", /* 2e0-2e7 */
- "568", "569", "586", "587", "964", "965", "988", "989", /* 2e8-2ef */
- "570", "571", "572", "573", "574", "575", "576", "577", /* 2f0-2f7 */
- "578", "579", "596", "597", "974", "975", "998", "999", /* 2f8-2ff */
-
- "600", "601", "602", "603", "604", "605", "606", "607", /* 300-307 */
- "608", "609", "680", "681", "806", "807", "886", "887", /* 308-30f */
- "610", "611", "612", "613", "614", "615", "616", "617", /* 310-317 */
- "618", "619", "690", "691", "816", "817", "896", "897", /* 318-31f */
- "620", "621", "622", "623", "624", "625", "626", "627", /* 320-327 */
- "628", "629", "682", "683", "826", "827", "868", "869", /* 328-32f */
- "630", "631", "632", "633", "634", "635", "636", "637", /* 330-337 */
- "638", "639", "692", "693", "836", "837", "878", "879", /* 338-33f */
-
- "640", "641", "642", "643", "644", "645", "646", "647", /* 340-347 */
- "648", "649", "684", "685", "846", "847", "688", "689", /* 348-34f */
- "650", "651", "652", "653", "654", "655", "656", "657", /* 350-357 */
- "658", "659", "694", "695", "856", "857", "698", "699", /* 358-35f */
- "660", "661", "662", "663", "664", "665", "666", "667", /* 360-367 */
- "668", "669", "686", "687", "866", "867", "888", "889", /* 368-36f */
- "670", "671", "672", "673", "674", "675", "676", "677", /* 370-377 */
- "678", "679", "696", "697", "876", "877", "898", "899", /* 378-37f */
-
- "700", "701", "702", "703", "704", "705", "706", "707", /* 380-387 */
- "708", "709", "780", "781", "906", "907", "986", "987", /* 388-38f */
- "710", "711", "712", "713", "714", "715", "716", "717", /* 390-397 */
- "718", "719", "790", "791", "916", "917", "996", "997", /* 398-39f */
- "720", "721", "722", "723", "724", "725", "726", "727", /* 3a0-3a7 */
- "728", "729", "782", "783", "926", "927", "968", "969", /* 3a8-3af */
- "730", "731", "732", "733", "734", "735", "736", "737", /* 3b0-3b7 */
- "738", "739", "792", "793", "936", "937", "978", "979", /* 3b8-3bf */
-
- "740", "741", "742", "743", "744", "745", "746", "747", /* 3c0-3c7 */
- "748", "749", "784", "785", "946", "947", "788", "789", /* 3c8-3cf */
- "750", "751", "752", "753", "754", "755", "756", "757", /* 3d0-3d7 */
- "758", "759", "794", "795", "956", "957", "798", "799", /* 3d8-3df */
- "760", "761", "762", "763", "764", "765", "766", "767", /* 3e0-3e7 */
- "768", "769", "786", "787", "966", "967", "988", "989", /* 3e8-3ef */
- "770", "771", "772", "773", "974", "775", "776", "777", /* 3f0-3f7 */
- "778", "779", "796", "797", "976", "977", "998", "999" /* 3f8-3ff */
- };
-
- /* Table to convert 3 Densely Packed Decimal digits (10-bits) into
- 3 Binary coded Decimal digits (12-bits). */
- const short int dpd_to_bcd[1024] = {
- 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
- 0x008, 0x009, 0x080, 0x081, 0x800, 0x801, 0x880, 0x881, /* 008-00f */
- 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
- 0x018, 0x019, 0x090, 0x091, 0x810, 0x811, 0x890, 0x891, /* 018-01f */
- 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
- 0x028, 0x029, 0x082, 0x083, 0x820, 0x821, 0x808, 0x809, /* 028-02f */
- 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
- 0x038, 0x039, 0x092, 0x093, 0x830, 0x831, 0x818, 0x819, /* 038-03f */
-
- 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
- 0x048, 0x049, 0x084, 0x085, 0x840, 0x841, 0x088, 0x089, /* 048-04f */
- 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
- 0x058, 0x059, 0x094, 0x095, 0x850, 0x851, 0x098, 0x099, /* 058-05f */
- 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
- 0x068, 0x069, 0x086, 0x087, 0x860, 0x861, 0x888, 0x889, /* 068-06f */
- 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
- 0x078, 0x079, 0x096, 0x097, 0x870, 0x871, 0x898, 0x899, /* 078-07f */
-
- 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 080-087 */
- 0x108, 0x109, 0x180, 0x181, 0x900, 0x901, 0x980, 0x981, /* 088-08f */
- 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 090-097 */
- 0x118, 0x119, 0x190, 0x191, 0x910, 0x911, 0x990, 0x991, /* 098-09f */
- 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 0a0-0a7 */
- 0x128, 0x129, 0x182, 0x183, 0x920, 0x921, 0x908, 0x909, /* 0a8-0af */
- 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 0b0-0b7 */
- 0x138, 0x139, 0x192, 0x193, 0x930, 0x931, 0x918, 0x919, /* 0b8-0bf */
-
- 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 0c0-0c7 */
- 0x148, 0x149, 0x184, 0x185, 0x940, 0x941, 0x188, 0x189, /* 0c8-0cf */
- 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 0d0-0d7 */
- 0x158, 0x159, 0x194, 0x195, 0x950, 0x951, 0x198, 0x199, /* 0d8-0df */
- 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 0e0-0e7 */
- 0x168, 0x169, 0x186, 0x187, 0x960, 0x961, 0x988, 0x989, /* 0e8-0ef */
- 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 0f0-0f7 */
- 0x178, 0x179, 0x196, 0x197, 0x970, 0x971, 0x998, 0x999, /* 0f8-0ff */
-
- 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 100-107 */
- 0x208, 0x209, 0x280, 0x281, 0x802, 0x803, 0x882, 0x883, /* 108-10f */
- 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 110-117 */
- 0x218, 0x219, 0x290, 0x291, 0x812, 0x813, 0x892, 0x893, /* 118-11f */
- 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 120-127 */
- 0x228, 0x229, 0x282, 0x283, 0x822, 0x823, 0x828, 0x829, /* 128-12f */
- 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 130-137 */
- 0x238, 0x239, 0x292, 0x293, 0x832, 0x833, 0x838, 0x839, /* 138-13f */
-
- 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 140-147 */
- 0x248, 0x249, 0x284, 0x285, 0x842, 0x843, 0x288, 0x289, /* 148-14f */
- 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 150-157 */
- 0x258, 0x259, 0x294, 0x295, 0x852, 0x853, 0x298, 0x299, /* 158-15f */
- 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 160-167 */
- 0x268, 0x269, 0x286, 0x287, 0x862, 0x863, 0x888, 0x889, /* 168-16f */
- 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 170-177 */
- 0x278, 0x279, 0x296, 0x297, 0x872, 0x873, 0x898, 0x899, /* 178-17f */
-
- 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 180-187 */
- 0x308, 0x309, 0x380, 0x381, 0x902, 0x903, 0x982, 0x983, /* 188-18f */
- 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 190-197 */
- 0x318, 0x319, 0x390, 0x391, 0x912, 0x913, 0x992, 0x993, /* 198-19f */
- 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 1a0-1a7 */
- 0x328, 0x329, 0x382, 0x383, 0x922, 0x923, 0x928, 0x929, /* 1a8-1af */
- 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 1b0-1b7 */
- 0x338, 0x339, 0x392, 0x393, 0x932, 0x933, 0x938, 0x939, /* 1b8-1bf */
-
- 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 1c0-1c7 */
- 0x348, 0x349, 0x384, 0x385, 0x942, 0x943, 0x388, 0x389, /* 1c8-1cf */
- 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 1d0-1d7 */
- 0x358, 0x359, 0x394, 0x395, 0x952, 0x953, 0x398, 0x399, /* 1d8-1df */
- 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 1e0-1e7 */
- 0x368, 0x369, 0x386, 0x387, 0x962, 0x963, 0x988, 0x989, /* 1e8-1ef */
- 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 1f0-1f7 */
- 0x378, 0x379, 0x396, 0x397, 0x972, 0x973, 0x998, 0x999, /* 1f8-1ff */
-
- 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, /* 200-207 */
- 0x408, 0x409, 0x480, 0x481, 0x804, 0x805, 0x884, 0x885, /* 208-20f */
- 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, /* 210-217 */
- 0x418, 0x419, 0x490, 0x491, 0x814, 0x815, 0x894, 0x895, /* 218-21f */
- 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, /* 220-227 */
- 0x428, 0x429, 0x482, 0x483, 0x824, 0x825, 0x848, 0x849, /* 228-22f */
- 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, /* 230-237 */
- 0x438, 0x439, 0x492, 0x493, 0x834, 0x835, 0x858, 0x859, /* 238-23f */
-
- 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, /* 240-247 */
- 0x448, 0x449, 0x484, 0x485, 0x844, 0x845, 0x488, 0x489, /* 248-24f */
- 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, /* 250-257 */
- 0x458, 0x459, 0x494, 0x495, 0x854, 0x855, 0x498, 0x499, /* 258-25f */
- 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, /* 260-267 */
- 0x468, 0x469, 0x486, 0x487, 0x864, 0x865, 0x888, 0x889, /* 268-26f */
- 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, /* 270-277 */
- 0x478, 0x479, 0x496, 0x497, 0x874, 0x875, 0x898, 0x899, /* 278-27f */
-
- 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, /* 280-287 */
- 0x508, 0x509, 0x580, 0x581, 0x904, 0x905, 0x984, 0x985, /* 288-28f */
- 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, /* 290-297 */
- 0x518, 0x519, 0x590, 0x591, 0x914, 0x915, 0x994, 0x995, /* 298-29f */
- 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, /* 2a0-2a7 */
- 0x528, 0x529, 0x582, 0x583, 0x924, 0x925, 0x948, 0x949, /* 2a8-2af */
- 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, /* 2b0-2b7 */
- 0x538, 0x539, 0x592, 0x593, 0x934, 0x935, 0x958, 0x959, /* 2b8-2bf */
-
- 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, /* 2c0-2c7 */
- 0x548, 0x549, 0x584, 0x585, 0x944, 0x945, 0x588, 0x589, /* 2c8-2cf */
- 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, /* 2d0-2d7 */
- 0x558, 0x559, 0x594, 0x595, 0x954, 0x955, 0x598, 0x599, /* 2d8-2df */
- 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, /* 2e0-2e7 */
- 0x568, 0x569, 0x586, 0x587, 0x964, 0x965, 0x988, 0x989, /* 2e8-2ef */
- 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, /* 2f0-2f7 */
- 0x578, 0x579, 0x596, 0x597, 0x974, 0x975, 0x998, 0x999, /* 2f8-2ff */
-
- 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, /* 300-307 */
- 0x608, 0x609, 0x680, 0x681, 0x806, 0x807, 0x886, 0x887, /* 308-30f */
- 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, /* 310-317 */
- 0x618, 0x619, 0x690, 0x691, 0x816, 0x817, 0x896, 0x897, /* 318-31f */
- 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, /* 320-327 */
- 0x628, 0x629, 0x682, 0x683, 0x826, 0x827, 0x868, 0x869, /* 328-32f */
- 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, /* 330-337 */
- 0x638, 0x639, 0x692, 0x693, 0x836, 0x837, 0x878, 0x879, /* 338-33f */
-
- 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, /* 340-347 */
- 0x648, 0x649, 0x684, 0x685, 0x846, 0x847, 0x688, 0x689, /* 348-34f */
- 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, /* 350-357 */
- 0x658, 0x659, 0x694, 0x695, 0x856, 0x857, 0x698, 0x699, /* 358-35f */
- 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, /* 360-367 */
- 0x668, 0x669, 0x686, 0x687, 0x866, 0x867, 0x888, 0x889, /* 368-36f */
- 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, /* 370-377 */
- 0x678, 0x679, 0x696, 0x697, 0x876, 0x877, 0x898, 0x899, /* 378-37f */
-
- 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, /* 380-387 */
- 0x708, 0x709, 0x780, 0x781, 0x906, 0x907, 0x986, 0x987, /* 388-38f */
- 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, /* 390-397 */
- 0x718, 0x719, 0x790, 0x791, 0x916, 0x917, 0x996, 0x997, /* 398-39f */
- 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, /* 3a0-3a7 */
- 0x728, 0x729, 0x782, 0x783, 0x926, 0x927, 0x968, 0x969, /* 3a8-3af */
- 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, /* 3b0-3b7 */
- 0x738, 0x739, 0x792, 0x793, 0x936, 0x937, 0x978, 0x979, /* 3b8-3bf */
-
- 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, /* 3c0-3c7 */
- 0x748, 0x749, 0x784, 0x785, 0x946, 0x947, 0x788, 0x789, /* 3c8-3cf */
- 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, /* 3d0-3d7 */
- 0x758, 0x759, 0x794, 0x795, 0x956, 0x957, 0x798, 0x799, /* 3d8-3df */
- 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, /* 3e0-3e7 */
- 0x768, 0x769, 0x786, 0x787, 0x966, 0x967, 0x988, 0x989, /* 3e8-3ef */
- 0x770, 0x771, 0x772, 0x773, 0x974, 0x775, 0x776, 0x777, /* 3f0-3f7 */
- 0x778, 0x779, 0x796, 0x797, 0x976, 0x977, 0x998, 0x999 /* 3f8-3ff */
- };
-
- /* Table to convert 3 Binary Coded Decimal digits (12-bits) into
- 3 Densely Packed Decimal digits (10-bits). */
- const short int bcd_to_dpd[2464] = {
- 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, /* 000-007 */
- 0x008, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 008-00f */
- 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, /* 010-017 */
- 0x018, 0x019, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 018-01f */
- 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, /* 020-027 */
- 0x028, 0x029, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 028-02f */
- 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, /* 030-037 */
- 0x038, 0x039, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 038-03f */
- 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, /* 040-047 */
- 0x048, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 048-04f */
- 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, /* 050-057 */
- 0x058, 0x059, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 058-05f */
- 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, /* 060-067 */
- 0x068, 0x069, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 068-06f */
- 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, /* 070-077 */
- 0x078, 0x079, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 078-07f */
- 0x00a, 0x00b, 0x02a, 0x02b, 0x04a, 0x04b, 0x06a, 0x06b, /* 080-087 */
- 0x04e, 0x04f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 088-08f */
- 0x01a, 0x01b, 0x03a, 0x03b, 0x05a, 0x05b, 0x07a, 0x07b, /* 090-097 */
- 0x05e, 0x05f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 098-09f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a0-0a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0a8-0af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b0-0b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0b8-0bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c0-0c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0c8-0cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d0-0d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0d8-0df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e0-0e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0e8-0ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f0-0f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 0f8-0ff */
- 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, /* 100-107 */
- 0x088, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 108-10f */
- 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, /* 110-117 */
- 0x098, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 118-11f */
- 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, /* 120-127 */
- 0x0a8, 0x0a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 128-12f */
- 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, /* 130-137 */
- 0x0b8, 0x0b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 138-13f */
- 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, /* 140-147 */
- 0x0c8, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 148-14f */
- 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, /* 150-157 */
- 0x0d8, 0x0d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 158-15f */
- 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, /* 160-167 */
- 0x0e8, 0x0e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 168-16f */
- 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, /* 170-177 */
- 0x0f8, 0x0f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 178-17f */
- 0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca, 0x0cb, 0x0ea, 0x0eb, /* 180-187 */
- 0x0ce, 0x0cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 188-18f */
- 0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da, 0x0db, 0x0fa, 0x0fb, /* 190-197 */
- 0x0de, 0x0df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 198-19f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a0-1a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1a8-1af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b0-1b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1b8-1bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c0-1c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1c8-1cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d0-1d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1d8-1df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e0-1e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1e8-1ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f0-1f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 1f8-1ff */
- 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, /* 200-207 */
- 0x108, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 208-20f */
- 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, /* 210-217 */
- 0x118, 0x119, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 218-21f */
- 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, /* 220-227 */
- 0x128, 0x129, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 228-22f */
- 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, /* 230-237 */
- 0x138, 0x139, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 238-23f */
- 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, /* 240-247 */
- 0x148, 0x149, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 248-24f */
- 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, /* 250-257 */
- 0x158, 0x159, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 258-25f */
- 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, /* 260-267 */
- 0x168, 0x169, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 268-26f */
- 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, /* 270-277 */
- 0x178, 0x179, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 278-27f */
- 0x10a, 0x10b, 0x12a, 0x12b, 0x14a, 0x14b, 0x16a, 0x16b, /* 280-287 */
- 0x14e, 0x14f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 288-28f */
- 0x11a, 0x11b, 0x13a, 0x13b, 0x15a, 0x15b, 0x17a, 0x17b, /* 290-297 */
- 0x15e, 0x15f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 298-29f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a0-2a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2a8-2af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b0-2b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2b8-2bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c0-2c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2c8-2cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d0-2d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2d8-2df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e0-2e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2e8-2ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f0-2f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 2f8-2ff */
- 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, /* 300-307 */
- 0x188, 0x189, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 308-30f */
- 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, /* 310-317 */
- 0x198, 0x199, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 318-31f */
- 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, /* 320-327 */
- 0x1a8, 0x1a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 328-32f */
- 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, /* 330-337 */
- 0x1b8, 0x1b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 338-33f */
- 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, /* 340-347 */
- 0x1c8, 0x1c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 348-34f */
- 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, /* 350-357 */
- 0x1d8, 0x1d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 358-35f */
- 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, /* 360-367 */
- 0x1e8, 0x1e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 368-36f */
- 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, /* 370-377 */
- 0x1f8, 0x1f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 378-37f */
- 0x18a, 0x18b, 0x1aa, 0x1ab, 0x1ca, 0x1cb, 0x1ea, 0x1eb, /* 380-387 */
- 0x1ce, 0x1cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 388-38f */
- 0x19a, 0x19b, 0x1ba, 0x1bb, 0x1da, 0x1db, 0x1fa, 0x1fb, /* 390-397 */
- 0x1de, 0x1df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 398-39f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a0-3a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3a8-3af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b0-3b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3b8-3bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c0-3c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3c8-3cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d0-3d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3d8-3df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e0-3e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3e8-3ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f0-3f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 3f8-3ff */
- 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, /* 400-407 */
- 0x208, 0x209, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 408-40f */
- 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, /* 410-417 */
- 0x218, 0x219, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 418-41f */
- 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, /* 420-427 */
- 0x228, 0x229, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 428-42f */
- 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, /* 430-437 */
- 0x238, 0x239, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 438-43f */
- 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, /* 440-447 */
- 0x248, 0x249, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 448-44f */
- 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, /* 450-457 */
- 0x258, 0x259, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 458-45f */
- 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, /* 460-467 */
- 0x268, 0x269, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 468-46f */
- 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, /* 470-477 */
- 0x278, 0x279, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 478-47f */
- 0x20a, 0x20b, 0x22a, 0x22b, 0x24a, 0x24b, 0x26a, 0x26b, /* 480-487 */
- 0x24e, 0x24f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 488-48f */
- 0x21a, 0x21b, 0x23a, 0x23b, 0x25a, 0x25b, 0x27a, 0x27b, /* 490-497 */
- 0x25e, 0x25f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 498-49f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a0-4a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4a8-4af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b0-4b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4b8-4bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c0-4c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4c8-4cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d0-4d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4d8-4df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e0-4e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4e8-4ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f0-4f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 4f8-4ff */
- 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, /* 500-507 */
- 0x288, 0x289, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 508-50f */
- 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, /* 510-517 */
- 0x298, 0x299, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 518-51f */
- 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, /* 520-527 */
- 0x2a8, 0x2a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 528-52f */
- 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, /* 530-537 */
- 0x2b8, 0x2b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 538-53f */
- 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, /* 540-547 */
- 0x2c8, 0x2c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 548-54f */
- 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, /* 550-557 */
- 0x2d8, 0x2d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 558-55f */
- 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, /* 560-567 */
- 0x2e8, 0x2e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 568-56f */
- 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, /* 570-577 */
- 0x2f8, 0x2f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 578-57f */
- 0x28a, 0x28b, 0x2aa, 0x2ab, 0x2ca, 0x2cb, 0x2ea, 0x2eb, /* 580-587 */
- 0x2ce, 0x2cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 588-58f */
- 0x29a, 0x29b, 0x2ba, 0x2bb, 0x2da, 0x2db, 0x2fa, 0x2fb, /* 590-597 */
- 0x2de, 0x2df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 598-59f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a0-5a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5a8-5af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b0-5b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5b8-5bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c0-5c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5c8-5cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d0-5d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5d8-5df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e0-5e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5e8-5ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f0-5f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 5f8-5ff */
- 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, /* 600-607 */
- 0x308, 0x309, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 608-60f */
- 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, /* 610-617 */
- 0x318, 0x319, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 618-61f */
- 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, /* 620-627 */
- 0x328, 0x329, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 628-62f */
- 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, /* 630-637 */
- 0x338, 0x339, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 638-63f */
- 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, /* 640-647 */
- 0x348, 0x349, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 648-64f */
- 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, /* 650-657 */
- 0x358, 0x359, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 658-65f */
- 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, /* 660-667 */
- 0x368, 0x369, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 668-66f */
- 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, /* 670-677 */
- 0x378, 0x379, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 678-67f */
- 0x30a, 0x30b, 0x32a, 0x32b, 0x34a, 0x34b, 0x36a, 0x36b, /* 680-687 */
- 0x34e, 0x34f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 688-68f */
- 0x31a, 0x31b, 0x33a, 0x33b, 0x35a, 0x35b, 0x37a, 0x37b, /* 690-697 */
- 0x35e, 0x35f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 698-69f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a0-6a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6a8-6af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b0-6b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6b8-6bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c0-6c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6c8-6cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d0-6d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6d8-6df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e0-6e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6e8-6ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f0-6f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 6f8-6ff */
- 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, /* 700-707 */
- 0x388, 0x389, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 708-70f */
- 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, /* 710-717 */
- 0x398, 0x399, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 718-71f */
- 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, /* 720-727 */
- 0x3a8, 0x3a9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 728-72f */
- 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, /* 730-737 */
- 0x3b8, 0x3b9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 738-73f */
- 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, /* 740-747 */
- 0x3c8, 0x3c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 748-74f */
- 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, /* 750-757 */
- 0x3d8, 0x3d9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 758-75f */
- 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, /* 760-767 */
- 0x3e8, 0x3e9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 768-76f */
- 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x000, 0x3f5, 0x3f6, 0x3f7, /* 770-777 */
- 0x3f8, 0x3f9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 778-77f */
- 0x38a, 0x38b, 0x3aa, 0x3ab, 0x3ca, 0x3cb, 0x3ea, 0x3eb, /* 780-787 */
- 0x3ce, 0x3cf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 788-78f */
- 0x39a, 0x39b, 0x3ba, 0x3bb, 0x3da, 0x3db, 0x3fa, 0x3fb, /* 790-797 */
- 0x3de, 0x3df, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 798-79f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a0-7a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7a8-7af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b0-7b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7b8-7bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c0-7c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7c8-7cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d0-7d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7d8-7df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e0-7e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7e8-7ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f0-7f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 7f8-7ff */
- 0x00c, 0x00d, 0x10c, 0x10d, 0x20c, 0x20d, 0x30c, 0x30d, /* 800-807 */
- 0x02e, 0x02f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 808-80f */
- 0x01c, 0x01d, 0x11c, 0x11d, 0x21c, 0x21d, 0x31c, 0x31d, /* 810-817 */
- 0x03e, 0x03f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 818-81f */
- 0x02c, 0x02d, 0x12c, 0x12d, 0x22c, 0x22d, 0x32c, 0x32d, /* 820-827 */
- 0x12e, 0x12f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 828-82f */
- 0x03c, 0x03d, 0x13c, 0x13d, 0x23c, 0x23d, 0x33c, 0x33d, /* 830-837 */
- 0x13e, 0x13f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 838-83f */
- 0x04c, 0x04d, 0x14c, 0x14d, 0x24c, 0x24d, 0x34c, 0x34d, /* 840-847 */
- 0x22e, 0x22f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 848-84f */
- 0x05c, 0x05d, 0x15c, 0x15d, 0x25c, 0x25d, 0x35c, 0x35d, /* 850-857 */
- 0x23e, 0x23f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 858-85f */
- 0x06c, 0x06d, 0x16c, 0x16d, 0x26c, 0x26d, 0x36c, 0x36d, /* 860-867 */
- 0x32e, 0x32f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 868-86f */
- 0x07c, 0x07d, 0x17c, 0x17d, 0x27c, 0x27d, 0x37c, 0x37d, /* 870-877 */
- 0x33e, 0x33f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 878-87f */
- 0x00e, 0x00f, 0x10e, 0x10f, 0x20e, 0x20f, 0x30e, 0x30f, /* 880-887 */
- 0x06e, 0x06f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 888-88f */
- 0x01e, 0x01f, 0x11e, 0x11f, 0x21e, 0x21f, 0x31e, 0x31f, /* 890-897 */
- 0x07e, 0x07f, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 898-89f */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a0-8a7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8a8-8af */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b0-8b7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8b8-8bf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c0-8c7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8c8-8cf */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d0-8d7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8d8-8df */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e0-8e7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8e8-8ef */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f0-8f7 */
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 8f8-8ff */
- 0x08c, 0x08d, 0x18c, 0x18d, 0x28c, 0x28d, 0x38c, 0x38d, /* 900-907 */
- 0x0ae, 0x0af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 908-90f */
- 0x09c, 0x09d, 0x19c, 0x19d, 0x29c, 0x29d, 0x39c, 0x39d, /* 910-917 */
- 0x0be, 0x0bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 918-91f */
- 0x0ac, 0x0ad, 0x1ac, 0x1ad, 0x2ac, 0x2ad, 0x3ac, 0x3ad, /* 920-927 */
- 0x1ae, 0x1af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 928-92f */
- 0x0bc, 0x0bd, 0x1bc, 0x1bd, 0x2bc, 0x2bd, 0x3bc, 0x3bd, /* 930-937 */
- 0x1be, 0x1bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 938-93f */
- 0x0cc, 0x0cd, 0x1cc, 0x1cd, 0x2cc, 0x2cd, 0x3cc, 0x3cd, /* 940-947 */
- 0x2ae, 0x2af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 948-94f */
- 0x0dc, 0x0dd, 0x1dc, 0x1dd, 0x2dc, 0x2dd, 0x3dc, 0x3dd, /* 950-957 */
- 0x2be, 0x2bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 958-95f */
- 0x0ec, 0x0ed, 0x1ec, 0x1ed, 0x2ec, 0x2ed, 0x3ec, 0x3ed, /* 960-967 */
- 0x3ae, 0x3af, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 968-96f */
- 0x0fc, 0x0fd, 0x1fc, 0x1fd, 0x3f4, 0x2fd, 0x3fc, 0x3fd, /* 970-977 */
- 0x3be, 0x3bf, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 978-97f */
- 0x08e, 0x08f, 0x18e, 0x18f, 0x28e, 0x28f, 0x38e, 0x38f, /* 980-987 */
- 0x0ee, 0x0ef, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 988-98f */
- 0x09e, 0x09f, 0x19e, 0x19f, 0x29e, 0x29f, 0x39e, 0x39f, /* 990-997 */
- 0x0fe, 0x0ff, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, /* 998-99f */
-
- };
-
- void
- __get_dpd_digits (int bits, const void *const *args,
- char *str, int *exp_p, int *sign_p, int *nan_p, int *inf_p)
- {
-
- int exp;
- struct ieee754r_c_field c_f;
- if (bits == 32)
- {
- union ieee754r_Decimal32 d;
- d.sd = *(_Decimal32*)args[0];
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL32_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL32_Bias;
-
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
- str[7] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- }
- else if (bits == 64)
- {
- union ieee754r_Decimal64 d;
- d.dd = *(_Decimal64*)args[0];
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL64_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL64_Bias;
-
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- /* Packed fields crossing a word boundary require special handling. */
- __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
- __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
- __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
- __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
- str[16] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- }
- else if (bits == 128)
- {
- union ieee754r_Decimal128 d;
- d.td = *(_Decimal128*)args[0];
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL128_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL128_Bias;
-
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- /* Packed fields crossing a word boundary require special handling. */
- __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
- __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
- __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
- __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
- __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
- __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
- __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
- __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
- __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
- __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
- str[34] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- }
-
- str[0] = '0' + c_f.lmd;
- if (exp_p) *exp_p = exp;
- if (nan_p) *nan_p = c_f.is_nan;
- if (inf_p) *inf_p = c_f.is_inf;
-
- }
-
- void
- __get_digits_d32 (_Decimal32 x, char *str, int *exp_p, int *sign_p,
- int *nan_p, int *inf_p)
- {
- int exp;
- struct ieee754r_c_field c_f;
- union ieee754r_Decimal32 d;
- d.sd = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL32_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL32_Bias;
-
- str[0] = '0' + c_f.lmd;
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- __dfp_cpydeclet (str+4, dpd_to_char[d.ieee.cc1]);
- str[7] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- if (exp_p) *exp_p = exp;
- if (nan_p) *nan_p = c_f.is_nan;
- if (inf_p) *inf_p = c_f.is_inf;
-
- }
-
- void
- __get_digits_d64 (_Decimal64 x, char *str, int *exp_p, int *sign_p,
- int *nan_p, int *inf_p)
- {
- int exp;
- struct ieee754r_c_field c_f;
- union ieee754r_Decimal64 d;
- d.dd = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL64_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL64_Bias;
-
- str[0] = '0' + c_f.lmd;
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- /* Packed fields crossing a word boundary require special handling. */
- __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H8<<2) + d.ieee.cc1L2]);
- __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
- __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
- __dfp_cpydeclet (str+13, dpd_to_char[d.ieee.cc4]);
- str[16] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- if (exp_p) *exp_p = exp;
- if (nan_p) *nan_p = c_f.is_nan;
- if (inf_p) *inf_p = c_f.is_inf;
-
- }
-
- void
- __get_digits_d128 (_Decimal128 x, char *str, int *exp_p, int *sign_p,
- int *nan_p, int *inf_p)
- {
- int exp;
- struct ieee754r_c_field c_f;
- union ieee754r_Decimal128 d;
- d.td = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL128_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL128_Bias;
-
- str[0] = '0' + c_f.lmd;
- __dfp_cpydeclet (str+1, dpd_to_char[d.ieee.cc0]);
- /* Packed fields crossing a word boundary require special handling. */
- __dfp_cpydeclet (str+4, dpd_to_char[(d.ieee.cc1H4<<6) + d.ieee.cc1L6]);
- __dfp_cpydeclet (str+7, dpd_to_char[d.ieee.cc2]);
- __dfp_cpydeclet (str+10, dpd_to_char[d.ieee.cc3]);
- __dfp_cpydeclet (str+13, dpd_to_char[(d.ieee.cc4H6<<4) + d.ieee.cc4L4]);
- __dfp_cpydeclet (str+16, dpd_to_char[d.ieee.cc5]);
- __dfp_cpydeclet (str+19, dpd_to_char[d.ieee.cc6]);
- __dfp_cpydeclet (str+22, dpd_to_char[(d.ieee.cc7H8<<2) + d.ieee.cc7L2]);
- __dfp_cpydeclet (str+25, dpd_to_char[d.ieee.cc8]);
- __dfp_cpydeclet (str+28, dpd_to_char[d.ieee.cc9]);
- __dfp_cpydeclet (str+31, dpd_to_char[d.ieee.cc10]);
- str[34] = '\0';
- if (sign_p) *sign_p = d.ieee.negative;
- if (exp_p) *exp_p = exp;
- if (nan_p) *nan_p = c_f.is_nan;
- if (inf_p) *inf_p = c_f.is_inf;
-
- }
-
--- 0 ----
Index: dfp/sysdeps/powerpc/dpd-private.h
===================================================================
*** dfp/sysdeps/powerpc/dpd-private.h 2008-08-15 18:06:00.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,309 ****
- /* Data types for DPD format output.
-
- Copyright (C) 2006, 2007 IBM Corporation.
- Author(s): Steve Munroe <sjmunroe@xxxxxxxxxx>
-
- The Decimal Floating Point C Library is free software; you can
- redistribute it and/or modify it under the terms of the GNU Lesser
- General Public License version 2.1.
-
- The Decimal Floating Point C Library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Lesser General Public License version 2.1 for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License version 2.1 along with the Decimal Floating Point C Library;
- if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- Suite 330, Boston, MA 02111-1307 USA.
-
- Please see dfp/COPYING.txt for more information. */
-
- #ifndef _DPD_PRIVATE_H
- #define _DPD_PRIVATE_H 1
-
- #include <endian.h>
-
- /* copy the declet in the 'declet' param to the string in the 'str' param. */
- static inline void __dfp_cpydeclet(char * str, const char * declet)
- {
- str[0] = declet[0];
- str[1] = declet[1];
- str[2] = declet[2];
- }
-
- /* Basically itoa */
- static inline char* __dfp_exptostr(char *str, int val)
- {
- int digit;
- if (val < 0)
- {
- *str++ = '-';
- val = -val;
- } else {
- *str++ = '+';
- }
-
- if (val > 999)
- {
- digit = val / 1000;
- val %= 1000;
- *str++ = '0' + digit;
- digit = val / 100;
- val %= 100;
- *str++ = '0' + digit;
- digit = val / 10;
- val %= 10;
- *str++ = '0' + digit;
- } else if (val > 99)
- {
- digit = val / 100;
- val %= 100;
- *str++ = '0' + digit;
- digit = val / 10;
- val %= 10;
- *str++ = '0' + digit;
- } else if (val > 9)
- {
- digit = val / 10;
- val %= 10;
- *str++ = '0' + digit;
- }
- *str++ = '0' + val;
-
- return str;
- }
-
- union ieee754r_Decimal32
- {
- _Decimal32 sd;
- unsigned int si;
-
- /* This is the IEEE754r single-precision format. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int bec:6;
- unsigned int cc0:10;
- unsigned int cc1:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc1:10;
- unsigned int cc0:10;
- unsigned int bec:6;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee;
-
- /* This format makes it easier to see if a NaN is a signalling NaN. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int signaling_nan:1;
- unsigned int bec:5;
- unsigned int cc0:10;
- unsigned int cc1:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc1:10;
- unsigned int cc0:10;
- unsigned int bec:5;
- unsigned int signaling_nan:1;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee_nan;
- };
-
- #define DECIMAL32_Bias 101 /* bias for the exponent */
- #define DECIMAL32_BEC_bits 6 /* Bits in BEC */
- #define DECIMAL32_CC_bits 20 /* Bits in CC */
-
- union ieee754r_Decimal64
- {
- _Decimal64 dd;
- unsigned int di[2];
-
- /* This is the IEEE754r _Decimal64 format. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int bec:8;
- unsigned int cc0:10;
- unsigned int cc1H8:8;
- unsigned int cc1L2:2;
- unsigned int cc2:10;
- unsigned int cc3:10;
- unsigned int cc4:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc4:10;
- unsigned int cc3:10;
- unsigned int cc2:10;
- unsigned int cc1L2:2;
- unsigned int cc1H8:8;
- unsigned int cc0:10;
- unsigned int bec:8;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee;
-
- /* This format makes it easier to see if a NaN is a signalling NaN. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int signaling_nan:1;
- unsigned int bec:7;
- unsigned int cc0:10;
- unsigned int cc1H8:8;
- unsigned int cc1L2:2;
- unsigned int cc2:10;
- unsigned int cc3:10;
- unsigned int cc4:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc4:10;
- unsigned int cc3:10;
- unsigned int cc2:10;
- unsigned int cc1L2:2;
- unsigned int cc1H8:8;
- unsigned int cc0:10;
- unsigned int bec:7;
- unsigned int signaling_nan:1;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee_nan;
- };
-
- #define DECIMAL64_Bias 398 /* bias for the exponent */
- #define DECIMAL64_BEC_bits 8 /* Bits in BEC */
- #define DECIMAL64_CC_bits 50 /* Bits in CC */
-
- union ieee754r_Decimal128
- {
- _Decimal128 td;
- unsigned int ti[4];
-
- /* This is the IEEE754r _Decimal128 format. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int bec:12;
- unsigned int cc0:10;
- unsigned int cc1H4:4;
- unsigned int cc1L6:6;
- unsigned int cc2:10;
- unsigned int cc3:10;
- unsigned int cc4H6:6;
- unsigned int cc4L4:4;
- unsigned int cc5:10;
- unsigned int cc6:10;
- unsigned int cc7H8:8;
- unsigned int cc7L2:2;
- unsigned int cc8:10;
- unsigned int cc9:10;
- unsigned int cc10:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc10:10;
- unsigned int cc9:10;
- unsigned int cc8:10;
- unsigned int cc7L2:2;
- unsigned int cc7H8:8;
- unsigned int cc6:10;
- unsigned int cc5:10;
- unsigned int cc4L4:4;
- unsigned int cc4H6:6;
- unsigned int cc3:10;
- unsigned int cc2:10;
- unsigned int cc1L6:6;
- unsigned int cc1H4:4;
- unsigned int cc0:10;
- unsigned int bec:12;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee;
-
- /* This format makes it easier to see if a NaN is a signalling NaN. */
- struct
- {
- #if __BYTE_ORDER == __BIG_ENDIAN
- unsigned int negative:1;
- unsigned int c:5;
- unsigned int signaling_nan:1;
- unsigned int bec:11;
- unsigned int cc0:10;
- unsigned int cc1H4:4;
- unsigned int cc1L6:6;
- unsigned int cc2:10;
- unsigned int cc3:10;
- unsigned int cc4H6:6;
- unsigned int cc4L4:4;
- unsigned int cc5:10;
- unsigned int cc6:10;
- unsigned int cc7H8:8;
- unsigned int cc7L2:2;
- unsigned int cc8:10;
- unsigned int cc9:10;
- unsigned int cc10:10;
- #endif /* Big endian. */
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- unsigned int cc10:10;
- unsigned int cc9:10;
- unsigned int cc8:10;
- unsigned int cc7L2:2;
- unsigned int cc7H8:8;
- unsigned int cc6:10;
- unsigned int cc5:10;
- unsigned int cc4L4:4;
- unsigned int cc4H6:6;
- unsigned int cc3:10;
- unsigned int cc2:10;
- unsigned int cc1L6:6;
- unsigned int cc1H4:4;
- unsigned int cc0:10;
- unsigned int bec:11;
- unsigned int signaling_nan:1;
- unsigned int c:5;
- unsigned int negative:1;
- #endif /* Little endian. */
- } ieee_nan;
- };
-
- #define DECIMAL128_Bias 6176 /* bias for the exponent */
- #define DECIMAL128_BEC_bits 12 /* Bits in BEC */
- #define DECIMAL128_CC_bits 110 /* Bits in CC */
-
- struct ieee754r_c_field
- {
- unsigned int is_nan:1;
- unsigned int is_inf:1;
- unsigned int lm_exp:2;
- unsigned int lmd:4;
- };
-
- extern const struct ieee754r_c_field c_decoder[32];
- extern const unsigned char lm2lmd_to_c[10][3];
- extern const char dpd_to_char[1024][4];
- extern const const short int dpd_to_bcd[1024];
- extern const short int bcd_to_dpd[2464];
-
- void __get_digits_d32 (_Decimal32, char*, int*, int*, int *, int *);
- void __get_digits_d64 (_Decimal64, char*, int*, int*, int *, int *);
- void __get_digits_d128 (_Decimal128, char*, int*, int*, int *, int *);
-
- #endif /* _DPD_PRIVATE */
--- 0 ----
Index: dfp/sysdeps/powerpc/numdigits.h
===================================================================
*** dfp/sysdeps/powerpc/numdigits.h 2008-08-15 18:06:00.000000000 +0200
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
***************
*** 1,222 ****
- /* Number of digits functions.
-
- Copyright (C) 2006, 2007, 2008 IBM Corporation.
- Author(s): Pete Eberlein <eberlein@xxxxxxxxxx>
-
- The Decimal Floating Point C Library is free software; you can
- redistribute it and/or modify it under the terms of the GNU Lesser
- General Public License version 2.1.
-
- The Decimal Floating Point C Library is distributed in the hope that
- it will be useful, but WITHOUT ANY WARRANTY; without even the implied
- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- the GNU Lesser General Public License version 2.1 for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License version 2.1 along with the Decimal Floating Point C Library;
- if not, write to the Free Software Foundation, Inc., 59 Temple Place,
- Suite 330, Boston, MA 02111-1307 USA.
-
- Please see dfp/COPYING.txt for more information. */
-
-
- #ifndef _NUMDIGITS_H
- #define _NUMDIGITS_H 1
-
- #define NUMDIGITS_SUPPORT 1
-
- #ifndef DEC_TYPE
- #error DEC_TYPE must be declared
- #endif
-
- #ifndef _DECIMAL_SIZE
- #error _DECIMAL_SIZE must be declared
- #endif
-
- #include "dpd-private.h"
- #include <string.h>
-
- static inline int
- getexp (DEC_TYPE x)
- {
- int exp;
- struct ieee754r_c_field c_f;
-
- #if _DECIMAL_SIZE == 32
- union ieee754r_Decimal32 d;
- d.sd = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL32_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL32_Bias;
-
- #elif _DECIMAL_SIZE == 64
- union ieee754r_Decimal64 d;
- d.dd = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL64_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL64_Bias;
-
- #elif _DECIMAL_SIZE == 128
- union ieee754r_Decimal128 d;
- d.td = x;
- c_f = c_decoder[d.ieee.c];
- exp = c_f.lm_exp << DECIMAL128_BEC_bits;
- exp += d.ieee.bec;
- exp -= DECIMAL128_Bias;
-
- #endif
-
- return exp;
- }
-
-
- static inline DEC_TYPE
- setexp (DEC_TYPE x, int exp)
- {
-
- #if _DECIMAL_SIZE == 32
- union ieee754r_Decimal32 d;
- d.sd = x;
- exp += DECIMAL32_Bias;
- d.ieee.bec = exp;
- d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL32_BEC_bits];
- return d.sd;
-
- #elif _DECIMAL_SIZE == 64
- union ieee754r_Decimal64 d;
- d.dd = x;
- exp += DECIMAL64_Bias;
- d.ieee.bec = exp;
- d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL64_BEC_bits];
- return d.dd;
-
- #elif _DECIMAL_SIZE == 128
- union ieee754r_Decimal128 d;
- d.td = x;
- exp += DECIMAL128_Bias;
- d.ieee.bec = exp;
- d.ieee.c = lm2lmd_to_c[c_decoder[d.ieee.c].lmd][exp >> DECIMAL128_BEC_bits];
- return d.td;
-
- #endif
-
- }
-
- static inline unsigned int
- __dfp_declet_to_dpd(char *str)
- {
- return bcd_to_dpd[(str[0]<<8) + (str[1]<<4) + str[2] - '0'*0x111];
- }
-
- static inline DEC_TYPE
- setdigits (DEC_TYPE x, char *str)
- {
- unsigned int bcd;
- #if _DECIMAL_SIZE == 32
- union ieee754r_Decimal32 d;
- d.sd = x;
- d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
-
- d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
- d.ieee.cc1 = __dfp_declet_to_dpd(str+4);
-
- return d.sd;
-
- #elif _DECIMAL_SIZE == 64
- union ieee754r_Decimal64 d;
- d.dd = x;
- d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
-
- d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
- /* Packed fields crossing a word boundary require special handling. */
- bcd = __dfp_declet_to_dpd(str+4);
- d.ieee.cc1H8 = bcd>>2;
- d.ieee.cc1L2 = bcd;
- d.ieee.cc2 = __dfp_declet_to_dpd(str+7);
- d.ieee.cc3 = __dfp_declet_to_dpd(str+10);
- d.ieee.cc4 = __dfp_declet_to_dpd(str+13);
-
- return d.dd;
-
- #elif _DECIMAL_SIZE == 128
- union ieee754r_Decimal128 d;
- d.td = x;
- d.ieee.c = lm2lmd_to_c[str[0]-'0'][c_decoder[d.ieee.c].lm_exp];
-
- d.ieee.cc0 = __dfp_declet_to_dpd(str+1);
- /* Packed fields crossing a word boundary require special handling. */
- bcd = __dfp_declet_to_dpd(str+4);
- d.ieee.cc1H4 = bcd>>6;
- d.ieee.cc1L6 = bcd;
- d.ieee.cc2 = __dfp_declet_to_dpd(str+7);
- d.ieee.cc3 = __dfp_declet_to_dpd(str+10);
- bcd = __dfp_declet_to_dpd(str+13);
- d.ieee.cc4H6 = bcd>>4;
- d.ieee.cc4L4 = bcd;
- d.ieee.cc5 = __dfp_declet_to_dpd(str+16);
- d.ieee.cc6 = __dfp_declet_to_dpd(str+19);
- bcd = __dfp_declet_to_dpd(str+22);
- d.ieee.cc7H8 = bcd>>2;
- d.ieee.cc7L2 = bcd;
- d.ieee.cc8 = __dfp_declet_to_dpd(str+25);
- d.ieee.cc9 = __dfp_declet_to_dpd(str+28);
- d.ieee.cc10 = __dfp_declet_to_dpd(str+31);
-
- return d.td;
-
- #endif
- }
-
-
-
-
- static inline int
- numdigits (DEC_TYPE x)
- {
- int firstdigit = 0;
- #if _DECIMAL_SIZE == 32
- char digits[8];
- __get_digits_d32(x, digits, NULL, NULL, NULL, NULL);
- #elif _DECIMAL_SIZE == 64
- char digits[17];
- __get_digits_d64(x, digits, NULL, NULL, NULL, NULL);
- #elif _DECIMAL_SIZE == 128
- char digits[35];
- __get_digits_d128(x, digits, NULL, NULL, NULL, NULL);
- #endif
- while (digits[firstdigit] == '0') firstdigit++;
-
- return strlen(digits + firstdigit);
- }
-
- static inline DEC_TYPE
- left_justify (DEC_TYPE x)
- {
- int firstdigit = 0, len;
- #if _DECIMAL_SIZE == 32
- char digits[8+7];
- __get_digits_d32(x, digits, NULL, NULL, NULL, NULL);
- #elif _DECIMAL_SIZE == 64
- char digits[17+16];
- __get_digits_d64(x, digits, NULL, NULL, NULL, NULL);
- #elif _DECIMAL_SIZE == 128
- char digits[35+34];
- __get_digits_d128(x, digits, NULL, NULL, NULL, NULL);
- #endif
- while (digits[firstdigit] == '0') firstdigit++;
- len = strlen(digits + firstdigit);
- if (len)
- {
- /* pad the significant digits with enough trailing zeroes */
- memset(digits + firstdigit + len, '0', firstdigit);
- x = setdigits(x, digits + firstdigit);
- x = setexp(x, getexp(x) - firstdigit);
- }
-
- return x;
- }
-
-
- #endif /* _NUMDIGITS_H */
--- 0 ----
Index: dfp/Makefile
===================================================================
*** dfp/Makefile.orig 2008-08-15 18:06:00.000000000 +0200
--- dfp/Makefile 2008-08-15 18:13:31.000000000 +0200
*************** vpath %.h libdecnumber:libdecnumber/dpd
*** 15,22 ****
# Some symbols need to be in libdfp.so as well as libc.
! libdfp-shared = dfptypeconv decode-decimal \
! dpd-private
# \
# decNumber decimal32 decimal64 decimal128 decContext
--- 15,21 ----
# Some symbols need to be in libdfp.so as well as libc.
! libdfp-shared = dfptypeconv
# \
# decNumber decimal32 decimal64 decimal128 decContext
Index: dfp/sysdeps/dfp/dpd/Makefile
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/dfp/dpd/Makefile 2008-08-15 18:13:31.000000000 +0200
***************
*** 0 ****
--- 1,6 ----
+ headers += dpd-private.h numdigits.h
+
+ ifeq ($(subdir),dfp)
+ libdfp-shared += dpd-private decode-decimal
+ libdfp-routines += dpd-private decode-decimal
+ endif
Index: dfp/sysdeps/unix/sysv/linux/powerpc/Implies
===================================================================
*** /dev/null 1970-01-01 00:00:00.000000000 +0000
--- dfp/sysdeps/unix/sysv/linux/powerpc/Implies 2008-08-15 18:25:26.000000000 +0200
***************
*** 0 ****
--- 1 ----
+ dfp/dpd