OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v5/] [software/] [AS64/] [source/] [token.cpp] - Blame information for rev 54

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2014-2018  Robert Finch, Waterloo
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@finitron.ca
6
//       ||
7
//
8
// AS64 - Assembler
9
//  - 64 bit CPU
10
//
11
// This source file is free software: you can redistribute it and/or modify 
12
// it under the terms of the GNU Lesser General Public License as published 
13
// by the Free Software Foundation, either version 3 of the License, or     
14
// (at your option) any later version.                                      
15
//                                                                          
16
// This source file is distributed in the hope that it will be useful,      
17
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
19
// GNU General Public License for more details.                             
20
//                                                                          
21
// You should have received a copy of the GNU General Public License        
22
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
23
//                                                                          
24
// ============================================================================
25
//
26
#include "stdafx.h"
27
 
28
char *pinptr;
29
char lastid[500];
30 54 robfinch
char laststr[500];
31 48 robfinch
char lastch;
32
Int128 last_icon;
33
Int128 ival;
34
double rval;
35
 
36
int my_isspace(char ch)
37
{
38
    if (ch==' ' || ch=='\t' || ch=='\r')
39 54 robfinch
        return (1);
40
    return (0);
41 48 robfinch
}
42
int isspaceOrDot(char ch)
43
{
44 54 robfinch
        ch &= 0x7f;
45
        return (my_isspace(ch) || ch=='.');
46 48 robfinch
}
47
 
48
int isFirstIdentChar(char ch)
49
{
50 54 robfinch
        ch &= 0x7f;
51
  return (isalpha(ch) || ch=='_');
52 48 robfinch
}
53
 
54
int isIdentChar(char ch)
55
{
56 54 robfinch
        ch &= 0x7f;
57
        return (isalnum(ch) || ch=='_');
58 48 robfinch
}
59
 
60
int need(int tk)
61
{
62
    if (tk != token) {
63
        printf("Syntax error (%d).\r\n", lineno);
64
        printf("Line:%.60s\r\n", stptr);
65
    }
66
        return 1;
67
}
68
 
69
int expect(int tk)
70
{
71
    if (tk != token) {
72
        if (tk==tk_comma)
73
            printf("%d Expecting a , %.60s\r\n", lineno, inptr-30);
74
    }
75
    NextToken();
76
        return 1;
77
}
78
 
79
void SkipSpaces()
80
{
81
    while(my_isspace(*inptr)) inptr++;
82
}
83
 
84
void ScanToEOL()
85
{
86
     while(*inptr && *inptr!='\n') inptr++;
87
     lineno++;
88
}
89
 
90
int64_t radix36(char c)
91
{
92
        if(isdigit(c))
93
            return c - '0';
94
    if(c >= 'a' && c <= 'z')
95
            return c - 'a' + 10LL;
96
    if(c >= 'A' && c <= 'Z')
97
            return c - 'A' + 10LL;
98
    return -1LL;
99
}
100
 
101
/*
102
 *      getbase - get an integer in any base.
103
 */
104
void getbase(int b)
105
{
106
    Int128 i, j, ba;
107
    i.high = i.low = 0LL;
108
        ba.low = b;
109
        ba.high = 0LL;
110
    while(isalnum(*inptr) || *inptr=='_') {
111
        if (*inptr=='_') {
112
            inptr++;
113
            continue;
114
        }
115
        if((j.low = radix36(*inptr)) < b) {
116
                        j.high = 0LL;
117
                        Int128::Mul(&i,&i,&ba);
118
                        Int128::Add(&i,&i,&j);
119
                        //i = i * b + j;
120
                        inptr++;
121
                        }
122
                else break;
123
                }
124
                if (*inptr=='L' || *inptr=='U') // ignore a 'L'ong suffix and 'U'nsigned
125
                        inptr++;
126
    ival = i;
127
    token = tk_icon;
128
}
129
 
130
 
131
/*
132
 *      getbase - get an integer in base 2.
133
 */
134
/*
135
void getbase2()
136
{
137
    Int128 i, j;
138
 
139
    i = 0;
140
    while(*inptr=='0' || *inptr=='1' || *inptr=='_') {
141
        if (*inptr=='_') {
142
            inptr++;
143
            continue;
144
        }
145
        j = *inptr - '0';
146
        i = (i + i) | j;
147
        inptr++;
148
   }
149
   if (*inptr=='L' || *inptr=='U')      // ignore a 'L'ong suffix and 'U'nsigned
150
       inptr++;
151
    ival = i;
152
    token = tk_icon;
153
}
154
*/
155
//
156
// getfrac - get fraction part of a floating number.
157
//
158
void getfrac()
159
{
160
        double frmul;
161
    frmul = 0.1;
162
    while(isdigit(*inptr)) {
163
        rval += frmul * (*inptr - '0');
164
        inptr++;
165
        frmul *= 0.1;
166
    }
167
}
168
 
169
/*
170
 *      getexp - get exponent part of floating number.
171
 *
172
 *      this algorithm is primative but usefull.  Floating
173
 *      exponents are limited to +/-255 but most hardware
174
 *      won't support more anyway.
175
 */
176
void getexp()
177
{       double  expo, exmul;
178
        expo = 1.0;
179
        if(token != tk_rconst)
180
                rval = ival.low;
181
        if(*inptr == '-') {
182
                exmul = 0.1;
183
                inptr++;
184
                }
185
        else
186
                exmul = 10.0;
187
        getbase(10);
188
        if(ival.low > 255)
189
                printf("Error in floating point number.\r\n");
190
                //error(ERR_FPCON);
191
        else
192
                while(ival.low--)
193
                        expo *= exmul;
194
        rval *= expo;
195
}
196
/*
197
 *      getnum - get a number from input.
198
 *
199
 *      getnum handles all of the numeric input. it accepts
200
 *      decimal, octal, hexidecimal, and floating point numbers.
201
 */
202
void getnum()
203
{
204
     register int    i;
205
        i = 0;
206
        if(*inptr == '0') {
207
                inptr++;
208
                if(*inptr == 'x' || *inptr == 'X') {
209
                        inptr++;
210
                        getbase(16);
211
                        }
212
                else if(*inptr == 'o' || *inptr == 'O') {
213
                        inptr++;
214
                        getbase(8);
215
                        }
216
                else getbase(8);
217
                }
218
        else    {
219
                getbase(10);
220
                if(*inptr == '.') {
221
                        inptr++;
222
                        rval = ival.low;    /* float the integer part */
223
                        getfrac();      /* add the fractional part */
224
                        token = tk_rconst;
225
                        }
226
                if(*inptr == 'e' || *inptr == 'E') {
227
                        inptr++;
228
                        getexp();       /* get the exponent */
229
                        }
230
                                // Ignore 'U' unsigned suffix
231
                                if (*inptr=='U' || *inptr=='u') {
232
                                        inptr++;
233
                                }
234
                                }
235
 
236
}
237
 
238
/*
239
 *      getsch - get a character in a quoted string.
240
 *
241
 *      this routine handles all of the escape mechanisms
242
 *      for characters in strings and character constants.
243
 */
244
int64_t getsch()        /* return an in-quote character */
245
{
246
        register int64_t i, j;
247
        if(*inptr == '\n')
248
                return -1;
249
        if(*inptr != '\\') {
250
                i = *inptr;
251
                inptr++;
252
                return i;
253
                }
254
        inptr++;        /* get an escaped character */
255
        if(isdigit(*inptr)) {
256
                i = 0;
257
                for(j = i = 0;j < 3;++j) {
258
                        if(*inptr <= '7' && *inptr >= '0')
259
                                i = (i << 3) + *inptr - '0';
260
                        else
261
                                break;
262
                        inptr++;
263
                        }
264
                return i;
265
                }
266
        i = *inptr;
267
        inptr++;
268
        switch(i) {
269
                case '\n':
270
                        inptr++;
271
                        return getsch();
272
                case 'b':
273
                        return '\b';
274
                case 'f':
275
                        return '\f';
276
                case 'n':
277
                        return '\n';
278
                case 'r':
279
                        return '\r';
280
                                case 't':
281
                                                return '\t';
282
                default:
283
                        return i;
284
                }
285
}
286
 
287
int getIdentifier()
288
{
289 54 robfinch
  int nn;
290 48 robfinch
 
291
//    printf("GetIdentifier: %.30s\r\n", inptr);
292 54 robfinch
  if (isFirstIdentChar(*inptr) || (*inptr=='.' && isIdentChar(inptr[1]))) {
293
    nn = 1;
294
    lastid[0] = *inptr;
295
    inptr++;
296
    while(isIdentChar(*inptr) && nn < sizeof(lastid)-1) {
297
      lastid[nn] = *inptr;
298
      inptr++;
299
      nn++;
300 48 robfinch
    }
301 54 robfinch
    lastid[nn] = '\0';
302
    return 1;
303
  }
304
  else
305
    return 0;
306 48 robfinch
}
307
 
308 54 robfinch
void getString()
309
{
310
        int nn;
311
 
312
        nn = 0;
313
        while (*inptr && *inptr != '"' && *inptr != '\n' && nn < sizeof(laststr) - 2) {
314
                laststr[nn] = *inptr;
315
                nn++;
316
                inptr++;
317
        }
318
        inptr++;
319
        laststr[nn] = '\0';
320
}
321
 
322 48 robfinch
static char *pseudos[] = {
323 54 robfinch
    "align", "code", "data", "tls", "rodata", "file",
324
                "fill", "org", "byte", "message",(char *)NULL
325 48 robfinch
};
326
static int pseudoTokens[] = {
327 54 robfinch
    tk_align, tk_code, tk_data, tk_tls, tk_rodata, tk_file,
328 48 robfinch
    tk_fill, tk_org, tk_db, tk_message, tk_none
329
};
330
 
331
int isPseudoOp()
332
{
333 54 robfinch
  static char buf[500];
334
  char *p = inptr;
335
  int nn = 0;
336 48 robfinch
 
337 54 robfinch
  if (*p=='.') p++;
338
  if (!isFirstIdentChar(*p))
339
    return (0);
340
  while(isIdentChar(*p)) {
341
    buf[nn] = tolower(*p);
342
    p++;
343
    nn++;
344
  }
345
  buf[nn] = '\0';
346
  for (nn = 0; nn < 9; nn++) {
347
    if (strcmp(buf, pseudos[nn])==0) {
348
      //inptr = p;
349
      //token = pseudoTokens[nn];
350
      return (1);
351 48 robfinch
    }
352 54 robfinch
  }
353
  return (0);
354 48 robfinch
}
355
 
356
void prevToken()
357
{
358
    inptr = pinptr;
359
}
360
 
361
int NextToken()
362
{
363 54 robfinch
        char ch;
364
        char *p;
365
 
366 48 robfinch
    pinptr = inptr;
367
    do {
368
        if (*inptr=='\0')
369
           return token = tk_eof;
370
        SkipSpaces();                      // skip over leading spaces
371
        if (*inptr==';') {                 // comment ?
372
            ScanToEOL();
373
            continue;
374
        }
375 54 robfinch
                                ch = *inptr & 0x7f;
376
        if (isdigit(ch)) {
377 48 robfinch
           getnum();
378
           return token;
379
        }
380
        switch(*inptr) {
381 54 robfinch
                                case '"':
382
                                        inptr++;
383
                                        getString();
384
                                        return (token = tk_strconst);
385 48 robfinch
        case '.': if (isPseudoOp()) { inptr++; continue; }
386 54 robfinch
                  else if (getIdentifier()) { return (token = tk_id); }
387 48 robfinch
                  else { inptr++; continue; }
388
        case '\n': inptr++; return token = tk_eol;
389
        case '$': inptr++; getbase(16); return token = tk_icon;
390
        case '%': inptr++; getbase(2); return token = tk_icon;
391
        case ',': inptr++; return token = ',';
392
        case '+':
393
             if (inptr[1]=='}') {
394
               inptr += 2;
395
               return token = tk_end_expand;
396
             }
397
             inptr++; return token = '+';
398
        case '-': inptr++; return token = '-';
399
        case '/':
400
             if (inptr[1]=='/') {
401
                ScanToEOL();
402
                continue;
403
             }
404
             if (inptr[1]=='*') {
405
                inptr++;
406
                do {
407
                        if (inptr[0]=='\0') return token = tk_eof;
408
                        inptr++;
409
                } while(!(inptr[0]=='*' && inptr[1]=='/'));
410
                continue;
411
                         }
412
             inptr++;
413
             return token = '/';
414
        case '*': inptr++; return token = '*';
415
        case '#': inptr++; return token = '#';
416
        case '[': inptr++; return token = '[';
417
        case ']': inptr++; return token = ']';
418
        case '(': inptr++; return token = '(';
419
        case ')': inptr++; return token = ')';
420
        case '{':
421
             if (inptr[1]=='+') {
422
               inptr+=2;
423
               return token=tk_begin_expand;
424
             }
425
             break;
426
        case ':': inptr++; return token = ':';
427
        case '\'':
428
             inptr++;
429
             ival.low = getsch();
430
                         ival.high = 0;
431
             if (*inptr!='\'')
432
                 printf("Syntax error - missing close quote.\r\n");
433
             else
434
                 inptr++;
435
             return token = tk_icon;
436
        case '=':
437
             if (inptr[1]=='=') { inptr+=2; return token = tk_eq; }
438
             inptr++;
439
             return token = tk_eq;
440
        case '!':
441
             if (inptr[1]=='=') { inptr+=2; return token = tk_ne; }
442
             inptr++;
443
             return token = '!';
444
        case '>':
445
             if (inptr[1]=='>') { inptr+=2; return token = tk_rshift; }
446
             if (inptr[1]=='=') { inptr+=2; return token = tk_ge; }
447
             inptr++;
448
             return token = tk_gt;
449
        case '<':
450
             if (inptr[1]=='>') { inptr+=2; return token = tk_ne; }
451
             if (inptr[1]=='<') { inptr+=2; return token = tk_lshift; }
452
             if (inptr[1]=='=') { inptr+=2; return token = tk_le; }
453
             inptr++;
454
             return token = tk_lt;
455
        case '~': inptr++; return token = '~';
456
        case '|':
457
             if (inptr[1]=='|') { inptr+=2; return token = tk_lor; }
458
             inptr++;
459
             return token = '|';
460
        case '&':
461
             if (inptr[1]=='&') { inptr+=2; return token = tk_land; }
462
             inptr++;
463
             return token = '&';
464
 
465
        case '_':
466
             if (inptr[1]=='4' &&
467
             (inptr[2]=='a' || inptr[2]=='A') &&
468
             (inptr[3]=='d' || inptr[3]=='D') &&
469
             (inptr[4]=='d' || inptr[4]=='D') &&
470
             (inptr[5]=='u' || inptr[5]=='U') &&
471
             isspace(inptr[6])) {
472
                inptr += 6;
473
                return token = tk_4addu;
474
             }
475
             if (inptr[1]=='2' &&
476
             (inptr[2]=='a' || inptr[2]=='A') &&
477
             (inptr[3]=='d' || inptr[3]=='D') &&
478
             (inptr[4]=='d' || inptr[4]=='D') &&
479
             (inptr[5]=='u' || inptr[5]=='U') &&
480
             isspace(inptr[6])) {
481
                inptr += 6;
482
                return token = tk_2addu;
483
             }
484
             if (inptr[1]=='8' &&
485
             (inptr[2]=='a' || inptr[2]=='A') &&
486
             (inptr[3]=='d' || inptr[3]=='D') &&
487
             (inptr[4]=='d' || inptr[4]=='D') &&
488
             (inptr[5]=='u' || inptr[5]=='U') &&
489
             isspace(inptr[6])) {
490
                inptr += 6;
491
                return token = tk_8addu;
492
             }
493
             if (inptr[1]=='1' && inptr[2]=='6' &&
494
             (inptr[3]=='a' || inptr[3]=='A') &&
495
             (inptr[4]=='d' || inptr[4]=='D') &&
496
             (inptr[5]=='d' || inptr[5]=='D') &&
497
             (inptr[6]=='u' || inptr[6]=='U') &&
498
             isspace(inptr[7])) {
499
                inptr += 7;
500
                return token = tk_16addu;
501
             }
502
             if (inptr[1]=='4' &&
503
             (inptr[2]=='a' || inptr[2]=='A') &&
504
             (inptr[3]=='d' || inptr[3]=='D') &&
505
             (inptr[4]=='d' || inptr[4]=='D') &&
506
             (inptr[5]=='u' || inptr[5]=='U') &&
507
             (inptr[6]=='i' || inptr[6]=='I') &&
508
             isspace(inptr[7])) {
509
                inptr += 7;
510
                return token = tk_4addui;
511
             }
512
             if (inptr[1]=='2' &&
513
             (inptr[2]=='a' || inptr[2]=='A') &&
514
             (inptr[3]=='d' || inptr[3]=='D') &&
515
             (inptr[4]=='d' || inptr[4]=='D') &&
516
             (inptr[5]=='u' || inptr[5]=='U') &&
517
             (inptr[6]=='i' || inptr[6]=='I') &&
518
             isspace(inptr[7])) {
519
                inptr += 7;
520
                return token = tk_2addui;
521
             }
522
             if (inptr[1]=='8' &&
523
             (inptr[2]=='a' || inptr[2]=='A') &&
524
             (inptr[3]=='d' || inptr[3]=='D') &&
525
             (inptr[4]=='d' || inptr[4]=='D') &&
526
             (inptr[5]=='u' || inptr[5]=='U') &&
527
             (inptr[6]=='i' || inptr[6]=='I') &&
528
             isspace(inptr[7])) {
529
                inptr += 7;
530
                return token = tk_8addui;
531
             }
532
             if (inptr[1]=='1' && inptr[2]=='6' &&
533
             (inptr[3]=='a' || inptr[3]=='A') &&
534
             (inptr[4]=='d' || inptr[4]=='D') &&
535
             (inptr[5]=='d' || inptr[5]=='D') &&
536
             (inptr[6]=='u' || inptr[6]=='U') &&
537
             (inptr[7]=='i' || inptr[7]=='I') &&
538
             isspace(inptr[8])) {
539
                inptr += 8;
540
                return token = tk_16addui;
541
             }
542
             break;
543
 
544
        // abs add addi addu addui and andi align asr asri
545
        case 'a':
546
        case 'A':
547
            if ((inptr[1]=='n' || inptr[1]=='N') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
548
                inptr += 3;
549
                return token = tk_and;
550
            }
551
            if ((inptr[1]=='d' || inptr[1]=='D') && (inptr[2]=='d' || inptr[2]=='D') && (inptr[3]=='u' || inptr[3]=='U') && isspace(inptr[4])) {
552
                inptr += 4;
553
                return token = tk_addu;
554
            }
555
            if ((inptr[1]=='d' || inptr[1]=='D') &&
556
                (inptr[2]=='d' || inptr[2]=='D') &&
557
                (inptr[3]=='u' || inptr[3]=='U') &&
558
                (inptr[4]=='i' || inptr[4]=='I') &&
559
                isspace(inptr[5])) {
560
                inptr += 5;
561
                return token = tk_addui;
562
            }
563
            if ((inptr[1]=='d' || inptr[1]=='D') && (inptr[2]=='d' || inptr[2]=='D') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
564
                inptr += 4;
565
                return token = tk_addi;
566
            }
567
            if ((inptr[1]=='d' || inptr[1]=='D') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
568
                inptr += 3;
569
                return token = tk_add;
570
            }
571
            if ((inptr[1]=='l' || inptr[1]=='L') && (inptr[2]=='i' || inptr[2]=='I') && (inptr[3]=='g' || inptr[3]=='G') && (inptr[4]=='n' || inptr[4]=='N') && isspace(inptr[5])) {
572
                inptr += 5;
573
                return token = tk_align;
574
            }
575
            if ((inptr[1]=='n' || inptr[1]=='N') && (inptr[2]=='d' || inptr[2]=='D') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
576
                inptr += 4;
577
                return token = tk_andi;
578
            }
579
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='r' || inptr[2]=='R') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
580
                inptr += 4;
581
                return token = tk_asri;
582
            }
583
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='r' || inptr[2]=='R') && isspaceOrDot(inptr[3])) {
584
                inptr += 3;
585
                return token = tk_asr;
586
            }
