summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHomer Hsing <homer.xing@intel.com>2012-09-14 08:50:18 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2012-09-17 04:16:31 -0400
commit3d4c2d8a8ae49a1641d00cd85dd88438bf497220 (patch)
treeddd987529956f125dbc6f3b492f08434378ba4df
parent09c359703347fa5db70ed85d02839d65da5e823f (diff)
Supporting half precision to single precision float convertion
The f16to32 instruction converts the half precision float in src0 to single precision float and storing in dst. The f32to16 instruction converts the single precision float in src0 to half precision float and storing in the lower word of each channel in dst.
-rw-r--r--src/brw_defines.h2
-rw-r--r--src/gram.y3
-rw-r--r--src/lex.l2
3 files changed, 6 insertions, 1 deletions
diff --git a/src/brw_defines.h b/src/brw_defines.h
index c3d9a51..594b125 100644
--- a/src/brw_defines.h
+++ b/src/brw_defines.h
@@ -568,6 +568,8 @@
#define BRW_OPCODE_ASR 12
#define BRW_OPCODE_CMP 16
#define BRW_OPCODE_CMPN 17
+#define BRW_OPCODE_F32TO16 19
+#define BRW_OPCODE_F16TO32 20
#define BRW_OPCODE_BFREV 23
#define BRW_OPCODE_BFE 24
#define BRW_OPCODE_BFI1 25
diff --git a/src/gram.y b/src/gram.y
index bee92dd..9f6a0f5 100644
--- a/src/gram.y
+++ b/src/gram.y
@@ -115,7 +115,7 @@ void set_direct_src_operand(struct src_operand *src, struct direct_reg *reg,
%token <integer> MOV FRC RNDU RNDD RNDE RNDZ NOT LZD
%token <integer> MUL MAC MACH LINE SAD2 SADA2 DP4 DPH DP3 DP2
%token <integer> AVG ADD SEL AND OR XOR SHR SHL ASR CMP CMPN PLN
-%token <integer> ADDC BFI1 BFREV CBIT
+%token <integer> ADDC BFI1 BFREV CBIT F16TO32 F32TO16
%token <integer> SEND NOP JMPI IF IFF WHILE ELSE BREAK CONT HALT MSAVE
%token <integer> PUSH MREST POP WAIT DO ENDIF ILLEGAL
%token <integer> MATH_INST
@@ -418,6 +418,7 @@ unaryinstruction:
;
unaryop: MOV | FRC | RNDU | RNDD | RNDE | RNDZ | NOT | LZD | BFREV | CBIT
+ | F16TO32 | F32TO16
;
binaryinstruction:
diff --git a/src/lex.l b/src/lex.l
index a0cce00..cbc0aa9 100644
--- a/src/lex.l
+++ b/src/lex.l
@@ -82,6 +82,8 @@ yylval.integer = BRW_CHANNEL_W;
"rndz" { yylval.integer = BRW_OPCODE_RNDZ; return RNDZ; }
"not" { yylval.integer = BRW_OPCODE_NOT; return NOT; }
"lzd" { yylval.integer = BRW_OPCODE_LZD; return LZD; }
+"f16to32" { yylval.integer = BRW_OPCODE_F16TO32; return F16TO32; }
+"f32to16" { yylval.integer = BRW_OPCODE_F32TO16; return F32TO16; }
"mad" { yylval.integer = BRW_OPCODE_MAD; return MAD; }
"lrp" { yylval.integer = BRW_OPCODE_LRP; return LRP; }