Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!tut.cis.ohio-state.edu!THINK.COM!taylor From: taylor@THINK.COM Newsgroups: gnu.gdb.bug Subject: more gdb ns32k changes Message-ID: <8906040525.AA01133@pozzo> Date: 4 Jun 89 05:25:45 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 426 Here are some additional changes for the ns32k versions of gdb. The opcode table used by the disassembler has a number of errors. This fixes a number of them. And I got tired of seeing sCONDb, sCONDw, and sCONDd for the ``save condition as boolean'' instructions rather than seeing the mnemonic for the condition, so I decided to add them to the table. (It was just a little cut and paste from ns32k-opcode.h in the gas directory...) I also got tired of seeing numbers for the string options, the setcfg options, the cinv options, and the restore/exit/save/enter options. Thus, I put in the changes (modeled after the way the ns32k gas does it) to print them symbolically in a format acceptable to gas. There remain some instructions, such as lmr, smr, lpr{b,w,d}, and spr{b,w,d} that should be modified to print the name of the register rather than printing a number. It's very easily done using the same mechanism as that used for the setcfg, cinv, restore... instructions. But, I haven't done it yet. Maybe next weekend... This message also includes the changes I sent earlier today about the `movsu', `movus', and `or' instructions. Sorry. RCS file: RCS/ns32k-opcode.h,v retrieving revision 1.2 diff -c1 -r1.2 ns32k-opcode.h *** /tmp/,RCSt1001037 Sun Jun 4 00:39:03 1989 --- ns32k-opcode.h Sun Jun 4 00:37:14 1989 *************** *** 75,77 **** { "addqd", 7,16, 0x0f, "2D1q" }, ! { "addr", 6,16, 0x27, "1D2D" }, { "adjspb", 11,16, 0x057c, "1B" }, --- 75,77 ---- { "addqd", 7,16, 0x0f, "2D1q" }, ! { "addr", 6,16, 0x27, "1A2D" }, { "adjspb", 11,16, 0x057c, "1B" }, *************** *** 112,122 **** { "cased", 11,16, 0x77f, "1D" }, ! { "cbitb", 14,24, 0x084e, "1B2D" }, ! { "cbitw", 14,24, 0x094e, "1W2D" }, ! { "cbitd", 14,24, 0x0b4e, "1D2D" }, ! { "cbitib", 14,24, 0x0c4e, "1B2D" }, ! { "cbitiw", 14,24, 0x0d4e, "1W2D" }, ! { "cbitid", 14,24, 0x0f4e, "1D2D" }, { "checkb", 11,24, 0x0ee, "2A3B1r" }, ! { "checkw", 11,24, 0x1ee, "2A3B1r" }, { "checkd", 11,24, 0x3ee, "2A3D1r" }, { "cmpf", 14,24, 0x09be, "1F2F" }, --- 112,123 ---- { "cased", 11,16, 0x77f, "1D" }, ! { "cbitb", 14,24, 0x084e, "1B2A" }, ! { "cbitw", 14,24, 0x094e, "1W2A" }, ! { "cbitd", 14,24, 0x0b4e, "1D2A" }, ! { "cbitib", 14,24, 0x0c4e, "1B2A" }, ! { "cbitiw", 14,24, 0x0d4e, "1W2A" }, ! { "cbitid", 14,24, 0x0f4e, "1D2A" }, { "checkb", 11,24, 0x0ee, "2A3B1r" }, ! { "checkw", 11,24, 0x1ee, "2A3W1r" }, { "checkd", 11,24, 0x3ee, "2A3D1r" }, + { "cinv", 15,24, 0x271e, "2D1C" }, { "cmpf", 14,24, 0x09be, "1F2F" }, *************** *** 126,130 **** { "cmpd", 6,16, 0x07, "1D2D" }, ! { "cmpmb", 14,24, 0x04ce, "1D2D3d" }, ! { "cmpmw", 14,24, 0x05ce, "1D2D3d" }, ! { "cmpmd", 14,24, 0x07ce, "1D2D3d" }, { "cmpqb", 7,16, 0x1c, "2B1q" }, --- 127,131 ---- { "cmpd", 6,16, 0x07, "1D2D" }, ! { "cmpmb", 14,24, 0x04ce, "1A2A3d" }, ! { "cmpmw", 14,24, 0x05ce, "1A2A3d" }, ! { "cmpmd", 14,24, 0x07ce, "1A2A3d" }, { "cmpqb", 7,16, 0x1c, "2B1q" }, *************** *** 132,137 **** { "cmpqd", 7,16, 0x1f, "2D1q" }, ! { "cmpsb", 16,16, 0x040e, "1i" }, ! { "cmpsw", 16,16, 0x050e, "1i" }, ! { "cmpsd", 16,16, 0x070e, "1i" }, ! { "cmpst", 16,16, 0x840e, "1i" }, { "comb", 14,24, 0x344e, "1B2B" }, --- 133,138 ---- { "cmpqd", 7,16, 0x1f, "2D1q" }, ! { "cmpsb", 16,16, 0x040e, "1S" }, ! { "cmpsw", 16,16, 0x050e, "1S" }, ! { "cmpsd", 16,16, 0x070e, "1S" }, ! { "cmpst", 16,16, 0x840e, "1S" }, { "comb", 14,24, 0x344e, "1B2B" }, *************** *** 151,160 **** { "divd", 14,24, 0x3fce, "1D2D" }, ! { "enter", 8,8, 0x82, "1i2d" }, ! { "exit", 8,8, 0x92, "1i" }, ! { "extb", 11,24, 0x02e, "2D3B1r4d" }, ! { "extw", 11,24, 0x12e, "2D3W1r4d" }, ! { "extd", 11,24, 0x32e, "2D3D1r4d" }, ! { "extsb", 14,24, 0x0cce, "1D2B3i" }, ! { "extsw", 14,24, 0x0dce, "1D2W3i" }, ! { "extsd", 14,24, 0x0fce, "1D2D3i" }, { "ffsb", 14,24, 0x046e, "1B2B" }, --- 152,161 ---- { "divd", 14,24, 0x3fce, "1D2D" }, ! { "enter", 8,8, 0x82, "1U2d" }, ! { "exit", 8,8, 0x92, "1u" }, ! { "extb", 11,24, 0x02e, "2A3B1r4d" }, ! { "extw", 11,24, 0x12e, "2A3W1r4d" }, ! { "extd", 11,24, 0x32e, "2A3D1r4d" }, ! { "extsb", 14,24, 0x0cce, "1A2B3i" }, ! { "extsw", 14,24, 0x0dce, "1A2W3i" }, ! { "extsd", 14,24, 0x0fce, "1A2D3i" }, { "ffsb", 14,24, 0x046e, "1B2B" }, *************** *** 178,182 **** { "insd", 11,24, 0x3ae, "2D3D1r4d" }, ! { "inssb", 14,24, 0x08ce, "1B2D3i" }, ! { "inssw", 14,24, 0x09ce, "1W2D3i" }, ! { "inssd", 14,24, 0x0bce, "1D2D3i" }, { "jsr", 11,16, 0x67f, "1A" }, --- 179,183 ---- { "insd", 11,24, 0x3ae, "2D3D1r4d" }, ! { "inssb", 14,24, 0x08ce, "1B2A3i" }, ! { "inssw", 14,24, 0x09ce, "1W2A3i" }, ! { "inssd", 14,24, 0x0bce, "1D2A3i" }, { "jsr", 11,16, 0x67f, "1A" }, *************** *** 210,214 **** { "movlf", 14,24, 0x163e, "1L2F" }, ! { "movmb", 14,24, 0x00ce, "1D2D3d" }, ! { "movmw", 14,24, 0x00de, "1D2D3d" }, ! { "movmd", 14,24, 0x00fe, "1D2D3d" }, { "movqb", 7,16, 0x5c, "2B1q" }, --- 211,215 ---- { "movlf", 14,24, 0x163e, "1L2F" }, ! { "movmb", 14,24, 0x00ce, "1A2A3d" }, ! { "movmw", 14,24, 0x01ce, "1A2A3d" }, ! { "movmd", 14,24, 0x03ce, "1A2A3d" }, { "movqb", 7,16, 0x5c, "2B1q" }, *************** *** 216,227 **** { "movqd", 7,16, 0x5f, "2B1q" }, ! { "movsb", 16,16, 0x000e, "1i" }, ! { "movsw", 16,16, 0x010e, "1i" }, ! { "movsd", 16,16, 0x030e, "1i" }, ! { "movst", 16,16, 0x800e, "1i" }, ! { "movsub", 14,24, 0x0cae, "1A1A" }, ! { "movsuw", 14,24, 0x0dae, "1A1A" }, ! { "movsud", 14,24, 0x0fae, "1A1A" }, ! { "movusb", 14,24, 0x1cae, "1A1A" }, ! { "movusw", 14,24, 0x1dae, "1A1A" }, ! { "movusd", 14,24, 0x1fae, "1A1A" }, { "movxbd", 14,24, 0x1cce, "1B2D" }, --- 217,228 ---- { "movqd", 7,16, 0x5f, "2B1q" }, ! { "movsb", 16,16, 0x000e, "1S" }, ! { "movsw", 16,16, 0x010e, "1S" }, ! { "movsd", 16,16, 0x030e, "1S" }, ! { "movst", 16,16, 0x800e, "1S" }, ! { "movsub", 14,24, 0x0cae, "1A2A" }, ! { "movsuw", 14,24, 0x0dae, "1A2A" }, ! { "movsud", 14,24, 0x0fae, "1A2A" }, ! { "movusb", 14,24, 0x1cae, "1A2A" }, ! { "movusw", 14,24, 0x1dae, "1A2A" }, ! { "movusd", 14,24, 0x1fae, "1A2A" }, { "movxbd", 14,24, 0x1cce, "1B2D" }, *************** *** 246,250 **** { "notd", 14,24, 0x274e, "1D2D" }, ! { "orb", 6,16, 0x18, "1B1B" }, ! { "orw", 6,16, 0x19, "1W1W" }, ! { "ord", 6,16, 0x1b, "1D1D" }, { "quob", 14,24, 0x30ce, "1B2B" }, --- 247,251 ---- { "notd", 14,24, 0x274e, "1D2D" }, ! { "orb", 6,16, 0x18, "1B2B" }, ! { "orw", 6,16, 0x19, "1W2W" }, ! { "ord", 6,16, 0x1b, "1D2D" }, { "quob", 14,24, 0x30ce, "1B2B" }, *************** *** 256,258 **** { "remd", 14,24, 0x37ce, "1D2D" }, ! { "restore", 8,8, 0x72, "1i" }, { "ret", 8,8, 0x12, "1d" }, --- 257,259 ---- { "remd", 14,24, 0x37ce, "1D2D" }, ! { "restore", 8,8, 0x72, "1u" }, { "ret", 8,8, 0x12, "1d" }, *************** *** 259,261 **** { "reti", 8,8, 0x52, "" }, ! { "rett", 8,8, 0x42, "" }, { "rotb", 14,24, 0x004e, "1B2B" }, --- 260,262 ---- { "reti", 8,8, 0x52, "" }, ! { "rett", 8,8, 0x42, "1d" }, { "rotb", 14,24, 0x004e, "1B2B" }, *************** *** 270,275 **** { "rxp", 8,8, 0x32, "1d" }, ! { "sCONDb", 7,16, 0x3c, "2B1q" }, ! { "sCONDw", 7,16, 0x3d, "2D1q" }, ! { "sCONDd", 7,16, 0x3f, "2D1q" }, ! { "save", 8,8, 0x62, "1i" }, { "sbitb", 14,24, 0x184e, "1B2A" }, --- 271,321 ---- { "rxp", 8,8, 0x32, "1d" }, ! { "seqb", 11,16, 0x3c, "1B" }, ! { "seqw", 11,16, 0x3d, "1W" }, ! { "seqd", 11,16, 0x3f, "1D" }, ! { "sneb", 11,16, 0xbc, "1B" }, ! { "snew", 11,16, 0xbd, "1W" }, ! { "sned", 11,16, 0xbf, "1D" }, ! { "scsb", 11,16, 0x13c, "1B" }, ! { "scsw", 11,16, 0x13d, "1W" }, ! { "scsd", 11,16, 0x13f, "1D" }, ! { "sccb", 11,16, 0x1bc, "1B" }, ! { "sccw", 11,16, 0x1bd, "1W" }, ! { "sccd", 11,16, 0x1bf, "1D" }, ! { "shib", 11,16, 0x23c, "1B" }, ! { "shiw", 11,16, 0x23d, "1W" }, ! { "shid", 11,16, 0x23f, "1D" }, ! { "slsb", 11,16, 0x2bc, "1B" }, ! { "slsw", 11,16, 0x2bd, "1W" }, ! { "slsd", 11,16, 0x2bf, "1D" }, ! { "sgtb", 11,16, 0x33c, "1B" }, ! { "sgtw", 11,16, 0x33d, "1W" }, ! { "sgtd", 11,16, 0x33f, "1D" }, ! { "sleb", 11,16, 0x3bc, "1B" }, ! { "slew", 11,16, 0x3bd, "1W" }, ! { "sled", 11,16, 0x3bf, "1D" }, ! { "sfsb", 11,16, 0x43c, "1B" }, ! { "sfsw", 11,16, 0x43d, "1W" }, ! { "sfsd", 11,16, 0x43f, "1D" }, ! { "sfcb", 11,16, 0x4bc, "1B" }, ! { "sfcw", 11,16, 0x4bd, "1W" }, ! { "sfcd", 11,16, 0x4bf, "1D" }, ! { "slob", 11,16, 0x53c, "1B" }, ! { "slow", 11,16, 0x53d, "1W" }, ! { "slod", 11,16, 0x53f, "1D" }, ! { "shsb", 11,16, 0x5bc, "1B" }, ! { "shsw", 11,16, 0x5bd, "1W" }, ! { "shsd", 11,16, 0x5bf, "1D" }, ! { "sltb", 11,16, 0x63c, "1B" }, ! { "sltw", 11,16, 0x63d, "1W" }, ! { "sltd", 11,16, 0x63f, "1D" }, ! { "sgeb", 11,16, 0x6bc, "1B" }, ! { "sgew", 11,16, 0x6bd, "1W" }, ! { "sged", 11,16, 0x6bf, "1D" }, ! { "sutb", 11,16, 0x73c, "1B" }, ! { "sutw", 11,16, 0x73d, "1W" }, ! { "sutd", 11,16, 0x73f, "1D" }, ! { "sufb", 11,16, 0x7bc, "1B" }, ! { "sufw", 11,16, 0x7bd, "1W" }, ! { "sufd", 11,16, 0x7bf, "1D" }, ! { "save", 8,8, 0x62, "1U" }, { "sbitb", 14,24, 0x184e, "1B2A" }, *************** *** 280,287 **** { "sbitid", 14,24, 0x1f4e, "1D2A" }, ! { "setcfg", 15,24, 0x0b0e, "5D1q" }, ! { "sfsr", 14,24, 0x673e, "5D1D" }, ! { "skpsb", 16,16, 0x0c0e, "1i" }, ! { "skpsw", 16,16, 0x0d0e, "1i" }, ! { "skpsd", 16,16, 0x0f0e, "1i" }, ! { "skpst", 16,16, 0x8c0e, "1i" }, { "smr", 15,24, 0x0f1e, "2D1q" }, --- 326,333 ---- { "sbitid", 14,24, 0x1f4e, "1D2A" }, ! { "setcfg", 15,24, 0x0b0e, "5D1O" }, ! { "sfsr", 14,24, 0x373e, "5D1D" }, ! { "skpsb", 16,16, 0x0c0e, "1S" }, ! { "skpsw", 16,16, 0x0d0e, "1S" }, ! { "skpsd", 16,16, 0x0f0e, "1S" }, ! { "skpst", 16,16, 0x8c0e, "1S" }, { "smr", 15,24, 0x0f1e, "2D1q" }, *************** *** 320,321 **** --- 366,378 ---- { "xord", 6,16, 0x3b, "1D2D" }, + + #if defined(NS32381) + { "dotf", 14,24, 0x0dfe, "1F2F" }, + { "dotl", 14,24, 0x0cfe, "1L2L" }, + { "logbf", 14,24, 0x15fe, "1F2F" }, + { "logbl", 14,24, 0x14fe, "1L2L" }, + { "polyf", 14,24, 0x09fe, "1F2F" }, + { "polyl", 14,24, 0x08fe, "1L2L" }, + { "scalbf", 14,24, 0x11fe, "1F2F" }, + { "scalbl", 14,24, 0x10fe, "1L2L" }, + #endif }; /* notstrs */ =================================================================== RCS file: RCS/ns32k-pinsn.c,v retrieving revision 1.1 diff -c1 -r1.1 ns32k-pinsn.c *** /tmp/,RCSt1001037 Sun Jun 4 00:39:05 1989 --- ns32k-pinsn.c Sun Jun 4 00:13:26 1989 *************** *** 36,38 **** --- 36,128 ---- + + struct option { + char *pattern; /* the option itself */ + unsigned long value; /* binary value of the option */ + unsigned long match; /* these bits must match */ + }; + + + struct option opt1[]= /* restore, exit */ + { + { "r0", 0x80, 0x80 }, + { "r1", 0x40, 0x40 }, + { "r2", 0x20, 0x20 }, + { "r3", 0x10, 0x10 }, + { "r4", 0x08, 0x08 }, + { "r5", 0x04, 0x04 }, + { "r6", 0x02, 0x02 }, + { "r7", 0x01, 0x01 }, + { 0 , 0x00, 0x00 } + }; + + struct option opt2[]= /* save, enter */ + { + { "r0", 0x01, 0x01 }, + { "r1", 0x02, 0x02 }, + { "r2", 0x04, 0x04 }, + { "r3", 0x08, 0x08 }, + { "r4", 0x10, 0x10 }, + { "r5", 0x20, 0x20 }, + { "r6", 0x40, 0x40 }, + { "r7", 0x80, 0x80 }, + { 0 , 0x00, 0x00 } + }; + + struct option opt3[]= /* setcfg */ + { + { "c", 0x8, 0x8 }, + { "m", 0x4, 0x4 }, + { "f", 0x2, 0x2 }, + { "i", 0x1, 0x1 }, + { 0 , 0x0, 0x0 } + }; + + struct option opt4[]= /* cinv */ + { + { "a", 0x4, 0x4 }, + { "i", 0x2, 0x2 }, + { "d", 0x1, 0x1 }, + { 0 , 0x0, 0x0 } + }; + + struct option opt5[]= /* string inst */ + { + { "b", 0x1, 0x1 }, + { "u", 0x6, 0x6 }, + { "w", 0x2, 0x2 }, + { 0 , 0x0, 0x0 } + }; + /* + * figure out which options are present + */ + void + optlist(options, optionP, result) + int options; + struct option *optionP; + char *result; + { + if (options == 0) { + sprintf(result, "[]"); + return; + } + sprintf(result, "["); + + for (; (options != 0) && optionP->pattern; optionP++) { + if ((options & optionP->match) == optionP->value) { + /* we found a match, update result and options */ + strcat(result, optionP->pattern); + options &= ~optionP->value; + if (options != 0) /* more options to come */ + strcat(result, ","); + } + } + if (options != 0) + strcat(result, "undefined"); + + strcat(result, "]"); + } + + + /* * extract "count" bits starting "offset" bits *************** *** 367,368 **** --- 457,483 ---- sprintf (result, "0x%x", Ivalue); + break; + case 'u': + Ivalue = bit_extract (buffer, *aoffsetp, 8); + optlist(Ivalue, opt1, result); + *aoffsetp += 8; + break; + case 'U': + Ivalue = bit_extract(buffer, *aoffsetp, 8); + optlist(Ivalue, opt2, result); + *aoffsetp += 8; + break; + case 'O': + Ivalue = bit_extract(buffer, ioffset-4, 4); + optlist(Ivalue, opt3, result); + ioffset -= 4; + break; + case 'C': + Ivalue = bit_extract(buffer, ioffset-4, 4); + optlist(Ivalue, opt4, result); + ioffset -= 4; + break; + case 'S': + Ivalue = bit_extract(buffer, *aoffsetp, 8); + optlist(Ivalue, opt5, result); + *aoffsetp += 8; break;