587
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='l' || inptr[2]=='L') && (inptr[3]=='i' || inptr[3]=='I') && isspaceOrDot(inptr[4])) {
588
                inptr += 4;
589
                return token = tk_asli;
590
            }
591
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='l' || inptr[2]=='L') && isspaceOrDot(inptr[3])) {
592
                inptr += 3;
593
                return token = tk_asl;
594
            }
595
            if ((inptr[1]=='b' || inptr[1]=='B') && (inptr[2]=='s' || inptr[2]=='S') && isspace(inptr[3])) {
596
                inptr += 3;
597
                return token = tk_abs;
598
            }
599
            break;
600
 
601
        // beq bne bit
602
        case 'b':
603
        case 'B':
604
            if ((inptr[1]=='e' || inptr[1]=='E') &&
605
                (inptr[2]=='q' || inptr[2]=='Q') &&
606
                 isspace(inptr[3])) {
607
                inptr += 3;
608
                return token = tk_beq;
609
            }
610
            if ((inptr[1]=='e' || inptr[1]=='E') &&
611
                (inptr[2]=='q' || inptr[2]=='Q') &&
612
                (inptr[3]=='i' || inptr[2]=='I') &&
613
                 isspace(inptr[4])) {
614
                inptr += 4;
615
                return token = tk_beqi;
616
            }
617
            if ((inptr[1]=='n' || inptr[1]=='N') &&
618
                (inptr[2]=='e' || inptr[2]=='E') &&
619
                 isspace(inptr[3])) {
620
                inptr += 3;
621
                return token = tk_bne;
622
            }
623
            if ((inptr[1]=='n' || inptr[1]=='N') &&
624
                (inptr[2]=='e' || inptr[2]=='E') &&
625
                (inptr[3]=='i' || inptr[3]=='I') &&
626
                 isspace(inptr[4])) {
627
                inptr += 4;
628
                return token = tk_bnei;
629
            }
630
            if ((inptr[1]=='r' || inptr[1]=='R') &&
631
                (inptr[2]=='a' || inptr[2]=='A') &&
632
                 isspace(inptr[3])) {
633
                inptr += 3;
634
                return token = tk_bra;
635
            }
636
            if ((inptr[1]=='r' || inptr[1]=='R') &&
637
                (inptr[2]=='z' || inptr[2]=='Z') &&
638
                 isspace(inptr[3])) {
639
                inptr += 3;
640
                return token = tk_brz;
641
            }
642
            if ((inptr[1]=='l' || inptr[1]=='L') &&
643
                (inptr[2]=='t' || inptr[2]=='T') &&
644
                 isspace(inptr[3])) {
645
                inptr += 3;
646
                return token = tk_blt;
647
            }
648
            if ((inptr[1]=='l' || inptr[1]=='L') &&
649
                (inptr[2]=='t' || inptr[2]=='T') &&
650
                (inptr[3]=='i' || inptr[3]=='I') &&
651
                 isspace(inptr[4])) {
652
                inptr += 4;
653
                return token = tk_blti;
654
            }
655
            if ((inptr[1]=='l' || inptr[1]=='L') &&
656
                (inptr[2]=='t' || inptr[2]=='T') &&
657
                (inptr[3]=='u' || inptr[3]=='U') &&
658
                 isspace(inptr[4])) {
659
                inptr += 4;
660
                return token = tk_bltu;
661
            }
662
            if ((inptr[1]=='l' || inptr[1]=='L') &&
663
                (inptr[2]=='t' || inptr[2]=='T') &&
664
                (inptr[3]=='u' || inptr[3]=='U') &&
665
                (inptr[4]=='i' || inptr[4]=='I') &&
666
                 isspace(inptr[5])) {
667
                inptr += 5;
668
                return token = tk_bltui;
669
            }
670
            if ((inptr[1]=='l' || inptr[1]=='L') &&
671
                (inptr[2]=='o' || inptr[2]=='O') &&
672
                 isspace(inptr[3])) {
673
                inptr += 3;
674
                return token = tk_bltu;
675
            }
676
            if ((inptr[1]=='l' || inptr[1]=='L') &&
677
                (inptr[2]=='e' || inptr[2]=='E') &&
678
                 isspace(inptr[3])) {
679
                inptr += 3;
680
                return token = tk_ble;
681
            }
682
            if ((inptr[1]=='l' || inptr[1]=='L') &&
683
                (inptr[2]=='e' || inptr[2]=='E') &&
684
                (inptr[3]=='i' || inptr[3]=='I') &&
685
                 isspace(inptr[4])) {
686
                inptr += 4;
687
                return token = tk_blei;
688
            }
689
            if ((inptr[1]=='l' || inptr[1]=='L') &&
690
                (inptr[2]=='e' || inptr[2]=='E') &&
691
                (inptr[3]=='u' || inptr[3]=='U') &&
692
                 isspace(inptr[4])) {
693
                inptr += 4;
694
                return token = tk_bleu;
695
            }
696
            if ((inptr[1]=='l' || inptr[1]=='L') &&
697
                (inptr[2]=='e' || inptr[2]=='E') &&
698
                (inptr[3]=='u' || inptr[3]=='U') &&
699
                (inptr[4]=='i' || inptr[4]=='I') &&
700
                 isspace(inptr[5])) {
701
                inptr += 5;
702
                return token = tk_bleui;
703
            }
704
            if ((inptr[1]=='l' || inptr[1]=='L') &&
705
                (inptr[2]=='s' || inptr[2]=='S') &&
706
                 isspace(inptr[3])) {
707
                inptr += 3;
708
                return token = tk_bleu;
709
            }
710
            if ((inptr[1]=='g' || inptr[1]=='G') &&
711
                (inptr[2]=='e' || inptr[2]=='E') &&
712
                 isspace(inptr[3])) {
713
                inptr += 3;
714
                return token = tk_bge;
715
            }
716
            if ((inptr[1]=='g' || inptr[1]=='G') &&
717
                (inptr[2]=='e' || inptr[2]=='E') &&
718
                (inptr[3]=='i' || inptr[3]=='I') &&
719
                 isspace(inptr[4])) {
720
                inptr += 4;
721
                return token = tk_bgei;
722
            }
723
            if ((inptr[1]=='g' || inptr[1]=='G') &&
724
                (inptr[2]=='e' || inptr[2]=='E') &&
725
                (inptr[3]=='u' || inptr[3]=='U') &&
726
                 isspace(inptr[4])) {
727
                inptr += 4;
728
                return token = tk_bgeu;
729
            }
730
            if ((inptr[1]=='g' || inptr[1]=='G') &&
731
                (inptr[2]=='e' || inptr[2]=='E') &&
732
                (inptr[3]=='u' || inptr[3]=='U') &&
733
                (inptr[4]=='i' || inptr[4]=='I') &&
734
                 isspace(inptr[5])) {
735
                inptr += 5;
736
                return token = tk_bgeui;
737
            }
738
            if ((inptr[1]=='h' || inptr[1]=='H') &&
739
                (inptr[2]=='s' || inptr[2]=='S') &&
740
                 isspace(inptr[3])) {
741
                inptr += 3;
742
                return token = tk_bgeu;
743
            }
744
            if ((inptr[1]=='g' || inptr[1]=='G') &&
745
                (inptr[2]=='t' || inptr[2]=='T') &&
746
                 isspace(inptr[3])) {
747
                inptr += 3;
748
                return token = tk_bgt;
749
            }
750
            if ((inptr[1]=='g' || inptr[1]=='G') &&
751
                (inptr[2]=='t' || inptr[2]=='T') &&
752
                (inptr[3]=='i' || inptr[3]=='I') &&
753
                 isspace(inptr[4])) {
754
                inptr += 4;
755
                return token = tk_bgti;
756
            }
757
            if ((inptr[1]=='g' || inptr[1]=='G') &&
758
                (inptr[2]=='t' || inptr[2]=='T') &&
759
                (inptr[3]=='u' || inptr[3]=='U') &&
760
                 isspace(inptr[4])) {
761
                inptr += 4;
762
                return token = tk_bgtu;
763
            }
764
            if ((inptr[1]=='g' || inptr[1]=='G') &&
765
                (inptr[2]=='t' || inptr[2]=='T') &&
766
                (inptr[3]=='u' || inptr[3]=='U') &&
767
                (inptr[4]=='i' || inptr[4]=='I') &&
768
                 isspace(inptr[5])) {
769
                inptr += 5;
770
                return token = tk_bgtui;
771
            }
772
            if ((inptr[1]=='h' || inptr[1]=='H') &&
773
                (inptr[2]=='i' || inptr[2]=='I') &&
774
                 isspace(inptr[3])) {
775
                inptr += 3;
776
                return token = tk_bgtu;
777
            }
778
            if ((inptr[1]=='r' || inptr[1]=='R') &&
779
                (inptr[2]=='n' || inptr[2]=='N') &&
780
                (inptr[3]=='z' || inptr[3]=='Z') &&
781
                 isspace(inptr[4])) {
782
                inptr += 4;
783
                return token = tk_brnz;
784
            }
785
            if ((inptr[1]=='s' || inptr[1]=='S') &&
786
                (inptr[2]=='r' || inptr[2]=='R') &&
787
                 isspace(inptr[3])) {
788
                inptr += 3;
789
                return token = tk_bsr;
790
            }
791
            if ((inptr[1]=='m' || inptr[1]=='M') &&
792
                (inptr[2]=='i' || inptr[2]=='I') &&
793
                 isspace(inptr[3])) {
794
                inptr += 3;
795
                return token = tk_bmi;
796
            }
797
            if ((inptr[1]=='p' || inptr[1]=='P') &&
798
                (inptr[2]=='l' || inptr[2]=='L') &&
799
                 isspace(inptr[3])) {
800
                inptr += 3;
801
                return token = tk_bpl;
802
            }
803
            if ((inptr[1]=='v' || inptr[1]=='V') &&
804
                (inptr[2]=='c' || inptr[2]=='C') &&
805
                 isspace(inptr[3])) {
806
                inptr += 3;
807
                return token = tk_bvc;
808
            }
809
            if ((inptr[1]=='v' || inptr[1]=='V') &&
810
                (inptr[2]=='s' || inptr[2]=='S') &&
811
                 isspace(inptr[3])) {
812
                inptr += 3;
813
                return token = tk_bvs;
814
            }
815
            if (inptr[1]=='r' && inptr[2]=='k' && isspace(inptr[3])) {
816
                inptr += 3;
817
                return token = tk_brk;
818
            }
819
            if ((inptr[1]=='r' || inptr[1]=='R') &&
820
                (inptr[2]=='p' || inptr[2]=='P') &&
821
                (inptr[3]=='l' || inptr[3]=='L') &&
822
                 isspace(inptr[4])) {
823
                inptr += 4;
824
                return token = tk_bpl;
825
            }
826
            if ((inptr[1]=='r' || inptr[1]=='R') &&
827
                (inptr[2]=='m' || inptr[2]=='M') &&
828
                (inptr[3]=='i' || inptr[3]=='I') &&
829
                 isspace(inptr[4])) {
830
                inptr += 4;
831
                return token = tk_bmi;
832
            }
833
            if ((inptr[1]=='s' || inptr[1]=='S') &&
834
                (inptr[2]=='s' || inptr[2]=='S') &&
835
                 isspace(inptr[3])) {
836
                inptr += 3;
837
                return token = tk_bss;
838
            }
839
            if ((inptr[1]=='i' || inptr[1]=='I') &&
840
                (inptr[2]=='t' || inptr[2]=='T') &&
841
                (inptr[3]=='s' || inptr[3]=='S') &&
842
                 isspace(inptr[4])) {
843
                inptr += 4;
844
                return token = tk_bits;
845
            }
846
            if ((inptr[1]=='y' || inptr[1]=='Y') &&
847
                (inptr[2]=='t' || inptr[2]=='T') &&
848
                (inptr[3]=='e' || inptr[3]=='E') &&
849
                 isspace(inptr[4])) {
850
                inptr += 4;
851
                return token = tk_db;
852
            }
853
            if ((inptr[1]=='f' || inptr[1]=='F') &&
854
                (inptr[2]=='e' || inptr[2]=='E') &&
855
                (inptr[3]=='x' || inptr[3]=='X') &&
856
                (inptr[4]=='t' || inptr[4]=='T') &&
857
                 isspace(inptr[5])) {
858
                inptr += 5;
859
                return token = tk_bfext;
860
            }
861
            if ((inptr[1]=='f' || inptr[1]=='F') &&
862
                (inptr[2]=='i' || inptr[2]=='I') &&
863
                (inptr[3]=='n' || inptr[3]=='N') &&
864
                (inptr[4]=='s' || inptr[4]=='S') &&
865
                 isspace(inptr[5])) {
866
                inptr += 5;
867
                return token = tk_bfins;
868
            }
869
            if ((inptr[1]=='f' || inptr[1]=='F') &&
870
                (inptr[2]=='e' || inptr[2]=='E') &&
871
                (inptr[3]=='x' || inptr[3]=='X') &&
872
                (inptr[4]=='t' || inptr[4]=='T') &&
873
                (inptr[5]=='u' || inptr[5]=='U') &&
874
                 isspace(inptr[6])) {
875
                inptr += 6;
876
                return token = tk_bfextu;
877
            }
878
            if (gCpu==4) {
879
                if ((inptr[1]=='r' || inptr[1]=='R') && isspace(inptr[2])) {
880
                    inptr += 2;
881
                    return token = tk_br;
882
                }
883
                if ((inptr[1]=='i' || inptr[1]=='I') &&
884
                    (inptr[2]=='t' || inptr[2]=='T') &&
885
                     isspace(inptr[3])) {
886
                    inptr += 3;
887
                    return token = tk_bit;
888
                }
889
                if ((inptr[1]=='i' || inptr[1]=='I') &&
890
                    (inptr[2]=='t' || inptr[2]=='T') &&
891
                    (inptr[3]=='i' || inptr[3]=='I') &&
892
                     isspace(inptr[4])) {
893
                    inptr += 4;
894
                    return token = tk_biti;
895
                }
896
            }
897
                        if (gCpu==7 || gCpu=='A' || gCpu=='F') {
898
                if ((inptr[1]=='b' || inptr[1]=='B') &&
899
                    (inptr[2]=='c' || inptr[2]=='C') &&
900
                     isspace(inptr[3])) {
901
                    inptr += 3;
902
                    return token = tk_bbc;
903
                }
904
                if ((inptr[1]=='b' || inptr[1]=='B') &&
905
                    (inptr[2]=='s' || inptr[2]=='S') &&
906
                     isspace(inptr[3])) {
907
                    inptr += 3;
908
                    return token = tk_bbs;
909
                }
910
                        }
911
            break;
912
 
913
        // call cas chk cmp cmpu code cli com cmpi csrrc csrrs csrrw
914
        case 'c': case 'C':
915
                        if (gCpu=='F' || gCpu=='G') {
916
                                if ((inptr[1]=='a' || inptr[1]=='A')
917
                                        && (inptr[2]=='c' || inptr[2]=='C')
918
                                        && (inptr[3]=='h' || inptr[3]=='H')
919
                                        && (inptr[4]=='e' || inptr[4]=='E')
920
                                        && isspace(inptr[5])) {
921
                                                inptr += 5;
922
                                                return (token = tk_cache);
923
                                }
924
                        }
925
                         if (gCpu==7 || gCpu=='A' || gCpu=='F' || gCpu=='G') {
926
                 if ((inptr[1]=='a' || inptr[1]=='A') &&
927
                     (inptr[2]=='l' || inptr[2]=='L') &&
928
                     (inptr[3]=='l' || inptr[3]=='L') &&
929
                     isspace(inptr[4])) {
930
                     inptr += 4;
931
                     return token = tk_call;
932
                 }
933
                 if ((inptr[1]=='a' || inptr[1]=='A') &&
934
                     (inptr[2]=='l' || inptr[2]=='L') &&
935
                     (inptr[3]=='l' || inptr[3]=='L') &&
936
                     (inptr[4]=='t' || inptr[4]=='T') &&
937
                     (inptr[5]=='g' || inptr[5]=='G') &&
938
                     (inptr[6]=='t' || inptr[6]=='T') &&
939
                     isspace(inptr[7])) {
940
                     inptr += 7;
941
                     return token = tk_calltgt;
942
                 }
943
                         }
944
             if (gCpu==4) {
945
                 if ((inptr[1]=='m' || inptr[1]=='M') &&
946
                     (inptr[2]=='p' || inptr[2]=='P') &&
947
                     (inptr[3]=='i' || inptr[3]=='I') &&
948
                     isspace(inptr[4])) {
949
                     inptr += 4;
950
                     return token = tk_cmpi;
951
                 }
952
             }
953
             if ((inptr[1]=='m' || inptr[1]=='M') &&
954
                 (inptr[2]=='p' || inptr[2]=='P') &&
955
                 (inptr[3]=='u' || inptr[3]=='U') &&
956
                 isspace(inptr[4])) {
957
                 inptr += 4;
958
                 return token = tk_cmpu;
959
             }
960
             if ((inptr[1]=='m' || inptr[1]=='M') &&
961
                 (inptr[2]=='p' || inptr[2]=='P') &&
962
                 (inptr[3]=='u' || inptr[3]=='U') &&
963
                 (inptr[4]=='i' || inptr[4]=='I') &&
964
                 isspace(inptr[5])) {
965
                 inptr += 5;
966
                 return token = tk_cmpui;
967
             }
968
             if ((inptr[1]=='m' || inptr[1]=='M') &&
969
                 (inptr[2]=='p' || inptr[2]=='P') &&
970
                 isspace(inptr[3])) {
971
                 inptr += 3;
972
                 return token = tk_cmp;
973
             }
974
             if ((inptr[1]=='o' || inptr[1]=='O') &&
975
                 (inptr[2]=='d' || inptr[2]=='D') &&
976
                 (inptr[3]=='e' || inptr[3]=='E') &&
977
                 isspace(inptr[4])) {
978
                 inptr += 4;
979
                 return token = tk_code;
980
             }
981
             if ((inptr[1]=='l' || inptr[1]=='L') &&
982
                 (inptr[2]=='i' || inptr[2]=='I') &&
983
                 isspace(inptr[3])) {
984
                 inptr += 3;
985
                 return token = tk_cli;
986
             }
