mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-11 01:46:14 +00:00
Get the wm program to parse.
This commit is contained in:
parent
22a1063cc0
commit
6c98c8d578
@ -8,4 +8,5 @@ lextest: ${SOURCES}
|
||||
cc -o lextest ${SOURCES}
|
||||
|
||||
clean:
|
||||
rm -f gram.c lex.c
|
||||
rm -f *.o lextest
|
@ -1053,7 +1053,7 @@ struct brw_instruction
|
||||
GLuint predicate_control:4;
|
||||
GLuint predicate_inverse:1;
|
||||
GLuint execution_size:3;
|
||||
GLuint destreg__conditonalmod:4; /* destreg - send, conditionalmod - others */
|
||||
GLuint destreg__conditionalmod:4; /* destreg - send, conditionalmod - others */
|
||||
GLuint pad0:2;
|
||||
GLuint debug_control:1;
|
||||
GLuint saturate:1;
|
||||
|
567
assembler/gram.c
567
assembler/gram.c
@ -89,113 +89,140 @@ typedef union {
|
||||
#define TYPE_V 274
|
||||
#define TYPE_F 275
|
||||
#define ALIGN1 276
|
||||
#define GENREGFILE 277
|
||||
#define MSGREGFILE 278
|
||||
#define MOV 279
|
||||
#define MUL 280
|
||||
#define MAC 281
|
||||
#define MACH 282
|
||||
#define LINE 283
|
||||
#define SAD2 284
|
||||
#define SADA2 285
|
||||
#define DP4 286
|
||||
#define DPH 287
|
||||
#define DP3 288
|
||||
#define DP2 289
|
||||
#define ADD 290
|
||||
#define SEND 291
|
||||
#define NULL_TOKEN 292
|
||||
#define MATH 293
|
||||
#define SAMPLER 294
|
||||
#define GATEWAY 295
|
||||
#define READ 296
|
||||
#define WRITE 297
|
||||
#define URB 298
|
||||
#define THREAD_SPAWNER 299
|
||||
#define MSGLEN 300
|
||||
#define RETURNLEN 301
|
||||
#define INTEGER 302
|
||||
#define NUMBER 303
|
||||
#define accreg 304
|
||||
#define triop 305
|
||||
#define ALIGN16 277
|
||||
#define MASK_DISABLE 278
|
||||
#define EOT 279
|
||||
#define GENREG 280
|
||||
#define MSGREG 281
|
||||
#define ACCREG 282
|
||||
#define ADDRESSREG 283
|
||||
#define FLAGREG 284
|
||||
#define CONTROLREG 285
|
||||
#define IPREG 286
|
||||
#define MOV 287
|
||||
#define MUL 288
|
||||
#define MAC 289
|
||||
#define MACH 290
|
||||
#define LINE 291
|
||||
#define SAD2 292
|
||||
#define SADA2 293
|
||||
#define DP4 294
|
||||
#define DPH 295
|
||||
#define DP3 296
|
||||
#define DP2 297
|
||||
#define ADD 298
|
||||
#define SEND 299
|
||||
#define NULL_TOKEN 300
|
||||
#define MATH 301
|
||||
#define SAMPLER 302
|
||||
#define GATEWAY 303
|
||||
#define READ 304
|
||||
#define WRITE 305
|
||||
#define URB 306
|
||||
#define THREAD_SPAWNER 307
|
||||
#define MSGLEN 308
|
||||
#define RETURNLEN 309
|
||||
#define SATURATE 310
|
||||
#define INTEGER 311
|
||||
#define NUMBER 312
|
||||
#define flagreg 313
|
||||
#define maskreg 314
|
||||
#define NOP 315
|
||||
const short yylhs[] = { -1,
|
||||
0, 16, 16, 16, 1, 1, 1, 1, 2, 17,
|
||||
3, 18, 4, 19, 5, 6, 34, 35, 26, 26,
|
||||
26, 26, 26, 26, 26, 26, 32, 7, 8, 9,
|
||||
9, 15, 15, 14, 13, 13, 10, 11, 12, 28,
|
||||
24, 24, 29, 25, 23, 27, 20, 20, 20, 20,
|
||||
20, 20, 20, 21, 30, 30, 31, 22, 33, 36,
|
||||
0, 21, 21, 21, 1, 1, 1, 1, 1, 2,
|
||||
22, 3, 23, 23, 4, 24, 5, 6, 7, 41,
|
||||
32, 32, 32, 32, 32, 32, 32, 32, 40, 40,
|
||||
8, 9, 9, 10, 10, 17, 17, 16, 15, 15,
|
||||
12, 13, 14, 31, 31, 34, 35, 11, 36, 37,
|
||||
30, 33, 27, 27, 27, 27, 27, 27, 27, 28,
|
||||
38, 38, 39, 29, 26, 26, 25, 18, 19, 19,
|
||||
20, 20, 20, 20,
|
||||
};
|
||||
const short yylen[] = { 2,
|
||||
1, 3, 2, 3, 1, 1, 1, 1, 6, 1,
|
||||
7, 1, 7, 1, 1, 12, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 3, 3, 1,
|
||||
1, 1, 2, 1, 1, 2, 1, 1, 3, 3,
|
||||
2, 0, 3, 1, 3, 7, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 0, 3, 3, 1,
|
||||
1, 3, 2, 3, 1, 1, 1, 1, 1, 8,
|
||||
1, 9, 1, 1, 9, 1, 1, 12, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
3, 3, 1, 1, 1, 1, 2, 1, 1, 2,
|
||||
1, 1, 3, 2, 0, 3, 3, 3, 3, 1,
|
||||
3, 7, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 0, 3, 0, 2, 0, 3, 2, 0,
|
||||
1, 1, 1, 1,
|
||||
};
|
||||
const short yydefred[] = { 0,
|
||||
0, 0, 0, 5, 6, 7, 8, 15, 1, 0,
|
||||
0, 0, 10, 12, 14, 0, 0, 0, 0, 4,
|
||||
2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
27, 0, 30, 31, 0, 0, 0, 17, 0, 58,
|
||||
0, 0, 0, 0, 55, 56, 34, 37, 32, 0,
|
||||
0, 0, 0, 38, 0, 18, 0, 0, 40, 44,
|
||||
43, 0, 48, 49, 50, 51, 52, 53, 47, 28,
|
||||
0, 9, 0, 0, 54, 33, 35, 0, 0, 0,
|
||||
19, 21, 20, 22, 23, 24, 25, 26, 0, 41,
|
||||
45, 60, 0, 0, 39, 11, 36, 13, 0, 59,
|
||||
0, 0, 0, 0, 0, 0, 0, 16, 46,
|
||||
0, 19, 0, 0, 5, 6, 7, 8, 17, 9,
|
||||
1, 0, 0, 0, 11, 13, 14, 16, 0, 67,
|
||||
67, 67, 4, 2, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 50, 29,
|
||||
30, 0, 0, 34, 35, 33, 0, 66, 0, 0,
|
||||
0, 64, 0, 0, 0, 0, 0, 0, 20, 0,
|
||||
0, 0, 0, 0, 0, 46, 47, 48, 0, 54,
|
||||
55, 56, 57, 58, 59, 53, 31, 32, 0, 0,
|
||||
21, 23, 22, 24, 25, 26, 27, 28, 0, 61,
|
||||
62, 38, 41, 36, 0, 0, 0, 42, 0, 44,
|
||||
51, 0, 43, 0, 0, 10, 60, 37, 39, 0,
|
||||
0, 0, 0, 0, 71, 72, 73, 74, 0, 0,
|
||||
12, 40, 15, 0, 0, 68, 69, 0, 0, 0,
|
||||
18, 52,
|
||||
};
|
||||
const short yydgoto[] = { 2,
|
||||
3, 4, 5, 6, 7, 8, 31, 0, 32, 47,
|
||||
53, 48, 78, 49, 50, 9, 17, 18, 19, 75,
|
||||
76, 24, 44, 59, 61, 89, 74, 51, 34, 79,
|
||||
10, 35, 72, 39, 57, 93,
|
||||
const short yydgoto[] = { 3,
|
||||
4, 5, 6, 7, 8, 9, 10, 40, 41, 42,
|
||||
43, 92, 97, 93, 110, 94, 95, 106, 119, 120,
|
||||
11, 20, 21, 22, 26, 32, 107, 108, 30, 57,
|
||||
66, 89, 80, 60, 45, 0, 46, 111, 12, 47,
|
||||
61,
|
||||
};
|
||||
const short yysindex[] = { -246,
|
||||
-251, 0, -239, 0, 0, 0, 0, 0, 0, -271,
|
||||
-246, -246, 0, 0, 0, -280, -232, -232, -232, 0,
|
||||
0, -232, -273, -261, -261, -261, -261, -219, -245, -244,
|
||||
0, -204, 0, 0, -275, -218, -218, 0, -218, 0,
|
||||
-205, -205, -241, -234, 0, 0, 0, 0, 0, -200,
|
||||
-197, -234, -275, 0, -275, 0, -250, -238, 0, 0,
|
||||
0, -196, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
-210, 0, -235, -234, 0, 0, 0, -200, -234, -200,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, -231, 0,
|
||||
0, 0, -195, -194, 0, 0, 0, 0, -230, 0,
|
||||
-229, -227, -193, -226, -225, -200, -186, 0, 0,
|
||||
const short yysindex[] = { -256,
|
||||
-244, 0, 0, -218, 0, 0, 0, 0, 0, 0,
|
||||
0, -266, -256, -256, 0, 0, 0, 0, -265, 0,
|
||||
0, 0, 0, 0, -205, -194, -194, -194, -239, -274,
|
||||
-237, -205, -205, -205, -185, -236, -235, -234, 0, 0,
|
||||
0, -182, -182, 0, 0, 0, -201, 0, -274, -274,
|
||||
-274, 0, -184, -184, -184, -231, -226, -226, 0, -178,
|
||||
-240, -277, -201, -201, -228, 0, 0, 0, -177, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, -225, -226,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, -223, 0,
|
||||
0, 0, 0, 0, -175, -226, -277, 0, -277, 0,
|
||||
0, -176, 0, -222, -221, 0, 0, 0, 0, -175,
|
||||
-226, -175, -220, -219, 0, 0, 0, 0, -171, -221,
|
||||
0, 0, 0, -170, -216, 0, 0, -215, -175, -168,
|
||||
0, 0,
|
||||
};
|
||||
const short yyrindex[] = { -266,
|
||||
const short yyrindex[] = { -251,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
-266, 1, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, -251, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, -161, -161, -161, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
-182, -182, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, -162, -162, -162, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, -164, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, -164,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0,
|
||||
};
|
||||
const short yygindex[] = { 0,
|
||||
0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
|
||||
0, -32, 25, 44, 0, 27, 0, 0, 0, -44,
|
||||
3, -7, 0, 41, 0, 0, 0, 26, 0, 49,
|
||||
0, 29, -75, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, -45, 2, 36, 0, -98, -18, 0,
|
||||
-3, 0, 0, 0, -2, 23, -53, -8, -17, 61,
|
||||
-30, 0, 0, -21, 0, 0, 0, 43, 0, 19,
|
||||
0,
|
||||
};
|
||||
#define YYTABLESIZE 292
|
||||
const short yytable[] = { 70,
|
||||
3, 29, 96, 54, 98, 11, 56, 13, 14, 1,
|
||||
25, 26, 57, 57, 27, 29, 30, 12, 15, 16,
|
||||
77, 22, 77, 57, 57, 23, 45, 46, 28, 95,
|
||||
108, 63, 64, 65, 66, 67, 68, 20, 21, 40,
|
||||
69, 81, 82, 83, 84, 85, 86, 87, 88, 33,
|
||||
33, 33, 33, 36, 37, 43, 41, 42, 29, 58,
|
||||
62, 71, 73, 90, 91, 92, 94, 100, 99, 101,
|
||||
105, 102, 103, 104, 109, 106, 107, 42, 38, 80,
|
||||
55, 97, 60, 52, 0, 0, 0, 0, 0, 0,
|
||||
#define YYTABLESIZE 300
|
||||
const short yytable[] = { 1,
|
||||
3, 59, 36, 77, 78, 36, 37, 38, 44, 23,
|
||||
24, 121, 13, 123, 49, 50, 51, 98, 27, 28,
|
||||
15, 16, 17, 67, 68, 39, 103, 44, 44, 44,
|
||||
131, 18, 19, 90, 91, 63, 63, 63, 14, 70,
|
||||
71, 72, 73, 74, 75, 25, 63, 63, 76, 33,
|
||||
34, 109, 29, 109, 115, 116, 117, 118, 2, 81,
|
||||
82, 83, 84, 85, 86, 87, 88, 62, 63, 64,
|
||||
31, 35, 48, 52, 53, 54, 55, 56, 36, 69,
|
||||
65, 79, 100, 101, 104, 102, 105, 113, 114, 125,
|
||||
124, 126, 132, 128, 129, 130, 65, 45, 70, 99,
|
||||
112, 127, 122, 58, 96, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@ -213,21 +240,21 @@ const short yytable[] = { 70,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
|
||||
57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
57, 57,
|
||||
0, 0, 0, 0, 0, 0, 0, 63, 63, 63,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 63, 63,
|
||||
};
|
||||
const short yycheck[] = { 44,
|
||||
0, 277, 78, 36, 80, 257, 39, 279, 280, 256,
|
||||
18, 19, 279, 280, 22, 277, 278, 257, 290, 291,
|
||||
53, 302, 55, 290, 291, 258, 302, 303, 302, 74,
|
||||
106, 266, 267, 268, 269, 270, 271, 11, 12, 259,
|
||||
275, 292, 293, 294, 295, 296, 297, 298, 299, 24,
|
||||
25, 26, 27, 25, 26, 260, 302, 302, 277, 265,
|
||||
302, 262, 260, 302, 261, 276, 302, 263, 300, 264,
|
||||
264, 302, 302, 301, 261, 302, 302, 260, 27, 55,
|
||||
37, 79, 42, 35, -1, -1, -1, -1, -1, -1,
|
||||
const short yycheck[] = { 256,
|
||||
0, 47, 280, 57, 58, 280, 281, 282, 30, 13,
|
||||
14, 110, 257, 112, 32, 33, 34, 63, 21, 22,
|
||||
287, 288, 289, 54, 55, 300, 80, 49, 50, 51,
|
||||
129, 298, 299, 311, 312, 287, 288, 289, 257, 266,
|
||||
267, 268, 269, 270, 271, 311, 298, 299, 275, 27,
|
||||
28, 97, 258, 99, 276, 277, 278, 279, 315, 300,
|
||||
301, 302, 303, 304, 305, 306, 307, 49, 50, 51,
|
||||
265, 311, 310, 259, 311, 311, 311, 260, 280, 311,
|
||||
265, 260, 311, 261, 308, 311, 262, 264, 311, 309,
|
||||
311, 263, 261, 264, 311, 311, 258, 260, 263, 64,
|
||||
99, 120, 111, 43, 62, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
@ -245,16 +272,14 @@ const short yycheck[] = { 44,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, 279,
|
||||
280, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
290, 291,
|
||||
-1, -1, -1, -1, -1, -1, -1, 287, 288, 289,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, 298, 299,
|
||||
};
|
||||
#define YYFINAL 2
|
||||
#define YYFINAL 3
|
||||
#ifndef YYDEBUG
|
||||
#define YYDEBUG 0
|
||||
#endif
|
||||
#define YYMAXTOKEN 305
|
||||
#define YYMAXTOKEN 315
|
||||
#if YYDEBUG
|
||||
const char * const yyname[] = {
|
||||
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
@ -266,10 +291,11 @@ const char * const yyname[] = {
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SEMICOLON","LPAREN","RPAREN",
|
||||
"LANGLE","RANGLE","LCURLY","RCURLY","COMMA","DOT","TYPE_UD","TYPE_D","TYPE_UW",
|
||||
"TYPE_W","TYPE_UB","TYPE_B","TYPE_VF","TYPE_HF","TYPE_V","TYPE_F","ALIGN1",
|
||||
"GENREGFILE","MSGREGFILE","MOV","MUL","MAC","MACH","LINE","SAD2","SADA2","DP4",
|
||||
"DPH","DP3","DP2","ADD","SEND","NULL_TOKEN","MATH","SAMPLER","GATEWAY","READ",
|
||||
"WRITE","URB","THREAD_SPAWNER","MSGLEN","RETURNLEN","INTEGER","NUMBER","accreg",
|
||||
"triop",
|
||||
"ALIGN16","MASK_DISABLE","EOT","GENREG","MSGREG","ACCREG","ADDRESSREG",
|
||||
"FLAGREG","CONTROLREG","IPREG","MOV","MUL","MAC","MACH","LINE","SAD2","SADA2",
|
||||
"DP4","DPH","DP3","DP2","ADD","SEND","NULL_TOKEN","MATH","SAMPLER","GATEWAY",
|
||||
"READ","WRITE","URB","THREAD_SPAWNER","MSGLEN","RETURNLEN","SATURATE","INTEGER",
|
||||
"NUMBER","flagreg","maskreg","NOP",
|
||||
};
|
||||
const char * const yyrule[] = {
|
||||
"$accept : ROOT",
|
||||
@ -281,16 +307,18 @@ const char * const yyrule[] = {
|
||||
"instruction : binaryinstruction",
|
||||
"instruction : binaryaccinstruction",
|
||||
"instruction : triinstruction",
|
||||
"unaryinstruction : predicate unaryop execsize dst srcaccimm instoptions",
|
||||
"instruction : specialinstruction",
|
||||
"unaryinstruction : predicate unaryop conditionalmodifier saturate execsize dst srcaccimm instoptions",
|
||||
"unaryop : MOV",
|
||||
"binaryinstruction : predicate binaryop execsize dst src srcimm instoptions",
|
||||
"binaryinstruction : predicate binaryop conditionalmodifier saturate execsize dst src srcimm instoptions",
|
||||
"binaryop : MUL",
|
||||
"binaryaccinstruction : predicate binaryaccop execsize dst srcacc srcimm instoptions",
|
||||
"binaryop : MAC",
|
||||
"binaryaccinstruction : predicate binaryaccop conditionalmodifier saturate execsize dst srcacc srcimm instoptions",
|
||||
"binaryaccop : ADD",
|
||||
"triinstruction : sendinstruction",
|
||||
"sendinstruction : predicate SEND INTEGER execsize postdst curdst msgtarget MSGLEN INTEGER RETURNLEN INTEGER instoptions",
|
||||
"postdst : dstoperand",
|
||||
"curdst : directsrcoperand",
|
||||
"sendinstruction : predicate SEND INTEGER execsize dst payload msgtarget MSGLEN INTEGER RETURNLEN INTEGER instoptions",
|
||||
"specialinstruction : NOP",
|
||||
"payload : directsrcoperand",
|
||||
"msgtarget : NULL_TOKEN",
|
||||
"msgtarget : SAMPLER",
|
||||
"msgtarget : MATH",
|
||||
@ -300,8 +328,10 @@ const char * const yyrule[] = {
|
||||
"msgtarget : URB",
|
||||
"msgtarget : THREAD_SPAWNER",
|
||||
"dst : dstoperand",
|
||||
"dst : dstoperandex",
|
||||
"dstoperand : dstreg dstregion regtype",
|
||||
"dstoperandex : accreg dstregion regtype",
|
||||
"dstoperandex : nullreg",
|
||||
"dstreg : directgenreg",
|
||||
"dstreg : directmsgreg",
|
||||
"srcaccimm : srcacc",
|
||||
@ -312,11 +342,13 @@ const char * const yyrule[] = {
|
||||
"directsrcaccoperand : directsrcoperand",
|
||||
"src : directsrcoperand",
|
||||
"directsrcoperand : directgenreg region regtype",
|
||||
"directgenreg : GENREGFILE INTEGER gensubregnum",
|
||||
"gensubregnum : DOT INTEGER",
|
||||
"gensubregnum :",
|
||||
"directmsgreg : MSGREGFILE INTEGER msgsubregnum",
|
||||
"msgsubregnum : gensubregnum",
|
||||
"subregnum : DOT INTEGER",
|
||||
"subregnum :",
|
||||
"directgenreg : GENREG INTEGER subregnum",
|
||||
"directmsgreg : MSGREG INTEGER subregnum",
|
||||
"accreg : ACCREG INTEGER subregnum",
|
||||
"addrreg : ADDRESSREG INTEGER subregnum",
|
||||
"nullreg : NULL_TOKEN",
|
||||
"dstregion : LANGLE INTEGER RANGLE",
|
||||
"region : LANGLE INTEGER COMMA INTEGER COMMA INTEGER RANGLE",
|
||||
"regtype : TYPE_F",
|
||||
@ -331,8 +363,16 @@ const char * const yyrule[] = {
|
||||
"imm32 : NUMBER",
|
||||
"predicate :",
|
||||
"execsize : LPAREN INTEGER RPAREN",
|
||||
"instoptions : LCURLY instoption RCURLY",
|
||||
"saturate :",
|
||||
"saturate : DOT SATURATE",
|
||||
"conditionalmodifier :",
|
||||
"instoptions : LCURLY instoption_list RCURLY",
|
||||
"instoption_list : instoption instoption_list",
|
||||
"instoption_list :",
|
||||
"instoption : ALIGN1",
|
||||
"instoption : ALIGN16",
|
||||
"instoption : MASK_DISABLE",
|
||||
"instoption : EOT",
|
||||
};
|
||||
#endif
|
||||
#if YYDEBUG
|
||||
@ -362,7 +402,7 @@ short *yyss;
|
||||
short *yysslim;
|
||||
YYSTYPE *yyvs;
|
||||
int yystacksize;
|
||||
#line 395 "gram.y"
|
||||
#line 470 "gram.y"
|
||||
extern int yylineno;
|
||||
|
||||
void yyerror (char *msg)
|
||||
@ -371,7 +411,7 @@ void yyerror (char *msg)
|
||||
msg, yylineno, lex_text());
|
||||
}
|
||||
|
||||
#line 375 "y.tab.c"
|
||||
#line 415 "y.tab.c"
|
||||
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
|
||||
static int yygrowstack()
|
||||
{
|
||||
@ -567,13 +607,13 @@ yyreduce:
|
||||
switch (yyn)
|
||||
{
|
||||
case 1:
|
||||
#line 92 "gram.y"
|
||||
#line 97 "gram.y"
|
||||
{
|
||||
compiled_program = yyvsp[0].program;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
#line 98 "gram.y"
|
||||
#line 103 "gram.y"
|
||||
{
|
||||
struct brw_program_instruction *list_entry =
|
||||
calloc(sizeof(struct brw_program_instruction), 1);
|
||||
@ -586,7 +626,7 @@ case 2:
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
#line 109 "gram.y"
|
||||
#line 114 "gram.y"
|
||||
{
|
||||
struct brw_program_instruction *list_entry =
|
||||
calloc(sizeof(struct brw_program_instruction), 1);
|
||||
@ -598,114 +638,147 @@ case 3:
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
#line 119 "gram.y"
|
||||
#line 124 "gram.y"
|
||||
{
|
||||
yyval.program = yyvsp[0].program;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
#line 132 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = yyvsp[-4].integer;
|
||||
yyval.instruction.header.execution_size = yyvsp[-3].integer;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
#line 138 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_MOV; }
|
||||
#line 140 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = yyvsp[-6].integer;
|
||||
yyval.instruction.header.saturate = yyvsp[-5].integer;
|
||||
yyval.instruction.header.destreg__conditionalmod = yyvsp[-4].integer;
|
||||
yyval.instruction.header.execution_size = yyvsp[-3].integer;
|
||||
yyval.instruction.bits1 = yyvsp[-1].instruction.bits1;
|
||||
/* XXX: more */
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
#line 143 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = yyvsp[-5].integer;
|
||||
yyval.instruction.header.execution_size = yyvsp[-4].integer;
|
||||
}
|
||||
#line 150 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_MOV; }
|
||||
break;
|
||||
case 12:
|
||||
#line 149 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_MUL; }
|
||||
#line 156 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = yyvsp[-7].integer;
|
||||
yyval.instruction.header.saturate = yyvsp[-6].integer;
|
||||
yyval.instruction.header.destreg__conditionalmod = yyvsp[-5].integer;
|
||||
yyval.instruction.header.execution_size = yyvsp[-4].integer;
|
||||
/* XXX: more */
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
#line 153 "gram.y"
|
||||
#line 165 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_MUL; }
|
||||
break;
|
||||
case 14:
|
||||
#line 166 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_MAC; }
|
||||
break;
|
||||
case 15:
|
||||
#line 171 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = yyvsp[-5].integer;
|
||||
yyval.instruction.header.opcode = yyvsp[-7].integer;
|
||||
yyval.instruction.header.saturate = yyvsp[-6].integer;
|
||||
yyval.instruction.header.destreg__conditionalmod = yyvsp[-5].integer;
|
||||
yyval.instruction.header.execution_size = yyvsp[-4].integer;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
#line 159 "gram.y"
|
||||
case 16:
|
||||
#line 179 "gram.y"
|
||||
{ yyval.integer = BRW_OPCODE_ADD; }
|
||||
break;
|
||||
case 16:
|
||||
#line 167 "gram.y"
|
||||
case 18:
|
||||
#line 187 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = BRW_OPCODE_SEND;
|
||||
yyval.instruction.header.execution_size = yyvsp[-8].integer;
|
||||
yyval.instruction.header.destreg__conditonalmod = yyvsp[-9].integer;
|
||||
yyval.instruction.header.destreg__conditionalmod = yyvsp[-9].integer;
|
||||
}
|
||||
break;
|
||||
case 19:
|
||||
#line 181 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_NULL; }
|
||||
break;
|
||||
case 20:
|
||||
#line 182 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_SAMPLER; }
|
||||
#line 194 "gram.y"
|
||||
{
|
||||
yyval.instruction.header.opcode = BRW_OPCODE_NOP;
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
#line 183 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_MATH; }
|
||||
#line 202 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_NULL; }
|
||||
break;
|
||||
case 22:
|
||||
#line 184 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_GATEWAY; }
|
||||
#line 203 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_SAMPLER; }
|
||||
break;
|
||||
case 23:
|
||||
#line 185 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_DATAPORT_READ; }
|
||||
#line 204 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_MATH; }
|
||||
break;
|
||||
case 24:
|
||||
#line 186 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_DATAPORT_WRITE; }
|
||||
#line 205 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_GATEWAY; }
|
||||
break;
|
||||
case 25:
|
||||
#line 187 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_URB; }
|
||||
#line 206 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_DATAPORT_READ; }
|
||||
break;
|
||||
case 26:
|
||||
#line 188 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_THREAD_SPAWNER; }
|
||||
#line 207 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_DATAPORT_WRITE; }
|
||||
break;
|
||||
case 27:
|
||||
#line 208 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_URB; }
|
||||
break;
|
||||
case 28:
|
||||
#line 198 "gram.y"
|
||||
#line 209 "gram.y"
|
||||
{ yyval.integer = BRW_MESSAGE_TARGET_THREAD_SPAWNER; }
|
||||
break;
|
||||
case 31:
|
||||
#line 218 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* filled in.
|
||||
*/
|
||||
yyval.instruction.bits1 = yyvsp[-2].instruction.bits1;
|
||||
yyval.instruction.bits1.da1.dest_reg_type = yyvsp[-1].integer;
|
||||
yyval.instruction.bits1.da1.dest_reg_type = yyvsp[-1].integer; /* XXX */
|
||||
/* XXX: $3 */
|
||||
}
|
||||
break;
|
||||
case 29:
|
||||
#line 207 "gram.y"
|
||||
case 32:
|
||||
#line 229 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* filled in.
|
||||
*/
|
||||
yyval.instruction.bits1 = yyvsp[-2].instruction.bits1;
|
||||
yyval.instruction.bits1.da1.dest_reg_type = yyvsp[-1].integer;
|
||||
yyval.instruction.bits1.da1.dest_reg_file = yyvsp[-2].direct_gen_reg.reg_file;
|
||||
yyval.instruction.bits1.da1.dest_reg_nr = yyvsp[-2].direct_gen_reg.reg_nr;
|
||||
yyval.instruction.bits1.da1.dest_subreg_nr = yyvsp[-2].direct_gen_reg.subreg_nr;
|
||||
/* XXX: $2 $3 */
|
||||
}
|
||||
break;
|
||||
case 30:
|
||||
#line 217 "gram.y"
|
||||
case 33:
|
||||
#line 239 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* filled in.
|
||||
*/
|
||||
yyval.instruction.bits1.da1.dest_reg_file = yyvsp[0].direct_gen_reg.reg_file;
|
||||
yyval.instruction.bits1.da1.dest_reg_nr = yyvsp[0].direct_gen_reg.reg_nr;
|
||||
yyval.instruction.bits1.da1.dest_subreg_nr = yyvsp[0].direct_gen_reg.subreg_nr;
|
||||
}
|
||||
break;
|
||||
case 34:
|
||||
#line 251 "gram.y"
|
||||
{
|
||||
yyval.instruction.bits1.da1.dest_reg_file = yyvsp[0].direct_gen_reg.reg_file;
|
||||
yyval.instruction.bits1.da1.dest_reg_nr = yyvsp[0].direct_gen_reg.reg_nr;
|
||||
yyval.instruction.bits1.da1.dest_subreg_nr = yyvsp[0].direct_gen_reg.subreg_nr;
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
#line 229 "gram.y"
|
||||
case 37:
|
||||
#line 263 "gram.y"
|
||||
{
|
||||
yyval.instruction.bits1.da1.src0_reg_file = BRW_IMMEDIATE_VALUE;
|
||||
switch (yyvsp[0].integer) {
|
||||
@ -721,8 +794,8 @@ case 33:
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 36:
|
||||
#line 251 "gram.y"
|
||||
case 40:
|
||||
#line 285 "gram.y"
|
||||
{
|
||||
yyval.instruction.bits1.da1.src0_reg_file = BRW_IMMEDIATE_VALUE;
|
||||
switch (yyvsp[0].integer) {
|
||||
@ -738,8 +811,8 @@ case 36:
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 39:
|
||||
#line 277 "gram.y"
|
||||
case 43:
|
||||
#line 311 "gram.y"
|
||||
{
|
||||
/* Returns a source operand in the src0 fields of an
|
||||
* instruction.
|
||||
@ -753,32 +826,21 @@ case 39:
|
||||
yyval.instruction.bits2.da1.src0_horiz_stride = yyvsp[-1].region.horiz_stride;
|
||||
}
|
||||
break;
|
||||
case 40:
|
||||
#line 293 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
yyval.direct_gen_reg.reg_file = BRW_GENERAL_REGISTER_FILE;
|
||||
yyval.direct_gen_reg.reg_nr = yyvsp[-1].integer;
|
||||
yyval.direct_gen_reg.subreg_nr = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 41:
|
||||
#line 303 "gram.y"
|
||||
case 44:
|
||||
#line 326 "gram.y"
|
||||
{
|
||||
yyval.integer = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 42:
|
||||
#line 307 "gram.y"
|
||||
case 45:
|
||||
#line 330 "gram.y"
|
||||
{
|
||||
/* Default to subreg 0 if unspecified. */
|
||||
yyval.integer = 0;
|
||||
}
|
||||
break;
|
||||
case 43:
|
||||
#line 314 "gram.y"
|
||||
case 46:
|
||||
#line 338 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
@ -788,8 +850,49 @@ case 43:
|
||||
yyval.direct_gen_reg.subreg_nr = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 45:
|
||||
#line 329 "gram.y"
|
||||
case 47:
|
||||
#line 348 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
yyval.direct_gen_reg.reg_file = BRW_GENERAL_REGISTER_FILE;
|
||||
yyval.direct_gen_reg.reg_nr = yyvsp[-1].integer;
|
||||
yyval.direct_gen_reg.subreg_nr = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 48:
|
||||
#line 359 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
yyval.direct_gen_reg.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
yyval.direct_gen_reg.reg_nr = BRW_ARF_ACCUMULATOR | yyvsp[-1].integer;
|
||||
yyval.direct_gen_reg.subreg_nr = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 49:
|
||||
#line 370 "gram.y"
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
yyval.direct_gen_reg.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
yyval.direct_gen_reg.reg_nr = BRW_ARF_ADDRESS | yyvsp[-1].integer;
|
||||
yyval.direct_gen_reg.subreg_nr = yyvsp[0].integer;
|
||||
}
|
||||
break;
|
||||
case 50:
|
||||
#line 381 "gram.y"
|
||||
{
|
||||
yyval.direct_gen_reg.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
yyval.direct_gen_reg.reg_nr = BRW_ARF_NULL;
|
||||
yyval.direct_gen_reg.subreg_nr = 0;
|
||||
}
|
||||
break;
|
||||
case 51:
|
||||
#line 390 "gram.y"
|
||||
{
|
||||
/* Returns a value for a horiz_stride field of an
|
||||
* instruction.
|
||||
@ -800,44 +903,44 @@ case 45:
|
||||
yyval.integer = ffs(yyvsp[-1].integer);
|
||||
}
|
||||
break;
|
||||
case 46:
|
||||
#line 341 "gram.y"
|
||||
case 52:
|
||||
#line 402 "gram.y"
|
||||
{
|
||||
yyval.region.vert_stride = yyvsp[-5].integer;
|
||||
yyval.region.width = yyvsp[-3].integer;
|
||||
yyval.region.horiz_stride = yyvsp[-1].integer;
|
||||
}
|
||||
break;
|
||||
case 47:
|
||||
#line 353 "gram.y"
|
||||
case 53:
|
||||
#line 414 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_F; }
|
||||
break;
|
||||
case 48:
|
||||
#line 354 "gram.y"
|
||||
case 54:
|
||||
#line 415 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_UD; }
|
||||
break;
|
||||
case 49:
|
||||
#line 355 "gram.y"
|
||||
case 55:
|
||||
#line 416 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_D; }
|
||||
break;
|
||||
case 50:
|
||||
#line 356 "gram.y"
|
||||
case 56:
|
||||
#line 417 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_UW; }
|
||||
break;
|
||||
case 51:
|
||||
#line 357 "gram.y"
|
||||
case 57:
|
||||
#line 418 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_UW; }
|
||||
break;
|
||||
case 52:
|
||||
#line 358 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_UB; }
|
||||
break;
|
||||
case 53:
|
||||
#line 359 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_B; }
|
||||
break;
|
||||
case 58:
|
||||
#line 372 "gram.y"
|
||||
#line 419 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_UB; }
|
||||
break;
|
||||
case 59:
|
||||
#line 420 "gram.y"
|
||||
{ yyval.integer = BRW_REGISTER_TYPE_B; }
|
||||
break;
|
||||
case 64:
|
||||
#line 433 "gram.y"
|
||||
{
|
||||
/* Returns a value for the execution_size field of an
|
||||
* instruction.
|
||||
@ -850,7 +953,19 @@ case 58:
|
||||
yyval.integer = ffs(yyvsp[-1].integer);
|
||||
}
|
||||
break;
|
||||
#line 854 "y.tab.c"
|
||||
case 65:
|
||||
#line 446 "gram.y"
|
||||
{ yyval.integer = 0; }
|
||||
break;
|
||||
case 66:
|
||||
#line 447 "gram.y"
|
||||
{ yyval.integer = 1; }
|
||||
break;
|
||||
case 68:
|
||||
#line 456 "gram.y"
|
||||
{ yyval.instruction = yyvsp[-1].instruction; }
|
||||
break;
|
||||
#line 969 "y.tab.c"
|
||||
}
|
||||
yyssp -= yym;
|
||||
yystate = *yyssp;
|
||||
|
153
assembler/gram.y
153
assembler/gram.y
@ -59,9 +59,9 @@
|
||||
%token TYPE_UD, TYPE_D, TYPE_UW, TYPE_W, TYPE_UB, TYPE_B,
|
||||
%token TYPE_VF, TYPE_HF, TYPE_V, TYPE_F
|
||||
|
||||
%token ALIGN1
|
||||
%token ALIGN1 ALIGN16 MASK_DISABLE EOT
|
||||
|
||||
%token GENREGFILE MSGREGFILE
|
||||
%token GENREG MSGREG ACCREG ADDRESSREG FLAGREG CONTROLREG IPREG
|
||||
|
||||
%token MOV
|
||||
%token MUL MAC MACH LINE SAD2 SADA2 DP4 DPH DP3 DP2
|
||||
@ -69,21 +69,26 @@
|
||||
%token SEND NULL_TOKEN MATH SAMPLER GATEWAY READ WRITE URB THREAD_SPAWNER
|
||||
|
||||
%token MSGLEN RETURNLEN
|
||||
%token SATURATE
|
||||
|
||||
%token <integer> INTEGER
|
||||
%token <number> NUMBER
|
||||
|
||||
%type <instruction> instruction unaryinstruction binaryinstruction
|
||||
%type <instruction> binaryaccinstruction triinstruction sendinstruction
|
||||
%type <instruction> specialinstruction
|
||||
%type <instruction> dstoperand dstoperandex dstreg accreg
|
||||
%type <instruction> directsrcaccoperand src directsrcoperand srcimm
|
||||
%type <instruction> srcacc srcaccimm
|
||||
%type <instruction> instoptions instoption_list instoption
|
||||
%type <program> instrseq
|
||||
%type <integer> unaryop binaryop binaryaccop triop
|
||||
%type <integer> unaryop binaryop binaryaccop
|
||||
%type <integer> conditionalmodifier saturate
|
||||
%type <integer> regtype srcimmtype execsize dstregion
|
||||
%type <integer> gensubregnum msgsubregnum msgtarget
|
||||
%type <integer> subregnum msgtarget
|
||||
%type <region> region
|
||||
%type <direct_gen_reg> directgenreg directmsgreg
|
||||
%type <direct_gen_reg> directgenreg directmsgreg addrreg accreg flagreg maskreg
|
||||
%type <direct_gen_reg> nullreg
|
||||
%type <imm32> imm32
|
||||
|
||||
%%
|
||||
@ -126,12 +131,19 @@ instruction: unaryinstruction
|
||||
| binaryinstruction
|
||||
| binaryaccinstruction
|
||||
| triinstruction
|
||||
| specialinstruction
|
||||
;
|
||||
|
||||
unaryinstruction: predicate unaryop execsize dst srcaccimm instoptions
|
||||
unaryinstruction:
|
||||
predicate unaryop conditionalmodifier saturate execsize
|
||||
dst srcaccimm instoptions
|
||||
{
|
||||
$$.header.opcode = $2;
|
||||
$$.header.execution_size = $3;
|
||||
$$.header.saturate = $3;
|
||||
$$.header.destreg__conditionalmod = $4;
|
||||
$$.header.execution_size = $5;
|
||||
$$.bits1 = $7.bits1;
|
||||
/* XXX: more */
|
||||
}
|
||||
;
|
||||
|
||||
@ -139,20 +151,28 @@ unaryop: MOV { $$ = BRW_OPCODE_MOV; }
|
||||
;
|
||||
|
||||
binaryinstruction:
|
||||
predicate binaryop execsize dst src srcimm instoptions
|
||||
predicate binaryop conditionalmodifier saturate execsize
|
||||
dst src srcimm instoptions
|
||||
{
|
||||
$$.header.opcode = $2;
|
||||
$$.header.execution_size = $3;
|
||||
$$.header.saturate = $3;
|
||||
$$.header.destreg__conditionalmod = $4;
|
||||
$$.header.execution_size = $5;
|
||||
/* XXX: more */
|
||||
}
|
||||
;
|
||||
|
||||
binaryop: MUL { $$ = BRW_OPCODE_MUL; }
|
||||
| MAC { $$ = BRW_OPCODE_MAC; }
|
||||
|
||||
binaryaccinstruction:
|
||||
predicate binaryaccop execsize dst srcacc srcimm instoptions
|
||||
predicate binaryaccop conditionalmodifier saturate execsize
|
||||
dst srcacc srcimm instoptions
|
||||
{
|
||||
$$.header.opcode = $2;
|
||||
$$.header.execution_size = $3;
|
||||
$$.header.saturate = $3;
|
||||
$$.header.destreg__conditionalmod = $4;
|
||||
$$.header.execution_size = $5;
|
||||
}
|
||||
;
|
||||
|
||||
@ -162,20 +182,21 @@ binaryaccop: ADD { $$ = BRW_OPCODE_ADD; }
|
||||
triinstruction: sendinstruction
|
||||
|
||||
/* XXX formatting of this instruction */
|
||||
sendinstruction: predicate SEND INTEGER execsize postdst curdst msgtarget
|
||||
sendinstruction: predicate SEND INTEGER execsize dst payload msgtarget
|
||||
MSGLEN INTEGER RETURNLEN INTEGER instoptions
|
||||
{
|
||||
$$.header.opcode = BRW_OPCODE_SEND;
|
||||
$$.header.execution_size = $4;
|
||||
$$.header.destreg__conditonalmod = $3;
|
||||
$$.header.destreg__conditionalmod = $3;
|
||||
}
|
||||
|
||||
specialinstruction: NOP
|
||||
{
|
||||
$$.header.opcode = BRW_OPCODE_NOP;
|
||||
}
|
||||
|
||||
/* XXX! */
|
||||
postdst: dstoperand
|
||||
;
|
||||
|
||||
/* XXX! */
|
||||
curdst: directsrcoperand
|
||||
payload: directsrcoperand
|
||||
;
|
||||
|
||||
msgtarget: NULL_TOKEN { $$ = BRW_MESSAGE_TARGET_NULL; }
|
||||
@ -190,8 +211,7 @@ msgtarget: NULL_TOKEN { $$ = BRW_MESSAGE_TARGET_NULL; }
|
||||
|
||||
/* 1.4.2: Destination register */
|
||||
|
||||
/** XXX: dstoperandex */
|
||||
dst: dstoperand
|
||||
dst: dstoperand | dstoperandex
|
||||
|
||||
/* XXX: dstregion writemask */
|
||||
dstoperand: dstreg dstregion regtype
|
||||
@ -200,17 +220,31 @@ dstoperand: dstreg dstregion regtype
|
||||
* filled in.
|
||||
*/
|
||||
$$.bits1 = $1.bits1;
|
||||
$$.bits1.da1.dest_reg_type = $2;
|
||||
$$.bits1.da1.dest_reg_type = $2; /* XXX */
|
||||
/* XXX: $3 */
|
||||
}
|
||||
;
|
||||
|
||||
dstoperandex: accreg dstregion regtype
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* filled in.
|
||||
*/
|
||||
$$.bits1 = $1.bits1;
|
||||
$$.bits1.da1.dest_reg_type = $2;
|
||||
$$.bits1.da1.dest_reg_file = $1.reg_file;
|
||||
$$.bits1.da1.dest_reg_nr = $1.reg_nr;
|
||||
$$.bits1.da1.dest_subreg_nr = $1.subreg_nr;
|
||||
/* XXX: $2 $3 */
|
||||
}
|
||||
| nullreg
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* filled in.
|
||||
*/
|
||||
$$.bits1.da1.dest_reg_file = $1.reg_file;
|
||||
$$.bits1.da1.dest_reg_nr = $1.reg_nr;
|
||||
$$.bits1.da1.dest_subreg_nr = $1.subreg_nr;
|
||||
}
|
||||
;
|
||||
|
||||
/* XXX: indirectgenreg, directmsgreg, indirectmsgreg */
|
||||
dstreg: directgenreg
|
||||
@ -288,18 +322,7 @@ directsrcoperand: directgenreg region regtype
|
||||
}
|
||||
;
|
||||
|
||||
/* 1.4.5: Register files and register numbers */
|
||||
directgenreg: GENREGFILE INTEGER gensubregnum
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
$$.reg_file = BRW_GENERAL_REGISTER_FILE;
|
||||
$$.reg_nr = $2;
|
||||
$$.subreg_nr = $3;
|
||||
}
|
||||
|
||||
gensubregnum: DOT INTEGER
|
||||
subregnum: DOT INTEGER
|
||||
{
|
||||
$$ = $2;
|
||||
}
|
||||
@ -310,7 +333,18 @@ gensubregnum: DOT INTEGER
|
||||
}
|
||||
;
|
||||
|
||||
directmsgreg: MSGREGFILE INTEGER msgsubregnum
|
||||
/* 1.4.5: Register files and register numbers */
|
||||
directgenreg: GENREG INTEGER subregnum
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
$$.reg_file = BRW_GENERAL_REGISTER_FILE;
|
||||
$$.reg_nr = $2;
|
||||
$$.subreg_nr = $3;
|
||||
}
|
||||
|
||||
directmsgreg: MSGREG INTEGER subregnum
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
@ -321,7 +355,34 @@ directmsgreg: MSGREGFILE INTEGER msgsubregnum
|
||||
}
|
||||
;
|
||||
|
||||
msgsubregnum: gensubregnum
|
||||
accreg: ACCREG INTEGER subregnum
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
$$.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
$$.reg_nr = BRW_ARF_ACCUMULATOR | $2;
|
||||
$$.subreg_nr = $3;
|
||||
}
|
||||
;
|
||||
|
||||
addrreg: ADDRESSREG INTEGER subregnum
|
||||
{
|
||||
/* Returns an instruction with just the destination register
|
||||
* fields filled in.
|
||||
*/
|
||||
$$.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
$$.reg_nr = BRW_ARF_ADDRESS | $2;
|
||||
$$.subreg_nr = $3;
|
||||
}
|
||||
;
|
||||
|
||||
nullreg: NULL_TOKEN
|
||||
{
|
||||
$$.reg_file = BRW_ARCHITECTURE_REGISTER_FILE;
|
||||
$$.reg_nr = BRW_ARF_NULL;
|
||||
$$.subreg_nr = 0;
|
||||
}
|
||||
;
|
||||
|
||||
/* 1.4.7: Regions */
|
||||
@ -382,14 +443,28 @@ execsize: LPAREN INTEGER RPAREN
|
||||
}
|
||||
;
|
||||
|
||||
saturate: /* empty */ { $$ = 0; }
|
||||
| DOT SATURATE { $$ = 1; }
|
||||
;
|
||||
|
||||
conditionalmodifier:
|
||||
;
|
||||
|
||||
/* 1.4.13: Instruction options */
|
||||
/* XXX: this is a comma-separated list, really. */
|
||||
instoptions: LCURLY instoption RCURLY
|
||||
instoptions: LCURLY instoption_list RCURLY
|
||||
{ $$ = $2; }
|
||||
;
|
||||
|
||||
instoption_list: instoption instoption_list
|
||||
|
|
||||
;
|
||||
|
||||
/* XXX: fill me in. alignctrl, comprctrl, threadctrl, depctrl, maskctrl,
|
||||
* debugctrl, sendctrl
|
||||
*/
|
||||
instoption: ALIGN1
|
||||
instoption: ALIGN1 | ALIGN16 | MASK_DISABLE | EOT
|
||||
;
|
||||
|
||||
%%
|
||||
extern int yylineno;
|
||||
|
567
assembler/lex.c
567
assembler/lex.c
@ -293,42 +293,47 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
|
||||
*yy_cp = '\0'; \
|
||||
yy_c_buf_p = yy_cp;
|
||||
|
||||
#define YY_NUM_RULES 48
|
||||
#define YY_END_OF_BUFFER 49
|
||||
static yyconst short int yy_acclist[122] =
|
||||
#define YY_NUM_RULES 62
|
||||
#define YY_END_OF_BUFFER 63
|
||||
static yyconst short int yy_acclist[151] =
|
||||
{ 0,
|
||||
44, 44, 44, 44, 49, 47, 48, 46, 47, 48,
|
||||
46, 48, 26, 47, 48, 27, 47, 48, 32, 47,
|
||||
48, 47, 48, 33, 47, 48, 47, 48, 44, 47,
|
||||
48, 25, 47, 48, 28, 47, 48, 29, 47, 48,
|
||||
41, 47, 48, 37, 47, 48, 42, 47, 48, 47,
|
||||
48, 39, 47, 48, 47, 48, 47, 48, 35, 47,
|
||||
48, 47, 48, 34, 47, 48, 47, 48, 35, 47,
|
||||
48, 47, 48, 47, 48, 47, 48, 47, 48, 30,
|
||||
47, 48, 31, 47, 48, 44, 47, 48, 46, 44,
|
||||
40, 36, 38, 44, 1, 1, 45, 13, 12, 11,
|
||||
58, 58, 58, 58, 63, 61, 62, 60, 61, 62,
|
||||
60, 62, 31, 61, 62, 32, 61, 62, 37, 61,
|
||||
62, 61, 62, 38, 61, 62, 61, 62, 58, 61,
|
||||
62, 30, 61, 62, 33, 61, 62, 34, 61, 62,
|
||||
51, 61, 62, 47, 61, 62, 61, 62, 52, 61,
|
||||
62, 61, 62, 49, 61, 62, 40, 61, 62, 61,
|
||||
62, 61, 62, 42, 61, 62, 43, 61, 62, 61,
|
||||
62, 61, 62, 41, 61, 62, 61, 62, 43, 61,
|
||||
62, 61, 62, 61, 62, 61, 62, 61, 62, 35,
|
||||
61, 62, 36, 61, 62, 58, 61, 62, 4, 62,
|
||||
|
||||
9, 10, 4, 2, 3, 23, 6, 5, 18, 15,
|
||||
17, 21, 16, 7, 14, 8, 22, 43, 20, 19,
|
||||
24
|
||||
5, 62, 4, 5, 62, 4, 62, 60, 2, 58,
|
||||
50, 46, 48, 44, 45, 58, 3, 1, 1, 59,
|
||||
57, 39, 18, 17, 16, 14, 15, 9, 7, 8,
|
||||
19, 53, 28, 11, 10, 23, 21, 6, 26, 22,
|
||||
12, 20, 13, 27, 54, 55, 25, 24, 56, 29
|
||||
} ;
|
||||
|
||||
static yyconst short int yy_accept[127] =
|
||||
static yyconst short int yy_accept[159] =
|
||||
{ 0,
|
||||
1, 2, 3, 4, 5, 6, 8, 11, 13, 16,
|
||||
19, 22, 24, 27, 29, 32, 35, 38, 41, 44,
|
||||
47, 50, 52, 55, 57, 59, 62, 64, 67, 69,
|
||||
72, 74, 76, 78, 80, 83, 86, 89, 90, 90,
|
||||
90, 90, 91, 92, 93, 94, 94, 94, 94, 94,
|
||||
94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
|
||||
94, 94, 94, 95, 95, 96, 97, 98, 99, 99,
|
||||
100, 101, 102, 103, 103, 103, 104, 104, 104, 105,
|
||||
106, 106, 106, 106, 106, 106, 106, 106, 107, 107,
|
||||
107, 107, 108, 109, 110, 111, 112, 113, 114, 115,
|
||||
1, 2, 3, 4, 5, 5, 5, 6, 8, 11,
|
||||
13, 16, 19, 22, 24, 27, 29, 32, 35, 38,
|
||||
41, 44, 47, 49, 52, 54, 57, 60, 62, 64,
|
||||
67, 70, 72, 74, 77, 79, 82, 84, 86, 88,
|
||||
90, 93, 96, 99, 101, 103, 106, 108, 109, 109,
|
||||
110, 110, 110, 111, 111, 112, 113, 114, 114, 114,
|
||||
114, 115, 115, 115, 116, 116, 116, 116, 116, 116,
|
||||
116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
|
||||
118, 118, 119, 120, 121, 122, 123, 124, 124, 125,
|
||||
126, 127, 128, 128, 128, 129, 129, 129, 129, 130,
|
||||
|
||||
115, 115, 116, 116, 116, 116, 116, 117, 117, 117,
|
||||
118, 119, 119, 119, 119, 120, 121, 121, 121, 121,
|
||||
121, 121, 121, 121, 122, 122
|
||||
131, 132, 132, 132, 132, 132, 132, 133, 133, 133,
|
||||
134, 134, 134, 134, 135, 136, 136, 137, 138, 139,
|
||||
140, 141, 142, 142, 142, 143, 143, 143, 143, 143,
|
||||
143, 144, 144, 144, 145, 146, 146, 146, 146, 146,
|
||||
147, 148, 148, 149, 149, 149, 149, 149, 149, 149,
|
||||
149, 149, 149, 150, 150, 150, 151, 151
|
||||
} ;
|
||||
|
||||
static yyconst int yy_ec[256] =
|
||||
@ -337,16 +342,16 @@ static yyconst int yy_ec[256] =
|
||||
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 2, 1, 1, 1, 1, 1, 1, 1, 5,
|
||||
6, 1, 1, 7, 8, 9, 10, 11, 12, 13,
|
||||
14, 15, 11, 11, 11, 11, 11, 1, 16, 17,
|
||||
1, 18, 1, 1, 1, 19, 1, 20, 1, 21,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 22, 1, 23, 1, 1, 1,
|
||||
1, 1, 1, 1, 24, 1, 25, 26, 27, 28,
|
||||
6, 7, 1, 8, 9, 10, 11, 12, 13, 14,
|
||||
15, 16, 12, 17, 12, 12, 12, 1, 18, 19,
|
||||
1, 20, 1, 1, 1, 21, 1, 22, 23, 24,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 25, 1,
|
||||
1, 1, 1, 26, 27, 1, 28, 1, 1, 1,
|
||||
1, 1, 1, 1, 29, 1, 30, 31, 32, 33,
|
||||
|
||||
29, 1, 30, 31, 32, 1, 1, 33, 34, 35,
|
||||
36, 37, 1, 38, 39, 40, 41, 42, 43, 1,
|
||||
44, 1, 45, 1, 46, 1, 1, 1, 1, 1,
|
||||
34, 35, 36, 37, 38, 1, 39, 40, 41, 42,
|
||||
43, 44, 1, 45, 46, 47, 48, 49, 50, 1,
|
||||
51, 1, 52, 1, 53, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
@ -363,109 +368,130 @@ static yyconst int yy_ec[256] =
|
||||
1, 1, 1, 1, 1
|
||||
} ;
|
||||
|
||||
static yyconst int yy_meta[47] =
|
||||
static yyconst int yy_meta[54] =
|
||||
{ 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1
|
||||
} ;
|
||||
|
||||
static yyconst short int yy_base[127] =
|
||||
static yyconst short int yy_base[160] =
|
||||
{ 0,
|
||||
0, 0, 39, 47, 193, 194, 46, 54, 194, 194,
|
||||
194, 52, 194, 182, 59, 194, 194, 194, 194, 194,
|
||||
194, 56, 194, 49, 154, 165, 157, 53, 147, 51,
|
||||
56, 156, 148, 147, 194, 194, 84, 85, 91, 87,
|
||||
96, 103, 194, 194, 194, 156, 151, 106, 142, 146,
|
||||
86, 151, 137, 145, 144, 151, 146, 94, 139, 135,
|
||||
146, 139, 118, 89, 194, 120, 127, 194, 140, 194,
|
||||
194, 194, 194, 140, 139, 136, 135, 130, 194, 194,
|
||||
131, 135, 127, 121, 124, 132, 130, 194, 118, 122,
|
||||
113, 194, 194, 194, 194, 194, 194, 194, 194, 142,
|
||||
0, 0, 45, 54, 69, 71, 239, 240, 53, 62,
|
||||
240, 240, 240, 67, 240, 78, 78, 240, 240, 240,
|
||||
240, 240, 213, 240, 75, 240, 66, 192, 192, 240,
|
||||
205, 190, 195, 70, 59, 71, 74, 195, 186, 185,
|
||||
240, 240, 107, 240, 240, 240, 218, 84, 115, 240,
|
||||
111, 121, 129, 202, 240, 240, 240, 195, 193, 187,
|
||||
240, 133, 177, 240, 181, 108, 188, 172, 180, 175,
|
||||
178, 187, 182, 117, 173, 169, 182, 174, 159, 240,
|
||||
113, 240, 148, 165, 240, 240, 240, 175, 240, 240,
|
||||
240, 240, 176, 175, 171, 168, 169, 163, 240, 240,
|
||||
|
||||
121, 194, 128, 123, 139, 125, 194, 120, 120, 194,
|
||||
194, 103, 107, 120, 194, 194, 104, 99, 110, 84,
|
||||
90, 72, 45, 194, 194, 68
|
||||
240, 164, 170, 160, 139, 157, 240, 167, 165, 240,
|
||||
151, 155, 146, 240, 240, 166, 240, 240, 240, 240,
|
||||
240, 240, 180, 153, 240, 162, 157, 177, 159, 155,
|
||||
240, 153, 153, 240, 168, 133, 145, 123, 138, 240,
|
||||
240, 120, 240, 119, 133, 118, 130, 130, 119, 107,
|
||||
122, 84, 240, 78, 64, 240, 240, 100, 76
|
||||
} ;
|
||||
|
||||
static yyconst short int yy_def[127] =
|
||||
static yyconst short int yy_def[160] =
|
||||
{ 0,
|
||||
125, 1, 1, 1, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 126,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 126, 125, 126, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
157, 1, 1, 1, 158, 158, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
159, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
159, 157, 159, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 0, 125
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 0, 157, 157
|
||||
} ;
|
||||
|
||||
static yyconst short int yy_nxt[241] =
|
||||
static yyconst short int yy_nxt[294] =
|
||||
{ 0,
|
||||
6, 7, 8, 6, 9, 10, 11, 12, 13, 14,
|
||||
15, 15, 15, 15, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 6, 24, 6, 6, 25, 6, 26,
|
||||
6, 6, 27, 28, 29, 6, 6, 30, 31, 32,
|
||||
33, 6, 34, 6, 35, 36, 6, 38, 38, 37,
|
||||
37, 37, 37, 37, 6, 38, 38, 37, 37, 37,
|
||||
37, 37, 39, 39, 39, 39, 39, 41, 64, 42,
|
||||
42, 42, 42, 42, 43, 44, 46, 51, 45, 56,
|
||||
58, 47, 124, 57, 59, 52, 38, 38, 53, 65,
|
||||
66, 65, 66, 54, 63, 63, 63, 63, 63, 41,
|
||||
8, 9, 10, 8, 11, 12, 8, 13, 14, 15,
|
||||
16, 17, 17, 17, 17, 17, 17, 18, 19, 20,
|
||||
21, 22, 23, 24, 8, 8, 25, 26, 8, 27,
|
||||
8, 28, 29, 8, 30, 31, 8, 32, 8, 33,
|
||||
34, 35, 8, 8, 36, 37, 38, 39, 8, 40,
|
||||
8, 41, 42, 8, 48, 48, 43, 43, 43, 43,
|
||||
43, 43, 8, 48, 48, 43, 43, 43, 43, 43,
|
||||
43, 45, 46, 45, 46, 47, 81, 47, 49, 49,
|
||||
49, 49, 49, 49, 50, 48, 48, 52, 51, 53,
|
||||
53, 53, 53, 53, 53, 55, 56, 58, 59, 66,
|
||||
|
||||
123, 39, 39, 39, 39, 39, 67, 67, 67, 67,
|
||||
67, 41, 76, 42, 42, 42, 42, 42, 70, 71,
|
||||
72, 84, 65, 66, 122, 77, 121, 85, 63, 63,
|
||||
63, 63, 63, 99, 120, 119, 73, 67, 67, 67,
|
||||
67, 67, 118, 117, 116, 100, 115, 114, 113, 112,
|
||||
111, 110, 109, 108, 107, 106, 105, 104, 103, 102,
|
||||
101, 98, 97, 96, 95, 94, 93, 92, 91, 90,
|
||||
89, 88, 87, 86, 83, 82, 81, 80, 79, 78,
|
||||
75, 74, 69, 68, 62, 61, 60, 55, 50, 49,
|
||||
48, 40, 125, 5, 125, 125, 125, 125, 125, 125,
|
||||
44, 70, 57, 74, 72, 60, 71, 75, 156, 67,
|
||||
73, 155, 68, 82, 83, 82, 83, 69, 79, 79,
|
||||
79, 79, 79, 79, 52, 154, 49, 49, 49, 49,
|
||||
49, 49, 84, 84, 84, 84, 84, 84, 52, 95,
|
||||
53, 53, 53, 53, 53, 53, 89, 90, 91, 105,
|
||||
82, 83, 122, 96, 97, 153, 152, 106, 151, 150,
|
||||
149, 148, 147, 107, 146, 145, 144, 143, 123, 92,
|
||||
79, 79, 79, 79, 79, 79, 84, 84, 84, 84,
|
||||
84, 84, 142, 141, 140, 139, 138, 137, 136, 135,
|
||||
134, 133, 132, 131, 130, 129, 128, 127, 126, 125,
|
||||
|
||||
124, 121, 120, 119, 118, 117, 116, 115, 114, 113,
|
||||
112, 111, 110, 109, 108, 104, 103, 102, 101, 100,
|
||||
99, 98, 94, 93, 88, 87, 86, 85, 80, 78,
|
||||
77, 76, 65, 64, 63, 62, 61, 54, 157, 7,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157
|
||||
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125
|
||||
} ;
|
||||
|
||||
static yyconst short int yy_chk[241] =
|
||||
static yyconst short int yy_chk[294] =
|
||||
{ 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 3, 7, 7, 3,
|
||||
3, 3, 3, 3, 4, 8, 8, 4, 4, 4,
|
||||
4, 4, 12, 12, 12, 12, 12, 15, 126, 15,
|
||||
15, 15, 15, 15, 22, 22, 24, 28, 22, 30,
|
||||
31, 24, 123, 30, 31, 28, 38, 38, 28, 40,
|
||||
40, 64, 64, 28, 37, 37, 37, 37, 37, 39,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 3, 9, 9, 3, 3, 3, 3,
|
||||
3, 3, 4, 10, 10, 4, 4, 4, 4, 4,
|
||||
4, 5, 5, 6, 6, 5, 159, 6, 14, 14,
|
||||
14, 14, 14, 14, 16, 48, 48, 17, 16, 17,
|
||||
17, 17, 17, 17, 17, 25, 25, 27, 27, 34,
|
||||
|
||||
122, 39, 39, 39, 39, 39, 41, 41, 41, 41,
|
||||
41, 42, 51, 42, 42, 42, 42, 42, 48, 48,
|
||||
48, 58, 66, 66, 121, 51, 120, 58, 63, 63,
|
||||
63, 63, 63, 84, 119, 118, 48, 67, 67, 67,
|
||||
67, 67, 117, 114, 113, 84, 112, 109, 108, 106,
|
||||
105, 104, 103, 101, 100, 91, 90, 89, 87, 86,
|
||||
85, 83, 82, 81, 78, 77, 76, 75, 74, 69,
|
||||
62, 61, 60, 59, 57, 56, 55, 54, 53, 52,
|
||||
50, 49, 47, 46, 34, 33, 32, 29, 27, 26,
|
||||
25, 14, 5, 125, 125, 125, 125, 125, 125, 125,
|
||||
158, 35, 25, 37, 36, 27, 35, 37, 155, 34,
|
||||
36, 154, 34, 51, 51, 81, 81, 34, 43, 43,
|
||||
43, 43, 43, 43, 49, 152, 49, 49, 49, 49,
|
||||
49, 49, 52, 52, 52, 52, 52, 52, 53, 66,
|
||||
53, 53, 53, 53, 53, 53, 62, 62, 62, 74,
|
||||
83, 83, 105, 66, 66, 151, 150, 74, 149, 148,
|
||||
147, 146, 145, 74, 144, 142, 139, 138, 105, 62,
|
||||
79, 79, 79, 79, 79, 79, 84, 84, 84, 84,
|
||||
84, 84, 137, 136, 135, 133, 132, 130, 129, 128,
|
||||
127, 126, 124, 123, 116, 113, 112, 111, 109, 108,
|
||||
|
||||
106, 104, 103, 102, 98, 97, 96, 95, 94, 93,
|
||||
88, 78, 77, 76, 75, 73, 72, 71, 70, 69,
|
||||
68, 67, 65, 63, 60, 59, 58, 54, 47, 40,
|
||||
39, 38, 33, 32, 31, 29, 28, 23, 7, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
|
||||
157, 157, 157
|
||||
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
|
||||
125, 125, 125, 125, 125, 125, 125, 125, 125, 125
|
||||
} ;
|
||||
|
||||
static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
|
||||
@ -487,8 +513,13 @@ char *yytext;
|
||||
#line 3 "lex.l"
|
||||
#include "gen4asm.h"
|
||||
#include "y.tab.h"
|
||||
|
||||
int saved_state = INITIAL;
|
||||
|
||||
#define IN_REG 1
|
||||
|
||||
#define BLOCK_COMMENT 2
|
||||
|
||||
|
||||
/* Macros after this point can all be overridden by user definitions in
|
||||
* section 1.
|
||||
@ -639,7 +670,7 @@ YY_DECL
|
||||
register char *yy_cp, *yy_bp;
|
||||
register int yy_act;
|
||||
|
||||
#line 8 "lex.l"
|
||||
#line 12 "lex.l"
|
||||
|
||||
|
||||
if ( yy_init )
|
||||
@ -688,14 +719,14 @@ yy_match:
|
||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 126 )
|
||||
if ( yy_current_state >= 158 )
|
||||
yy_c = yy_meta[(unsigned int) yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||||
*yy_state_ptr++ = yy_current_state;
|
||||
++yy_cp;
|
||||
}
|
||||
while ( yy_base[yy_current_state] != 194 );
|
||||
while ( yy_base[yy_current_state] != 240 );
|
||||
|
||||
yy_find_action:
|
||||
yy_current_state = *--yy_state_ptr;
|
||||
@ -734,261 +765,361 @@ do_action: /* This label is used only to access EOF actions. */
|
||||
{ /* beginning of action switch */
|
||||
case 1:
|
||||
YY_RULE_SETUP
|
||||
#line 9 "lex.l"
|
||||
#line 13 "lex.l"
|
||||
{ } /* eat up single-line comments */
|
||||
YY_BREAK
|
||||
/* eat up multi-line comments, non-nesting. */
|
||||
case 2:
|
||||
YY_RULE_SETUP
|
||||
#line 11 "lex.l"
|
||||
{ return MOV; }
|
||||
#line 16 "lex.l"
|
||||
{
|
||||
saved_state = YYSTATE;
|
||||
BEGIN(BLOCK_COMMENT);
|
||||
}
|
||||
YY_BREAK
|
||||
case 3:
|
||||
YY_RULE_SETUP
|
||||
#line 13 "lex.l"
|
||||
{ return MUL; }
|
||||
#line 20 "lex.l"
|
||||
{
|
||||
BEGIN(saved_state);
|
||||
}
|
||||
YY_BREAK
|
||||
case 4:
|
||||
YY_RULE_SETUP
|
||||
#line 14 "lex.l"
|
||||
{ return MAC; }
|
||||
#line 23 "lex.l"
|
||||
{ }
|
||||
YY_BREAK
|
||||
case 5:
|
||||
YY_RULE_SETUP
|
||||
#line 15 "lex.l"
|
||||
{ return MACH; }
|
||||
#line 24 "lex.l"
|
||||
{ }
|
||||
YY_BREAK
|
||||
/* used for both null send and null register. */
|
||||
case 6:
|
||||
YY_RULE_SETUP
|
||||
#line 16 "lex.l"
|
||||
{ return LINE; }
|
||||
#line 27 "lex.l"
|
||||
{ return NULL_TOKEN; }
|
||||
YY_BREAK
|
||||
/* opcodes */
|
||||
case 7:
|
||||
YY_RULE_SETUP
|
||||
#line 17 "lex.l"
|
||||
{ return SAD2; }
|
||||
#line 30 "lex.l"
|
||||
{ return MOV; }
|
||||
YY_BREAK
|
||||
case 8:
|
||||
YY_RULE_SETUP
|
||||
#line 18 "lex.l"
|
||||
{ return SADA2; }
|
||||
#line 32 "lex.l"
|
||||
{ return MUL; }
|
||||
YY_BREAK
|
||||
case 9:
|
||||
YY_RULE_SETUP
|
||||
#line 19 "lex.l"
|
||||
{ return DP4; }
|
||||
#line 33 "lex.l"
|
||||
{ return MAC; }
|
||||
YY_BREAK
|
||||
case 10:
|
||||
YY_RULE_SETUP
|
||||
#line 20 "lex.l"
|
||||
{ return DPH; }
|
||||
#line 34 "lex.l"
|
||||
{ return MACH; }
|
||||
YY_BREAK
|
||||
case 11:
|
||||
YY_RULE_SETUP
|
||||
#line 21 "lex.l"
|
||||
{ return DP3; }
|
||||
#line 35 "lex.l"
|
||||
{ return LINE; }
|
||||
YY_BREAK
|
||||
case 12:
|
||||
YY_RULE_SETUP
|
||||
#line 22 "lex.l"
|
||||
{ return DP2; }
|
||||
#line 36 "lex.l"
|
||||
{ return SAD2; }
|
||||
YY_BREAK
|
||||
case 13:
|
||||
YY_RULE_SETUP
|
||||
#line 24 "lex.l"
|
||||
{ return ADD; }
|
||||
#line 37 "lex.l"
|
||||
{ return SADA2; }
|
||||
YY_BREAK
|
||||
case 14:
|
||||
YY_RULE_SETUP
|
||||
#line 26 "lex.l"
|
||||
{ return SEND; }
|
||||
#line 38 "lex.l"
|
||||
{ return DP4; }
|
||||
YY_BREAK
|
||||
case 15:
|
||||
YY_RULE_SETUP
|
||||
#line 27 "lex.l"
|
||||
{ return MSGLEN; }
|
||||
#line 39 "lex.l"
|
||||
{ return DPH; }
|
||||
YY_BREAK
|
||||
case 16:
|
||||
YY_RULE_SETUP
|
||||
#line 28 "lex.l"
|
||||
{ return RETURNLEN; }
|
||||
#line 40 "lex.l"
|
||||
{ return DP3; }
|
||||
YY_BREAK
|
||||
case 17:
|
||||
YY_RULE_SETUP
|
||||
#line 29 "lex.l"
|
||||
{ return NULL_TOKEN; }
|
||||
#line 41 "lex.l"
|
||||
{ return DP2; }
|
||||
YY_BREAK
|
||||
case 18:
|
||||
YY_RULE_SETUP
|
||||
#line 30 "lex.l"
|
||||
{ return MATH; }
|
||||
#line 43 "lex.l"
|
||||
{ return ADD; }
|
||||
YY_BREAK
|
||||
case 19:
|
||||
YY_RULE_SETUP
|
||||
#line 31 "lex.l"
|
||||
{ return SAMPLER; }
|
||||
#line 45 "lex.l"
|
||||
{ return NOP; }
|
||||
YY_BREAK
|
||||
case 20:
|
||||
YY_RULE_SETUP
|
||||
#line 32 "lex.l"
|
||||
{ return GATEWAY; }
|
||||
#line 47 "lex.l"
|
||||
{ return SEND; }
|
||||
YY_BREAK
|
||||
case 21:
|
||||
YY_RULE_SETUP
|
||||
#line 33 "lex.l"
|
||||
{ return READ; }
|
||||
#line 48 "lex.l"
|
||||
{ return MSGLEN; }
|
||||
YY_BREAK
|
||||
case 22:
|
||||
YY_RULE_SETUP
|
||||
#line 34 "lex.l"
|
||||
{ return WRITE; }
|
||||
#line 49 "lex.l"
|
||||
{ return RETURNLEN; }
|
||||
YY_BREAK
|
||||
case 23:
|
||||
YY_RULE_SETUP
|
||||
#line 35 "lex.l"
|
||||
{ return URB; }
|
||||
#line 50 "lex.l"
|
||||
{ return MATH; }
|
||||
YY_BREAK
|
||||
case 24:
|
||||
YY_RULE_SETUP
|
||||
#line 36 "lex.l"
|
||||
{ return THREAD_SPAWNER; }
|
||||
#line 51 "lex.l"
|
||||
{ return SAMPLER; }
|
||||
YY_BREAK
|
||||
case 25:
|
||||
YY_RULE_SETUP
|
||||
#line 38 "lex.l"
|
||||
{ return SEMICOLON; }
|
||||
#line 52 "lex.l"
|
||||
{ return GATEWAY; }
|
||||
YY_BREAK
|
||||
case 26:
|
||||
YY_RULE_SETUP
|
||||
#line 39 "lex.l"
|
||||
{ return LPAREN; }
|
||||
#line 53 "lex.l"
|
||||
{ return READ; }
|
||||
YY_BREAK
|
||||
case 27:
|
||||
YY_RULE_SETUP
|
||||
#line 40 "lex.l"
|
||||
{ return RPAREN; }
|
||||
#line 54 "lex.l"
|
||||
{ return WRITE; }
|
||||
YY_BREAK
|
||||
case 28:
|
||||
YY_RULE_SETUP
|
||||
#line 41 "lex.l"
|
||||
{ return LANGLE; }
|
||||
#line 55 "lex.l"
|
||||
{ return URB; }
|
||||
YY_BREAK
|
||||
case 29:
|
||||
YY_RULE_SETUP
|
||||
#line 42 "lex.l"
|
||||
{ return RANGLE; }
|
||||
#line 56 "lex.l"
|
||||
{ return THREAD_SPAWNER; }
|
||||
YY_BREAK
|
||||
case 30:
|
||||
YY_RULE_SETUP
|
||||
#line 43 "lex.l"
|
||||
{ return LCURLY; }
|
||||
#line 58 "lex.l"
|
||||
{ return SEMICOLON; }
|
||||
YY_BREAK
|
||||
case 31:
|
||||
YY_RULE_SETUP
|
||||
#line 44 "lex.l"
|
||||
{ return RCURLY; }
|
||||
#line 59 "lex.l"
|
||||
{ return LPAREN; }
|
||||
YY_BREAK
|
||||
case 32:
|
||||
YY_RULE_SETUP
|
||||
#line 45 "lex.l"
|
||||
{ return COMMA; }
|
||||
#line 60 "lex.l"
|
||||
{ return RPAREN; }
|
||||
YY_BREAK
|
||||
case 33:
|
||||
YY_RULE_SETUP
|
||||
#line 46 "lex.l"
|
||||
{ return DOT; }
|
||||
#line 61 "lex.l"
|
||||
{ return LANGLE; }
|
||||
YY_BREAK
|
||||
/* XXX: this lexing of register files is shady */
|
||||
case 34:
|
||||
YY_RULE_SETUP
|
||||
#line 49 "lex.l"
|
||||
{ BEGIN(IN_REG); return MSGREGFILE; }
|
||||
#line 62 "lex.l"
|
||||
{ return RANGLE; }
|
||||
YY_BREAK
|
||||
case 35:
|
||||
YY_RULE_SETUP
|
||||
#line 50 "lex.l"
|
||||
{ BEGIN(IN_REG); return GENREGFILE; }
|
||||
#line 63 "lex.l"
|
||||
{ return LCURLY; }
|
||||
YY_BREAK
|
||||
case 36:
|
||||
YY_RULE_SETUP
|
||||
#line 64 "lex.l"
|
||||
{ return RCURLY; }
|
||||
YY_BREAK
|
||||
case 37:
|
||||
YY_RULE_SETUP
|
||||
#line 65 "lex.l"
|
||||
{ return COMMA; }
|
||||
YY_BREAK
|
||||
case 38:
|
||||
YY_RULE_SETUP
|
||||
#line 66 "lex.l"
|
||||
{ return DOT; }
|
||||
YY_BREAK
|
||||
/* XXX: this lexing of register files is shady */
|
||||
case 39:
|
||||
YY_RULE_SETUP
|
||||
#line 69 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return ACCREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 40:
|
||||
YY_RULE_SETUP
|
||||
#line 73 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return ADDRESSREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 41:
|
||||
YY_RULE_SETUP
|
||||
#line 77 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return MSGREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 42:
|
||||
YY_RULE_SETUP
|
||||
#line 81 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return FLAGREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 43:
|
||||
YY_RULE_SETUP
|
||||
#line 85 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return GENREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 44:
|
||||
YY_RULE_SETUP
|
||||
#line 89 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return CONTROLREG;
|
||||
}
|
||||
YY_BREAK
|
||||
case 45:
|
||||
YY_RULE_SETUP
|
||||
#line 93 "lex.l"
|
||||
{
|
||||
BEGIN(IN_REG);
|
||||
return IPREG;
|
||||
}
|
||||
YY_BREAK
|
||||
/*
|
||||
* Lexing of register types should probably require the ":" symbol specified
|
||||
* in the BNF of the assembly, but our existing source didn't use that syntax.
|
||||
*/
|
||||
case 36:
|
||||
case 46:
|
||||
YY_RULE_SETUP
|
||||
#line 56 "lex.l"
|
||||
#line 102 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_UD; }
|
||||
YY_BREAK
|
||||
case 37:
|
||||
case 47:
|
||||
YY_RULE_SETUP
|
||||
#line 57 "lex.l"
|
||||
#line 103 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_D; }
|
||||
YY_BREAK
|
||||
case 38:
|
||||
case 48:
|
||||
YY_RULE_SETUP
|
||||
#line 58 "lex.l"
|
||||
#line 104 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_UW; }
|
||||
YY_BREAK
|
||||
case 39:
|
||||
case 49:
|
||||
YY_RULE_SETUP
|
||||
#line 59 "lex.l"
|
||||
#line 105 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_W; }
|
||||
YY_BREAK
|
||||
case 40:
|
||||
case 50:
|
||||
YY_RULE_SETUP
|
||||
#line 60 "lex.l"
|
||||
#line 106 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_UB; }
|
||||
YY_BREAK
|
||||
case 41:
|
||||
case 51:
|
||||
YY_RULE_SETUP
|
||||
#line 61 "lex.l"
|
||||
#line 107 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_B; }
|
||||
YY_BREAK
|
||||
case 42:
|
||||
case 52:
|
||||
YY_RULE_SETUP
|
||||
#line 62 "lex.l"
|
||||
#line 108 "lex.l"
|
||||
{ BEGIN(INITIAL); return TYPE_F; }
|
||||
YY_BREAK
|
||||
case 43:
|
||||
case 53:
|
||||
YY_RULE_SETUP
|
||||
#line 64 "lex.l"
|
||||
#line 110 "lex.l"
|
||||
{ return SATURATE; }
|
||||
YY_BREAK
|
||||
case 54:
|
||||
YY_RULE_SETUP
|
||||
#line 111 "lex.l"
|
||||
{ return ALIGN1; }
|
||||
YY_BREAK
|
||||
case 44:
|
||||
case 55:
|
||||
YY_RULE_SETUP
|
||||
#line 66 "lex.l"
|
||||
#line 112 "lex.l"
|
||||
{ return ALIGN16; }
|
||||
YY_BREAK
|
||||
case 56:
|
||||
YY_RULE_SETUP
|
||||
#line 113 "lex.l"
|
||||
{ return MASK_DISABLE; }
|
||||
YY_BREAK
|
||||
case 57:
|
||||
YY_RULE_SETUP
|
||||
#line 114 "lex.l"
|
||||
{ return EOT; }
|
||||
YY_BREAK
|
||||
case 58:
|
||||
YY_RULE_SETUP
|
||||
#line 116 "lex.l"
|
||||
{
|
||||
yylval.integer = atoi(yytext);
|
||||
return INTEGER;
|
||||
}
|
||||
YY_BREAK
|
||||
case 45:
|
||||
case 59:
|
||||
YY_RULE_SETUP
|
||||
#line 71 "lex.l"
|
||||
#line 121 "lex.l"
|
||||
{
|
||||
yylval.number = strtod(yytext, NULL);
|
||||
return NUMBER;
|
||||
}
|
||||
YY_BREAK
|
||||
case 46:
|
||||
case 60:
|
||||
YY_RULE_SETUP
|
||||
#line 76 "lex.l"
|
||||
#line 126 "lex.l"
|
||||
{ } /* eat up whitespace */
|
||||
YY_BREAK
|
||||
case 47:
|
||||
case 61:
|
||||
YY_RULE_SETUP
|
||||
#line 78 "lex.l"
|
||||
#line 128 "lex.l"
|
||||
{
|
||||
printf("parse error at line %d: unexpected \"%s\"\n",
|
||||
yylineno, yytext);
|
||||
exit(1);
|
||||
}
|
||||
YY_BREAK
|
||||
case 48:
|
||||
case 62:
|
||||
YY_RULE_SETUP
|
||||
#line 83 "lex.l"
|
||||
#line 133 "lex.l"
|
||||
ECHO;
|
||||
YY_BREAK
|
||||
case YY_STATE_EOF(INITIAL):
|
||||
case YY_STATE_EOF(IN_REG):
|
||||
case YY_STATE_EOF(BLOCK_COMMENT):
|
||||
yyterminate();
|
||||
|
||||
case YY_END_OF_BUFFER:
|
||||
@ -1276,7 +1407,7 @@ static yy_state_type yy_get_previous_state()
|
||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 126 )
|
||||
if ( yy_current_state >= 158 )
|
||||
yy_c = yy_meta[(unsigned int) yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||||
@ -1306,11 +1437,11 @@ yy_state_type yy_current_state;
|
||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||
{
|
||||
yy_current_state = (int) yy_def[yy_current_state];
|
||||
if ( yy_current_state >= 126 )
|
||||
if ( yy_current_state >= 158 )
|
||||
yy_c = yy_meta[(unsigned int) yy_c];
|
||||
}
|
||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||||
yy_is_jam = (yy_current_state == 125);
|
||||
yy_is_jam = (yy_current_state == 157);
|
||||
if ( ! yy_is_jam )
|
||||
*yy_state_ptr++ = yy_current_state;
|
||||
|
||||
@ -1871,7 +2002,7 @@ int main()
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#line 83 "lex.l"
|
||||
#line 133 "lex.l"
|
||||
|
||||
|
||||
char *
|
||||
|
@ -2,12 +2,31 @@
|
||||
%{
|
||||
#include "gen4asm.h"
|
||||
#include "y.tab.h"
|
||||
|
||||
int saved_state = INITIAL;
|
||||
|
||||
%}
|
||||
%start IN_REG
|
||||
%s IN_REG
|
||||
%x BLOCK_COMMENT
|
||||
|
||||
%%
|
||||
\/\/.*[\r\n] { } /* eat up single-line comments */
|
||||
|
||||
/* eat up multi-line comments, non-nesting. */
|
||||
\/\* {
|
||||
saved_state = YYSTATE;
|
||||
BEGIN(BLOCK_COMMENT);
|
||||
}
|
||||
<BLOCK_COMMENT>\*\/ {
|
||||
BEGIN(saved_state);
|
||||
}
|
||||
<BLOCK_COMMENT>. { }
|
||||
<BLOCK_COMMENT>[\r\n] { }
|
||||
|
||||
/* used for both null send and null register. */
|
||||
"null" { return NULL_TOKEN; }
|
||||
|
||||
/* opcodes */
|
||||
"mov" { return MOV; }
|
||||
|
||||
"mul" { return MUL; }
|
||||
@ -23,10 +42,11 @@
|
||||
|
||||
"add" { return ADD; }
|
||||
|
||||
"nop" { return NOP; }
|
||||
|
||||
"send" { return SEND; }
|
||||
"mlen" { return MSGLEN; }
|
||||
"rlen" { return RETURNLEN; }
|
||||
"null" { return NULL_TOKEN; }
|
||||
"math" { return MATH; }
|
||||
"sampler" { return SAMPLER; }
|
||||
"gateway" { return GATEWAY; }
|
||||
@ -46,8 +66,34 @@
|
||||
"." { return DOT; }
|
||||
|
||||
/* XXX: this lexing of register files is shady */
|
||||
"m" { BEGIN(IN_REG); return MSGREGFILE; }
|
||||
[gr] { BEGIN(IN_REG); return GENREGFILE; }
|
||||
"acc" {
|
||||
BEGIN(IN_REG);
|
||||
return ACCREG;
|
||||
}
|
||||
"a" {
|
||||
BEGIN(IN_REG);
|
||||
return ADDRESSREG;
|
||||
}
|
||||
"m" {
|
||||
BEGIN(IN_REG);
|
||||
return MSGREG;
|
||||
}
|
||||
"f" {
|
||||
BEGIN(IN_REG);
|
||||
return FLAGREG;
|
||||
}
|
||||
[gr] {
|
||||
BEGIN(IN_REG);
|
||||
return GENREG;
|
||||
}
|
||||
"cr" {
|
||||
BEGIN(IN_REG);
|
||||
return CONTROLREG;
|
||||
}
|
||||
"ip" {
|
||||
BEGIN(IN_REG);
|
||||
return IPREG;
|
||||
}
|
||||
|
||||
/*
|
||||
* Lexing of register types should probably require the ":" symbol specified
|
||||
@ -61,7 +107,11 @@
|
||||
"B" { BEGIN(INITIAL); return TYPE_B; }
|
||||
"F" { BEGIN(INITIAL); return TYPE_F; }
|
||||
|
||||
"sat" { return SATURATE; }
|
||||
"align1" { return ALIGN1; }
|
||||
"align16" { return ALIGN16; }
|
||||
"mask_disable" { return MASK_DISABLE; }
|
||||
"EOT" { return EOT; }
|
||||
|
||||
[0-9]* {
|
||||
yylval.integer = atoi(yytext);
|
||||
|
@ -1,82 +1,156 @@
|
||||
/* The initial payload of the thread is always g0.
|
||||
* WM_URB (incoming URB entries) is g3
|
||||
* X0_R is g4
|
||||
* X1_R is g5
|
||||
* Y0_R is g6
|
||||
* Y1_R is g7
|
||||
*/
|
||||
|
||||
/* Set up the X/Y screen coordinates of the pixels in our 4 subspans. Each
|
||||
* subspan is a 2x2 rectangle, and the screen x/y of the upper left of each
|
||||
* subspan are given in GRF register 1.2 through 1.5 (which, with the word
|
||||
* addressing below, are 1.4 through 1.11).
|
||||
*
|
||||
* The result is WM_X*_R and WM_Y*R being:
|
||||
*
|
||||
* X0: {ss0.x, ss0.x+1, ss0.x, ss0.x+1, ss1.x, ss1.x+1, ss1.x, ss1.x+y}
|
||||
* Y0: {ss0.y, ss0.y, ss0.y+1, ss0.y+1, ss1.y, ss1.y, ss1.y+1, ss1.y+1}
|
||||
* X1: {ss2.x, ss2.x+1, ss2.x, ss2.x+1, ss3.x, ss3.x+1, ss3.x, ss3.x+y}
|
||||
* Y1: {ss2.y, ss2.y, ss2.y+1, ss2.y+1, ss3.y, ss3.y, ss3.y+1, ss3.y+1}
|
||||
*/
|
||||
|
||||
/* Set up ss0.x coordinates*/
|
||||
mov (1) g4<1>F g1.8<0,1,0>UW { align1 };
|
||||
add (1) g4.4<1>F g1.8<0,1,0>UW 1UB { align1 };
|
||||
mov (1) g4.8<1>F g1.8<0,1,0>UW { align1 };
|
||||
add (1) g4.12<1>F g1.8<0,1,0>UW 1UB { align1 };
|
||||
/* Set up ss0.y coordinates */
|
||||
mov (1) g6<1>F g1.10<0,1,0>UW { align1 };
|
||||
mov (1) g6.4<1>F g1.10<0,1,0>UW { align1 };
|
||||
add (1) g6.8<1>F g1.10<0,1,0>UW 1UB { align1 };
|
||||
add (1) g6.12<1>F g1.10<0,1,0>UW 1UB { align1 };
|
||||
/* set up ss1.x coordinates */
|
||||
mov (1) g4.16<1>F g1.12<0,1,0>UW { align1 };
|
||||
add (1) g4.20<1>F g1.12<0,1,0>UW 1UB { align1 };
|
||||
mov (1) g4.24<1>F g1.12<0,1,0>UW { align1 };
|
||||
add (1) g4.28<1>F g1.12<0,1,0>UW 1UB { align1 };
|
||||
/* set up ss1.y coordinates */
|
||||
mov (1) g6.16<1>F g1.14<0,1,0>UW { align1 };
|
||||
mov (1) g6.20<1>F g1.14<0,1,0>UW { align1 };
|
||||
add (1) g6.24<1>F g1.14<0,1,0>UW 1UB { align1 };
|
||||
add (1) g6.28<1>F g1.14<0,1,0>UW 1UB { align1 };
|
||||
/* Set up ss2.x coordinates */
|
||||
mov (1) g5<1>F g1.16<0,1,0>UW { align1 };
|
||||
add (1) g5.4<1>F g1.16<0,1,0>UW 1UB { align1 };
|
||||
mov (1) g5.8<1>F g1.16<0,1,0>UW { align1 };
|
||||
add (1) g5.12<1>F g1.16<0,1,0>UW 1UB { align1 };
|
||||
/* Set up ss2.y coordinates */
|
||||
mov (1) g7<1>F g1.18<0,1,0>UW { align1 };
|
||||
mov (1) g7.4<1>F g1.18<0,1,0>UW { align1 };
|
||||
add (1) g7.8<1>F g1.18<0,1,0>UW 1UB { align1 };
|
||||
add (1) g7.12<1>F g1.18<0,1,0>UW 1UB { align1 };
|
||||
/* Set up ss3.x coordinates */
|
||||
mov (1) g5.16<1>F g1.20<0,1,0>UW { align1 };
|
||||
add (1) g5.20<1>F g1.20<0,1,0>UW 1UB { align1 };
|
||||
mov (1) g5.24<1>F g1.20<0,1,0>UW { align1 };
|
||||
add (1) g5.28<1>F g1.20<0,1,0>UW 1UB { align1 };
|
||||
/* Set up ss3.y coordinates */
|
||||
mov (1) g7.16<1>F g1.22<0,1,0>UW { align1 };
|
||||
mov (1) g7.20<1>F g1.22<0,1,0>UW { align1 };
|
||||
add (1) g7.24<1>F g1.22<0,1,0>UW 1UB { align1 };
|
||||
add (1) g7.28<1>F g1.22<0,1,0>UW 1UB { align1 };
|
||||
|
||||
/* Now, map these screen space coordinates into texture coordinates. */
|
||||
/* subtract screen-space X origin of vertex 0. */
|
||||
add (8) g4<1>F g4<8,8,1>F g1<0,1,0>F { align1 };
|
||||
add (8) g5<1>F g5<8,8,1>F g1<0,1,0>F { align1 };
|
||||
/* scale by texture X increment */
|
||||
mul (8) g4<1>F g4<8,8,1>F g3<0,1,0>F { align1 };
|
||||
mul (8) g5<1>F g5<8,8,1>F g3<0,1,0>F { align1 };
|
||||
/* add in texture X offset */
|
||||
add (8) g4<1>F g4<8,8,1>F g3.12<0,1,0>F { align1 };
|
||||
add (8) g5<1>F g5<8,8,1>F g3.12<0,1,0>F { align1 };
|
||||
/* subtract screen-space Y origin of vertex 0. */
|
||||
add (8) g6<1>F g6<8,8,1>F g1.4<0,1,0>F { align1 };
|
||||
add (8) g7<1>F g7<8,8,1>F g1.4<0,1,0>F { align1 };
|
||||
/* scale by texture Y increment */
|
||||
mul (8) g6<1>F g6<8,8,1>F g3.20<0,1,0>F { align1 };
|
||||
mul (8) g7<1>F g7<8,8,1>F g3.20<0,1,0>F { align1 };
|
||||
/* add in texture Y offset */
|
||||
add (8) g6<1>F g6<8,8,1>F g3.28<0,1,0>F { align1 };
|
||||
add (8) g7<1>F g7<8,8,1>F g3.28<0,1,0>F { align1 };
|
||||
/* sampler */
|
||||
mov (8) m1<1>F g4<8,8,1>F { align1 };
|
||||
mov (8) m2<1>F g5<8,8,1>F { align1 };
|
||||
mov (8) m3<1>F g6<8,8,1>F { align1 };
|
||||
mov (8) m4<1>F g7<8,8,1>F { align1 };
|
||||
|
||||
/*
|
||||
* g0 holds the PS thread payload, which (oddly) contains
|
||||
* precisely what the sampler wants to see in m0
|
||||
*/
|
||||
send 0 (16) g12<1>UW g0<8,8,1>UW sampler mlen 5 rlen 8 { align1 };
|
||||
mov (8) g19<1>UW g19<8,8,1>UW { align1 };
|
||||
|
||||
/* color space conversion function:
|
||||
* R = Clamp ( 1.164(Y-16/255) + 1.596(Cr-128/255), 0, 1)
|
||||
* G = Clamp ( 1.164(Y-16/255) - 0.813(Cr-128/255) - 0.392(Cb-128/255), 0, 1)
|
||||
* B = Clamp ( 1.164(Y-16/255) + 2.017(Cb-128/255), 0, 1)
|
||||
*
|
||||
* Y is g14, g15.
|
||||
* Cr is g12, g13.
|
||||
* Cb is g16, g17.
|
||||
*
|
||||
* R is g2, g6.
|
||||
* G is g3, g7.
|
||||
* B is g4, g8.
|
||||
*/
|
||||
/* Y = Y - 16/255 */
|
||||
add (8) g14<1>F g14<8,8,1>F -0.0627451F { align1 };
|
||||
/* Cr = Cr - 128/255 */
|
||||
add (8) g12<1>F g12<8,8,1>F -0.501961F { align1 };
|
||||
/* Cb = Cb - 128 / 255 */
|
||||
add (8) g16<1>F g16<8,8,1>F -0.501961F { align1 };
|
||||
/* Y = Y * 1.164 */
|
||||
mul (8) g14<1>F g14<8,8,1>F 1.164F { align1 };
|
||||
mul (8) a0<1>F g12<8,8,1>F 1.596F { align1 };
|
||||
mac (8) m2<1>F g14<8,8,1>F 1F { align1Saturate };
|
||||
mul (8) a0<1>F g12<8,8,1>F -0.813F { align1 };
|
||||
mac (8) a0<1>F g16<8,8,1>F -0.392F { align1 };
|
||||
mac (8) m3<1>F g14<8,8,1>F 1F { align1Saturate };
|
||||
mul (8) a0<1>F g16<8,8,1>F 2.017F { align1 };
|
||||
mac (8) m4<1>F g14<8,8,1>F 1F { align1Saturate };
|
||||
/* acc = 1.596 * Cr */
|
||||
mul (8) acc0<1>F g12<8,8,1>F 1.596F { align1 };
|
||||
/* R = acc + Y */
|
||||
mac.sat (8) m2<1>F g14<8,8,1>F 1F { align1 };
|
||||
/* acc = Cr * -0.813 */
|
||||
mul (8) acc0<1>F g12<8,8,1>F -0.813F { align1 };
|
||||
/* acc += Cb * -0.392 */
|
||||
mac (8) acc0<1>F g16<8,8,1>F -0.392F { align1 };
|
||||
/* G = acc + Y */
|
||||
mac.sat (8) m3<1>F g14<8,8,1>F 1F { align1 };
|
||||
/* acc = Cb * 2.017 */
|
||||
mul (8) acc0<1>F g16<8,8,1>F 2.017F { align1 };
|
||||
/* B = acc + Y */
|
||||
mac.sat (8) m4<1>F g14<8,8,1>F 1F { align1 };
|
||||
/* and do it again */
|
||||
add (8) g15<1>F g15<8,8,1>F -0.0627451F { align1 };
|
||||
add (8) g13<1>F g13<8,8,1>F -0.501961F { align1 };
|
||||
add (8) g17<1>F g17<8,8,1>F -0.501961F { align1 };
|
||||
mul (8) g15<1>F g15<8,8,1>F 1.164F { align1 };
|
||||
mul (8) a0<1>F g13<8,8,1>F 1.596F { align1 };
|
||||
mac (8) m6<1>F g15<8,8,1>F 1F { align1Saturate };
|
||||
mul (8) a0<1>F g13<8,8,1>F -0.813F { align1 };
|
||||
mac (8) a0<1>F g17<8,8,1>F -0.392F { align1 };
|
||||
mac (8) m7<1>F g15<8,8,1>F 1F { align1Saturate };
|
||||
mul (8) a0<1>F g17<8,8,1>F 2.017F { align1 };
|
||||
mac (8) m8<1>F g15<8,8,1>F 1F { align1Saturate };
|
||||
mul (8) acc0<1>F g13<8,8,1>F 1.596F { align1 };
|
||||
mac.sat (8) m6<1>F g15<8,8,1>F 1F { align1 };
|
||||
mul (8) acc0<1>F g13<8,8,1>F -0.813F { align1 };
|
||||
mac (8) acc0<1>F g17<8,8,1>F -0.392F { align1 };
|
||||
mac.sat (8) m7<1>F g15<8,8,1>F 1F { align1 };
|
||||
mul (8) acc0<1>F g17<8,8,1>F 2.017F { align1 };
|
||||
mac.sat (8) m8<1>F g15<8,8,1>F 1F { align1 };
|
||||
|
||||
/* Pass through control information:
|
||||
*/
|
||||
mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable };
|
||||
send 0 (16) a0<1>UW g0<8,8,1>UW write mlen 10 rlen 0 EOT{ align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
nop (4) g0<1>UD { align1 };
|
||||
/* Send framebuffer write message: XXX: acc0? */
|
||||
send 0 (16) null g0<8,8,1>UW write mlen 10 rlen 0 { align1 EOT };
|
||||
/* padding */
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
nop;
|
||||
|
Loading…
x
Reference in New Issue
Block a user