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

Subversion Repositories thor

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

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

powered by: WebSVN 2.1.0

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