987
             if ((inptr[1]=='o' || inptr[1]=='O') &&
988
                 (inptr[2]=='m' || inptr[2]=='M') &&
989
                 isspace(inptr[3])) {
990
                 inptr += 3;
991
                 return token = tk_com;
992
             }
993
             if ((inptr[1]=='s' || inptr[1]=='S') &&
994
                 (inptr[2]==':')) {
995
                 inptr+=3;
996
                 return token = tk_cs;
997
             }
998
             if ((inptr[1]=='p' || inptr[1]=='P') &&
999
                 (inptr[2]=='u' || inptr[2]=='U') &&
1000
                 (inptr[3]=='i' || inptr[3]=='I') &&
1001
                 (inptr[4]=='d' || inptr[4]=='D') &&
1002
                 isspace(inptr[5])) {
1003
                 inptr += 5;
1004
                 return token = tk_cpuid;
1005
             }
1006
             if ((inptr[1]=='a' || inptr[1]=='A') &&
1007
                 (inptr[2]=='s' || inptr[2]=='S') &&
1008
                 isspace(inptr[3])) {
1009
                 inptr += 3;
1010
                 return token = tk_cas;
1011
             }
1012
             if ((inptr[1]=='h' || inptr[1]=='H') &&
1013
                 (inptr[2]=='k' || inptr[2]=='K') &&
1014
                 isspace(inptr[3])) {
1015
                 inptr += 3;
1016
                 return token = tk_chk;
1017
             }
1018
             if ((inptr[1]=='h' || inptr[1]=='H') &&
1019
                 (inptr[2]=='k' || inptr[2]=='K') &&
1020
                 (inptr[3]=='i' || inptr[3]=='I') &&
1021
                 isspace(inptr[4])) {
1022
                 inptr += 4;
1023
                 return token = tk_chki;
1024
             }
1025
             if (gCpu==5 || gCpu==7 || gCpu=='A' || gCpu=='F' || gCpu=='G') {
1026
               if ((inptr[1]=='s' || inptr[1]=='S') &&
1027
                   (inptr[2]=='r' || inptr[2]=='R') &&
1028
                   (inptr[3]=='r' || inptr[3]=='R') &&
1029
                   (inptr[4]=='c' || inptr[4]=='C') &&
1030
                   isspace(inptr[5])) {
1031
                     inptr += 5;
1032
                     return token = tk_csrrc;
1033
               }
1034
               if ((inptr[1]=='s' || inptr[1]=='S') &&
1035
                   (inptr[2]=='r' || inptr[2]=='R') &&
1036
                   (inptr[3]=='r' || inptr[3]=='R') &&
1037
                   (inptr[4]=='d' || inptr[4]=='D') &&
1038
                   isspace(inptr[5])) {
1039
                     inptr += 5;
1040
                     return token = tk_csrrd;
1041
               }
1042
               if ((inptr[1]=='s' || inptr[1]=='S') &&
1043
                   (inptr[2]=='r' || inptr[2]=='R') &&
1044
                   (inptr[3]=='r' || inptr[3]=='R') &&
1045
                   (inptr[4]=='s' || inptr[4]=='S') &&
1046
                   isspace(inptr[5])) {
1047
                     inptr += 5;
1048
                     return token = tk_csrrs;
1049
               }
1050
               if ((inptr[1]=='s' || inptr[1]=='S') &&
1051
                   (inptr[2]=='r' || inptr[2]=='R') &&
1052
                   (inptr[3]=='r' || inptr[3]=='R') &&
1053
                   (inptr[4]=='w' || inptr[4]=='W') &&
1054
                   isspace(inptr[5])) {
1055
                     inptr += 5;
1056
                     return token = tk_csrrw;
1057
                   }
1058
                           if (gCpu == 'F') {
1059
                                   if ((inptr[1] == 'm' || inptr[1] == 'M') &&
1060
                                           (inptr[2] == 'o' || inptr[2] == 'O') &&
1061
                                           (inptr[3] == 'v' || inptr[3] == 'V') &&
1062
                                           (inptr[4] == 'e' || inptr[4] == 'E') &&
1063
                                           (inptr[5] == 'n' || inptr[5] == 'N') &&
1064
                                           (inptr[6] == 'z' || inptr[6] == 'Z') &&
1065
                                           isspace(inptr[7])) {
1066
                                           inptr += 7;
1067
                                           return (token = tk_cmovenz);
1068
                                   }
1069
 
1070
                           }
1071
             }
1072
             break;
1073
 
1074
        // db dbnz dc dh dw data div divs divu divi divui ds:
1075
        case 'd': case 'D':
1076
             if ((inptr[1]=='b' || inptr[1]=='B') &&
1077
                 (inptr[2]=='n' || inptr[2]=='N') &&
1078
                 (inptr[3]=='z' || inptr[3]=='Z') &&
1079
                  isspace(inptr[4])) {
1080
                 inptr += 4;
1081
                 return token = tk_dbnz;
1082
             }
1083
             if ((inptr[1]=='b' || inptr[1]=='B') && isspace(inptr[2])) {
1084
                 inptr += 2;
1085
                 return token = tk_db;
1086
             }
1087
             if ((inptr[1]=='c' || inptr[1]=='C') && isspace(inptr[2])) {
1088
                 inptr += 2;
1089
                 return token = tk_dc;
1090
             }
1091
             if ((inptr[1]=='h' || inptr[1]=='H') && isspace(inptr[2])) {
1092
                 inptr += 2;
1093
                 return token = tk_dh;
1094
             }
1095
                         if (gCpu=='A') {
1096
                                 if ((inptr[1]=='d' || inptr[1]=='D') && isspace(inptr[2])) {
1097
                                         inptr += 2;
1098
                                         return token = tk_dd;
1099
                                 }
1100
                                 if ((inptr[1]=='o' || inptr[1]=='O') && isspace(inptr[2])) {
1101
                                         inptr += 2;
1102
                                         return token = tk_do;
1103
                                 }
1104
                                 if ((inptr[1]=='t' || inptr[1]=='T') && isspace(inptr[2])) {
1105
                                         inptr += 2;
1106
                                         return token = tk_dt;
1107
                                 }
1108
                         }
1109
             if ((inptr[1]=='w' || inptr[1]=='W') && isspace(inptr[2])) {
1110
                 inptr += 2;
1111
                 return token = tk_dw;
1112
             }
1113
             if ((inptr[1]=='i' || inptr[1]=='I') && (inptr[2]=='v' || inptr[2]=='V') && isspace(inptr[3])) {
1114
                 inptr += 3;
1115
                 return token = tk_div;
1116
             }
1117
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1118
                 (inptr[2]=='v' || inptr[2]=='V') &&
1119
                 (inptr[3]=='i' || inptr[3]=='I') &&
1120
                  isspace(inptr[4])) {
1121
                 inptr += 4;
1122
                 return token = tk_divi;
1123
             }
1124
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1125
                 (inptr[2]=='v' || inptr[2]=='V') &&
1126
                 (inptr[3]=='u' || inptr[3]=='U') &&
1127
                 isspace(inptr[4])) {
1128
                 inptr += 4;
1129
                 return token = tk_divu;
1130
             }
1131
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1132
                 (inptr[2]=='v' || inptr[2]=='V') &&
1133
                 (inptr[3]=='u' || inptr[3]=='U') &&
1134
                 (inptr[4]=='i' || inptr[4]=='I') &&
1135
                 isspace(inptr[5])) {
1136
                 inptr += 5;
1137
                 return token = tk_divui;
1138
             }
1139
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1140
                 (inptr[2]=='v' || inptr[2]=='V') &&
1141
                 (inptr[3]=='s' || inptr[3]=='S') &&
1142
                 isspace(inptr[4])) {
1143
                 inptr += 4;
1144
                 return token = tk_div;
1145
             }
1146
             if ((inptr[1]=='a' || inptr[1]=='A') &&
1147
                 (inptr[2]=='t' || inptr[2]=='T') &&
1148
                 (inptr[3]=='a' || inptr[3]=='A') &&
1149
                 isspace(inptr[4])) {
1150
                 inptr += 4;
1151
                 return token = tk_data;
1152
             }
1153
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1154
                 (inptr[2]==':')) {
1155
                 inptr+=3;
1156
                 return token = tk_ds;
1157
             }
1158
             if ((inptr[1]=='c' || inptr[1]=='C') && (inptr[2]=='b' || inptr[2]=='B') && (isspace(inptr[3])||inptr[3]=='.')) {
1159
                 inptr += 3;
1160
                 return token = tk_fill;
1161
             }
1162
             if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='c' || inptr[2]=='C') && (isspace(inptr[3])||inptr[3]=='.')) {
1163
                 inptr += 3;
1164
                 return token = tk_dec;
1165
             }
1166
             if ((inptr[1]=='h' || inptr[1]=='H') &&
1167
                 (inptr[2]=='_' || inptr[2]=='_') &&
1168
                 (inptr[3]=='h' || inptr[3]=='H') &&
1169
                 (inptr[4]=='t' || inptr[4]=='T') &&
1170
                 (inptr[5]=='b' || inptr[4]=='B') &&
1171
                 (inptr[6]=='l' || inptr[4]=='L') &&
1172
                 isspace(inptr[7])) {
1173
                 inptr += 7;
1174
                 return token = tk_dh_htbl;
1175
             }
1176
             break;
1177
 
1178
        // end eor eori endif endpublic extern equ eret es
1179
        case 'e': case 'E':
1180
             if ((inptr[1]=='q' || inptr[1]=='Q') &&
1181
                 (inptr[2]=='u' || inptr[2]=='U') &&
1182
                 isspace(inptr[3])) {
1183
                 inptr += 3;
1184
                 return token = tk_equ;
1185
             }
1186
             if ((inptr[1]=='o' || inptr[1]=='O') &&
1187
                 (inptr[2]=='r' || inptr[2]=='R') &&
1188
                 (inptr[3]=='i' || inptr[3]=='I') &&
1189
                 isspace(inptr[4])) {
1190
                 inptr += 4;
1191
                 return token = tk_eori;
1192
             }
1193
             if ((inptr[1]=='o' || inptr[1]=='O') &&
1194
                 (inptr[2]=='r' || inptr[2]=='R') &&
1195
                 isspace(inptr[3])) {
1196
                 inptr += 3;
1197
                 return token = tk_eor;
1198
             }
1199
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1200
                 (inptr[2]=='d' || inptr[2]=='D') &&
1201
                 isspace(inptr[3])) {
1202
                 inptr += 3;
1203
                 return token = tk_end;
1204
             }
1205
             if ((inptr[1]=='n' || inptr[1]=='O') &&
1206
                 (inptr[2]=='d' || inptr[2]=='R') &&
1207
                 (inptr[3]=='i' || inptr[3]=='I') &&
1208
                 (inptr[4]=='f' || inptr[4]=='F') &&
1209
                 isspace(inptr[5])) {
1210
                 inptr += 5;
1211
                 return token = tk_endif;
1212
             }
1213
             if ((inptr[1]=='l' || inptr[1]=='L') &&
1214
                 (inptr[2]=='s' || inptr[2]=='S') &&
1215
                 (inptr[3]=='e' || inptr[3]=='E') &&
1216
                 isspace(inptr[4])) {
1217
                 inptr += 4;
1218
                 return token = tk_else;
1219
             }
1220
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1221
                 (inptr[2]=='d' || inptr[2]=='D') &&
1222
                 (inptr[3]=='p' || inptr[3]=='P') &&
1223
                 (inptr[4]=='u' || inptr[4]=='U') &&
1224
                 (inptr[5]=='b' || inptr[5]=='B') &&
1225
                 (inptr[6]=='l' || inptr[6]=='L') &&
1226
                 (inptr[7]=='i' || inptr[7]=='I') &&
1227
                 (inptr[8]=='c' || inptr[8]=='C') &&
1228
                 isspace(inptr[9])) {
1229
                 inptr += 9;
1230
                 return token = tk_endpublic;
1231
             }
1232
             if ((inptr[1]=='x' || inptr[1]=='X') &&
1233
                 (inptr[2]=='t' || inptr[2]=='T') &&
1234
                 (inptr[3]=='e' || inptr[3]=='E') &&
1235
                 (inptr[4]=='r' || inptr[4]=='R') &&
1236
                 (inptr[5]=='n' || inptr[5]=='N') &&
1237
                 isspace(inptr[6])) {
1238
                 inptr += 6;
1239
                 return token = tk_extern;
1240
             }
1241
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1242
                 (inptr[2]==':')) {
1243
                 inptr+=3;
1244
                 return token = tk_es;
1245
             }
1246
                         if (gCpu==5) {
1247
                                 if ((inptr[1]=='r' || inptr[1]=='R') &&
1248
                                         (inptr[2]=='e' || inptr[2]=='E') &&
1249
                                         (inptr[3]=='t' || inptr[3]=='T') &&
1250
                                         isspace(inptr[4])) {
1251
                                         inptr += 4;
1252
                                         return token = tk_eret;
1253
                                 }
1254
                         }
1255
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1256
                 (inptr[2]=='d' || inptr[2]=='D') &&
1257
                 (inptr[3]=='m' || inptr[3]=='M') &&
1258
                 isspace(inptr[4])) {
1259
                 inptr += 4;
1260
                 return token = tk_endm;
1261
             }
1262
             break;
1263
 
1264
        // fill fabs fadd fb__
1265
                // fcmp fcx fdiv fmul fnabs fneg fsub fix2flt flt2fix ftst ftoi
1266
        case 'f': case 'F':
1267
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1268
                 (inptr[2]=='l' || inptr[2]=='L') &&
1269
                 (inptr[3]=='l' || inptr[3]=='L') &&
1270
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1271
                 inptr += 4;
1272
                 return token = tk_fill;
1273
             }
1274
             if ((inptr[1]=='a' || inptr[1]=='A') &&
1275
                 (inptr[2]=='d' || inptr[2]=='D') &&
1276
                 (inptr[3]=='d' || inptr[3]=='D') &&
1277
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1278
                 inptr += 4;
1279
                 return token = tk_fadd;
1280
             }
1281
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1282
                 (inptr[2]=='u' || inptr[2]=='U') &&
1283
                 (inptr[3]=='b' || inptr[3]=='B') &&
1284
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1285
                 inptr += 4;
1286
                 return token = tk_fsub;
1287
             }
1288
             if ((inptr[1]=='c' || inptr[1]=='C') &&
1289
                 (inptr[2]=='m' || inptr[2]=='M') &&
1290
                 (inptr[3]=='p' || inptr[3]=='P') &&
1291
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1292
                 inptr += 4;
1293
                 return token = tk_fcmp;
1294
             }
1295
             if ((inptr[1]=='m' || inptr[1]=='M') &&
1296
                 (inptr[2]=='u' || inptr[2]=='U') &&
1297
                 (inptr[3]=='l' || inptr[3]=='L') &&
1298
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1299
                 inptr += 4;
1300
                 return token = tk_fmul;
1301
             }
1302
             if ((inptr[1]=='m' || inptr[1]=='M') &&
1303
                 (inptr[2]=='o' || inptr[2]=='O') &&
1304
                 (inptr[3]=='v' || inptr[3]=='V') &&
1305
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1306
                 inptr += 4;
1307
                 return token = tk_fmov;
1308
             }
1309
             if ((inptr[1]=='d' || inptr[1]=='D') &&
1310
                 (inptr[2]=='i' || inptr[2]=='I') &&
1311
                 (inptr[3]=='v' || inptr[3]=='V') &&
1312
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1313
                 inptr += 4;
1314
                 return token = tk_fdiv;
1315
             }
1316
             if ((inptr[1]=='i' || inptr[1]=='I') &&
1317
                 (inptr[2]=='x' || inptr[2]=='X') &&
1318
                 (inptr[3]=='2' || inptr[3]=='2') &&
1319
                 (inptr[4]=='f' || inptr[3]=='F') &&
1320
                 (inptr[5]=='l' || inptr[3]=='L') &&
1321
                 (inptr[6]=='t' || inptr[3]=='T') &&
1322
                 (isspace(inptr[7]) || inptr[7]=='.')) {
1323
                 inptr += 7;
1324
                 return token = tk_fix2flt;
1325
             }
1326
             if ((inptr[1]=='l' || inptr[1]=='L') &&
1327
                 (inptr[2]=='t' || inptr[2]=='T') &&
1328
                 (inptr[3]=='2' || inptr[3]=='2') &&
1329
                 (inptr[4]=='f' || inptr[3]=='F') &&
1330
                 (inptr[5]=='i' || inptr[3]=='I') &&
1331
                 (inptr[6]=='x' || inptr[3]=='X') &&
1332
                 (isspace(inptr[7]) || inptr[7]=='.')) {
1333
                 inptr += 7;
1334
                 return token = tk_flt2fix;
1335
             }
1336
             if ((inptr[1]=='a' || inptr[1]=='A') &&
1337
                 (inptr[2]=='b' || inptr[2]=='B') &&
1338
                 (inptr[3]=='s' || inptr[3]=='S') &&
1339
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1340
                 inptr += 4;
1341
                 return token = tk_fabs;
1342
             }
1343
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1344
                 (inptr[2]=='e' || inptr[2]=='E') &&
1345
                 (inptr[3]=='g' || inptr[3]=='G') &&
1346
                 (isspace(inptr[4]) || inptr[4]=='.')) {
1347
                 inptr += 4;
1348
                 return token = tk_fneg;
1349
             }
1350
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1351
                 (inptr[2]=='a' || inptr[2]=='A') &&
1352
                 (inptr[3]=='b' || inptr[3]=='B') &&
1353
                 (inptr[4]=='s' || inptr[4]=='S') &&
1354
                 (isspace(inptr[5]) || inptr[5]=='.')) {
1355
                 inptr += 5;
1356
                 return token = tk_fnabs;
1357
             }
1358
             if ((inptr[1]=='c' || inptr[1]=='C') &&
1359
                 (inptr[2]=='x' || inptr[2]=='X') &&
1360
                 (isspace(inptr[3]))) {
1361
                 inptr += 3;
1362
                 return token = tk_fcx;
1363
             }
1364
             if ((inptr[1]=='d' || inptr[1]=='D') &&
1365
                 (inptr[2]=='x' || inptr[2]=='X') &&
1366
                 (isspace(inptr[3]))) {
1367
                 inptr += 3;
1368
                 return token = tk_fdx;
1369
             }
1370
             if ((inptr[1]=='e' || inptr[1]=='E') &&
1371
                 (inptr[2]=='x' || inptr[2]=='X') &&
1372
                 (isspace(inptr[3]))) {
1373
                 inptr += 3;
1374
                 return token = tk_fex;
1375
             }
1376
             if ((inptr[1]=='r' || inptr[1]=='R') &&
1377
                 (inptr[2]=='m' || inptr[2]=='M') &&
1378
                 (isspace(inptr[3]))) {
1379
                 inptr += 3;
1380
                 return token = tk_frm;
1381
             }
1382
             if ((inptr[1]=='t' || inptr[1]=='T') &&
1383
                 (inptr[2]=='x' || inptr[2]=='X') &&
1384
                 (isspace(inptr[3]))) {
1385
                 inptr += 3;
1386
                 return token = tk_ftx;
1387
             }
