Changes between Version 5 and Version 6 of GcnInstrsVop3p
- Timestamp:
- 11/27/17 23:00:36 (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
GcnInstrsVop3p
v5 v6 264 264 </table> 265 265 <p>NEG_HI changes meaning to absolute-value modifier.<br /> 266 ``` 267 FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 268 { 269 BYTE mask = 1<<SRCINDEX 270 if ((OP_SEL_HI&mask) == 0) 266 <code>FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 267 { 268 BYTE mask = 1<<SRCINDEX 269 if ((OP_SEL_HI&mask) == 0) 271 270 return ASFLOAT(S) 272 if ((OP_SEL& mask) == 0 && (OP_SEL_HI&mask) == 1)273 return (FLOAT)ASHALF(S& 0xffff)271 if ((OP_SEL&mask) == 0 && (OP_SEL_HI&mask) == 1) 272 return (FLOAT)ASHALF(S&0xffff) 274 273 else 275 return (FLOAT)ASHALF(S >>16)276 } </p>277 <p>FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0)274 return (FLOAT)ASHALF(S>>16) 275 } 276 FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0) 278 277 FLOAT SS1 = getSource(SRC1, OP_SEL, OP_SEL_HI, 1) 279 278 FLOAT SS2 = getSource(SRC2, OP_SEL, OP_SEL_HI, 2) … … 281 280 FLOAT S1 = NEG_HI&2 ? ABS(SS1) : SS1 282 281 FLOAT S2 = NEG_HI&4 ? ABS(SS2) : SS2 283 VDST = S0 * S1 + S2 284 ```</p> 282 VDST = S0 * S1 + S2</code></p> 285 283 <h4>V_MAD_MIXLO_F16</h4> 286 284 <p>Opcode: 33 (0x21)<br /> … … 321 319 </table> 322 320 <p>NEG_HI changes meaning to absolute-value modifier.<br /> 323 ``` 324 FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 325 { 326 BYTE mask = 1<<SRCINDEX 327 if ((OP_SEL_HI&mask) == 0) 321 <code>FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 322 { 323 BYTE mask = 1<<SRCINDEX 324 if ((OP_SEL_HI&mask) == 0) 328 325 return ASFLOAT(S) 329 if ((OP_SEL& mask) == 0 && (OP_SEL_HI&mask) == 1)330 return (FLOAT)ASHALF(S& 0xffff)326 if ((OP_SEL&mask) == 0 && (OP_SEL_HI&mask) == 1) 327 return (FLOAT)ASHALF(S&0xffff) 331 328 else 332 return (FLOAT)ASHALF(S >>16)333 } </p>334 <p>FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0)329 return (FLOAT)ASHALF(S>>16) 330 } 331 FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0) 335 332 FLOAT SS1 = getSource(SRC1, OP_SEL, OP_SEL_HI, 1) 336 333 FLOAT SS2 = getSource(SRC2, OP_SEL, OP_SEL_HI, 2) … … 338 335 FLOAT S1 = NEG_HI&2 ? ABS(SS1) : SS1 339 336 FLOAT S2 = NEG_HI&4 ? ABS(SS2) : SS2 340 VDST = (ASUINT32((HALF)(S0 * S1 + S2))&0xfff) | (VDST&0xffff0000) 341 ```</p> 337 VDST = (ASUINT32((HALF)(S0 * S1 + S2))&0xfff) | (VDST&0xffff0000)</code></p> 342 338 <h4>V_MAD_MIXHI_F16</h4> 343 339 <p>Opcode: 34 (0x22)<br /> … … 378 374 </table> 379 375 <p>NEG_HI changes meaning to absolute-value modifier.<br /> 380 ``` 381 FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 382 { 383 BYTE mask = 1<<SRCINDEX 384 if ((OP_SEL_HI&mask) == 0) 376 <code>FLOAT getSource(UINT32 S, BYTE OP_SEL, BYTE OP_SEL_HI, SRCINDEX) 377 { 378 BYTE mask = 1<<SRCINDEX 379 if ((OP_SEL_HI&mask) == 0) 385 380 return ASFLOAT(S) 386 if ((OP_SEL& mask) == 0 && (OP_SEL_HI&mask) == 1)387 return (FLOAT)ASHALF(S& 0xffff)381 if ((OP_SEL&mask) == 0 && (OP_SEL_HI&mask) == 1) 382 return (FLOAT)ASHALF(S&0xffff) 388 383 else 389 return (FLOAT)ASHALF(S >>16)390 } </p>391 <p>FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0)384 return (FLOAT)ASHALF(S>>16) 385 } 386 FLOAT SS0 = getSource(SRC0, OP_SEL, OP_SEL_HI, 0) 392 387 FLOAT SS1 = getSource(SRC1, OP_SEL, OP_SEL_HI, 1) 393 388 FLOAT SS2 = getSource(SRC2, OP_SEL, OP_SEL_HI, 2) … … 395 390 FLOAT S1 = NEG_HI&2 ? ABS(SS1) : SS1 396 391 FLOAT S2 = NEG_HI&4 ? ABS(SS2) : SS2 397 VDST = (ASUINT32((HALF)(S0 * S1 + S2))<<16) | (VDST&0xffff) 398 ```</p> 392 VDST = (ASUINT32((HALF)(S0 * S1 + S2))<<16) | (VDST&0xffff)</code></p> 399 393 <h4>V_PK_ADD_F16</h4> 400 394 <p>Opcode: 15 (0xf)<br />