[qfcc] Add an opcode for outer products

I'm not sure what it's useful for, but GLSL has a function for it thus I
decided to add the instruction to the VM, so this is part of the
compiler side.
This commit is contained in:
Bill Currie 2024-11-28 21:14:35 +09:00
parent d418c4b8c4
commit 8323868b2c
3 changed files with 5 additions and 2 deletions

View file

@ -139,7 +139,7 @@ int yylex (YYSTYPE *yylval, YYLTYPE *yylloc);
%left SHL SHR
%left '+' '-'
%left '*' '/' '%' MOD SCALE GEOMETRIC QMUL QVMUL VQMUL
%left HADAMARD CROSS DOT WEDGE REGRESSIVE
%left HADAMARD CROSS DOT OUTER WEDGE REGRESSIVE
%right <op> SIZEOF UNARY INCOP REVERSE STAR DUAL UNDUAL
%left HYPERUNARY
%left '.' '(' '['

View file

@ -139,7 +139,7 @@ int yylex (YYSTYPE *yylval, YYLTYPE *yylloc);
%left SHL SHR
%left '+' '-'
%left '*' '/' '%' MOD SCALE GEOMETRIC QMUL QVMUL VQMUL
%left HADAMARD CROSS DOT WEDGE REGRESSIVE
%left HADAMARD CROSS DOT OUTER WEDGE REGRESSIVE
%right <op> SIZEOF UNARY INCOP REVERSE STAR DUAL UNDUAL
%left HYPERUNARY
%left '.' '(' '['
@ -2101,6 +2101,7 @@ expr
| expr HADAMARD expr { $$ = binary_expr (QC_HADAMARD, $1, $3); }
| expr CROSS expr { $$ = binary_expr (QC_CROSS, $1, $3); }
| expr DOT expr { $$ = binary_expr (QC_DOT, $1, $3); }
| expr OUTER expr { $$ = binary_expr (QC_OUTER, $1, $3); }
| expr WEDGE expr { $$ = binary_expr (QC_WEDGE, $1, $3); }
| expr REGRESSIVE expr { $$ = binary_expr (QC_REGRESSIVE, $1, $3); }
;
@ -2921,6 +2922,7 @@ static keyword_t qf_keywords[] = {
{"@hadamard", QC_HADAMARD, },
{"@cross", QC_CROSS, },
{"@dot", QC_DOT, },
{"@outer", QC_OUTER, },
{"@wedge", QC_WEDGE, },
{"@regressive", QC_REGRESSIVE, },
{"@geometric", QC_GEOMETRIC, },

View file

@ -607,6 +607,7 @@ convert_op (int op)
case QC_CROSS: return "cross";
case QC_WEDGE: return "wedge";
case QC_DOT: return "dot";
case QC_OUTER: return "outer";
case QC_HADAMARD: return "mul";
case QC_SCALE: return "scale";
case QC_QMUL: return "qmul";