1388
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1389
                 (inptr[2]=='t' || inptr[2]=='T') &&
1390
                 (inptr[3]=='a' || inptr[3]=='A') &&
1391
                 (inptr[4]=='t' || inptr[4]=='T') &&
1392
                 (isspace(inptr[5]))) {
1393
                 inptr += 5;
1394
                 return token = tk_fstat;
1395
             }
1396
             if ((inptr[1]=='t' || inptr[1]=='T') &&
1397
                 (inptr[2]=='s' || inptr[2]=='S') &&
1398
                 (inptr[3]=='t' || inptr[3]=='T') &&
1399
                 (isspace(inptr[4])||inptr[4]=='.')) {
1400
                 inptr += 4;
1401
                 return token = tk_ftst;
1402
             }
1403
                         if (gCpu==7 || gCpu=='A' || gCpu=='F') {
1404
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1405
                                         (inptr[2]=='e' || inptr[2]=='E') &&
1406
                                         (inptr[3]=='q' || inptr[3]=='Q') &&
1407
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1408
                                         inptr += 4;
1409
                                         return token = tk_fbeq;
1410
                                 }
1411
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1412
                                         (inptr[2]=='n' || inptr[2]=='N') &&
1413
                                         (inptr[3]=='e' || inptr[3]=='E') &&
1414
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1415
                                         inptr += 4;
1416
                                         return token = tk_fbne;
1417
                                 }
1418
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1419
                                         (inptr[2]=='l' || inptr[2]=='L') &&
1420
                                         (inptr[3]=='t' || inptr[3]=='T') &&
1421
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1422
                                         inptr += 4;
1423
                                         return token = tk_fblt;
1424
                                 }
1425
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1426
                                         (inptr[2]=='l' || inptr[2]=='L') &&
1427
                                         (inptr[3]=='e' || inptr[3]=='E') &&
1428
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1429
                                         inptr += 4;
1430
                                         return token = tk_fble;
1431
                                 }
1432
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1433
                                         (inptr[2]=='g' || inptr[2]=='G') &&
1434
                                         (inptr[3]=='t' || inptr[3]=='T') &&
1435
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1436
                                         inptr += 4;
1437
                                         return token = tk_fbgt;
1438
                                 }
1439
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1440
                                         (inptr[2]=='g' || inptr[2]=='G') &&
1441
                                         (inptr[3]=='e' || inptr[3]=='E') &&
1442
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1443
                                         inptr += 4;
1444
                                         return token = tk_fbge;
1445
                                 }
1446
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1447
                                         (inptr[2]=='o' || inptr[2]=='O') &&
1448
                                         (inptr[3]=='r' || inptr[3]=='R') &&
1449
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1450
                                         inptr += 4;
1451
                                         return token = tk_fbor;
1452
                                 }
1453
                                 if ((inptr[1]=='b' || inptr[1]=='B') &&
1454
                                         (inptr[2]=='u' || inptr[2]=='U') &&
1455
                                         (inptr[3]=='n' || inptr[3]=='N') &&
1456
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1457
                                         inptr += 4;
1458
                                         return token = tk_fbun;
1459
                                 }
1460
                                 if ((inptr[1]=='t' || inptr[1]=='T') &&
1461
                                         (inptr[2]=='o' || inptr[2]=='O') &&
1462
                                         (inptr[3]=='i' || inptr[3]=='I') &&
1463
                                         (isspace(inptr[4])||inptr[4]=='.')) {
1464
                                         inptr += 4;
1465
                                         return token = tk_ftoi;
1466
                                 }
1467
                         }
1468 54 robfinch
                         if ((inptr[1] == 'i' || inptr[1] == 'I') &&
1469
                                 (inptr[2] == 'l' || inptr[2] == 'L') &&
1470
                                 (inptr[3] == 'e' || inptr[3] == 'E') &&
1471
                                 (isspace(inptr[4]) || inptr[4] == ':')) {
1472
                                 inptr += 4;
1473
                                 return (token = tk_file);
1474
                         }
1475
 
1476 48 robfinch
             break;
1477
 
1478
        // gran
1479
        case 'g': case 'G':
1480
             if ((inptr[1]=='r' || inptr[1]=='R') &&
1481
                 (inptr[2]=='a' || inptr[2]=='A') &&
1482
                 (inptr[3]=='n' || inptr[3]=='N') &&
1483
                 isspace(inptr[4])) {
1484
                 inptr += 4;
1485
                 return token = tk_gran;
1486
             }
1487
             break;
1488
 
1489
                // hs hint
1490
        case 'h': case 'H':
1491
                        if ((inptr[1]=='I' || inptr[1]=='i') &&
1492
                                (inptr[2]=='N' || inptr[2]=='n') &&
1493
                                (inptr[3]=='T' || inptr[3]=='t') &&
1494
                                isspace(inptr[4])) {
1495
                                inptr += 4;
1496
                                return (token = tk_hint);
1497
                        }
1498
             if (gCpu==4) {
1499
                 if ((inptr[1]=='s' || inptr[1]=='S') &&
1500
                     (inptr[2]==':')) {
1501
                     inptr += 3;
1502
                     return token = tk_hs;
1503
                 }
1504
             }
1505
             break;
1506
 
1507
        // ibne if ifdef ifndef ios inc int iret ipush ipop itof
1508
        case 'i': case 'I':
1509
                        if (gCpu=='F') {
1510
                                if ((inptr[1]=='b' || inptr[1]=='B') &&
1511
                                        (inptr[2]=='n' || inptr[2]=='N') &&
1512
                                        (inptr[3]=='e' || inptr[3]=='E') &&
1513
                                        isspace(inptr[4])) {
1514
                                        inptr += 4;
1515
                                        return token = tk_ibne;
1516
                                }
1517
                                if ((inptr[1] == 's' || inptr[1] == 'S') &&
1518
                                        (inptr[2] == 'p' || inptr[2] == 'P') &&
1519
                                        (inptr[3] == 't' || inptr[3] == 'T') &&
1520
                                        (inptr[4] == 'r' || inptr[4] == 'R') &&
1521
                                        isspace(inptr[5])) {
1522
                                        inptr += 5;
1523
                                        return token = tk_isptr;
1524
                                }
1525
                                if ((inptr[1] == 's' || inptr[1] == 'S') &&
1526
                                        (inptr[2] == 'n' || inptr[2] == 'N') &&
1527
                                        (inptr[3] == 'u' || inptr[3] == 'U') &&
1528
                                        (inptr[4] == 'l' || inptr[4] == 'L') &&
1529
                                        (inptr[5] == 'l' || inptr[5] == 'L') &&
1530
                                        isspace(inptr[6])) {
1531
                                        inptr += 6;
1532
                                        return token = tk_isnull;
1533
                                }
1534
                        }
1535
             if ((inptr[1]=='o' || inptr[1]=='O') &&
1536
                 (inptr[2]=='s' || inptr[2]=='S') &&
1537
                 (inptr[3]==':')) {
1538
                 inptr += 3;
1539
                 return token = tk_ios;
1540
             }
1541
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1542
                 (inptr[2]=='c' || inptr[2]=='C') &&
1543
                 (isspace(inptr[3]) || inptr[3]=='.')) {
1544
                 inptr += 3;
1545
                 return token = tk_inc;
1546
             }
1547
             if ((inptr[1]=='n' || inptr[1]=='N') &&
1548
                 (inptr[2]=='t' || inptr[2]=='T') &&
1549
                 isspace(inptr[3])) {
1550
                 inptr += 3;
1551
                 return token = tk_int;
1552
             }
1553
             if ((inptr[1]=='r' || inptr[1]=='R') &&
1554
                 (inptr[2]=='e' || inptr[2]=='E') &&
1555
                 (inptr[3]=='t' || inptr[3]=='T') &&
1556
                                 isspace(inptr[4])) {
1557
                 inptr += 4;
1558
                 return token = tk_iret;
1559
             }
1560
                         if (gCpu==7) {
1561
                                 if ((inptr[1]=='p' || inptr[1]=='P') &&
1562
                                         (inptr[2]=='u' || inptr[2]=='U') &&
1563
                                         (inptr[3]=='s' || inptr[3]=='S') &&
1564
                                         (inptr[4]=='h' || inptr[4]=='H') &&
1565
                                         isspace(inptr[5])) {
1566
                                         inptr += 5;
1567
                                         return token = tk_ipush;
1568
                                 }
1569
                                 if ((inptr[1]=='p' || inptr[1]=='P') &&
1570
                                         (inptr[2]=='o' || inptr[2]=='O') &&
1571
                                         (inptr[3]=='p' || inptr[3]=='P') &&
1572
                                         isspace(inptr[4])) {
1573
                                         inptr += 4;
1574
                                         return token = tk_ipop;
1575
                                 }
1576
                         }
1577
                         if (gCpu==7 || gCpu=='A' || gCpu=='F') {
1578
                                 if ((inptr[1]=='t' || inptr[1]=='T') &&
1579
                                         (inptr[2]=='o' || inptr[2]=='O') &&
1580
                                         (inptr[3]=='f' || inptr[3]=='F') &&
1581
                                         (isspace(inptr[4]) || inptr[4]=='.')) {
1582
                                         inptr += 4;
1583
                                         return token = tk_itof;
1584
                                 }
1585
                         }
1586
             if (inptr[1]=='f' || inptr[1]=='F') {
1587
                                if ((inptr[2]=='d' || inptr[2]=='D')
1588
                                        && (inptr[3]=='e' || inptr[3]=='E')
1589
                                        && (inptr[4]=='f' || inptr[3]=='F')
1590
                                        && (isspace(inptr[5]) || inptr[5]=='.')) {
1591
                                                inptr += 5;
1592
                                                return token = tk_ifdef;
1593
                                }
1594
                                if ((inptr[2]=='n' || inptr[2]=='N')
1595
                                        && (inptr[3]=='d' || inptr[3]=='D')
1596
                                        && (inptr[4]=='e' || inptr[4]=='E')
1597
                                        && (inptr[5]=='f' || inptr[5]=='F')
1598
                                        && (isspace(inptr[6]) || inptr[6]=='.')) {
1599
                                                inptr += 6;
1600
                                                return token = tk_ifndef;
1601
                                }
1602
                                if (isspace(inptr[2]) || inptr[2]=='.') {
1603
                                        inptr += 2;
1604
                                        return token = tk_if;
1605
                                }
1606
             }
1607
             break;
1608
 
1609
        // jal jgr jmp jsf jsr jsp jci jhi
1610
        case 'j': case 'J':
1611
             if ((inptr[1]=='a' || inptr[1]=='A') &&
1612
                 (inptr[2]=='l' || inptr[2]=='L') &&
1613
                 isspace(inptr[3])) {
1614
                 inptr += 3;
1615
                 return token = tk_jal;
1616
             }
1617
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1618
                 (inptr[2]=='r' || inptr[2]=='R') &&
1619
                 isspace(inptr[3])) {
1620
                 inptr += 3;
1621
                 return token = tk_jsr;
1622
             }
1623
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1624
                 (inptr[2]=='f' || inptr[2]=='F') &&
1625
                 isspace(inptr[3])) {
1626
                 inptr += 3;
1627
                 return token = tk_jsf;
1628
             }
1629
             if ((inptr[1]=='m' || inptr[1]=='M') &&
1630
                 (inptr[2]=='p' || inptr[2]=='P') &&
1631
                 isspace(inptr[3])) {
1632
                 inptr += 3;
1633
                 return token = tk_jmp;
1634
             }
1635
             if ((inptr[1]=='s' || inptr[1]=='S') &&
1636
                 (inptr[2]=='p' || inptr[2]=='P') &&
1637
                 isspace(inptr[3])) {
1638
                 inptr += 3;
1639
                 return token = tk_jsp;
1640
             }
1641
             if ((inptr[1]=='g' || inptr[1]=='G') &&
1642
                 (inptr[2]=='r' || inptr[2]=='R') &&
1643
                 isspace(inptr[3])) {
1644
                 inptr += 3;
1645
                 return token = tk_jgr;
1646
             }
1647
             if (gCpu==4) {
1648
                if ((inptr[1]=='c' || inptr[1]=='C') &&
1649
                    (inptr[2]=='i' || inptr[2]=='I') &&
1650
                    isspace(inptr[3])) {
1651
                    inptr += 3;
1652
                    return token = tk_jci;
1653
                }
1654
                if ((inptr[1]=='h' || inptr[1]=='H') &&
1655
                    (inptr[2]=='i' || inptr[2]=='I') &&
1656
                    isspace(inptr[3])) {
1657
                    inptr += 3;
1658
                    return token = tk_jhi;
1659
                }
1660
             }
1661
             break;
1662
 
1663
        // lb lbu lc lcu lf lh lhu lw ld ldi ldis lea lsr lsri lwar lfd lvb lws lvh lvw ltcb link
1664
        case 'l':
1665
        case 'L':
1666
                        if (gCpu=='A') {
1667
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1668
                                        (inptr[2]=='d' || inptr[2]=='D') &&
1669
                                        isspace(inptr[3])) {
1670
                                        inptr += 3;
1671
                                        return token = tk_ldd;
1672
                                }
1673
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1674
                                        (inptr[2]=='b' || inptr[2]=='B') &&
1675
                                        isspace(inptr[3])) {
1676
                                        inptr += 3;
1677
                                        return token = tk_ldb;
1678
                                }
1679
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1680
                                        (inptr[2]=='b' || inptr[2]=='B') &&
1681
                                        (inptr[3]=='u' || inptr[3]=='U') &&
1682
                                        isspace(inptr[4])) {
1683
                                        inptr += 4;
1684
                                        return token = tk_ldbu;
1685
                                }
1686
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1687
                                        (inptr[2]=='w' || inptr[2]=='W') &&
1688
                                        isspace(inptr[3])) {
1689
                                        inptr += 3;
1690
                                        return token = tk_ldw;
1691
                                }
1692
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1693
                                        (inptr[2]=='w' || inptr[2]=='W') &&
1694
                                        (inptr[3]=='u' || inptr[3]=='U') &&
1695
                                        isspace(inptr[4])) {
1696
                                        inptr += 4;
1697
                                        return token = tk_ldwu;
1698
                                }
1699
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1700
                                        (inptr[2]=='t' || inptr[2]=='T') &&
1701
                                        isspace(inptr[3])) {
1702
                                        inptr += 3;
1703
                                        return token = tk_ldt;
1704
                                }
1705
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1706
                                        (inptr[2]=='t' || inptr[2]=='T') &&
1707
                                        (inptr[3]=='u' || inptr[3]=='U') &&
1708
                                        isspace(inptr[4])) {
1709
                                        inptr += 4;
1710
                                        return token = tk_ldtu;
1711
                                }
1712
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1713
                                        (inptr[2]=='p' || inptr[2]=='P') &&
1714
                                        isspace(inptr[3])) {
1715
                                        inptr += 3;
1716
                                        return token = tk_ldp;
1717
                                }
1718
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1719
                                        (inptr[2]=='p' || inptr[2]=='P') &&
1720
                                        (inptr[3]=='u' || inptr[3]=='U') &&
1721
                                        isspace(inptr[4])) {
1722
                                        inptr += 4;
1723
                                        return token = tk_ldpu;
1724
                                }
1725
                                if ((inptr[1]=='d' || inptr[1]=='D') &&
1726
                                        (inptr[2]=='v' || inptr[2]=='V') &&
1727
                                        (inptr[3]=='d' || inptr[3]=='D') &&
1728
                                        (inptr[4]=='a' || inptr[4]=='A') &&
1729
                                        (inptr[5]=='r' || inptr[5]=='R') &&
1730
                                        isspace(inptr[6])) {
1731
                                        inptr += 6;
1732
                                        return token = tk_ldvdar;
1733
                                }
1734
                        }
1735
            if ((inptr[1]=='d' || inptr[1]=='D') && isspace(inptr[2])) {
1736
                inptr += 2;
1737
                return token = tk_ld;
1738
            }
1739
            if ((inptr[1]=='b' || inptr[1]=='B') && isspace(inptr[2])) {
1740
                inptr += 2;
1741
                return token = tk_lb;
1742
            }
1743
            if ((inptr[1]=='b' || inptr[1]=='B') && (inptr[2]=='u' || inptr[2]=='U') && isspace(inptr[3])) {
1744
                inptr += 3;
1745
                return token = tk_lbu;
1746
            }
1747
            if ((inptr[1]=='f' || inptr[1]=='F') && (isspace(inptr[2])||inptr[2]=='.')) {
1748
                inptr += 2;
1749
                return token = tk_lf;
1750
            }
1751
            if ((inptr[1]=='v' || inptr[1]=='V') && isspace(inptr[2])) {
1752
                inptr += 2;
1753
                return token = tk_lv;
1754
            }
1755
            if ((inptr[1]=='w' || inptr[1]=='W') && isspace(inptr[2])) {
1756
                inptr += 2;
1757
                return token = tk_lw;
1758
            }
1759
            if ((inptr[1]=='h' || inptr[1]=='H') && isspace(inptr[2])) {
1760
                inptr += 2;
1761
                return token = tk_lh;
1762
            }
1763
            if ((inptr[1]=='h' || inptr[1]=='H') && (inptr[2]=='u' || inptr[2]=='U') && isspace(inptr[3])) {
1764
                inptr += 3;
1765
                return token = tk_lhu;
1766
            }
1767
            if ((inptr[1]=='c' || inptr[1]=='C') && isspace(inptr[2])) {
1768
                inptr += 2;
1769
                return token = tk_lc;
1770
            }
1771
            if ((inptr[1]=='c' || inptr[1]=='C') && (inptr[2]=='u' || inptr[2]=='U') && isspace(inptr[3])) {
1772
                inptr += 3;
1773
                return token = tk_lcu;
1774
            }
1775
            if ((inptr[1]=='d' || inptr[1]=='D') && (inptr[2]=='i' || inptr[2]=='I') && isspace(inptr[3])) {
1776
                inptr += 3;
1777
                return token = tk_ldi;
1778
            }
1779
            if ((inptr[1]=='i' || inptr[1]=='I') && (inptr[2]=='n' || inptr[2]=='N') && (inptr[3]=='k' || inptr[3]=='K') && isspace(inptr[4])) {
1780
                inptr += 4;
1781
                return token = tk_link;
1782
            }
1783
            if ((inptr[1]=='d' || inptr[1]=='D') && (inptr[2]=='i' || inptr[2]=='I') && (inptr[3]=='s' || inptr[3]=='S') && isspace(inptr[4])) {
1784
                inptr += 4;
1785
                return token = tk_ldis;
1786
            }
1787
            if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='a' || inptr[2]=='A') && isspace(inptr[3])) {
1788
                inptr += 3;
1789
                return token = tk_lea;
1790
            }
1791
            if ((inptr[1]=='m' || inptr[1]=='M') && (inptr[2]=='r' || inptr[2]=='R') && isspace(inptr[3])) {
1792
                inptr += 3;
1793
                return token = tk_lmr;
1794
            }
1795
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='r' || inptr[2]=='R') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
1796
                inptr += 4;
1797
                return token = tk_lsri;
1798
            }
1799
            if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='r' || inptr[2]=='R') && isspace(inptr[3])) {
1800
                inptr += 3;
1801
                return token = tk_lsr;
1802
            }
1803
            if ((inptr[1]=='f' || inptr[1]=='F') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
1804
                inptr += 3;
1805
                return token = tk_lfd;
1806
            }
1807
            if ((inptr[1]=='w' || inptr[1]=='W') && (inptr[2]=='a' || inptr[2]=='A') && (inptr[3]=='r' || inptr[3]=='R') && isspace(inptr[4])) {
1808
                inptr += 4;
1809
                return token = tk_lwar;
1810
            }
1811
                        if (gCpu=='F' || gCpu=='G') {
1812
                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='b' || inptr[2]=='B') && isspace(inptr[3])) {
1813
                    inptr += 3;
1814
                    return (token = tk_lvb);
1815
                }
1816
                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='c' || inptr[2]=='C') && isspace(inptr[3])) {
1817
                    inptr += 3;
1818
                    return (token = tk_lvc);
1819
                }
1820
                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='h' || inptr[2]=='H') && isspace(inptr[3])) {
1821
                    inptr += 3;
1822
                    return (token = tk_lvh);
1823
                }
1824
                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='w' || inptr[2]=='W') && isspace(inptr[3])) {
1825
                    inptr += 3;
1826
                    return (token = tk_lvw);
1827
                }
1828
                if ((inptr[1]=='w' || inptr[1]=='W') && (inptr[2]=='r' || inptr[2]=='R') && isspace(inptr[3])) {
1829
                    inptr += 3;
1830
                    return (token = tk_lwr);
1831
                }
1832
                        }
1833 50 robfinch
            if (gCpu==4 || gCpu=='F') {
1834 48 robfinch
                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='b' || inptr[2]=='B') && isspace(inptr[3])) {
1835
                    inptr += 3;
1836
                    return token = tk_lvb;
1837
                }
1838 50 robfinch
                                if ((inptr[1] == 'v' || inptr[1] == 'V')
1839
                                        && (inptr[2] == 'b' || inptr[2] == 'B')
1840
                                        && (inptr[3] == 'u' || inptr[3] == 'U')
1841
                                        && isspace(inptr[4])) {
1842
                                        inptr += 4;
1843
                                        return token = tk_lvbu;
1844
                                }
1845
                                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='c' || inptr[2]=='C') && isspace(inptr[3])) {
1846 48 robfinch
                    inptr += 3;
1847
                    return token = tk_lvc;
1848
                }
1849 50 robfinch
                                if ((inptr[1] == 'v' || inptr[1] == 'V')
1850
                                        && (inptr[2] == 'c' || inptr[2] == 'C')
1851
                                        && (inptr[3] == 'u' || inptr[3] == 'U')
1852
                                        && isspace(inptr[4])) {
1853
                                        inptr += 4;
1854
                                        return token = tk_lvcu;
1855
                                }
1856
                                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='h' || inptr[2]=='H') && isspace(inptr[3])) {
1857 48 robfinch
                    inptr += 3;
1858
                    return token = tk_lvh;
1859
                }
1860 50 robfinch
                                if ((inptr[1] == 'v' || inptr[1] == 'V')
1861
                                        && (inptr[2] == 'h' || inptr[2] == 'H')
1862
                                        && (inptr[3] == 'u' || inptr[3] == 'U')
1863
                                        && isspace(inptr[4])) {
1864
                                        inptr += 4;
1865
                                        return token = tk_lvhu;
1866
                                }
1867
                                if ((inptr[1]=='v' || inptr[1]=='V') && (inptr[2]=='w' || inptr[2]=='W') && isspace(inptr[3])) {
1868 48 robfinch
                    inptr += 3;
1869
                    return token = tk_lvw;
1870
                }
1871
                if ((inptr[1]=='v' || inptr[1]=='V') &&
1872
                    (inptr[2]=='w' || inptr[2]=='W') &&
1873
                    (inptr[3]=='a' || inptr[3]=='A') &&
1874
                    (inptr[4]=='r' || inptr[4]=='R') &&
1875
                    isspace(inptr[5])) {
1876
                    inptr += 5;
1877
                    return token = tk_lvwar;
1878
                }
1879
                if ((inptr[1]=='w' || inptr[1]=='W') &&
1880
                    (inptr[2]=='s' || inptr[2]=='S') &&
1881
                    isspace(inptr[3])) {
1882
                    inptr += 3;
1883
                    return token = tk_lws;
1884
                }
1885
                if ((inptr[1]=='o' || inptr[1]=='O') &&
1886
                    (inptr[2]=='o' || inptr[2]=='O') &&
1887
                    (inptr[3]=='p' || inptr[3]=='P') &&
1888
                    isspace(inptr[4])) {
1889
                    inptr += 4;
1890
                    return token = tk_loop;
1891
                }
1892
                if ((inptr[1]=='l' || inptr[1]=='L') &&
1893
                    (inptr[2]=='a' || inptr[2]=='A') &&
1894
                    isspace(inptr[3])) {
1895
                    inptr += 3;
1896
                    return token = tk_lla;
1897
                }
1898
                if ((inptr[1]=='l' || inptr[1]=='L') &&
1899
                    (inptr[2]=='a' || inptr[2]=='A') &&
1900
                    (inptr[3]=='x' || inptr[3]=='X') &&
1901
                    isspace(inptr[4])) {
1902
                    inptr += 4;
1903
                    return token = tk_llax;
1904
                }
1905
            }
1906
                        if (gCpu==7) {
1907
                                if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='c' || inptr[2]=='C') && (inptr[3]=='b' || inptr[3]=='B') && isspace(inptr[4])) {
1908
                                        inptr += 4;
1909
                                        return token = tk_ltcb;
1910
                                }
1911
                        }
1912
            break;
1913
 
1914
        // max mod modu modi modui mov mul muli mulu mului mtspr mfspr mtfp mffp message memdb memsb
1915
        case 'm': case 'M':
1916
            if ((inptr[1]=='a' || inptr[1]=='A') && (inptr[2]=='x' || inptr[2]=='X') && isspace(inptr[3])) {
1917
                inptr += 3;
1918
                return token = tk_max;
1919
            }
1920
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='v' || inptr[2]=='V') && isspace(inptr[3])) {
1921
                inptr += 3;
1922
                return token = tk_mov;
1923
            }
1924
            if ((inptr[1]=='u' || inptr[1]=='U') &&
1925
                (inptr[2]=='l' || inptr[2]=='L') &&
1926
                isspace(inptr[3])) {
1927
                inptr += 3;
1928
                return token = tk_mul;
1929
            }
1930
            if ((inptr[1]=='u' || inptr[1]=='U') &&
1931
                (inptr[2]=='l' || inptr[2]=='L') &&
1932
                (inptr[3]=='u' || inptr[3]=='U') &&
1933
                isspace(inptr[4])) {
1934
                inptr += 4;
1935
                return token = tk_mulu;
1936
            }
1937
            if ((inptr[1]=='u' || inptr[1]=='U') &&
1938
                (inptr[2]=='l' || inptr[2]=='L') &&
1939
                (inptr[3]=='u' || inptr[3]=='U') &&
1940
                (inptr[4]=='i' || inptr[4]=='I') &&
1941
                isspace(inptr[5])) {
1942
                inptr += 5;
1943
                return token = tk_mului;
1944
            }
1945
            if ((inptr[1]=='u' || inptr[1]=='U') &&
1946
                (inptr[2]=='l' || inptr[2]=='L') &&
1947
                (inptr[3]=='i' || inptr[3]=='I') &&
1948
                isspace(inptr[4])) {
1949
                inptr += 4;
1950
                return token = tk_muli;
1951
            }
1952
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
1953
                inptr += 3;
1954
                return token = tk_mod;
1955
            }
1956
            if ((inptr[1]=='o' || inptr[1]=='O') &&
1957
                (inptr[2]=='d' || inptr[2]=='D') &&
1958
                (inptr[3]=='u' || inptr[3]=='U') &&
1959
                isspace(inptr[4])) {
1960
                inptr += 4;
1961
                return token = tk_modu;
1962
            }
1963
            if ((inptr[1]=='o' || inptr[1]=='O') &&
1964
                (inptr[2]=='d' || inptr[2]=='D') &&
1965
                (inptr[3]=='i' || inptr[3]=='I') &&
1966
                isspace(inptr[4])) {
1967
                inptr += 4;
1968
                return token = tk_modi;
1969
            }
1970
            if ((inptr[1]=='o' || inptr[1]=='O') &&
1971
                (inptr[2]=='d' || inptr[2]=='D') &&
1972
                (inptr[3]=='u' || inptr[3]=='U') &&
1973
                (inptr[4]=='i' || inptr[4]=='I') &&
1974
                isspace(inptr[5])) {
1975
                inptr += 5;
1976
                return token = tk_modui;
1977
            }
1978
            if ((inptr[1]=='t' || inptr[1]=='T') &&
1979
                (inptr[2]=='s' || inptr[2]=='S') &&
1980
                (inptr[3]=='p' || inptr[3]=='P') &&
1981
                (inptr[4]=='r' || inptr[4]=='R') &&
1982
                isspace(inptr[5])) {
1983
                inptr += 5;
1984
                return token = tk_mtspr;
1985
            }
1986
            if ((inptr[1]=='f' || inptr[1]=='F') &&
1987
                (inptr[2]=='s' || inptr[2]=='S') &&
1988
                (inptr[3]=='p' || inptr[3]=='P') &&
1989
                (inptr[4]=='r' || inptr[4]=='R') &&
1990
                isspace(inptr[5])) {
1991
                inptr += 5;
1992
                return token = tk_mfspr;
1993
            }
1994
            if ((inptr[1]=='t' || inptr[1]=='T') &&
1995
                (inptr[2]=='f' || inptr[2]=='F') &&
1996
                (inptr[3]=='p' || inptr[3]=='P') &&
1997
                isspace(inptr[4])) {
1998
                inptr += 4;
1999
                return token = tk_mtfp;
2000
            }
2001
            if ((inptr[1]=='f' || inptr[1]=='F') &&
2002
                (inptr[2]=='f' || inptr[2]=='F') &&
2003
                (inptr[3]=='p' || inptr[3]=='P') &&
2004
                isspace(inptr[4])) {
2005
                inptr += 4;
2006
                return token = tk_mffp;
2007
            }
2008
            if ((inptr[1]=='e' || inptr[1]=='E') &&
2009
                (inptr[2]=='s' || inptr[2]=='S') &&
2010
                (inptr[3]=='s' || inptr[3]=='S') &&
2011
                (inptr[4]=='a' || inptr[4]=='A') &&
2012
                (inptr[5]=='g' || inptr[5]=='G') &&
2013
                (inptr[6]=='e' || inptr[6]=='E') &&
2014
                isspace(inptr[7])) {
2015
                inptr += 7;
2016
                return token = tk_message;
2017
            }
2018
            if ((inptr[1]=='v' || inptr[1]=='V') &&
2019
                (inptr[2]=='2' || inptr[2]=='2') &&
2020
                (inptr[3]=='f' || inptr[3]=='F') &&
2021
                (inptr[4]=='l' || inptr[4]=='L') &&
2022
                (inptr[5]=='t' || inptr[5]=='T') &&
2023
                isspace(inptr[6])) {
2024
                inptr += 6;
2025
                return token = tk_mv2flt;
2026
            }
2027
            if ((inptr[1]=='v' || inptr[1]=='V') &&
2028
                (inptr[2]=='2' || inptr[2]=='2') &&
2029
                (inptr[3]=='f' || inptr[3]=='F') &&
2030
                (inptr[4]=='i' || inptr[4]=='I') &&
2031
                (inptr[5]=='x' || inptr[5]=='X') &&
2032
                isspace(inptr[6])) {
2033
                inptr += 6;
2034
                return token = tk_mv2fix;
2035
            }
2036 50 robfinch
            if (gCpu==4 || gCpu=='F') {
2037 48 robfinch
                if ((inptr[1]=='e' || inptr[1]=='E') &&
2038
                    (inptr[2]=='m' || inptr[2]=='M') &&
2039
                    (inptr[3]=='d' || inptr[3]=='D') &&
2040
                    (inptr[4]=='b' || inptr[4]=='B') &&
2041
                    isspace(inptr[5])) {
2042
                    inptr += 5;
2043
                    return token = tk_memdb;
2044
                }
2045
                if ((inptr[1]=='e' || inptr[1]=='E') &&
2046
                    (inptr[2]=='m' || inptr[2]=='M') &&
2047
                    (inptr[3]=='s' || inptr[3]=='S') &&
2048
                    (inptr[4]=='b' || inptr[4]=='B') &&
2049
                    isspace(inptr[5])) {
2050
                    inptr += 5;
2051
                    return token = tk_memsb;
2052
                }
2053
            }
2054
                        if (gCpu=='A') {
2055
                if ((inptr[1]=='a' || inptr[1]=='A') &&
2056
                    (inptr[2]=='r' || inptr[2]=='R') &&
2057
                    (inptr[3]=='k' || inptr[3]=='K') &&
2058
                    (inptr[4]=='1' || inptr[4]=='1') &&
2059
                    isspace(inptr[5])) {
2060
                    inptr += 5;
2061
                    return token = tk_mark1;
2062
                }
2063
                if ((inptr[1]=='a' || inptr[1]=='A') &&
2064
                    (inptr[2]=='r' || inptr[2]=='R') &&
2065
                    (inptr[3]=='k' || inptr[3]=='K') &&
2066
                    (inptr[4]=='2' || inptr[4]=='2') &&
2067
                    isspace(inptr[5])) {
2068
                    inptr += 5;
2069
                    return token = tk_mark2;
2070
                }
2071
                        }
2072
            if ((inptr[1]=='a' || inptr[1]=='A') &&
2073 54 robfinch
                (inptr[2]=='c' || inptr[2]=='C') &&
2074
                (inptr[3]=='r' || inptr[3]=='R') &&
2075 48 robfinch
                (inptr[4]=='o' || inptr[4]=='O') &&
2076
                isspace(inptr[5])) {
2077
                inptr += 5;
2078 54 robfinch
                return (token = tk_macro);
2079 48 robfinch
            }
2080
            break;
2081
 
2082
        // not neg nop
2083
        case 'n': case 'N':
2084
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='t' || inptr[2]=='T') && isspace(inptr[3])) {
2085
                inptr += 3;
2086
                return token = tk_not;
2087
            }
2088
            if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='g' || inptr[2]=='G') && isspace(inptr[3])) {
2089
                inptr += 3;
2090
                return token = tk_neg;
2091
            }
2092
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='p' || inptr[2]=='P') && isspace(inptr[3])) {
2093
                inptr += 3;
2094
                return token = tk_nop;
2095
            }
2096
            break;
2097
 
2098
        // or ori org
2099
        case 'o': case 'O':
2100
            if ((inptr[1]=='r' || inptr[1]=='R') && (inptr[2]=='i' || inptr[2]=='I') && isspace(inptr[3])) {
2101
                inptr += 3;
2102
                return token = tk_ori;
2103
            }
2104
            if ((inptr[1]=='r' || inptr[1]=='R') && isspace(inptr[2])) {
2105
                inptr += 2;
2106
                return token = tk_or;
2107
            }
2108
            if ((inptr[1]=='r' || inptr[1]=='R') && (inptr[2]=='g' || inptr[2]=='G') && isspace(inptr[3])) {
2109
                inptr += 3;
2110
                return token = tk_org;
2111
            }
2112
            break;
2113
 
2114
        // pea push pop php plp public
2115
        case 'p': case 'P':
2116
            if ((inptr[1]=='u' || inptr[1]=='U') &&
2117
                (inptr[2]=='s' || inptr[2]=='S') &&
2118
                (inptr[3]=='h' || inptr[3]=='H') &&
2119
                isspace(inptr[4]) || inptr[4]=='.') {
2120
                inptr += 4;
2121
                return token = tk_push;
2122
            }
2123
            if ((inptr[1]=='o' || inptr[1]=='O') &&
2124
                (inptr[2]=='p' || inptr[2]=='P') &&
2125
                isspace(inptr[3]) || inptr[3]=='.') {
2126
                inptr += 3;
2127
                return token = tk_pop;
2128
            }
2129
            if ((inptr[1]=='e' || inptr[1]=='E') &&
2130
                (inptr[2]=='a' || inptr[2]=='A') &&
2131
                isspace(inptr[3])) {
2132
                inptr += 3;
2133
                return token = tk_pea;
2134
            }
2135
            if ((inptr[1]=='h' || inptr[1]=='H') &&
2136
                (inptr[2]=='p' || inptr[2]=='P') &&
2137
                isspace(inptr[3])) {
2138
                inptr += 3;
2139
                return token = tk_php;
2140
            }
2141
            if ((inptr[1]=='l' || inptr[1]=='L') &&
2142
                (inptr[2]=='p' || inptr[2]=='P') &&
2143
                isspace(inptr[3])) {
2144
                inptr += 3;
2145
                return token = tk_plp;
2146
            }
2147
            if ((inptr[1]=='u' || inptr[1]=='U') &&
2148
                (inptr[2]=='b' || inptr[2]=='B') &&
2149
                (inptr[3]=='l' || inptr[3]=='L') &&
2150
                (inptr[4]=='i' || inptr[4]=='I') &&
2151
                (inptr[5]=='c' || inptr[5]=='C') &&
2152
                isspace(inptr[6])) {
2153
                inptr += 6;
2154
                return token = tk_public;
2155
            }
2156
            if (gCpu==4) {
2157
                if (isdigit(inptr[1]) && (inptr[2]=='.' || inptr[2]==',' || isspace(inptr[2]))) {
2158
                    inptr += 1;
2159
                    return token = tk_pred;
2160
                }
2161
                if (isdigit(inptr[1]) && isdigit(inptr[2]) && (inptr[3]=='.' || inptr[3]==',' || isspace(inptr[3]))) {
2162
                    inptr += 1;
2163
                    return token = tk_pred;
2164
                }
2165
                if ((inptr[1]=='a' || inptr[1]=='A') &&
2166
                    (inptr[2]=='n' || inptr[2]=='N') &&
2167
                    (inptr[3]=='d' || inptr[3]=='D') &&
2168
                    isspace(inptr[4])) {
2169
                    inptr += 4;
2170
                    return token = tk_pand;
2171
                }
2172
                if ((inptr[1]=='o' || inptr[1]=='O') &&
2173
                    (inptr[2]=='r' || inptr[2]=='R') &&
2174
                    isspace(inptr[3])) {
2175
                    inptr += 3;
2176
                    return token = tk_por;
2177
                }
2178
                if ((inptr[1]=='e' || inptr[1]=='R') &&
2179
                    (inptr[2]=='o' || inptr[2]=='O') &&
2180
                    (inptr[3]=='r' || inptr[3]=='R') &&
2181
                    isspace(inptr[4])) {
2182
                    inptr += 4;
2183
                    return token = tk_peor;
2184
                }
2185
                if ((inptr[1]=='a' || inptr[1]=='A') &&
2186
                    (inptr[2]=='n' || inptr[2]=='N') &&
2187
                    (inptr[3]=='d' || inptr[3]=='D') &&
2188
                    (inptr[4]=='c' || inptr[4]=='C') &&
2189
                    isspace(inptr[5])) {
2190
                    inptr += 5;
2191
                    return token = tk_pandc;
2192
                }
2193
                if ((inptr[1]=='o' || inptr[1]=='O') &&
2194
                    (inptr[2]=='r' || inptr[2]=='R') &&
2195
                    (inptr[3]=='c' || inptr[3]=='C') &&
2196
                    isspace(inptr[4])) {
2197
                    inptr += 4;
2198
                    return token = tk_porc;
2199
                }
2200
                if ((inptr[1]=='n' || inptr[1]=='N') &&
2201
                    (inptr[2]=='a' || inptr[2]=='A') &&
2202
                    (inptr[3]=='n' || inptr[3]=='N') &&
2203
                    (inptr[4]=='d' || inptr[4]=='D') &&
2204
                    isspace(inptr[5])) {
2205
                    inptr += 5;
2206
                    return token = tk_pnand;
2207
                }
2208
                if ((inptr[1]=='n' || inptr[1]=='N') &&
2209
                    (inptr[2]=='o' || inptr[2]=='O') &&
2210
                    (inptr[3]=='r' || inptr[3]=='R') &&
2211
                    isspace(inptr[4])) {
2212
                    inptr += 4;
2213
                    return token = tk_pnor;
2214
                }
2215
                if ((inptr[1]=='e' || inptr[1]=='E') &&
2216
                    (inptr[2]=='n' || inptr[2]=='N') &&
2217
                    (inptr[3]=='o' || inptr[3]=='O') &&
2218
                    (inptr[4]=='r' || inptr[4]=='R') &&
2219
                    isspace(inptr[5])) {
2220
                    inptr += 5;
2221
                    return token = tk_penor;
2222
                }
2223
            }
2224
            break;
2225
 
2226
        // ret rex rol roli ror rori rtd rte rtf rts rti rtl rodata
2227
        case 'r': case 'R':
2228
                        if (gCpu==7 || gCpu=='A' || gCpu=='F') {
2229
                                if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='t' || inptr[2]=='T') && isspace(inptr[3])) {
2230
                                        inptr += 3;
2231
                                        return token = tk_ret;
2232
                                }
2233
                                if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='x' || inptr[2]=='X') && isspace(inptr[3])) {
2234
                                        inptr += 3;
2235
                                        return token = tk_rex;
2236
                                }
2237
                        }
2238
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='s' || inptr[2]=='S') && isspace(inptr[3])) {
2239
                inptr += 3;
2240
                return token = tk_rts;
2241
            }
2242
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='f' || inptr[2]=='F') && isspace(inptr[3])) {
2243
                inptr += 3;
2244
                return token = tk_rtf;
2245
            }
2246
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='l' || inptr[2]=='L') && isspace(inptr[3])) {
2247
                inptr += 3;
2248
                return token = tk_rtl;
2249
            }
2250
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='l' || inptr[2]=='L') && isspaceOrDot(inptr[3])) {
2251
                inptr += 3;
2252
                return token = tk_rol;
2253
            }
2254
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='l' || inptr[2]=='L') && (inptr[3]=='i' || inptr[3]=='I') && isspaceOrDot(inptr[4])) {
2255
                inptr += 4;
2256
                return token = tk_roli;
2257
            }
2258
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='r' || inptr[2]=='R') && isspaceOrDot(inptr[3])) {
2259
                inptr += 3;
2260
                return token = tk_ror;
2261
            }
2262
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='r' || inptr[2]=='R') && (inptr[3]=='i' || inptr[3]=='I') && isspaceOrDot(inptr[4])) {
2263
                inptr += 4;
2264
                return token = tk_rori;
2265
            }
2266
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='i' || inptr[2]=='I') && isspace(inptr[3])) {
2267
                inptr += 3;
2268
                return token = tk_rti;
2269
            }
2270
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='e' || inptr[2]=='E') && isspace(inptr[3])) {
2271
                inptr += 3;
2272
                return token = tk_rte;
2273
            }
2274
            if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
2275
                inptr += 3;
2276
                return token = tk_rtd;
2277
            }
2278
             if ((inptr[1]=='o' || inptr[1]=='O') &&
2279
                 (inptr[2]=='d' || inptr[2]=='D') &&
2280
                 (inptr[3]=='a' || inptr[3]=='A') &&
2281
                 (inptr[4]=='t' || inptr[4]=='T') &&
2282
                 (inptr[5]=='a' || inptr[5]=='A') &&
2283
                 isspace(inptr[6])) {
2284
                 inptr += 6;
2285
                 return token = tk_rodata;
2286
             }
2287
                         if (gCpu == 'F') {
2288
                                 if ((inptr[1] == 'e' || inptr[1] == 'E') &&
2289
                                         (inptr[2] == 'd' || inptr[2] == 'D') &&
2290
                                         (inptr[3] == 'o' || inptr[3] == 'O') &&
2291
                                         (inptr[4] == 'r' || inptr[4] == 'R') &&
2292
                                         isspace(inptr[5])) {
2293
                                         inptr += 5;
2294
                                         return token = tk_redor;
2295
                                 }
2296
                         }
2297
            break;
2298
 
2299
        // sb sc sf sh sw sxb sxc sxh sub subi subu subui shl shli shr shru shrui sei smr ss:
2300
        // seq seqi sne snei sge sgei sgt sgti slt slti sle slei sgeu sgeui sgtu sgtui sltu sltui sleu sleui
2301
        // swcr sfd sts sync sws stcmp stmov srai srli stcb sv
2302
                // DSD9: stb stw stp std
2303
        case 's': case 'S':
2304
                        if (gCpu=='A') {
2305
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2306
                                        (inptr[2]=='d' || inptr[2]=='D') &&
2307
                                        isspace(inptr[3])) {
2308
                                        inptr += 3;
2309
                                        return token = tk_std;
2310
                                }
2311
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2312
                                        (inptr[2]=='d' || inptr[2]=='D') &&
2313
                                        (inptr[3]=='c' || inptr[3]=='C') &&
2314
                                        (inptr[4]=='r' || inptr[4]=='R') &&
2315
                                        isspace(inptr[5])) {
2316
                                        inptr += 5;
2317
                                        return token = tk_stdcr;
2318
                                }
2319
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2320
                                        (inptr[2]=='b' || inptr[2]=='B') &&
2321
                                        isspace(inptr[3])) {
2322
                                        inptr += 3;
2323
                                        return token = tk_stb;
2324
                                }
2325
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2326
                                        (inptr[2]=='p' || inptr[2]=='P') &&
2327
                                        isspace(inptr[3])) {
2328
                                        inptr += 3;
2329
                                        return token = tk_stp;
2330
                                }
2331
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2332
                                        (inptr[2]=='t' || inptr[2]=='T') &&
2333
                                        isspace(inptr[3])) {
2334
                                        inptr += 3;
2335
                                        return token = tk_stt;
2336
                                }
2337
                                if ((inptr[1]=='t' || inptr[1]=='T') &&
2338
                                        (inptr[2]=='w' || inptr[2]=='W') &&
2339
                                        isspace(inptr[3])) {
2340
                                        inptr += 3;
2341
                                        return token = tk_stw;
2342
                                }
2343
                        }
2344
            if ((inptr[1]=='w' || inptr[1]=='W') && isspace(inptr[2])) {
2345
                inptr += 2;
2346
                return token = tk_sw;
2347
            }
2348
            if ((inptr[1]=='b' || inptr[1]=='B') && isspace(inptr[2])) {
2349
                inptr += 2;
2350
                return token = tk_sb;
2351
            }
2352
            if ((inptr[1]=='c' || inptr[1]=='C') && isspace(inptr[2])) {
2353
                inptr += 2;
2354
                return token = tk_sc;
2355
            }
2356
            if ((inptr[1]=='h' || inptr[1]=='H') && isspace(inptr[2])) {
2357
                inptr += 2;
2358
                return token = tk_sh;
2359
            }
2360
            if ((inptr[1]=='f' || inptr[1]=='F') && (isspace(inptr[2])||inptr[2]=='.')) {
2361
                inptr += 2;
2362
                return token = tk_sf;
2363
            }
2364
            if ((inptr[1]=='u' || inptr[1]=='U') &&
2365
                (inptr[2]=='b' || inptr[2]=='B') &&
2366
                (inptr[3]=='u' || inptr[3]=='U') &&
2367
                (inptr[4]=='i' || inptr[4]=='I') &&
2368
                isspace(inptr[5])) {
2369
                inptr += 5;
2370
                return token = tk_subui;
2371
            }
2372
            if ((inptr[1]=='u' || inptr[1]=='U') && (inptr[2]=='b' || inptr[2]=='B') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2373
                inptr += 4;
2374
                return token = tk_subi;
2375
            }
2376
            if ((inptr[1]=='u' || inptr[1]=='U') && (inptr[2]=='b' || inptr[2]=='B') && (inptr[3]=='u' || inptr[3]=='U') && isspace(inptr[4])) {
2377
                inptr += 4;
2378
                return token = tk_subu;
2379
            }
2380
            if ((inptr[1]=='u' || inptr[1]=='U') && (inptr[2]=='b' || inptr[2]=='B') && isspace(inptr[3])) {
2381
                inptr += 3;
2382
                return token = tk_sub;
2383
            }
2384
            if ((inptr[1]=='f' || inptr[1]=='F') && (inptr[2]=='d' || inptr[2]=='D') && isspace(inptr[3])) {
2385
                inptr += 3;
2386
                return token = tk_sfd;
2387
            }
2388
            if ((inptr[1]=='h' || inptr[1]=='H') && (inptr[2]=='l' || inptr[2]=='L') && (inptr[3]=='i' || inptr[3]=='I') && isspaceOrDot(inptr[4])) {
2389
                inptr += 4;
2390
                return token = tk_shli;
2391
            }
2392
            if ((inptr[1]=='h' || inptr[1]=='H') && (inptr[2]=='l' || inptr[2]=='L') && isspaceOrDot(inptr[3])) {
2393
                inptr += 3;
2394
                return token = tk_shl;
2395
            }
2396
            if ((inptr[1]=='h' || inptr[1]=='H') &&
2397
                (inptr[2]=='r' || inptr[2]=='R') &&
2398
                (inptr[3]=='u' || inptr[3]=='U') &&
2399
                (inptr[4]=='i' || inptr[4]=='I') &&
2400
                isspaceOrDot(inptr[5])) {
2401
                inptr += 5;
2402
                return token = tk_shrui;
2403
            }
2404
            if ((inptr[1]=='h' || inptr[1]=='H') &&
2405
                (inptr[2]=='r' || inptr[2]=='R') &&
2406
                (inptr[3]=='u' || inptr[3]=='U') &&
2407
                isspaceOrDot(inptr[4])) {
2408
                inptr += 4;
2409
                return token = tk_shru;
2410
            }
2411
            if ((inptr[1]=='h' || inptr[1]=='H') &&
2412
                (inptr[2]=='r' || inptr[2]=='R') &&
2413
                isspaceOrDot(inptr[3])) {
2414
                inptr += 3;
2415
                return token = tk_shru;
2416
            }
2417
            if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='i' || inptr[2]=='I') && isspace(inptr[3])) {
2418
                inptr += 3;
2419
                return token = tk_sei;
2420
            }
2421
            if ((inptr[1]=='m' || inptr[1]=='M') && (inptr[2]=='r' || inptr[2]=='R') && isspace(inptr[3])) {
2422
                inptr += 3;
2423
                return token = tk_smr;
2424
            }
2425
            if ((inptr[1]=='x' || inptr[1]=='X') && (inptr[2]=='b' || inptr[2]=='B') && isspace(inptr[3])) {
2426
                inptr += 3;
2427
                return token = tk_sxb;
2428
            }
2429
            if ((inptr[1]=='x' || inptr[1]=='X') && (inptr[2]=='c' || inptr[2]=='C') && isspace(inptr[3])) {
2430
                inptr += 3;
2431
                return token = tk_sxc;
2432
            }
2433
            if ((inptr[1]=='x' || inptr[1]=='X') && (inptr[2]=='h' || inptr[2]=='H') && isspace(inptr[3])) {
2434
                inptr += 3;
2435
                return token = tk_sxh;
2436
            }
2437
            if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='q' || inptr[2]=='Q') && isspace(inptr[3])) {
2438
                inptr += 3;
2439
                return token = tk_seq;
2440
            }
2441
            if ((inptr[1]=='e' || inptr[1]=='E') && (inptr[2]=='q' || inptr[2]=='Q') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2442
                inptr += 4;
2443
                return token = tk_seqi;
2444
            }
2445
            if ((inptr[1]=='n' || inptr[1]=='N') && (inptr[2]=='e' || inptr[2]=='E') && isspace(inptr[3])) {
2446
                inptr += 3;
2447
                return token = tk_sne;
2448
            }
2449
            if ((inptr[1]=='n' || inptr[1]=='N') && (inptr[2]=='e' || inptr[2]=='E') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2450
                inptr += 4;
2451
                return token = tk_snei;
2452
            }
2453
            if ((inptr[1]=='g' || inptr[1]=='G') && (inptr[2]=='e' || inptr[2]=='E') && isspace(inptr[3])) {
2454
                inptr += 3;
2455
                return token = tk_sge;
2456
            }
2457
            if ((inptr[1]=='g' || inptr[1]=='G') && (inptr[2]=='e' || inptr[2]=='E') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2458
                inptr += 4;
2459
                return token = tk_sgei;
2460
            }
2461
            if ((inptr[1]=='g' || inptr[1]=='G') && (inptr[2]=='t' || inptr[2]=='T') && isspace(inptr[3])) {
2462
                inptr += 3;
2463
                return token = tk_sgt;
2464
            }
2465
            if ((inptr[1]=='g' || inptr[1]=='G') && (inptr[2]=='t' || inptr[2]=='T') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2466
                inptr += 4;
2467
                return token = tk_sgti;
2468
            }
2469
            if ((inptr[1]=='l' || inptr[1]=='L') && (inptr[2]=='e' || inptr[2]=='E') && isspace(inptr[3])) {
2470
                inptr += 3;
2471
                return token = tk_sle;
2472
            }
2473
            if ((inptr[1]=='l' || inptr[1]=='L') && (inptr[2]=='e' || inptr[2]=='E') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2474
                inptr += 4;
2475
                return token = tk_slei;
2476
            }
2477
            if ((inptr[1]=='l' || inptr[1]=='L') && (inptr[2]=='t' || inptr[2]=='T') && isspace(inptr[3])) {
2478
                inptr += 3;
2479
                return token = tk_slt;
2480
            }
2481
            if ((inptr[1]=='l' || inptr[1]=='L') && (inptr[2]=='t' || inptr[2]=='T') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2482
                inptr += 4;
2483
                return token = tk_slti;
2484
            }
2485
 
2486
            if ((inptr[1]=='g' || inptr[1]=='G') &&
2487
                (inptr[2]=='e' || inptr[2]=='E') &&
2488
                (inptr[3]=='u' || inptr[3]=='U') &&
2489
                isspace(inptr[4])) {
2490
                inptr += 4;
2491
                return token = tk_sgeu;
2492
            }
2493
            if ((inptr[1]=='g' || inptr[1]=='G') &&
2494
                (inptr[2]=='e' || inptr[2]=='E') &&
2495
                (inptr[3]=='u' || inptr[3]=='U') &&
2496
                (inptr[4]=='i' || inptr[4]=='I') &&
2497
                isspace(inptr[4])) {
2498
                inptr += 4;
2499
                return token = tk_sgeui;
2500
            }
2501
            if ((inptr[1]=='g' || inptr[1]=='G') &&
2502
                (inptr[2]=='t' || inptr[2]=='T') &&
2503
                (inptr[3]=='u' || inptr[3]=='U') &&
2504
                isspace(inptr[4])) {
2505
                inptr += 4;
2506
                return token = tk_sgtu;
2507
            }
2508
            if ((inptr[1]=='g' || inptr[1]=='G') &&
2509
                (inptr[2]=='t' || inptr[2]=='T') &&
2510
                (inptr[3]=='u' || inptr[3]=='U') &&
2511
                (inptr[4]=='i' || inptr[4]=='I') &&
2512
                isspace(inptr[5])) {
2513
                inptr += 5;
2514
                return token = tk_sgtui;
2515
            }
2516
            if ((inptr[1]=='l' || inptr[1]=='L') &&
2517
                (inptr[2]=='e' || inptr[2]=='E') &&
2518
                (inptr[3]=='u' || inptr[3]=='U') &&
2519
                isspace(inptr[4])) {
2520
                inptr += 4;
2521
                return token = tk_sleu;
2522
            }
2523
            if ((inptr[1]=='l' || inptr[1]=='L') &&
2524
                (inptr[2]=='e' || inptr[2]=='E') &&
2525
                (inptr[3]=='u' || inptr[3]=='U') &&
2526
                (inptr[4]=='i' || inptr[4]=='I') &&
2527
                isspace(inptr[5])) {
2528
                inptr += 5;
2529
                return token = tk_sleui;
2530
            }
2531
            if ((inptr[1]=='l' || inptr[1]=='L') &&
2532
                (inptr[2]=='t' || inptr[2]=='T') &&
2533
                (inptr[3]=='u' || inptr[3]=='U') &&
2534
                isspace(inptr[4])) {
2535
                inptr += 4;
2536
                return token = tk_sltu;
2537
            }
2538
            if ((inptr[1]=='l' || inptr[1]=='L') &&
2539
                (inptr[2]=='t' || inptr[2]=='T') &&
2540
                (inptr[3]=='u' || inptr[3]=='U') &&
2541
                (inptr[4]=='i' || inptr[4]=='I') &&
2542
                isspace(inptr[5])) {
2543
                inptr += 5;
2544
                return token = tk_sltui;
2545
            }
2546
             if ((inptr[1]=='s' || inptr[1]=='S') &&
2547
                 (inptr[2]==':')) {
2548
                 inptr+=3;
2549
                 return token = tk_ss;
2550
             }
2551
            if ((inptr[1]=='w' || inptr[1]=='W') &&
2552
                (inptr[2]=='a' || inptr[2]=='A') &&
2553
                (inptr[3]=='p' || inptr[3]=='P') &&
2554
                isspace(inptr[4])) {
2555
                inptr += 4;
2556
                return token = tk_swap;
2557
            }
2558
            if ((inptr[1]=='t' || inptr[1]=='T') && isspace(inptr[2])) {
2559
                inptr += 2;
2560
                return token = tk_sw;
2561
            }
2562
            if ((inptr[1]=='v' || inptr[1]=='V') && isspace(inptr[2])) {
2563
                inptr += 2;
2564
                return token = tk_sv;
2565
            }
2566
            if ((inptr[1]=='y' || inptr[1]=='Y') &&
2567
                (inptr[2]=='s' || inptr[2]=='S') &&
2568
                isspace(inptr[3])) {
2569
                inptr += 3;
2570
                return token = tk_sys;
2571
            }
2572
            if ((inptr[1]=='t' || inptr[1]=='T') &&
2573
                (inptr[2]=='p' || inptr[2]=='P') &&
2574
                isspace(inptr[3])) {
2575
                inptr += 3;
2576
                return token = tk_stp;
2577
            }
2578
                        if (gCpu == 'F') {
2579
                                if ((inptr[1] == 'w' || inptr[1] == 'W') &&
2580
                                        (inptr[2] == 'p' || inptr[2] == 'P') &&
2581
                                        isspace(inptr[3])) {
2582
                                        inptr += 3;
2583
                                        return token = tk_swp;
2584
                                }
2585
                        }
2586
            if (gCpu==4) {
2587
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2588
                    (inptr[2]=='s' || inptr[2]=='S') &&
2589
                    (inptr[3]=='b' || inptr[3]=='B') &&
2590
                    isspace(inptr[4])) {
2591
                    inptr += 4;
2592
                    return token = tk_stsb;
2593
                }
2594
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2595
                    (inptr[2]=='s' || inptr[2]=='S') &&
2596
                    (inptr[3]=='c' || inptr[3]=='C') &&
2597
                    isspace(inptr[4])) {
2598
                    inptr += 4;
2599
                    return token = tk_stsc;
2600
                }
2601
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2602
                    (inptr[2]=='s' || inptr[2]=='S') &&
2603
                    (inptr[3]=='h' || inptr[3]=='H') &&
2604
                    isspace(inptr[4])) {
2605
                    inptr += 4;
2606
                    return token = tk_stsh;
2607
                }
2608
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2609
                    (inptr[2]=='s' || inptr[2]=='S') &&
2610
                    (inptr[3]=='w' || inptr[3]=='W') &&
2611
                    isspace(inptr[4])) {
2612
                    inptr += 4;
2613
                    return token = tk_stsw;
2614
                }
2615
                if ((inptr[1]=='w' || inptr[1]=='W') &&
2616
                    (inptr[2]=='s' || inptr[2]=='S') &&
2617
                    isspace(inptr[3])) {
2618
                    inptr += 3;
2619
                    return token = tk_sws;
2620
                }
2621
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2622
                    (inptr[2]=='c' || inptr[2]=='C') &&
2623
                    (inptr[3]=='m' || inptr[3]=='M') &&
2624
                    (inptr[4]=='p' || inptr[4]=='P') &&
2625
                    inptr[5]=='.') {
2626
                    inptr += 6;
2627
                    return token = tk_stcmp;
2628
                }
2629
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2630
                    (inptr[2]=='m' || inptr[2]=='M') &&
2631
                    (inptr[3]=='o' || inptr[3]=='O') &&
2632
                    (inptr[4]=='v' || inptr[4]=='V') &&
2633
                    inptr[5]=='.') {
2634
                    inptr += 6;
2635
                    return token = tk_stmov;
2636
                }
2637
                if ((inptr[1]=='t' || inptr[1]=='T') &&
2638
                    (inptr[2]=='s' || inptr[2]=='S') &&
2639
                    (inptr[3]=='e' || inptr[3]=='E') &&
2640
                    (inptr[4]=='t' || inptr[4]=='T') &&
2641
                    inptr[5]=='.') {
2642
                    inptr += 6;
2643
                    return token = tk_stset;
2644
                }
2645
                if ((inptr[1]=='h' || inptr[1]=='H') &&
2646
                    (inptr[2]=='r' || inptr[2]=='R') &&
2647
                    (inptr[3]=='i' || inptr[3]=='I') &&
2648
                    isspace(inptr[4])) {
2649
                    inptr += 4;
2650
                    return token = tk_shri;
2651
                }
2652
                if ((inptr[1]=='h' || inptr[1]=='H') &&
2653
                    (inptr[2]=='r' || inptr[2]=='R') &&
2654
                    isspaceOrDot(inptr[3])) {
2655
                    inptr += 3;
2656
                    return token = tk_shr;
2657
                }
2658
            }
2659
            if ((inptr[1]=='y' || inptr[1]=='Y') &&
2660
                (inptr[2]=='n' || inptr[2]=='N') &&
2661
                (inptr[3]=='c' || inptr[3]=='C') &&
2662
                isspace(inptr[4])) {
2663
                inptr += 4;
2664
                return token = tk_sync;
2665
            }
2666
            if ((inptr[1]=='w' || inptr[1]=='W') && (inptr[2]=='c' || inptr[2]=='C') && (inptr[3]=='r' || inptr[3]=='R') && isspace(inptr[4])) {
2667
                inptr += 4;
2668
                return token = tk_swcr;
2669
            }
2670
            if ((inptr[1]=='w' || inptr[1]=='W') && (inptr[2]=='c' || inptr[2]=='C') && isspace(inptr[3])) {
2671
                inptr += 3;
2672
                return token = tk_swc;
2673
            }
2674
            // RiSC-V opcodes
2675
            // slli srli srai
2676
            if (gCpu==5) {
2677
              if ((inptr[1]=='l' || inptr[1]=='L') &&
2678
                  (inptr[2]=='l' || inptr[2]=='L') &&
2679
                  (inptr[3]=='i' || inptr[3]=='I') &&
2680
                  isspaceOrDot(inptr[4])) {
2681
                  inptr += 4;
2682
                  return token = tk_slli;
2683
              }
2684
              if ((inptr[1]=='r' || inptr[1]=='R') &&
2685
                  (inptr[2]=='a' || inptr[2]=='A') &&
2686
                  (inptr[3]=='i' || inptr[3]=='I') &&
2687
                  isspaceOrDot(inptr[4])) {
2688
                  inptr += 4;
2689
                  return token = tk_srai;
2690
              }
2691
              if ((inptr[1]=='r' || inptr[1]=='R') &&
2692
                  (inptr[2]=='l' || inptr[2]=='L') &&
2693
                  (inptr[3]=='i' || inptr[3]=='I') &&
2694
                  isspaceOrDot(inptr[4])) {
2695
                  inptr += 4;
2696
                  return token = tk_srli;
2697
              }
2698
            }
2699
                        // DSD7
2700
                        if (gCpu==7) {
2701
                                if ((inptr[1]=='t' || inptr[1]=='T') && (inptr[2]=='c' || inptr[2]=='C') && (inptr[3]=='b' || inptr[3]=='B') && isspace(inptr[4])) {
2702
                                        inptr += 4;
2703
                                        return token = tk_stcb;
2704
                                }
2705
                        }
2706
                        if (gCpu == 'F') {
2707
                                if ((inptr[1] == 'p' || inptr[1] == 'P')
2708
                                        && (inptr[2] == 't' || inptr[2] == 'T')
2709
                                        && (inptr[3] == 'r' || inptr[3] == 'R')
2710
                                        && isspace(inptr[4])) {
2711
                                        inptr += 4;
2712
                                        return (token = tk_sptr);
2713
                                }
2714
                        }
2715
            break;
2716
 
2717
        // tgt to tlbdis tlben tlbpb tlbrd tlbrdreg tlbwi tlbwr tlbwrreg
2718
        case 't': case 'T':
2719
             if ((inptr[1]=='o' || inptr[1]=='O') &&
2720
                 isspace(inptr[2])) {
2721
                 inptr += 2;
2722
                 return token = tk_to;
2723
             }
2724
                         if (gCpu=='A') {
2725
                 if ((inptr[1]=='g' || inptr[1]=='G') &&
2726
                     (inptr[2]=='t' || inptr[2]=='T') &&
2727
                     isspace(inptr[3])) {
2728
                     inptr += 3;
2729
                     return token = tk_tgt;
2730
                 }
2731
                         }
2732
             if (gCpu==4) {
2733
                 if ((inptr[1]=='s' || inptr[1]=='S') && (inptr[2]=='t' || inptr[2]=='T') &&
2734
                     isspace(inptr[3])) {
2735
                     inptr += 3;
2736
                     return token = tk_tst;
2737
                 }
2738
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2739
                     (inptr[2]=='b' || inptr[2]=='B') &&
2740
                     (inptr[3]=='d' || inptr[3]=='D') &&
2741
                     (inptr[4]=='i' || inptr[4]=='I') &&
2742
                     (inptr[5]=='s' || inptr[5]=='S') &&
2743
                     isspace(inptr[6])) {
2744
                     inptr += 6;
2745
                     return token = tk_tlbdis;
2746
                 }
2747
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2748
                     (inptr[2]=='b' || inptr[2]=='B') &&
2749
                     (inptr[3]=='e' || inptr[3]=='E') &&
2750
                     (inptr[4]=='n' || inptr[4]=='N') &&
2751
                     isspace(inptr[5])) {
2752
                     inptr += 5;
2753
                     return token = tk_tlben;
2754
                 }
2755
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2756
                     (inptr[2]=='b' || inptr[2]=='B') &&
2757
                     (inptr[3]=='p' || inptr[3]=='P') &&
2758
                     (inptr[4]=='b' || inptr[4]=='B') &&
2759
                     isspace(inptr[5])) {
2760
                     inptr += 5;
2761
                     return token = tk_tlbpb;
2762
                 }
2763
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2764
                     (inptr[2]=='b' || inptr[2]=='B') &&
2765
                     (inptr[3]=='r' || inptr[3]=='R') &&
2766
                     (inptr[4]=='d' || inptr[4]=='D') &&
2767
                     isspace(inptr[5])) {
2768
                     inptr += 5;
2769
                     return token = tk_tlbrd;
2770
                 }
2771
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2772
                     (inptr[2]=='b' || inptr[2]=='B') &&
2773
                     (inptr[3]=='r' || inptr[3]=='R') &&
2774
                     (inptr[4]=='d' || inptr[4]=='D') &&
2775
                     (inptr[5]=='r' || inptr[5]=='R') &&
2776
                     (inptr[6]=='e' || inptr[6]=='E') &&
2777
                     (inptr[7]=='g' || inptr[7]=='G') &&
2778
                     isspace(inptr[8])) {
2779
                     inptr += 8;
2780
                     return token = tk_tlbrdreg;
2781
                 }
2782
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2783
                     (inptr[2]=='b' || inptr[2]=='B') &&
2784
                     (inptr[3]=='w' || inptr[3]=='W') &&
2785
                     (inptr[4]=='i' || inptr[4]=='I') &&
2786
                     isspace(inptr[5])) {
2787
                     inptr += 5;
2788
                     return token = tk_tlbwi;
2789
                 }
2790
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2791
                     (inptr[2]=='b' || inptr[2]=='B') &&
2792
                     (inptr[3]=='w' || inptr[3]=='W') &&
2793
                     (inptr[4]=='r' || inptr[4]=='R') &&
2794
                     isspace(inptr[5])) {
2795
                     inptr += 5;
2796
                     return token = tk_tlbwr;
2797
                 }
2798
                 if ((inptr[1]=='l' || inptr[1]=='L') &&
2799
                     (inptr[2]=='b' || inptr[2]=='B') &&
2800
                     (inptr[3]=='w' || inptr[3]=='W') &&
2801
                     (inptr[4]=='r' || inptr[4]=='R') &&
2802
                     (inptr[5]=='r' || inptr[5]=='R') &&
2803
                     (inptr[6]=='e' || inptr[6]=='E') &&
2804
                     (inptr[7]=='g' || inptr[7]=='G') &&
2805
                     isspace(inptr[8])) {
2806
                     inptr += 8;
2807
                     return token = tk_tlbwrreg;
2808
                 }
2809
             }
2810
             break;
2811
 
2812
                // unlink
2813
                case 'u': case 'U':
2814
            if ((inptr[1]=='n' || inptr[1]=='N') &&
2815
                                (inptr[2]=='l' || inptr[2]=='L') &&
2816
                                (inptr[3]=='i' || inptr[3]=='I') &&
2817
                                (inptr[4]=='n' || inptr[4]=='N') &&
2818
                                (inptr[5]=='k' || inptr[5]=='K') &&
2819
                                isspace(inptr[6])) {
2820
                inptr += 6;
2821
                return token = tk_unlink;
2822
            }
2823
                        break;
2824
 
2825
                // vadd vdiv vmul vsub
2826
                case 'v': case 'V':
2827
            if ((inptr[1]=='a' || inptr[1]=='A') &&
2828
                                (inptr[2]=='d' || inptr[2]=='D') &&
2829
                                (inptr[3]=='d' || inptr[3]=='D') &&
2830
                                isspaceOrDot(inptr[4])) {
2831
                inptr += 4;
2832
                return token = tk_vadd;
2833
            }
2834
            if ((inptr[1]=='a' || inptr[1]=='A') &&
2835
                                (inptr[2]=='d' || inptr[2]=='D') &&
2836
                                (inptr[3]=='d' || inptr[3]=='D') &&
2837
                                (inptr[4]=='s' || inptr[4]=='S') &&
2838
                                isspaceOrDot(inptr[5])) {
2839
                inptr += 5;
2840
                return token = tk_vadds;
2841
            }
2842
            if ((inptr[1]=='a' || inptr[1]=='A') &&
2843
                                (inptr[2]=='n' || inptr[2]=='N') &&
2844
                                (inptr[3]=='d' || inptr[3]=='D') &&
2845
                                isspaceOrDot(inptr[4])) {
2846
                inptr += 4;
2847
                return token = tk_vand;
2848
            }
2849
            if ((inptr[1]=='a' || inptr[1]=='A') &&
2850
                                (inptr[2]=='n' || inptr[2]=='N') &&
2851
                                (inptr[3]=='d' || inptr[3]=='D') &&
2852
                                (inptr[4]=='s' || inptr[4]=='S') &&
2853
                                isspaceOrDot(inptr[5])) {
2854
                inptr += 5;
2855
                return token = tk_vands;
2856
            }
2857
            if ((inptr[1]=='d' || inptr[1]=='D') &&
2858
                                (inptr[2]=='i' || inptr[2]=='I') &&
2859
                                (inptr[3]=='v' || inptr[3]=='V') &&
2860
                                isspaceOrDot(inptr[4])) {
2861
                inptr += 4;
2862
                return token = tk_vdiv;
2863
            }
2864
            if ((inptr[1]=='d' || inptr[1]=='D') &&
2865
                                (inptr[2]=='i' || inptr[2]=='I') &&
2866
                                (inptr[3]=='v' || inptr[3]=='V') &&
2867
                                (inptr[4]=='s' || inptr[4]=='S') &&
2868
                                isspaceOrDot(inptr[5])) {
2869
                inptr += 5;
2870
                return token = tk_vdivs;
2871
            }
2872
            if ((inptr[1]=='m' || inptr[1]=='M') &&
2873
                                (inptr[2]=='o' || inptr[2]=='O') &&
2874
                                (inptr[3]=='v' || inptr[3]=='V') &&
2875
                                isspaceOrDot(inptr[4])) {
2876
                inptr += 4;
2877
                return token = tk_vmov;
2878
            }
2879
            if ((inptr[1]=='m' || inptr[1]=='M') &&
2880
                                (inptr[2]=='u' || inptr[2]=='U') &&
2881
                                (inptr[3]=='l' || inptr[3]=='L') &&
2882
                                isspaceOrDot(inptr[4])) {
2883
                inptr += 4;
2884
                return token = tk_vmul;
2885
            }
2886
            if ((inptr[1]=='m' || inptr[1]=='M') &&
2887
                                (inptr[2]=='u' || inptr[2]=='U') &&
2888
                                (inptr[3]=='l' || inptr[3]=='L') &&
2889
                                (inptr[4]=='s' || inptr[4]=='S') &&
2890
                                isspaceOrDot(inptr[5])) {
2891
                inptr += 5;
2892
                return token = tk_vmuls;
2893
            }
2894
            if ((inptr[1]=='o' || inptr[1]=='O') &&
2895
                                (inptr[2]=='r' || inptr[2]=='R') &&
2896
                                isspaceOrDot(inptr[3])) {
2897
                inptr += 3;
2898
                return token = tk_vor;
2899
            }
2900
            if ((inptr[1]=='o' || inptr[1]=='O') &&
2901
                                (inptr[2]=='r' || inptr[2]=='R') &&
2902
                                (inptr[3]=='s' || inptr[3]=='S') &&
2903
                                isspaceOrDot(inptr[4])) {
2904
                inptr += 4;
2905
                return token = tk_vors;
2906
            }
2907
            if ((inptr[1]=='s' || inptr[1]=='S') &&
2908
                                (inptr[2]=='u' || inptr[2]=='U') &&
2909
                                (inptr[3]=='b' || inptr[3]=='B') &&
2910
                                isspaceOrDot(inptr[4])) {
2911
                inptr += 4;
2912
                return token = tk_vsub;
2913
            }
2914
            if ((inptr[1]=='s' || inptr[1]=='S') &&
2915
                                (inptr[2]=='u' || inptr[2]=='U') &&
2916
                                (inptr[3]=='b' || inptr[3]=='B') &&
2917
                                (inptr[4]=='s' || inptr[4]=='S') &&
2918
                                isspaceOrDot(inptr[5])) {
2919
                inptr += 5;
2920
                return token = tk_vsubs;
2921
            }
2922
            if ((inptr[1]=='x' || inptr[1]=='X') &&
2923
                                (inptr[2]=='o' || inptr[2]=='O') &&
2924
                                (inptr[3]=='r' || inptr[3]=='R') &&
2925
                                isspaceOrDot(inptr[4])) {
2926
                inptr += 4;
2927
                return token = tk_vxor;
2928
            }
2929
            if ((inptr[1]=='x' || inptr[1]=='X') &&
2930
                                (inptr[2]=='o' || inptr[2]=='O') &&
2931
                                (inptr[3]=='r' || inptr[3]=='R') &&
2932
                                (inptr[4]=='s' || inptr[4]=='S') &&
2933
                                isspaceOrDot(inptr[5])) {
2934
                inptr += 5;
2935
                return token = tk_vxors;
2936
            }
2937
                        break;
2938
 
2939
        // wai
2940
        case 'w': case 'W':
2941
             if ((inptr[1]=='a' || inptr[1]=='A') &&
2942
                 (inptr[2]=='i' || inptr[2]=='I') &&
2943
                 isspace(inptr[3])) {
2944
                 inptr += 3;
2945
                 return token = tk_wai;
2946
             }
2947
             break;
2948
 
2949
        // xnor xor xori
2950
        case 'x': case 'X':
2951
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='r' || inptr[2]=='R') && (inptr[3]=='i' || inptr[3]=='I') && isspace(inptr[4])) {
2952
                inptr += 4;
2953
                return token = (tk_xori);
2954
            }
2955
            if ((inptr[1]=='o' || inptr[1]=='O') && (inptr[2]=='r' || inptr[2]=='R') && isspaceOrDot(inptr[3])) {
2956
                inptr += 3;
2957
                return (token = tk_xor);
2958
            }
2959
                        if (
2960
                                (inptr[1] == 'n' || inptr[1] == 'N')
2961
                                && (inptr[2] == 'o' || inptr[2] == 'O')
2962
                                && (inptr[3] == 'r' || inptr[3] == 'R')
2963
                                && isspaceOrDot(inptr[4])) {
2964
                                inptr += 4;
2965
                                return (token = tk_xnor);
2966
                        }
2967
                        break;
2968
 
2969
        // zs:
2970
        case 'z': case 'Z':
2971
                        if (gCpu == 4 || gCpu == 'F') {
2972
                                if ((inptr[1] == 's' || inptr[1] == 'S') && inptr[2] == ':') {
2973
                                        inptr += 3;
2974
                                        return token = tk_zs;
2975
                                }
2976
                        }
2977
                        if (gCpu == 4 || gCpu == 'F') {
2978
                                if ((inptr[1]=='x' || inptr[1]=='X') &&
2979
                    (inptr[2]=='b' || inptr[2]=='B') &&
2980
                    isspace(inptr[3])
2981
                    ) {
2982
                    inptr += 3;
2983
                    return token = tk_zxb;
2984
                }
2985
                if ((inptr[1]=='x' || inptr[1]=='X') &&
2986
                    (inptr[2]=='c' || inptr[2]=='C') &&
2987
                    isspace(inptr[3])
2988
                    ) {
2989
                    inptr += 3;
2990
                    return token = tk_zxc;
2991
                }
2992
                if ((inptr[1]=='x' || inptr[1]=='X') &&
2993
                    (inptr[2]=='h' || inptr[2]=='h') &&
2994
                    isspace(inptr[3])
2995
                    ) {
2996
                    inptr += 3;
2997
                    return token = tk_zxh;
2998
                }
2999
            }
3000
        }
3001
        // The text wasn't recognized as any of the above tokens. So try for an
3002
        // identifier name.
3003 54 robfinch
                                p = inptr;
3004 48 robfinch
        if (getIdentifier()) {
3005 54 robfinch
                                        SYM *sym;
3006
                                        char *q;
3007
                                        if (sym = find_symbol(lastid)) {
3008
                                                if (sym->isMacro) {
3009
                                                        Arglist args;
3010
                                                        args.Get();
3011
                                                        q = sym->macro->SubArgs(&args);
3012
                                                        Macro::Substitute(q, inptr-p);
3013
                                                        inptr = p;
3014
                                                        continue;
3015
                                                }
3016
                                        }
3017
            return (token = tk_id);
3018 48 robfinch
        }
3019
        inptr++;
3020
    } while (*inptr);
3021 54 robfinch
    return (token = tk_eof);
3022 48 robfinch
}
3023
 
3024
// ----------------------------------------------------------------------------
3025
// Return the register number or -1 if not a register.
3026
// ----------------------------------------------------------------------------
3027
 
3028
int getRegister()
3029
{
3030
    int reg;
3031
 
3032
    while(isspace(*inptr)) inptr++;
3033
    switch(*inptr) {
3034
    case 'r': case 'R':
3035
         if (isdigit(inptr[1])) {
3036
             reg = inptr[1]-'0';
3037
             if (isdigit(inptr[2])) {
3038
                 reg = 10 * reg + (inptr[2]-'0');
3039
                 if (isdigit(inptr[3])) {
3040
                     reg = 10 * reg + (inptr[3]-'0');
3041
                     if (isIdentChar(inptr[4]))
3042
                         return -1;
3043
                     inptr += 4;
3044
                     NextToken();
3045
                     return reg;
3046
                 }
3047
                 else if (isIdentChar(inptr[3]))
3048
                     return -1;
3049
                 else {
3050
                     inptr += 3;
3051
                     NextToken();
3052
                     return reg;
3053
                 }
3054
             }
3055
             else if (isIdentChar(inptr[2]))
3056
                 return -1;
3057
             else {
3058
                 inptr += 2;
3059
                 NextToken();
3060
                 return reg;
3061
             }
3062
         }
3063
         else return -1;
3064
    case 'b': case 'B':
3065
        if ((inptr[1]=='P' || inptr[1]=='p') && !isIdentChar(inptr[2])) {
3066
            inptr += 2;
3067
            NextToken();
3068
            return 253;
3069
        }
3070
        break;
3071
    case 'g': case 'G':
3072
        if ((inptr[1]=='P' || inptr[1]=='p') && !isIdentChar(inptr[2])) {
3073
            inptr += 2;
3074
            NextToken();
3075
            return 249;
3076
        }
3077
        break;
3078
    case 's': case 'S':
3079
        if ((inptr[1]=='P' || inptr[1]=='p') && !isIdentChar(inptr[2])) {
3080
            inptr += 2;
3081
            NextToken();
3082
            return 255;
3083
        }
3084
        break;
3085
    case 't': case 'T':
3086
        if ((inptr[1]=='R' || inptr[1]=='r') && !isIdentChar(inptr[2])) {
3087
            inptr += 2;
3088
            NextToken();
3089
            return 252;
3090
        }
3091
        break;
3092
    case 'f': case 'F':
3093
        if ((inptr[1]=='l' || inptr[1]=='L') &&
3094
            (inptr[2]=='g' || inptr[2]=='G') &&
3095
            isdigit(inptr[3]) &&
3096
            !isIdentChar(inptr[4])) {
3097
            reg = inptr[3]-'0' + 244;
3098
            inptr += 4;
3099
            NextToken();
3100
            return reg;
3101
        }
3102
        if ((inptr[1]=='l' || inptr[1]=='L') &&
3103
            isdigit(inptr[2]) &&
3104
            !isIdentChar(inptr[3])) {
3105
            reg = inptr[2]-'0' + 244;
3106
            inptr += 3;
3107
            NextToken();
3108
            return reg;
3109
        }
3110
        break;
3111
    case 'p': case 'P':
3112
        if ((inptr[1]=='c' || inptr[1]=='C') && !isIdentChar(inptr[2])) {
3113
            inptr += 2;
3114
            NextToken();
3115
            return 254;
3116
        }
3117
        break;
3118
    default:
3119
        return -1;
3120
    }
3121
    return -1;
3122
}
3123
 
3124
// ----------------------------------------------------------------------------
3125
// Return the register number or -1 if not a register.
3126
// ----------------------------------------------------------------------------
3127
 
3128
int getFPRegister()
3129
{
3130
    int reg;
3131
 
3132
    while(isspace(*inptr)) inptr++;
3133
        if (*inptr=='$')
3134
                inptr++;
3135
    switch(*inptr) {
3136
    case 'f': case 'F':
3137
         if (inptr[1]=='p' || inptr[1]=='P') {
3138
         if (isdigit(inptr[2])) {
3139
             reg = inptr[2]-'0';
3140
             if (isdigit(inptr[3])) {
3141
                 reg = 10 * reg + (inptr[3]-'0');
3142
                 if (isdigit(inptr[4])) {
3143
                     reg = 10 * reg + (inptr[4]-'0');
3144
                     if (isIdentChar(inptr[5]))
3145
                         return -1;
3146
                     inptr += 5;
3147
                     NextToken();
3148
                     return reg;
3149
                 }
3150
                 else if (isIdentChar(inptr[4]))
3151
                     return -1;
3152
                 else {
3153
                     inptr += 4;
3154
                     NextToken();
3155
                     return reg;
3156
                 }
3157
             }
3158
             else if (isIdentChar(inptr[3]))
3159
                 return -1;
3160
             else {
3161
                 inptr += 3;
3162
                 NextToken();
3163
                 return reg;
3164
             }
3165
         }
3166
         else return -1;
3167
         }
3168
         else return -1;
3169
    default:
3170
        return -1;
3171
    }
3172
    return -1;
3173
}
3174
 
3175
// ----------------------------------------------------------------------------
3176
// Return the FP round mode.
3177
// ----------------------------------------------------------------------------
3178
 
3179
int getFPRoundMode()
3180
{
3181
    while(isspace(*inptr) || *inptr==',') inptr++;
3182
    switch(*inptr) {
3183
    case 'r': case 'R':
3184
         if ((inptr[1]=='n' || inptr[1]=='N') &&
3185
             (inptr[2]=='e' || inptr[2]=='E') &&
3186
             !isIdentChar(inptr[3]))
3187
         {
3188
             inptr += 3;
3189
             NextToken();
3190
             return 0;
3191
         }
3192
         if ((inptr[1]=='t' || inptr[1]=='T') &&
3193
             (inptr[2]=='z' || inptr[2]=='Z') &&
3194
             !isIdentChar(inptr[3]))
3195
         {
3196
             inptr += 3;
3197
             NextToken();
3198
             return 1;
3199
         }
3200
         if ((inptr[1]=='d' || inptr[1]=='D') &&
3201
             (inptr[2]=='n' || inptr[2]=='N') &&
3202
             !isIdentChar(inptr[3]))
3203
         {
3204
             inptr += 3;
3205
             NextToken();
3206
             return 2;
3207
         }
3208
         if ((inptr[1]=='u' || inptr[1]=='U') &&
3209
             (inptr[2]=='p' || inptr[2]=='P') &&
3210
             !isIdentChar(inptr[3]))
3211
         {
3212
             inptr += 3;
3213
             NextToken();
3214
             return 3;
3215
         }
3216
         if ((inptr[1]=='m' || inptr[1]=='M') &&
3217
             (inptr[2]=='m' || inptr[2]=='M') &&
3218
             !isIdentChar(inptr[3]))
3219
         {
3220
             inptr += 3;
3221
             NextToken();
3222
             return 4;
3223
         }
3224
         if ((inptr[1]=='f' || inptr[1]=='F') &&
3225
             (inptr[2]=='c' || inptr[2]=='C') &&
3226
             !isIdentChar(inptr[3]))
3227
         {
3228
             inptr += 3;
3229
             NextToken();
3230
             return 7;
3231
         }
3232
    default:
3233
        return 7;
3234
    }
3235
    return 7;
3236
}
3237
 
3238
// ----------------------------------------------------------------------------
3239
// Get the friendly name of a special purpose register.
3240
// ----------------------------------------------------------------------------
3241
 
3242
int getSprRegister()
3243
{
3244
    while(isspace(*inptr)) inptr++;
3245
    switch(*inptr) {
3246
 
3247
    // bithist biterr
3248
    case 'b': case 'B':
3249
         if ((inptr[1]=='i' || inptr[1]=='I') &&
3250
             (inptr[2]=='t' || inptr[2]=='T') &&
3251
             (inptr[3]=='e' || inptr[3]=='E') &&
3252
             (inptr[4]=='r' || inptr[4]=='R') &&
3253
             (inptr[5]=='r' || inptr[5]=='R') &&
3254
             !isIdentChar(inptr[6])) {
3255
             inptr += 6;
3256
             NextToken();
3257
             return 0x0E;
3258
         }
3259
         if ((inptr[1]=='i' || inptr[1]=='I') &&
3260
             (inptr[2]=='t' || inptr[2]=='T') &&
3261
             (inptr[3]=='h' || inptr[3]=='H') &&
3262
             (inptr[4]=='i' || inptr[4]=='I') &&
3263
             (inptr[5]=='s' || inptr[5]=='S') &&
3264
             (inptr[6]=='t' || inptr[6]=='T') &&
3265
             !isIdentChar(inptr[7])) {
3266
             inptr += 7;
3267
             NextToken();
3268
             return 0x0F;
3269
         }
3270
         break;
3271
 
3272
    // cs clk cr0 cr3
3273
    case 'c': case 'C':
3274
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3275
             !isIdentChar(inptr[2])) {
3276
             inptr += 2;
3277
             NextToken();
3278
             if (gCpu==889)
3279
                return 0x2F;
3280
             return 0x20;
3281
         }
3282
         if ((inptr[1]=='l' || inptr[1]=='L') &&
3283
             (inptr[2]=='k' || inptr[2]=='K') &&
3284
             !isIdentChar(inptr[3])) {
3285
             inptr += 3;
3286
             NextToken();
3287
             return 0x06;
3288
         }
3289
         if ((inptr[1]=='r' || inptr[1]=='R') &&
3290
             (inptr[2]=='0') &&
3291
             !isIdentChar(inptr[3])) {
3292
             inptr += 3;
3293
             NextToken();
3294
             return 0x05;
3295
         }
3296
         if ((inptr[1]=='r' || inptr[1]=='R') &&
3297
             (inptr[2]=='3') &&
3298
             !isIdentChar(inptr[3])) {
3299
             inptr += 3;
3300
             NextToken();
3301
             return 0x04;
3302
         }
3303
         break;
3304
 
3305
    // ds
3306
    case 'd': case 'D':
3307
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3308
             !isIdentChar(inptr[2])) {
3309
             inptr += 2;
3310
             NextToken();
3311
             return 0x21;
3312
         }
3313
         break;
3314
 
3315
    // es
3316
    case 'e': case 'E':
3317
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3318
             !isIdentChar(inptr[2])) {
3319
             inptr += 2;
3320
             NextToken();
3321
             return 0x25;
3322
         }
3323
         break;
3324
 
3325
    // fs
3326
    case 'f': case 'F':
3327
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3328
             !isIdentChar(inptr[2])) {
3329
             inptr += 2;
3330
             NextToken();
3331
             return 0x26;
3332
         }
3333
         if ((inptr[1]=='a' || inptr[1]=='A') &&
3334
             (inptr[2]=='u' || inptr[2]=='U') &&
3335
             (inptr[3]=='l' || inptr[3]=='L') &&
3336
             (inptr[4]=='t' || inptr[4]=='T') &&
3337
             (inptr[5]=='_' || inptr[5]=='_') &&
3338
             (inptr[6]=='p' || inptr[6]=='P') &&
3339
             (inptr[7]=='c' || inptr[7]=='C') &&
3340
             !isIdentChar(inptr[8])) {
3341
             inptr += 8;
3342
             NextToken();
3343
             return 0x08;
3344
         }
3345
         break;
3346
 
3347
    // GDT gs
3348
    case 'g': case 'G':
3349
         if ((inptr[1]=='d' || inptr[1]=='D') &&
3350
             (inptr[2]=='t' || inptr[2]=='T') &&
3351
             !isIdentChar(inptr[3])) {
3352
             inptr += 3;
3353
             NextToken();
3354
             return 0x19;
3355
         }
3356
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3357
             !isIdentChar(inptr[2])) {
3358
             inptr += 2;
3359
             NextToken();
3360
             return 0x27;
3361
         }
3362
         break;
3363
 
3364
    // history
3365
    case 'h': case 'H':
3366
         if ((inptr[1]=='i' || inptr[1]=='I') &&
3367
             (inptr[2]=='s' || inptr[2]=='S') &&
3368
             (inptr[3]=='t' || inptr[3]=='T') &&
3369
             (inptr[4]=='o' || inptr[4]=='O') &&
3370
             (inptr[5]=='r' || inptr[5]=='R') &&
3371
             (inptr[6]=='y' || inptr[6]=='Y') &&
3372
             !isIdentChar(inptr[7])) {
3373
             inptr += 7;
3374
             NextToken();
3375
             return 0x0D;
3376
         }
3377
         break;
3378
 
3379
    // ios ivno
3380
    case 'i': case 'I':
3381
         if ((inptr[1]=='o' || inptr[1]=='O') &&
3382
             (inptr[2]=='s' || inptr[2]=='S') &&
3383
             !isIdentChar(inptr[3])) {
3384
             inptr += 3;
3385
             NextToken();
3386
             return 0x2B;
3387
         }
3388
         if ((inptr[1]=='v' || inptr[1]=='V') &&
3389
             (inptr[2]=='n' || inptr[2]=='N') &&
3390
             (inptr[3]=='o' || inptr[3]=='O') &&
3391
             !isIdentChar(inptr[4])) {
3392
             inptr += 4;
3393
             NextToken();
3394
             return 0x0C;
3395
         }
3396
         break;
3397
 
3398
    // LDT
3399
    case 'l': case 'L':
3400
         if ((inptr[1]=='d' || inptr[1]=='D') &&
3401
             (inptr[2]=='t' || inptr[2]=='T') &&
3402
             !isIdentChar(inptr[3])) {
3403
             inptr += 3;
3404
             NextToken();
3405
             return 0x18;
3406
         }
3407
         break;
3408
 
3409
    // pta
3410
    case 'p': case 'P':
3411
         if ((inptr[1]=='t' || inptr[1]=='T') &&
3412
             (inptr[2]=='a' || inptr[2]=='A') &&
3413
             !isIdentChar(inptr[3])) {
3414
             inptr += 3;
3415
             NextToken();
3416
             return 0x04;
3417
         }
3418
         break;
3419
 
3420
    // rand
3421
    case 'r': case 'R':
3422
         if ((inptr[1]=='a' || inptr[1]=='A') &&
3423
             (inptr[2]=='n' || inptr[2]=='N') &&
3424
             (inptr[3]=='d' || inptr[3]=='D') &&
3425
             !isIdentChar(inptr[4])) {
3426
             inptr += 4;
3427
             NextToken();
3428
             return 0x12;
3429
         }
3430
         break;
3431
    // ss ss_ll srand1 srand2
3432
    case 's': case 'S':
3433
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3434
             (inptr[2]=='_' || inptr[2]=='_') &&
3435
             (inptr[3]=='l' || inptr[3]=='L') &&
3436
             (inptr[4]=='l' || inptr[4]=='L') &&
3437
             !isIdentChar(inptr[5])) {
3438
             inptr += 5;
3439
             NextToken();
3440
             return 0x1A;
3441
         }
3442
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3443
             !isIdentChar(inptr[2])) {
3444
             inptr += 2;
3445
             NextToken();
3446
             if (gCpu==889)
3447
                return 0x2E;
3448
             return 0x22;
3449
         }
3450
         if ((inptr[1]=='r' || inptr[1]=='R') &&
3451
             (inptr[2]=='a' || inptr[2]=='A') &&
3452
             (inptr[3]=='n' || inptr[3]=='N') &&
3453
             (inptr[4]=='d' || inptr[4]=='D') &&
3454
             (inptr[5]=='1') &&
3455
             !isIdentChar(inptr[6])) {
3456
             inptr += 6;
3457
             NextToken();
3458
             return 0x10;
3459
         }
3460
         if ((inptr[1]=='r' || inptr[1]=='R') &&
3461
             (inptr[2]=='a' || inptr[2]=='A') &&
3462
             (inptr[3]=='n' || inptr[3]=='N') &&
3463
             (inptr[4]=='d' || inptr[4]=='D') &&
3464
             (inptr[5]=='2') &&
3465
             !isIdentChar(inptr[6])) {
3466
             inptr += 6;
3467
             NextToken();
3468
             return 0x11;
3469
         }
3470
         if ((inptr[1]=='p' || inptr[1]=='P') &&
3471
             (inptr[2]=='r' || inptr[2]=='R') &&
3472
             isdigit(inptr[3]) && isdigit(inptr[4]) &&
3473
             !isIdentChar(inptr[5])) {
3474
             inptr += 5;
3475
             NextToken();
3476
             return (inptr[3]-'0')*10 + (inptr[4]-'0');
3477
         }
3478
         break;
3479
 
3480
    // tick ts
3481
    case 't': case 'T':
3482
         if ((inptr[1]=='i' || inptr[1]=='I') &&
3483
             (inptr[2]=='c' || inptr[2]=='C') &&
3484
             (inptr[3]=='k' || inptr[3]=='K') &&
3485
             !isIdentChar(inptr[4])) {
3486
             inptr += 4;
3487
             NextToken();
3488
             return 0x00;
3489
         }
3490
         if ((inptr[1]=='s' || inptr[1]=='S') &&
3491
             !isIdentChar(inptr[2])) {
3492
             inptr += 2;
3493
             NextToken();
3494
             return 0x2C;
3495
         }
3496
         break;
3497
 
3498
    // vbr
3499
    case 'v': case 'V':
3500
         if ((inptr[1]=='b' || inptr[1]=='B') &&
3501
             (inptr[2]=='r' || inptr[2]=='R') &&
3502
             !isIdentChar(inptr[3])) {
3503
             inptr += 3;
3504
             NextToken();
3505
             return 0x01;
3506
         }
3507
         break;
3508
    }
3509
    return -1;
3510
}
3511
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.